2001-11-08 Ravi Pratap <ravi@ximian.com>
[mono.git] / configure.in
index 2ecf6c455bfe1a183f9231e1fe55602ceb9d75b2..a50c9ffaba5995ecfa191fe51781d1aa8507ff55 100644 (file)
@@ -15,6 +15,8 @@ AM_PROG_LIBTOOL
 
 AC_CHECK_SIZEOF(void *)
 
+CFLAGS='-g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations'
+
 dnl ***************************
 dnl *** Checks for glib 1.2 ***
 dnl ***************************
@@ -36,33 +38,69 @@ AC_SUBST(GMODULE_LIBS)
 dnl *****************************
 dnl *** Checks for libpthread ***
 dnl *****************************
-AC_CHECK_HEADERS(pthread.h)
 AC_CHECK_LIB(pthread, pthread_create, [
                THREAD_LIBS=-lpthread
                AM_CONDITIONAL(THREADS_PTHREAD, true)
+               AC_DEFINE(HAVE_PTHREAD)
+
+               # Need pthread_mutex_timedlock
+               pthread_CFLAGS=""
+               orig_CPPFLAGS=$CPPFLAGS
+               # This is a gcc-specific error, but we already set gcc-specific
+               # options in CFLAGS :)
+               CPPFLAGS="$CPPFLAGS -Werror-implicit-function-declaration"
+               AC_MSG_CHECKING(for pthread_mutex_timedlock)
+               AC_TRY_COMPILE([ #include <pthread.h>], [
+                       pthread_mutex_t mut=PTHREAD_MUTEX_INITIALIZER;
+                       pthread_mutex_timedlock(&mut, NULL);
+               ], [
+                       # Works!
+                       AC_MSG_RESULT(ok)
+                       AC_DEFINE(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
+               ], [
+                       AC_MSG_RESULT(no)
+
+                       # glibc requires -D_GNU_SOURCE before it will declare
+                       # this function
+                       AC_MSG_CHECKING(whether _GNU_SOURCE is needed for pthread_mutex_timedlock)
+                       CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+                       AC_TRY_COMPILE([ #include <pthread.h>], [
+                               pthread_mutex_t mut=PTHREAD_MUTEX_INITIALIZER;
+                               pthread_mutex_timedlock(&mut, NULL);
+                       ], [
+                               AC_MSG_RESULT(ok)
+                               pthread_CFLAGS="-D_GNU_SOURCE"
+                               AC_DEFINE(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
+                       ], [
+                               AC_MSG_RESULT(no)
+                               dnl Add other variants here
+                               AC_MSG_WARN(Working around pthread_mutex_timedlock)
+                       ])
+               ])
+               CPPFLAGS=$orig_CPPFLAGS
+               CFLAGS="$CFLAGS $pthread_CFLAGS"
        ], [
                AC_MSG_RESULT([Cannot find libpthread])
                # Check for other thread systems here, set THREAD_LIBS to
                # whatever is needed, and define
                # AM_CONDITIONAL(THREADS_foo, true), and add it to the
-               # section in mono/metadata/Makefile.am
+               # section in mono/metadata/Makefile.am, AC_DEFINE(HAVE_foo),
+               # add that to acconfig.h, add the section for that in
+               # mono/metadata/threads.h
        ])
 AC_SUBST(THREAD_LIBS)
 
-CFLAGS='-g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations'
-
 TARGET="unknown"
+ACCESS_UNALIGNED="yes"
 
 case "$host" in
-#mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS;;
+#mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS; ACCESS_UNALIGNED="no";;
 i*86-*-*) TARGET=X86; arch_target=x86;;
-#sparc-sun-4*) TARGET=SPARC;;
-#sparc-sun-*) TARGET=SPARC;;
-#sparc*-*-linux*) TARGET=SPARC;;
-#alpha*-*-linux* | alpha*-*-osf*) TARGET=ALPHA;;
+sparc*-*-*) TARGET=SPARC; ACCESS_UNALIGNED="no";;
+#alpha*-*-linux* | alpha*-*-osf*) TARGET=ALPHA; ACCESS_UNALIGNED="no";;
 #m68k-*-linux*) TARGET=M68K;;
-#powerpc-*-linux* | powerpc-*-sysv*) TARGET=POWERPC;;
-#arm-*-linux-*) TARGET=ARM;;
+#powerpc-*-linux* | powerpc-*-sysv*) TARGET=POWERPC; ACCESS_UNALIGNED="no";;
+#arm-*-linux-*) TARGET=ARM; ACCESS_UNALIGNED="no";;
 esac
 
 if test ${TARGET} = unknown; then
@@ -70,6 +108,10 @@ if test ${TARGET} = unknown; then
        AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
 fi
 
+if test ${ACCESS_UNALIGNED} = no; then
+       CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
+fi
+
 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)