2006-02-28 Matt Hergett <matt@use.net>
[mono.git] / configure.in
index 102d7840c58baac143a0e9d56d938956aa394416..82f80fd8a9e10b0d52a3e16ce2013fbaadd1df88 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,1.1.8)
+AM_INIT_AUTOMAKE(mono,1.1.13)
 AM_MAINTAINER_MODE
 
 AC_PROG_LN_S
@@ -42,6 +42,11 @@ libmono_ldflags=""
 AC_SUBST(libmono_cflags)
 AC_SUBST(libmono_ldflags)
 
+# Variable to have relocatable .pc files (lib, or lib64)
+reloc_libdir=`basename ${libdir}`
+AC_SUBST(reloc_libdir)
+
+
 dnl if linker handles the version script
 no_version_script=no
 
@@ -55,10 +60,12 @@ case "$host" in
        *-*-mingw*|*-*-cygwin*)
                platform_win32=yes
                AC_DEFINE(PLATFORM_WIN32,1,[Platform is Win32])
-               CC="gcc -mno-cygwin -g"
+               if test "x$cross_compiling" = "xno"; then
+                       CC="gcc -mno-cygwin -g"
+                       # So libgc configure gets -mno-cygwin
+                       export CC
+               fi
                HOST_CC="gcc"
-               # So libgc configure gets -mno-cygwin
-               export CC
                CPPFLAGS="$CPPFLAGS -DWIN32_THREADS -DFD_SETSIZE=1024"
                libdl=
                libgc_threads=win32
@@ -74,6 +81,7 @@ case "$host" in
                CPPFLAGS="$CPPFLAGS -D_REENTRANT"
                libmono_cflags="-D_REENTRANT"
                LDFLAGS="$LDFLAGS -pthread"
+               CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD"
                libmono_ldflags="-pthread"
                need_link_unlink=yes
                libdl=
@@ -97,6 +105,7 @@ case "$host" in
                        LDFLAGS="$LDFLAGS $PTHREAD_LIBS"
                        libmono_ldflags="$PTHREAD_LIBS"
                fi
+               CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD -DPLATFORM_BSD4"
                need_link_unlink=yes
                AC_DEFINE(PTHREAD_POINTER_ID)
                libdl=
@@ -121,6 +130,7 @@ case "$host" in
                        LDFLAGS="$LDFLAGS $PTHREAD_LIBS"
                        libmono_ldflags="$PTHREAD_LIBS"
                fi
+               CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD -DPLATFORM_BSD5"
                need_link_unlink=yes
                AC_DEFINE(PTHREAD_POINTER_ID)
                libdl=
@@ -147,6 +157,7 @@ case "$host" in
                        LDFLAGS="$LDFLAGS $PTHREAD_LIBS"
                        libmono_ldflags="$PTHREAD_LIBS"
                fi
+               CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD -DPLATFORM_BSD6"
                need_link_unlink=yes
                AC_DEFINE(PTHREAD_POINTER_ID)
                libdl=
@@ -195,7 +206,7 @@ case "$host" in
                ;;
        *-*-darwin*)
                platform_win32=no
-               CPPFLAGS="$CPPFLAGS -no-cpp-precomp -D_THREAD_SAFE -DGC_MACOSX_THREADS"
+               CPPFLAGS="$CPPFLAGS -no-cpp-precomp -D_THREAD_SAFE -DGC_MACOSX_THREADS -DPLATFORM_MACOSX"
                libmono_cflags="-D_THREAD_SAFE"
                LDFLAGS="$LDFLAGS -pthread"
                libmono_ldflags="-pthread"
@@ -242,19 +253,25 @@ dnl may require a specific autoconf version
 dnl AC_PROG_CC_FOR_BUILD
 dnl CC_FOR_BUILD not automatically detected
 CC_FOR_BUILD=$CC
+CFLAGS_FOR_BUILD=$CFLAGS
 BUILD_EXEEXT=
 if test "x$cross_compiling" = "xyes"; then
        CC_FOR_BUILD=cc
+       CFLAGS_FOR_BUILD=
        BUILD_EXEEXT=""
 fi
 AC_SUBST(CC_FOR_BUILD)
