Flush pending changes for 0.8
[mono.git] / configure.in
index 047c4b5fff7bd603c8ed35038cbf9af525f18d20..948a34113e3b0492a7088f8a8b37e08806fcf061 100644 (file)
+
 AC_INIT(README)
+AC_CANONICAL_SYSTEM
 AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(mono, 0.7)
+AM_INIT_AUTOMAKE(mono, 0.8)
 AM_MAINTAINER_MODE
 
-AC_CANONICAL_HOST
-
+AC_CHECK_TOOL(CC, gcc, gcc)
 AC_PROG_CC
 AM_PROG_CC_STDC
 AC_PROG_INSTALL
 
+dnl may require a specific autoconf version
+dnl AC_PROG_CC_FOR_BUILD
+dnl CC_FOR_BUILD not automatically detected
+CC_FOR_BUILD=$CC
+BUILD_EXEEXT=
+if test "x$cross_compiling" = "xyes"; then
+       CC_FOR_BUILD=cc
+       BUILD_EXEEXT=""
+fi
+AC_SUBST(CC_FOR_BUILD)
+AC_SUBST(HOST_CC)
+AC_SUBST(BUILD_EXEEXT)
+
 # Set STDC_HEADERS
 AC_HEADER_STDC
+AC_LIBTOOL_WIN32_DLL
 AM_PROG_LIBTOOL
 
-AC_CHECK_SIZEOF(void *)
+# not 64 bit clean in cross-compile
+AC_CHECK_SIZEOF(void *, 4)
 
-dnl ***************************
-dnl *** Checks for glib 1.2 ***
-dnl ***************************
-AM_PATH_GLIB(1.2.0,,
-             AC_MSG_ERROR([Cannot find GLIB: Is glib-config in path?]))
+CFLAGS='-g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations'
 
-GLIB_CFLAGS=`glib-config --cflags glib`
-GLIB_LIBS=`glib-config --libs glib`
+AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+if test "x$PKG_CONFIG" = "xno"; then
+       AC_MSG_ERROR([You need to install pkg-config])
+fi
 
-AC_SUBST(GLIB_CFLAGS)
-AC_SUBST(GLIB_LIBS)
+dnl for use on the build system
+dnl pkg-config is stupid
+BUILD_GLIB_CFLAGS=`$PKG_CONFIG --cflags glib-2.0`
+BUILD_GLIB_LIBS=`$PKG_CONFIG --libs glib-2.0`
+AC_SUBST(BUILD_GLIB_CFLAGS)
+AC_SUBST(BUILD_GLIB_LIBS)
+
+PKG_PATH=
+AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir],
+       if test x$with_crosspkgdir = "x"; then
+               if test -s $PKG_CONFIG_PATH; then
+                       PKG_PATH=$PKG_CONFIG_PATH
+               fi
+       else
+               PKG_PATH=$with_crosspkgdir
+               PKG_CONFIG_PATH=$PKG_PATH
+               export PKG_CONFIG_PATH
+       fi
+)
 
-GMODULE_CFLAGS=`glib-config --cflags gmodule`
-GMODULE_LIBS=`glib-config --libs gmodule`
+## Versions of dependencies
+GLIB_REQUIRED_VERSION=1.3.11
 
+PKG_CHECK_MODULES(BASE_DEPENDENCIES, glib-2.0 >= $GLIB_REQUIRED_VERSION)
+
+GLIB_CFLAGS=`$PKG_CONFIG --cflags glib-2.0`
+GLIB_LIBS=`$PKG_CONFIG --libs glib-2.0`
+GMODULE_CFLAGS=`$PKG_CONFIG --cflags gmodule-2.0`
+GMODULE_LIBS=`$PKG_CONFIG --libs gmodule-2.0`
+
+AC_SUBST(GLIB_CFLAGS)
+AC_SUBST(GLIB_LIBS)
 AC_SUBST(GMODULE_CFLAGS)
 AC_SUBST(GMODULE_LIBS)
 
-dnl *****************************
-dnl *** Checks for libpthread ***
-dnl *****************************
-AC_CHECK_HEADERS(pthread.h)
-AC_CHECK_LIB(pthread,pthread_create,PTHREAD_LIBS=-lpthread,
-       AC_MSG_ERROR([Cannot find libpthread]))
-AC_SUBST(PTHREAD_LIBS)
+dnl ****************************************
+dnl *** Check if we're building on win32 ***
+dnl ****************************************
+AC_MSG_CHECKING([if building for some Win32 platform])
+case "$host" in
+       *-*-mingw*|*-*-cygwin*)
+               platform_win32=yes
+               AC_DEFINE(PLATFORM_WIN32)
+               ;;
+       *)
+               platform_win32=no
+               ;;
+esac
+AC_MSG_RESULT($platform_win32)
+AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
 
