2003-11-27 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / configure.in
index d295453888f9fdbc3d4cb8321f184af2cb6836d7..507d357437386ccf60fad8bd4c856ff7d416b34d 100644 (file)
@@ -1,7 +1,7 @@
 AC_INIT(README)
 AC_CANONICAL_SYSTEM
 AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(mono,0.28)
+AM_INIT_AUTOMAKE(mono,0.28.99)
 AM_MAINTAINER_MODE
 
 dnl
@@ -74,7 +74,9 @@ case "$host" in
                ;;
         *-*-hpux*)
                 platform_win32=no
-                CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
+               CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
+               CFLAGS="$CFLAGS +ESdbgasm"
+               LDFLAGS="$LDFLAGS -z"
                libmono_cflags="-D_REENTRANT"
                libmono_ldflags="-lpthread"
                libgc_threads=pthreads
@@ -160,8 +162,18 @@ AC_CHECK_SIZEOF(void *, 4)
 WARN=''
 if test x"$GCC" = xyes; then
         WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wcast-align -Wwrite-strings'
+               # The runtime code does not respect ANSI C strict aliasing rules
+               CFLAGS="$CFLAGS -fno-strict-aliasing"
+else
+       # The Sun Forte compiler complains about inline functions that access static variables
+       # so disable all inlining.
+       case "$host" in
+       *-*-solaris*)
+               CFLAGS="$CFLAGS -Dinline="
+               ;;
+       esac
 fi
-CFLAGS="-g $WARN"
+CFLAGS="$CFLAGS -g $WARN"
 
 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
 if test "x$PKG_CONFIG" = "xno"; then
@@ -205,6 +217,11 @@ AC_SUBST(GMODULE_LIBS)
 
 AC_ARG_WITH(gc, [  --with-gc=boehm,included,none],[gc=$with_gc],[gc=$gc_default])
 