+AC_SUBST(CFLAGS_FOR_BUILD)
 AC_SUBST(HOST_CC)
 AC_SUBST(BUILD_EXEEXT)
 
+AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
+
 # Set STDC_HEADERS
 AC_HEADER_STDC
 AC_LIBTOOL_WIN32_DLL
-AC_DISABLE_FAST_INSTALL
+# This causes monodis to not link correctly
+#AC_DISABLE_FAST_INSTALL
 AM_PROG_LIBTOOL
 
 # Test whenever ld supports -version-script
@@ -348,6 +365,9 @@ fi
 mcs_topdir='$(top_srcdir)/'$mcsdir
 mcs_topdir_from_srcdir='$(top_builddir)/'$mcsdir
 
+## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
+AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno])
+
 AC_SUBST([mcs_topdir])
 AC_SUBST([mcs_topdir_from_srcdir])
 
@@ -403,7 +423,7 @@ AC_SUBST(GLIB_LIBS)
 AC_SUBST(GMODULE_CFLAGS)
 AC_SUBST(GMODULE_LIBS)
 
-if test x$platform_win32 = xyes; then   
+if test x$cross_compiling$platform_win32 = xnoyes; then
    AC_MSG_CHECKING(for cygwin glib2-dev package)
    if [ cygcheck --f /usr/lib/libglib-2.0.dll.a | grep -q glib2-devel ]; then
       AC_MSG_RESULT(found)
@@ -461,8 +481,25 @@ fi
 
 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
 
+AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no      Enable Xen-specific behaviour],[],[with_xen_opt=yes])
+if test "x$with_xen_opt" = "xyes"; then
+       AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
+       ORIG_CFLAGS=$CFLAGS
+       CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
+       AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
+       AC_TRY_COMPILE([], [
+                                          void main () { }
+       ], [
+          AC_MSG_RESULT(yes)
+       ], [
+          AC_MSG_RESULT(no)
+          CFLAGS=$ORIG_CFLAGS
+       ])
+fi
+
 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
-  LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, reflection_emit.],
+  LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug,
+  reflection_emit, large_code, logging, com, ssa.],
 [
        for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
                eval "mono_feature_disable_$feature='yes'"
@@ -495,6 +532,22 @@ if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
        AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
 fi
 
+if test "x$mono_feature_disable_large_code" = "xyes"; then
+       AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
+fi
+
+if test "x$mono_feature_disable_logging" = "xyes"; then
+       AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
+fi
+
+if test "x$mono_feature_disable_com" = "xyes"; then
+       AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
+fi
+
+if test "x$mono_feature_disable_ssa" = "xyes"; then
+       AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
+fi
+
 LIBGC_CFLAGS=
 LIBGC_LIBS=
 LIBGC_STATIC_LIBS=
@@ -592,6 +645,8 @@ if test x$platform_win32 = xno; then
 
        AC_SUBST(ikvm_native_dir)
 
+       AC_CHECK_HEADERS(execinfo.h)
+
        AC_CHECK_FUNCS(getgrgid_r)
        AC_CHECK_FUNCS(getgrnam_r)
        AC_CHECK_FUNCS(getpwnam_r)
@@ -888,6 +943,8 @@ if test x$platform_win32 = xno; then
                AC_DEFINE(USE_MONO_MUTEX)
        ])
        AC_CHECK_FUNCS(pthread_attr_setstacksize)
+       AC_CHECK_FUNCS(pthread_attr_getstack)
+       AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
 
        dnl ***********************************
        dnl *** Checks for working __thread ***
@@ -1172,6 +1229,13 @@ if test x$platform_win32 = xno; then
        dnl **********************************
        dnl *** Checks for MonoPosixHelper ***
        dnl **********************************
+       AC_CHECK_FUNC(setkey, ,
+               AC_CHECK_LIB(crypt, setkey, [ 
+                       AC_DEFINE(HAVE_SETKEY, 1, [Define if setkey(3) is available]) 
+                       CRYPT_LIBS="-lcrypt" 
+               ])
+       )
+       AC_SUBST(CRYPT_LIBS)
        AC_CHECK_HEADERS(checklist.h)
        AC_CHECK_HEADERS(fstab.h)
        AC_CHECK_HEADERS(attr/xattr.h)
