2009-11-13 Zoltan Varga <vargaz@gmail.com>
[mono.git] / configure.in
index 9e38702b2ebae3150bc59f33392f3c6fd5e07d4e..c4eb94bc9981759b14c66ba09b4eca61a626a9f6 100644 (file)
@@ -6,7 +6,7 @@ AC_CANONICAL_SYSTEM
 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
 
 AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(mono,2.5)
+AM_INIT_AUTOMAKE(mono,2.7)
 AM_MAINTAINER_MODE
 
 API_VER=1.0
@@ -40,6 +40,8 @@ fi
 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
 CFLAGS_FOR_LIBGC=$CFLAGS
+CPPFLAGS_FOR_EGLIB=$CPPFLAGS
+CFLAGS_FOR_EGLIB=$CFLAGS
 
 #
 # These are the flags that need to be stored in the mono.pc file for 
@@ -82,12 +84,15 @@ case "$host" in
                AC_DEFINE(PLATFORM_NO_SYMLINKS,1,[This platform does not support symlinks])
                if test "x$cross_compiling" = "xno"; then
                        CC="gcc -mno-cygwin -g"
+                       CXX="g++ -mno-cygwin -g"
                        # So libgc configure gets -mno-cygwin
                        export CC
+                       export CXX
                fi
                HOST_CC="gcc"
                # Windows 2000 is required that includes Internet Explorer 5.01
                CPPFLAGS="$CPPFLAGS -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
+               LDFLAGS="$LDFLAGS -lmswsock"
                libmono_cflags="-mno-cygwin -mms-bitfields -mwindows"
                libmono_ldflags="-mno-cygwin -mms-bitfields -mwindows"
                libdl=
@@ -214,6 +219,22 @@ case "$host" in
                if test "x$cross_compiling" = "xyes"; then
                        has_broken_apple_cpp=yes
                fi
+               dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin10.0.0, but
+               dnl its gcc defaults to 64-bit mode.  They have also deprecated the usage of ucontext
+               dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
+               case "$host" in
+                       i*86-*-darwin10*)
+                               BROKEN_DARWIN_FLAGS="-arch i386 -D_XOPEN_SOURCE -mmacosx-version-min=10.5"
+                               CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_FLAGS"
+                               CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
+                               CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
+                               CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
+                               CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
+                               CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
+                               CPPFLAGS_FOR_EGLIB="$CPPFLAGS_FOR_EGLIB $BROKEN_DARWIN_FLAGS"
+                               CFLAGS_FOR_EGLIB="$CFLAGS_FOR_EGLIB $BROKEN_DARWIN_FLAGS"
+                               ;;
+               esac
                ;;
        *)
                AC_MSG_WARN([*** Please add $host to configure.in checks!])
@@ -234,8 +255,7 @@ AM_CONDITIONAL(PLATFORM_SIGPOSIX, test x$use_sigposix = xyes)
 
 AC_CHECK_TOOL(CC, gcc, gcc)
 AC_PROG_CC
-# Disabled for now to fix the windows build
-#AC_PROG_CXX
+AC_PROG_CXX
 AM_PROG_AS
 AM_PROG_CC_STDC
 AC_PROG_INSTALL
@@ -294,7 +314,7 @@ fi
 AM_CONDITIONAL(NO_VERSION_SCRIPT, test x$no_version_script = xyes)
 
 AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h)
-AC_CHECK_HEADERS(sys/user.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h)
+AC_CHECK_HEADERS(sys/user.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h)
 
 
 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
@@ -479,6 +499,7 @@ embedded)
   GMODULE_CFLAGS="$GLIB_CFLAGS"
   GMODULE_LIBS="$GLIB_LIBS"
   eglib_dir=eglib
+  ac_configure_args="$ac_configure_args \"CPPFLAGS_FOR_EGLIB=$EGLIB_CPPFLAGS\" \"CFLAGS_FOR_EGLIB=$CFLAGS_FOR_EGLIB\""
   AC_CONFIG_SUBDIRS(eglib)
   ;;
 system)
@@ -713,6 +734,20 @@ AC_TRY_COMPILE([], [
    AC_MSG_RESULT(no)
 ])
 
+AC_MSG_CHECKING(for deprecated __attribute__)
+AC_TRY_COMPILE([
+     int doit (void) __attribute__ ((deprecated));
+     int doit (void) { return 0; }
+], [
+       return 0;
+], [
+   have_deprecated=yes
+   AC_MSG_RESULT(yes)
+], [
+   have_deprecated=no
+   AC_MSG_RESULT(no)
+])
+
 AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
 if test x$enable_parallel_mark = xyes; then
        libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