-CFLAGS='-g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations'
+if test x$platform_win32 = xyes; then
+       AC_MSG_CHECKING([if building for native Win32])
+       case "$host" in
+               *-*-mingw*)
+                       platform_win32_native=yes
+                       AC_DEFINE(PLATFORM_WIN32_NATIVE)
+                       ;;
+               *)
+                       platform_win32_native=no
+                       ;;
+       esac
+       AC_MSG_RESULT($platform_win32_native)
+       AM_CONDITIONAL(PLATFORM_WIN32_NATIVE,
+                      test x$platform_win32_native = xyes)
+fi
+
+
+if test x$platform_win32 = xno; then
+       dnl ******************************************************************
+       dnl *** Check for large file support                               ***
+       dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
+       dnl ******************************************************************
+       
+       # Check that off_t can represent 2**63 - 1 correctly, working around
+       # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
+       # CFLAGS and sets $large_offt to yes if the test succeeds
+       large_offt=no
+       AC_DEFUN(LARGE_FILES, [
+               large_CPPFLAGS=$CPPFLAGS
+               CPPFLAGS="$CPPFLAGS $1"
+               AC_TRY_RUN([
+                       #include <sys/types.h>
+
+                       #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);
+                               }
+                       }
+               ], [
+                       AC_MSG_RESULT(ok)
+                       AC_DEFINE(HAVE_LARGE_FILE_SUPPORT)
+                       CFLAGS="$CFLAGS $1"
+                       large_offt=yes
+               ], [
+                       AC_MSG_RESULT(no)
+               ], "")
+               CPPFLAGS=$large_CPPFLAGS
+       ])
+
+       AC_MSG_CHECKING(if off_t is 64 bits wide)
+       LARGE_FILES("")
+       if test $large_offt = no; then
+               AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
+               LARGE_FILES("-D_FILE_OFFSET_BITS=64")
+       fi
+       if test $large_offt = no; then
+               AC_MSG_WARN([No 64 bit file size support available])
+       fi
+
+
+       dnl *****************************
+       dnl *** Checks for libpthread ***
+       dnl *****************************
+       AC_SEARCH_LIBS(pthread_create, pthread, [
+               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"
+
+               # Need PTHREAD_MUTEX_RECURSIVE
+               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_RECURSIVE)
+               AC_TRY_COMPILE([ #include <pthread.h>], [
+                       pthread_mutexattr_t attr;
+                       pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+               ], [
+                       # Works!
+                       AC_MSG_RESULT(ok)
+               ], [
+                       AC_MSG_RESULT(no)
+
+                       # glibc requires -D_GNU_SOURCE before it will declare
+                       # this macro
+                       AC_MSG_CHECKING(whether _GNU_SOURCE is needed for PTHREAD_MUTEX_RECURSIVE)
+                       CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+                       AC_TRY_COMPILE([ #include <pthread.h>], [
+                               pthread_mutexattr_t attr;
+                               pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+                       ], [
+                               AC_MSG_RESULT(ok)
+                               pthread_CFLAGS="-D_GNU_SOURCE"
+                       ], [
+                               AC_MSG_RESULT(no)
+                               dnl Add other variants here
+                               AC_MSG_ERROR([PTHREAD_MUTEX_RECURSIVE not found])
+                       ])
+               ])
+               CPPFLAGS=$orig_CPPFLAGS
+               CFLAGS="$CFLAGS $pthread_CFLAGS"
+       ], [
+               AC_MSG_ERROR([libpthread is required on non-win32 hosts])
+       ])
+fi
+
+if test "x$cross_compiling" = "xno"; then
+# check for new iconv version
+AC_MSG_CHECKING(for new iconv)
+AC_CACHE_VAL(new_iconv,[
+       AC_TRY_RUN([#include <stdio.h> 
+               #include <iconv.h>
+               int main()
+               {
+                 exit (iconv_open ("UTF-16le", "UTF-8") == (iconv_t)-1);
+               }
+               ],
+               new_iconv=yes,new_iconv=)])
+if test -n "$new_iconv"; then
+       AC_MSG_RESULT(yes)
+       AC_DEFINE(HAVE_NEW_ICONV)
+else
+       AC_MSG_RESULT(no)
+fi
+fi
 
 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; arch_target=ppc;;
+#arm-*-linux-*) TARGET=ARM; ACCESS_UNALIGNED="no";;
 esac
 
 if test ${TARGET} = unknown; then
@@ -62,6 +277,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)
@@ -82,11 +301,16 @@ mono/dis/Makefile
 mono/cil/Makefile
 mono/arch/Makefile
 mono/arch/x86/Makefile
+mono/arch/ppc/Makefile
+mono/arch/sparc/Makefile
 mono/interpreter/Makefile
 mono/tests/Makefile
 mono/wrapper/Makefile
 mono/monoburg/Makefile
 mono/jit/Makefile
+mono/io-layer/Makefile
 runtime/Makefile
+scripts/Makefile
+man/Makefile
 doc/Makefile
 ])