@@ -1180,12 +1244,14 @@ if test x$platform_win32 = xno; then
        AC_CHECK_HEADERS(sys/statvfs.h)
        AC_CHECK_HEADERS(sys/vfstab.h)
        AC_CHECK_HEADERS(sys/xattr.h)
+       AC_CHECK_HEADERS(sys/mman.h)
        AC_CHECK_FUNCS(getdomainname)
        AC_CHECK_FUNCS(setdomainname)
        AC_CHECK_FUNCS(fgetgrent)
        AC_CHECK_FUNCS(fgetpwent)
        AC_CHECK_FUNCS(fgetpwent)
        AC_CHECK_FUNCS(getfsstat)
+       AC_CHECK_FUNCS(lutimes)
        AC_CHECK_FUNCS(mremap)
        AC_CHECK_FUNCS(remap_file_pages)
        AC_CHECK_FUNCS(posix_fadvise)
@@ -1223,6 +1289,10 @@ if test x$platform_win32 = xno; then
         #endif
        ])
        AC_CHECK_HEADERS([termios.h])
+
+       dnl * This is provided in io-layer, but on windows it's only available
+       dnl * on xp+
+       AC_DEFINE(HAVE_GETPROCESSID, 1, [Define if GetProcessId is available])
 else
        jdk_headers_found=no
        AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
@@ -1256,6 +1326,7 @@ else
                        AC_MSG_RESULT(no)
                ])
        ])
+       AC_CHECK_FUNCS(GetProcessId)
 fi
 
 dnl socklen_t check
@@ -1400,6 +1471,11 @@ case "$host" in
                arch_target=x86;
                JIT_SUPPORTED=yes
                jit_wanted=true
+               case $host_os in
+                 solaris*)
+                       LIBC="libc.so"
+                       INTL="libintl.so"
+               esac
                ;;
        x86_64-*-* | amd64-*-*)
                TARGET=AMD64;
@@ -1414,6 +1490,7 @@ case "$host" in
                JIT_SUPPORTED=yes
                jit_wanted=true
                LIBC="libc.so.6.1"
+               INTL="libc.so.6.1"
                AC_CHECK_LIB(unwind, _U_dyn_register, [], [AC_MSG_ERROR(library libunwind not found)])
                libmono_ldflags="-lunwind"
                ;;
@@ -1476,7 +1553,7 @@ case "$host" in
                JIT_SUPPORTED=yes
                jit_wanted=true
                ;;
-       arm*-linux-*)
+       arm*-linux*)
                TARGET=ARM;
                arch_target=arm;
                ACCESS_UNALIGNED="no"
@@ -1595,8 +1672,8 @@ if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
                #
                rm -f conftest.c conftest.so conftest
                echo "static __thread int foo; void main () { foo = 5; }" > conftest.c
-               gcc -fPIC --shared -o conftest.so conftest.c > /dev/null 2>&1
-               gcc -o conftest conftest.so > /dev/null 2>&1
+               $CC -fPIC --shared -o conftest.so conftest.c > /dev/null 2>&1
+               $CC -o conftest conftest.so > /dev/null 2>&1
                if test ! -f conftest; then
                   AC_MSG_WARN([Disabling usage of __thread.]);
                   with_tls=pthread
@@ -1605,6 +1682,22 @@ if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
        fi
 fi
 
+mono_debugger_supported=no
+if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
+       case "$host" in
+       *-*-*linux*)
+               mono_debugger_supported=yes
+               ;;
+       esac
+fi
+
+AC_MSG_CHECKING(if the Mono Debugger is supported on this platform)
+if test "x$mono_debugger_supported" = "xyes"; then
+       AC_DEFINE(MONO_DEBUGGER_SUPPORTED,1,[The Mono Debugger is supported on this platform])
+fi
+AC_MSG_RESULT($mono_debugger_supported)
+AM_CONDITIONAL(MONO_DEBUGGER_SUPPORTED, test x$mono_debugger_supported = xyes)
+
 if test "x$with_tls" = "x__thread"; then
        AC_DEFINE(HAVE_KW_THREAD)
    # Pass the information to libgc