@@ -815,6 +850,23 @@ dnl
 dnl End of libgc checks
 dnl
 
+dnl *************************************
+dnl *** Checks for zero length arrays ***
+dnl *************************************
+AC_MSG_CHECKING(whether $CC supports zero length arrays)
+AC_TRY_COMPILE([
+       struct s {
+               int  length;
+               char data [0];
+       };
+], [], [
+       AC_MSG_RESULT(yes)
+       AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
+], [
+       AC_MSG_RESULT(no)
+       AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
+])
+
 if test x$platform_win32 = xno; then
 
        dnl hires monotonic clock support
@@ -884,6 +936,7 @@ if test x$platform_win32 = xno; then
        AC_CHECK_FUNCS(getrusage)
        AC_CHECK_FUNCS(getpriority)
        AC_CHECK_FUNCS(setpriority)
+       AC_CHECK_FUNCS(dl_iterate_phdr)
 
        AC_CHECK_FUNCS(sched_setaffinity)
 
@@ -1128,23 +1181,6 @@ if test x$platform_win32 = xno; then
        AC_MSG_RESULT($mono_cv_sizeof_sunpath)
        AC_DEFINE_UNQUOTED(MONO_SIZEOF_SUNPATH, $mono_cv_sizeof_sunpath, [Sizeof sock_un.sun_path])
 
-       dnl *************************************
-       dnl *** Checks for zero length arrays ***
-       dnl *************************************
-       AC_MSG_CHECKING(whether $CC supports zero length arrays)
-       AC_TRY_COMPILE([
-                struct s {
-                        int  length;
-                        char data [0];
-                };
-        ], [], [
-               AC_MSG_RESULT(yes)
-               AC_DEFINE_UNQUOTED(MONO_ZERO_ARRAY_LENGTH, 0, [Length of zero length arrays])
-       ], [
-               AC_MSG_RESULT(no)
-               AC_DEFINE_UNQUOTED(MONO_ZERO_ARRAY_LENGTH, 1, [Length of zero length arrays])
-       ])
-
        dnl *****************************
        dnl *** Checks for libxnet    ***
        dnl *****************************