+# Enable support for NPTL only features like fast thread-local storage
+# We can't reliably detect nptl at compile & run time
+# so this option will stay until nptl becomes more widespread
+AC_ARG_WITH(nptl, [  --with-nptl Enable support for NPTL])
+
 # assembly bundle support, see metadata/make-bundle.pl for more info
 AC_ARG_WITH(bundle, [  --with-bundle=bundle_template],[
        BUNDLE_FILE=$with_bundle
@@ -522,6 +539,7 @@ if test x$platform_win32 = xno; then
        dnl *** Checks for libpthread ***
        dnl *****************************
        AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
+       AC_CHECK_HEADERS(pthread.h)
        AC_CHECK_FUNCS(pthread_mutex_timedlock)
        AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
        AC_TRY_COMPILE([ #include <pthread.h>], [
@@ -534,11 +552,59 @@ if test x$platform_win32 = xno; then
                AC_MSG_WARN(Using mono_mutex_t for recursive mutexes)
                AC_DEFINE(USE_MONO_MUTEX)
        ])
+       AC_CHECK_FUNCS(pthread_attr_setstacksize)
+
+       dnl ***********************************
+       dnl *** Checks for working __thread ***
+       dnl ***********************************
+       AC_MSG_CHECKING(for working __thread)
+       AC_TRY_RUN([
+               #include <pthread.h>
+
+               __thread int i;
+               static int res1, res2;
+
+               void thread_main (void *arg)
+               {
+                       i = arg;
+                       sleep (1);
+                       if (arg == 1)
+                               res1 = (i == arg);
+                       else
+                               res2 = (i == arg);
+               }
+
+               int main () {
+                       pthread_t t1, t2;
+
+                       i = 5;
+
+                       pthread_create (&t1, NULL, thread_main, 1);
+                       pthread_create (&t2, NULL, thread_main, 2);
+
+                       pthread_join (t1, NULL);
+                       pthread_join (t2, NULL);
+
+                       return !(res1 + res2 == 2);
+               }
+       ], [
+                       if test "x$with_nptl" = "x"; then
+                               AC_MSG_RESULT(disabled)
+                       else
+                               AC_MSG_RESULT(yes)
+                               AC_DEFINE(HAVE_KW_THREAD)
+                       fi
+       ], [
+                       AC_MSG_RESULT(no)
+       ])
 
        dnl ********************************
        dnl *** Checks for semaphore lib ***
        dnl ********************************
-       AC_CHECK_LIB(rt, sem_init, LIBS="$LIBS -lrt")
+       # 'Real Time' functions on Solaris
+       # posix4 on Solaris 2.6
+       # pthread (first!) on Linux
+       AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
 
        dnl ********************************
        dnl *** Checks for timezone stuff **
@@ -566,11 +632,39 @@ if test x$platform_win32 = xno; then
                fi
        fi
 
+       dnl *********************************
+       dnl *** Checks for math functions ***
+       dnl *********************************
+        LIBS="$LIBS -lm";
+        AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
+                AC_TRY_LINK([#include <math.h>], 
+                [ finite(0.0); ], 
+                AC_DEFINE(HAVE_FINITE) AC_MSG_RESULT(yes),
+                AC_MSG_RESULT(no)))
+        AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
+                AC_TRY_LINK([#include <math.h>], 
+                [ isfinite(0.0); ], 
+                AC_DEFINE(HAVE_ISFINITE) AC_MSG_RESULT(yes),
+                AC_MSG_RESULT(no)))
+
        dnl ****************************************************************
        dnl *** Checks for working poll() (macosx defines it but doesn't ***
        dnl *** have it in the library (duh))                            ***
        dnl ****************************************************************
        AC_CHECK_FUNCS(poll)
+
+       dnl *************************
+       dnl *** Check for signbit ***
+       dnl *************************
+       AC_MSG_CHECKING(for signbit)
+       AC_TRY_LINK([#include <math.h>], [
+               int s = signbit(1.0);
+       ], [
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_SIGNBIT)
+       ], [
+               AC_MSG_RESULT(no)
+       ]) 
 else
        AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
        AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
@@ -649,6 +743,21 @@ if test "x$try_shared_handles" != "xyes"; then
        AC_SUBST(DISABLE_SHARED_HANDLES)
 fi
 
+ICU_CFLAGS=""
+ICU_LIBS=""
+enable_icu=no
+AC_PATH_PROG(ICU_CONFIG, icu-config, no)
+if test "x$ICU_CONFIG" = "xno" -o ! -x "$ICU_CONFIG"; then
+       AC_MSG_WARN([Only invariant locale available; install ICU for I18N support])
+else
+       enable_icu="yes. Version: `$ICU_CONFIG --version`"
+       AC_DEFINE(HAVE_ICU)
+       ICU_CFLAGS=`$ICU_CONFIG --cppflags`
+       ICU_LIBS=`$ICU_CONFIG --ldflags`
+fi
+AC_SUBST(ICU_CFLAGS)
+AC_SUBST(ICU_LIBS)
+
 TARGET="unknown"
 ACCESS_UNALIGNED="yes"
 
@@ -687,6 +796,11 @@ case "$host" in
 #       m68k-*-linux*)
 #              TARGET=M68K
 #              ;;
+       hppa2.0w-hp-hpux11.00 | hppa64-hp-hpux11.00)
+               TARGET=HPPA;
+               arch_target=hppa; 
+               ACCESS_UNALIGNED="no"
+               ;;
        macppc-*-openbsd* | powerpc-*-linux* | powerpc-*-openbsd* | \
         powerpc-*-sysv* | powerpc-*-darwin*)
                TARGET=POWERPC;
@@ -743,6 +857,7 @@ AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
 AM_CONDITIONAL(S390, test x$TARGET = xS390)
+AM_CONDITIONAL(HPPA, test x$TARGET = xHPPA)
 
 AM_CONDITIONAL(JIT_SUPPORTED, test x$JIT_SUPPORTED = xyes)
 
@@ -766,6 +881,7 @@ mono/os/Makefile
 mono/os/win32/Makefile
 mono/os/unix/Makefile
 mono/arch/x86/Makefile
+mono/arch/hppa/Makefile
 mono/arch/ppc/Makefile
 mono/arch/sparc/Makefile
 mono/arch/s390/Makefile
@@ -795,5 +911,5 @@ mono.spec
 echo "
 
        GC:     $gc
-
+       ICU:    $enable_icu
 "