@@ -1712,7 +1805,7 @@ AC_CONFIG_FILES([runtime/semdel-wrapper],[chmod +x runtime/semdel-wrapper])
 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
 [   depth=../../../..
     case $srcdir in
-    [\\/$]* | ?:[\\/]* ) reldir=$srcdir ;;
+    [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
     .) reldir=$depth ;;
     *) reldir=$depth/$srcdir ;;
     esac
@@ -1726,7 +1819,7 @@ AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
 [   depth=../../../..
     case $srcdir in
-    [\\/$]* | ?:[\\/]* ) reldir=$srcdir ;;
+    [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
     .) reldir=$depth ;;
     *) reldir=$depth/$srcdir ;;
     esac
@@ -1741,6 +1834,8 @@ AC_OUTPUT([
 Makefile
 mint.pc
 mono.pc
+mono-cairo.pc
+dotnet.pc
 mono-uninstalled.pc
 scripts/mono-nunit.pc
 scripts/mono-find-provides
@@ -1793,6 +1888,10 @@ runtime/Makefile
 if test x$platform_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
+   # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
+   # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
+   # executable doesn't work...
+   sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
 fi
 
 (
@@ -1805,29 +1904,35 @@ fi
 
   test -w $srcdir/$mcsdir/build || chmod +w $srcdir/$mcsdir/build
 
-  echo "prefix=$prefix" > $srcdir/$mcsdir/build/config.make
-  echo "exec_prefix=$exec_prefix" >> $srcdir/$mcsdir/build/config.make
-  echo 'mono_libdir=${exec_prefix}/lib' >> $srcdir/$mcsdir/build/config.make
-  echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $srcdir/$mcsdir/build/config.make
-  echo 'IL_FLAGS = /debug' >> $srcdir/$mcsdir/build/config.make
-  echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $srcdir/$mcsdir/build/config.make
-  echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $srcdir/$mcsdir/build/config.make
-  echo "INSTALL = $INSTALL" >> $srcdir/$mcsdir/build/config.make
-
-  export VERSION
-  [myver=$($AWK 'BEGIN {
-    split (ENVIRON["VERSION"] ".0.0.0.0", vsplit, ".")
-    print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
-  }')]
-  
-  cat > $srcdir/$mcsdir/build/common/MonoVersion.cs <<EOF
-//
-// This version number is generated from configure.in in the mono source tree.
-//
-using System.Reflection;
-
-[[assembly: AssemblyVersion("${myver}")]]
-EOF
+  #
+  # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
+  # any existing config.make.  This allows people to share the same source tree
+  # with different build directories, one native and one cross
+  #
+  if test x$cross_compiling = xno; then
+    echo "prefix=$prefix" > $srcdir/$mcsdir/build/config.make
+    echo "exec_prefix=$exec_prefix" >> $srcdir/$mcsdir/build/config.make
+    echo 'mono_libdir=${exec_prefix}/lib' >> $srcdir/$mcsdir/build/config.make
+    echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $srcdir/$mcsdir/build/config.make
+    echo 'IL_FLAGS = /debug' >> $srcdir/$mcsdir/build/config.make
+    echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $srcdir/$mcsdir/build/config.make
+    echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $srcdir/$mcsdir/build/config.make
+
+    case $INSTALL in
+    [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
+    *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
+    esac
+
+    echo "INSTALL = $mcs_INSTALL" >> $srcdir/$mcsdir/build/config.make
+
+    export VERSION
+    [myver=$($AWK 'BEGIN {
+      split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
+      print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
+    }')]
+
+    echo "MONO_VERSION = $myver" >> $srcdir/$mcsdir/build/config.make
+  fi
 )
 
 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
@@ -1835,7 +1940,6 @@ libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
 echo "
         mcs source:  $mcs_topdir
        GC:          $gc
-       Globalization:     $enable_glob
        TLS:         $with_tls
        SIGALTSTACK: $with_sigaltstack
        Engine:      $jit_status