@@ -1851,6 +1887,18 @@ if test "x$enable_llvm" = "xyes"; then
    LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter jit x86codegen`
    LLVM_LIBS="$LLVM_LDFLAGS $LLVM_LIBS -lstdc++"
 
+   # Should be something like '2.6' or '2.7svn'
+   llvm_version=`$LLVM_CONFIG --version`
+   major_version=`echo $llvm_version | cut -c 1`
+   minor_version=`echo $llvm_version | cut -c 3`
+
+   AC_DEFINE_UNQUOTED(LLVM_MAJOR_VERSION, $major_version, [Major version of LLVM libraries])
+   AC_DEFINE_UNQUOTED(LLVM_MINOR_VERSION, $minor_version, [Minor version of LLVM libraries])
+
+   # Have to pass these on the command line since mini-llvm-cpp.h already includes
+   # llvm's config.h
+   LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_MAJOR_VERSION=$major_version -DLLVM_MINOR_VERSION=$minor_version"
+
    AC_SUBST(LLVM_CXXFLAGS)
    AC_SUBST(LLVM_LIBS)
    AC_SUBST(LLVM_LDFLAGS)
@@ -1997,14 +2045,13 @@ case "$host" in
                ;;
        hppa*linux*)
                TARGET=HPPA;
-               AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
                arch_target=hppa; 
                ACCESS_UNALIGNED="no"
                JIT_SUPPORTED=yes
                jit_wanted=true
                ;;
        macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
-        powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* )
+        powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | powerpc-*-freebsd* )
                if test "x$ac_cv_sizeof_void_p" = "x8"; then
                        TARGET=POWERPC64;
                        CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
@@ -2013,7 +2060,6 @@ case "$host" in
                        TARGET=POWERPC;
                        CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
                fi
-               AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
                arch_target=ppc;
                JIT_SUPPORTED=yes
                jit_wanted=true
@@ -2035,7 +2081,6 @@ case "$host" in
                ;;
        s390-*-linux*)
                TARGET=S390;
-               AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
                arch_target=s390;
                ACCESS_UNALIGNED="no"
                JIT_SUPPORTED=yes
@@ -2045,7 +2090,6 @@ case "$host" in
                ;;
        s390x-*-linux*)
                TARGET=S390x;
-               AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
                arch_target=s390x;
                ACCESS_UNALIGNED="no"
                JIT_SUPPORTED=yes
@@ -2054,6 +2098,36 @@ case "$host" in
                ;;
 esac
 
+if test "x$host" != "x$target"; then
+   case "$target" in
+   powerpc64-ps3-linux-gnu)
+               TARGET=POWERPC64
+               arch_target=powerpc64
+               AC_DEFINE(TARGET_PS3, 1, [...])
+               AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
+               # It would be better to just use TARGET_POWERPC64, but lots of code already
+               # uses this define
+               AC_DEFINE(__mono_ppc64__, 1, [...])
+               AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
+               sizeof_register=8
+               target_byte_order=G_BIG_ENDIAN
+               ;;
+
+   powerpc64-xbox360-linux-gnu)
+               TARGET=POWERPC64
+               arch_target=powerpc64
+               AC_DEFINE(TARGET_XBOX360, 1, [...])
+               AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
+               # It would be better to just use TARGET_POWERPC64, but lots of code already
+               # uses this define
+               sizeof_register=8
+               target_byte_order=G_BIG_ENDIAN
+               ;;
+       *)
+               AC_MSG_ERROR([Cross compiling is only supported for targets matching 'powerpc64-{ps3,xbox360}-linux-gnu'])
+       esac
+fi
+
 # FIXME: Define the others as well
 case "$TARGET" in
 X86)
@@ -2094,6 +2168,10 @@ if test "x$have_visibility_hidden" = "xyes"; then
    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
 fi
 
+if test "x$have_deprecated" = "xyes"; then
+   AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
+fi
+
 AC_ARG_WITH(jit, [  --with-jit=yes,no              If you want to build scripts that default to the JIT (defaults to no)],[
        if test x$withval = xyes; then
           jit_wanted=true
@@ -2274,7 +2352,7 @@ case "x$gc" in
                ;;
 esac
 
-AC_ARG_WITH(profile2,  [  --with-profile2=yes,no          If you want to install the 2.0 FX (defaults to yes)],                 [], [with_profile2=yes])
+#AC_ARG_WITH(profile2,  [  --with-profile2=yes,no          If you want to install the 2.0 FX (defaults to yes)],                 [], [with_profile2=yes])
 AC_ARG_WITH(profile4,  [  --with-profile4=yes,no          If you want to install the 4.0 FX (defaults to no)],                  [], [with_profile4=no])
 AC_ARG_WITH(moonlight, [  --with-moonlight=yes,no         If you want to build the Moonlight 2.1 assemblies (defaults to yes)], [], [with_moonlight=yes])
 AC_ARG_WITH(monotouch, [  --with-monotouch=yes,no         If you want to build the raw MonoTouch 2.1 assemblies (defaults to no)], [], [with_monotouch=no])
@@ -2326,7 +2404,6 @@ AC_SUBST(OPROFILE_LIBS)
 
 libmono_ldflags="$libmono_ldflags $LIBS"
 
-AM_CONDITIONAL(INSTALL_2_0, [test "x$with_profile2" = xyes])
 AM_CONDITIONAL(INSTALL_2_1, [test "x$with_moonlight" = xyes])
 AM_CONDITIONAL(INSTALL_4_0, [test "x$with_profile4" = xyes])
 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" = xyes])
@@ -2537,7 +2614,6 @@ man/Makefile
 web/Makefile
 docs/Makefile
 data/Makefile
-data/net_1_1/Makefile
 data/net_2_0/Makefile
 data/net_4_0/Makefile
 data/net_2_0/Browsers/Makefile
@@ -2660,7 +2736,6 @@ echo "
        TLS:           $with_tls
        SIGALTSTACK:   $with_sigaltstack
        Engine:        $jit_status
-       2.0 Profile:   $with_profile2
        Moon Profile:  $with_moonlight
        4.0 Alpha:     $with_profile4
        MonoTouch:     $with_monotouch
@@ -2690,6 +2765,6 @@ fi
 
 if test x$enable_llvm = xyes; then
    echo IMPORTANT:
-   echo IMPORTANT: The LLVM Back End is experimental and does not work yet.
+   echo IMPORTANT: The LLVM Back End is experimental and has known problems.
    echo IMPORTANT:
 fi