Merge pull request #444 from knocte/xbuild_improvements
[mono.git] / configure.in
index f1c9c9f3be08749fe7105828a9855e0ca4f34f26..38cc6dc29257fe25a36439284f0e9de7a4f29b00 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autoconf to produce a configure script.
 #AC_PREREQ([2.62])
 
-AC_INIT(mono, [2.11],
+AC_INIT(mono, [2.11.4],
         [http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono])
 
 AC_CONFIG_SRCDIR([README])
@@ -93,6 +93,7 @@ case "$host" in
                AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
                AC_DEFINE(PLATFORM_NO_SYMLINKS,1,[This platform does not support symlinks])
                host_win32=yes
+               mono_cv_clang=no
                if test "x$cross_compiling" = "xno"; then
                        target_win32=yes
                        if test "x$host" == "x$build" -a "x$host" == "x$target"; then
@@ -225,6 +226,7 @@ case "$host" in
 
                # to bypass the underscore linker check, can't work when cross-compiling
                mono_cv_uscore=yes
+               mono_cv_clang=no
                ;;
        *-*-linux*)
                host_win32=no
@@ -417,8 +419,8 @@ AM_ICONV()
 
 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 sys/param.h)
-AC_CHECK_HEADERS(sys/param.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 asm/sigcontext.h)
+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 sys/param.h libproc.h)
+AC_CHECK_HEADERS(sys/param.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 asm/sigcontext.h sys/inotify.h)
 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
                   [], [], [#include <stddef.h>
                  #include <sys/socket.h>
@@ -526,21 +528,20 @@ fi
 CFLAGS="$CFLAGS -g $WARN"
 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
 
-AC_MSG_CHECKING(for clang)
-AC_TRY_RUN([
+AC_CACHE_CHECK([for clang],
+       mono_cv_clang,[
+       AC_TRY_RUN([
                int main () {
-               #ifdef __clang__
-                       return 0;
-               #else
-                       return 1;
-               #endif
+                       #ifdef __clang__
+                               return 0;
+                       #else
+                               return 1;
+                       #endif
                }
-], [
-   AC_MSG_RESULT(yes)
-   CLANG=yes
-], [
-   AC_MSG_RESULT(no)
-   CLANG=no
+       ],
+       [mono_cv_clang=yes],
+       [mono_cv_clang=no],
+       [])
 ])
 
 # Where's the 'mcs' source tree?
@@ -698,7 +699,7 @@ AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
 
 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
-if test "x$with_xen_opt" = "xyes" -a "x$CLANG" = "xno"; then
+if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
        AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
        ORIG_CFLAGS=$CFLAGS
        CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
@@ -859,6 +860,9 @@ if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
        AC_MSG_NOTICE([Disabled Shared perfcounters.])
 fi
 
+AC_ARG_ENABLE(executables, [  --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
+AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
+
 AC_MSG_CHECKING(for visibility __attribute__)
 AC_COMPILE_IFELSE([
        AC_LANG_SOURCE([[
@@ -1121,19 +1125,18 @@ if test x$target_win32 = xno; then
        AC_DEFUN([LARGE_FILES], [
                large_CPPFLAGS=$CPPFLAGS
                CPPFLAGS="$CPPFLAGS $1"
-               AC_TRY_RUN([
+               AC_TRY_COMPILE([
                        #include <sys/types.h>
+                       #include <limits.h>
+               ], [
+                       /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
+                       #define COMPILE_TIME_ASSERT(pred) \
+                               switch(0){case 0:case pred:;}
 
-                       #define BIG_OFF_T (((off_t)1<<62)-1+((off_t)1<<62))
-
-                       int main(void) {
-                               int big_off_t=((BIG_OFF_T%2147483629==721) &&
-                                              (BIG_OFF_T%2147483647==1));
-                               if(big_off_t) {
-                                       exit(0);
-                               } else {
-                                       exit(1);
-                               }
+                       int main(void)
+                       {
+                               COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
+                               return 0;
                        }
                ], [
                        AC_MSG_RESULT(ok)
@@ -1142,7 +1145,7 @@ if test x$target_win32 = xno; then
                        large_offt=yes
                ], [
                        AC_MSG_RESULT(no)
-               ], "")
+               ])
                CPPFLAGS=$large_CPPFLAGS
        ])
 
@@ -1480,12 +1483,11 @@ if test x$target_win32 = xno; then
                                exit (0);
                        }
 
+                       volatile char*__ptr = NULL;
                        static void *
                        loop (void *ignored)
                        {
-                               char *ptr = NULL;
-
-                               *ptr = 0;
+                               *__ptr = 0;
                                return NULL;
                        }
 
@@ -1717,7 +1719,44 @@ if test x$target_win32 = xno; then
                        AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
                ], [
                        AC_MSG_RESULT(no)
-               ])      
+               ])
+       dnl **********************************
+       dnl *** Check for getifaddrs       ***
+       dnl **********************************
+       AC_MSG_CHECKING(for getifaddrs)
+               AC_TRY_LINK([
+               #include <stdio.h>
+               #include <sys/types.h>
+               #include <sys/socket.h>
+               #include <ifaddrs.h>
+       ], [
+               getifaddrs(NULL);
+       ], [
+               # Yes, we have it...
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
+       ], [
+               AC_MSG_RESULT(no)
+       ])
+       dnl **********************************
+       dnl *** Check for if_nametoindex   ***
+       dnl **********************************
+       AC_MSG_CHECKING(for if_nametoindex)
+               AC_TRY_LINK([
+               #include <stdio.h>
+               #include <sys/types.h>
+               #include <sys/socket.h>
+               #include <net/if.h>
+       ], [
+               if_nametoindex(NULL);
+       ], [
+               # Yes, we have it...
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
+       ], [
+               AC_MSG_RESULT(no)
+       ])
+                       
        dnl **********************************
        dnl *** Checks for MonoPosixHelper ***
        dnl **********************************
@@ -2016,6 +2055,8 @@ if test "x$try_shared_handles" != "xyes"; then
        AC_SUBST(DISABLE_SHARED_HANDLES)
 fi
 
+AC_ARG_ENABLE(bcl-opt, [  --disable-bcl-opt    BCL is compiled with no optimizations (allows accurate BCL debugging)], test_bcl_opt=$enableval, test_bcl_opt=yes)
+
 AC_ARG_ENABLE(nunit-tests, [  --enable-nunit-tests     Run the nunit tests of the class library on 'make check'])
 AM_CONDITIONAL(ENABLE_NUNIT_TESTS, [test x$enable_nunit_tests = xyes])
 
@@ -2609,7 +2650,8 @@ case "$host" in
        done
        
        if test "x$X11" = "xlibX11.so"; then
-               AC_MSG_WARN([Could not find X development libs. Do you have the -devel package installed? WinForms may not work...]);
+               AC_MSG_WARN([Could not find X development libs. Do you have the -devel package installed? Assuming libX11.so.6...]);
+               X11=libX11.so.6
        fi
        ;;
 esac
@@ -2658,6 +2700,9 @@ if test "x$with_moonlight" != "xno"; then
        mono_debugger_supported=no
 fi
 
+# mdb support for sgen is broken, disable it until further notice.
+mono_debugger_supported=no
+
 AC_MSG_CHECKING(if the Mono Debugger is supported on this platform)
 if test "x$mono_debugger_supported" = "xyes"; then
        BOEHM_DEFINES="$BOEHM_DEFINES -DMONO_DEBUGGER_SUPPORTED"
@@ -2666,17 +2711,17 @@ fi
 AM_CONDITIONAL(MONO_DEBUGGER_SUPPORTED, test x$mono_debugger_supported = xyes)
 AC_MSG_RESULT($mono_debugger_supported)
 
-AC_ARG_ENABLE(icall-symbol-map,[ --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no)
+AC_ARG_ENABLE(icall-symbol-map,[  --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no)
 if test "x$icall_symbol_map" = "xyes"; then
    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
 fi
 
-AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
+AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
 if test "x$icall_export" = "xyes"; then
    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
 fi
 
-AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
+AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
 if test "x$icall_tables" = "xno"; then
    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
 fi
@@ -2690,7 +2735,7 @@ if test "x$with_tls" = "x__thread"; then
                ], [
                        AC_MSG_RESULT(yes)
                        # CLANG doesn't support this yet, and it prints warnings about it
-                       if test "x$CLANG" = "xno"; then
+                       if test "x$mono_cv_clang" = "xno"; then
                                AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tld_model available])
                        fi
                ], [
@@ -2772,11 +2817,12 @@ 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(profile4,  [  --with-profile4=yes,no          If you want to install the 4.x FX (defaults to yes)],                  [], [with_profile4=yes])
-AC_ARG_WITH(monodroid, [  --with-monodroid=yes,no         If you want to build the MonoDroid 2.1 assemblies (defaults to no)], [], [with_monodroid=no])
-AC_ARG_WITH(monotouch, [  --with-monotouch=yes,no         If you want to build the MonoTouch 2.1 assemblies (defaults to no)], [], [with_monotouch=no])
-AC_ARG_WITH(mobile,    [  --with-mobile=yes,no            If you want to build the Mobile 2.1 assemblies (defaults to no)], [], [with_mobile=no])
+AC_ARG_WITH(profile2,  [  --with-profile2=yes,no          If you want to install the 2.0/3.5 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 yes)],                [], [with_profile4=yes])
+AC_ARG_WITH(profile4_5,[  --with-profile4_5=yes,no        If you want to install the 4.5 FX (defaults to yes)],                [], [with_profile4_5=yes])
+AC_ARG_WITH(monodroid, [  --with-monodroid=yes,no         If you want to build the MonoDroid assemblies (defaults to no)],     [], [with_monodroid=no])
+AC_ARG_WITH(monotouch, [  --with-monotouch=yes,no         If you want to build the MonoTouch assemblies (defaults to no)],     [], [with_monotouch=no])
+AC_ARG_WITH(mobile,    [  --with-mobile=yes,no            If you want to build the Mobile assemblies (defaults to no)],        [], [with_mobile=no])
 
 OPROFILE=no
 AC_ARG_WITH(oprofile,[  --with-oprofile=no,<oprofile install dir>   Enable oprofile support (defaults to no)],[
@@ -2829,6 +2875,14 @@ AC_CHECK_HEADER([malloc.h],
                [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
                        [Define to 1 if you have /usr/include/malloc.h.])],,)
 
+if test x"$GCC" = xyes; then
+       # Implicit function declarations are not 64 bit safe
+       # Do this late, since this causes lots of configure tests to fail
+       CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
+       # jay has a lot of implicit declarations
+       JAY_CFLAGS="-Wno-implicit-function-declaration"
+fi
+
 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
 # instead of libmono-static.a
 if test "x$enable_shared" = "xno"; then
@@ -2866,7 +2920,9 @@ AM_CONDITIONAL(ONLY_MOONLIGHT, [test "x$with_moonlight" = "xonly"])
 AM_CONDITIONAL(MOONLIGHT_BOEHM, [test "x$with_moon_gc" = "xboehm"])
 AM_CONDITIONAL(MOONLIGHT_SGEN, [test "x$with_moon_gc" = "xsgen"])
 
+AM_CONDITIONAL(INSTALL_2_0, [test "x$with_profile2" = xyes])
 AM_CONDITIONAL(INSTALL_4_0, [test "x$with_profile4" = xyes])
+AM_CONDITIONAL(INSTALL_4_5, [test "x$with_profile4_5" = xyes])
 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" = xyes])
 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" = xyes])
 AM_CONDITIONAL(INSTALL_MOBILE, [test "x$with_mobile" = xyes])
@@ -3133,6 +3189,8 @@ data/system.web.extensions_1.0.pc
 data/system.web.extensions.design_1.0.pc
 data/system.web.mvc.pc
 data/system.web.mvc2.pc
+data/system.web.mvc3.pc
+data/aspnetwebstack.pc
 samples/Makefile
 support/Makefile
 data/config
@@ -3144,6 +3202,9 @@ msvc/Makefile
 po/Makefile
 ])
 
+# Update all submodules recursively to ensure everything is checked out
+$srcdir/scripts/update_submodules
+
 if test x$host_win32 = xyes; then
    # Get rid of 'cyg' prefixes in library names
    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
@@ -3177,6 +3238,7 @@ fi
     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
+    echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
 
     case $INSTALL in
     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
@@ -3220,9 +3282,25 @@ fi
     if test x$with_moonlight != xno; then
       echo "MOONLIGHT = 1" >> $srcdir/$mcsdir/build/config.make
     fi
+
+       default_profile=net_2_0
+    if test -z "$INSTALL_4_0_TRUE"; then :
+               default_profile=net_4_0
+    fi
+    if test -z "$INSTALL_MONODROID_TRUE"; then :
+               default_profile=monodroid
+    fi
+    if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
+               default_profile=monotouch
+    fi
+    if test -z "$INSTALL_4_5_TRUE"; then :
+               default_profile=net_4_5
+    fi
+    
+    echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
     
-    if test x$with_profile4 != xyes; then
-      echo "DEFAULT_PROFILE = net_2_0" >> $srcdir/$mcsdir/build/config.make
+    if test "x$test_bcl_opt" = "xyes"; then    
+      echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
     fi
 
   fi
@@ -3249,7 +3327,6 @@ libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
 
 echo "
         mcs source:    $mcsdir
-        olive source:  $olive_topdir
 
    Engine:
        GC:            $gc_msg 
@@ -3259,11 +3336,12 @@ echo "
        oprofile:      $OPROFILE
        BigArrays:     $enable_big_arrays
        DTrace:        $enable_dtrace
-       Parallel Mark: $enable_parallel_mark
        LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
 
-    Libraries:
-       Moon Profile:  $with_moonlight ($with_moon_gc)
+   Libraries:
+       .NET 2.0/3.5:  $with_profile2
+       .NET 4.0:      $with_profile4
+       .NET 4.5:      $with_profile4_5
        MonoDroid:     $with_monodroid
        MonoTouch:     $with_monotouch
        Mobile:        $with_mobile