More tests.
[mono.git] / configure.in
1 AC_INIT(README)
2 AC_CANONICAL_SYSTEM
3
4 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
5 # The extra brackets are to foil regex-based scans.
6 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
7
8 AM_CONFIG_HEADER(config.h)
9 AM_INIT_AUTOMAKE(mono,2.7)
10 AM_MAINTAINER_MODE
11
12 API_VER=1.0
13 AC_SUBST(API_VER)
14
15 AC_PROG_LN_S
16
17 # In case of cygwin, override LN_S, irrespective of what it determines.
18 # The build uses cygwin, but the actual runtime doesn't.
19 case $host_os in
20 *cygwin* ) LN_S='cp -p';;
21 esac
22
23
24 dnl
25 dnl libgc checks
26 dnl
27
28 gc_headers=no
29 gc=included
30 use_included_gc=no
31 libgc_configure_args=
32
33 if test -d $srcdir/libgc ; then
34   gc_default=included
35 else
36   gc_default=boehm
37 fi
38
39 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
40 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
41 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
42 CFLAGS_FOR_LIBGC=$CFLAGS
43
44 #
45 # These are the flags that need to be stored in the mono.pc file for 
46 # compiling code that will embed Mono
47 #
48 libmono_cflags=""
49 libmono_ldflags=""
50 AC_SUBST(libmono_cflags)
51 AC_SUBST(libmono_ldflags)
52
53 # Variable to have relocatable .pc files (lib, or lib64)
54 reloc_libdir=`basename ${libdir}`
55 AC_SUBST(reloc_libdir)
56
57 dnl if linker handles the version script
58 no_version_script=no
59
60 # Set to yes if Unix sockets cannot be created in an anonymous namespace
61 need_link_unlink=no
62
63 # Thread configuration inspired by sleepycat's db
64 AC_MSG_CHECKING([host platform characteristics])
65 libgc_threads=no
66 has_dtrace=no
67 parallel_mark=yes
68
69 case "$host" in
70         powerpc*-*-linux*)
71                 # https://bugzilla.novell.com/show_bug.cgi?id=504411
72                 disable_munmap=yes
73         ;;
74 esac
75
76 case "$host" in
77         *-*-mingw*|*-*-cygwin*)
78                 platform_win32=yes
79                 AC_DEFINE(PLATFORM_WIN32,1,[Host Platform is Win32])
80                 AC_DEFINE(TARGET_WIN32,1,[Target OS is Win32])
81                 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
82                 AC_DEFINE(PLATFORM_NO_SYMLINKS,1,[This platform does not support symlinks])
83                 if test "x$cross_compiling" = "xno"; then
84                         CC="gcc -mno-cygwin -g"
85                         CXX="g++ -mno-cygwin -g"
86                         # So libgc configure gets -mno-cygwin
87                         export CC
88                         export CXX
89                 fi
90                 HOST_CC="gcc"
91                 # Windows 2000 is required that includes Internet Explorer 5.01
92                 CPPFLAGS="$CPPFLAGS -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
93                 LDFLAGS="$LDFLAGS -lmswsock"
94                 libmono_cflags="-mno-cygwin -mms-bitfields -mwindows"
95                 libmono_ldflags="-mno-cygwin -mms-bitfields -mwindows"
96                 libdl=
97                 libgc_threads=win32
98                 gc_default=included
99                 with_sigaltstack=no
100                 LN_S=cp
101                 # This forces libgc to use the DllMain based thread registration code on win32
102                 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
103                 ;;
104         *-*-*netbsd*)
105                 platform_win32=no
106                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
107                 libmono_cflags="-D_REENTRANT"
108                 LDFLAGS="$LDFLAGS -pthread"
109                 CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD"
110                 libmono_ldflags="-pthread"
111                 need_link_unlink=yes
112                 libdl="-ldl"
113                 libgc_threads=pthreads
114                 with_sigaltstack=no
115                 use_sigposix=yes
116                 ;;
117         *-*-*freebsd*)
118                 platform_win32=no
119                 if test "x$PTHREAD_CFLAGS" = "x"; then
120                         CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
121                         libmono_cflags=
122                 else
123                         CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
124                         libmono_cflags="$PTHREAD_CFLAGS"
125                 fi
126                 if test "x$PTHREAD_LIBS" = "x"; then
127                         LDFLAGS="$LDFLAGS -pthread"
128                         libmono_ldflags="-pthread"
129                 else
130                         LDFLAGS="$LDFLAGS $PTHREAD_LIBS"
131                         libmono_ldflags="$PTHREAD_LIBS"
132                 fi
133                 CPPFLAGS="$CPPFLAGS -DPLATFORM_BSD"
134                 need_link_unlink=yes
135                 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
136                 libdl=
137                 libgc_threads=pthreads
138                 # This doesn't seem to work as of 7.0 on amd64
139                 with_sigaltstack=no
140 # TLS is only partially implemented on -CURRENT (compiler support
141 # but NOT library support)
142 #
143                 with_tls=pthread
144                 use_sigposix=yes
145                 ;;
146         *-*-*openbsd*)
147                 platform_win32=no
148                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_FREEBSD_THREADS -DPLATFORM_BSD"
149                 libmono_cflags="-D_THREAD_SAFE"
150                 LDFLAGS="$LDFLAGS -pthread"
151                 libmono_ldflags="-pthread"
152                 need_link_unlink=yes
153                 AC_DEFINE(PTHREAD_POINTER_ID)
154                 libdl=
155                 libgc_threads=pthreads
156                 use_sigposix=yes
157                 ;;
158         *-*-linux*)
159                 platform_win32=no
160                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
161                 if test "x$disable_munmap" != "xyes"; then
162                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
163                 fi
164                 libmono_cflags="-D_REENTRANT"
165                 libmono_ldflags="-lpthread"
166                 libdl="-ldl"
167                 libgc_threads=pthreads
168                 AOT_SUPPORTED="yes"
169                 use_sigposix=yes
170                 ;;
171         *-*-hpux*)
172                 platform_win32=no
173                 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
174                 # +ESdbgasm only valid on bundled cc on RISC
175                 # silently ignored for ia64
176                 if test $GCC != "yes"; then
177                         CFLAGS="$CFLAGS +ESdbgasm"
178                         # Arrange for run-time dereferencing of null
179                         # pointers to produce a SIGSEGV signal.
180                         LDFLAGS="$LDFLAGS -z"
181                 fi
182                 CFLAGS="$CFLAGS +ESdbgasm"
183                 LDFLAGS="$LDFLAGS -z"
184                 libmono_cflags="-D_REENTRANT"
185                 libmono_ldflags="-lpthread"
186                 libgc_threads=pthreads
187                 need_link_unlink=yes
188                 use_sigposix=yes
189                 ;;
190         *-*-solaris*)
191                 platform_win32=no
192                 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DPLATFORM_SOLARIS"
193                 need_link_unlink=yes
194                 libmono_cflags="-D_REENTRANT"
195                 libgc_threads=pthreads
196                 # This doesn't seem to work on solaris/x86, but the configure test runs
197                 with_tls=pthread
198                 has_dtrace=yes
199                 use_sigposix=yes
200                 ;;
201         *-*-darwin*)
202                 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
203                 platform_win32=no
204                 platform_darwin=yes
205                 CPPFLAGS="$CPPFLAGS -no-cpp-precomp -D_THREAD_SAFE -DGC_MACOSX_THREADS -DPLATFORM_MACOSX -DUSE_MMAP -DUSE_MUNMAP"
206                 CPPFLAGS="$CPPFLAGS -DGetCurrentProcess=MonoGetCurrentProcess -DGetCurrentThread=MonoGetCurrentThread -DCreateEvent=MonoCreateEvent"
207                 libmono_cflags="-D_THREAD_SAFE"
208                 LDFLAGS="$LDFLAGS -pthread"
209                 libmono_ldflags="-pthread"
210                 need_link_unlink=yes
211                 AC_DEFINE(PTHREAD_POINTER_ID)
212                 AC_DEFINE(USE_MACH_SEMA, 1, [...])
213                 no_version_script=yes
214                 libdl=
215                 libgc_threads=pthreads
216                 has_dtrace=yes
217                 if test "x$cross_compiling" = "xyes"; then
218                         has_broken_apple_cpp=yes
219                 fi
220                 ;;
221         *)
222                 AC_MSG_WARN([*** Please add $host to configure.in checks!])
223                 platform_win32=no
224                 libdl="-ldl"
225                 ;;
226 esac
227 AC_MSG_RESULT(ok)
228
229 if test x$need_link_unlink = xyes; then
230    AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
231 fi
232
233 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
234 AM_CONDITIONAL(PLATFORM_LINUX, echo x$target_os | grep -q linux)
235 AM_CONDITIONAL(PLATFORM_DARWIN, test x$platform_darwin = xyes)
236 AM_CONDITIONAL(PLATFORM_SIGPOSIX, test x$use_sigposix = xyes)
237
238 AC_CHECK_TOOL(CC, gcc, gcc)
239 AC_PROG_CC
240 AC_PROG_CXX
241 AM_PROG_AS
242 AM_PROG_CC_STDC
243 AC_PROG_INSTALL
244 AC_PROG_AWK
245 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
246 : ${CCAS='$(CC)'}
247 # Set ASFLAGS if not already set.
248 : ${CCASFLAGS='$(CFLAGS)'}
249 AC_SUBST(CCAS)
250 AC_SUBST(CCASFLAGS)
251
252 AC_CHECK_PROG(BISON, bison,yes,no)
253 if test "x$BISON" = "xno";
254 then
255         AC_MSG_ERROR([You need to install bison])
256 fi
257
258 dnl may require a specific autoconf version
259 dnl AC_PROG_CC_FOR_BUILD
260 dnl CC_FOR_BUILD not automatically detected
261 CC_FOR_BUILD=$CC
262 CFLAGS_FOR_BUILD=$CFLAGS
263 BUILD_EXEEXT=
264 if test "x$cross_compiling" = "xyes"; then
265         CC_FOR_BUILD=cc
266         CFLAGS_FOR_BUILD=
267         BUILD_EXEEXT=""
268 fi
269 AC_SUBST(CC_FOR_BUILD)
270 AC_SUBST(CFLAGS_FOR_BUILD)
271 AC_SUBST(HOST_CC)
272 AC_SUBST(BUILD_EXEEXT)
273
274 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
275 AM_CONDITIONAL(USE_BATCH_FILES, [test x$platform_win32 = xyes -a x$cross_compiling = xyes])
276
277 # Set STDC_HEADERS
278 AC_HEADER_STDC
279 AC_LIBTOOL_WIN32_DLL
280 # This causes monodis to not link correctly
281 #AC_DISABLE_FAST_INSTALL
282 AM_PROG_LIBTOOL
283 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
284 DOLT
285
286 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
287 AC_SUBST(export_ldflags)
288
289 # Test whenever ld supports -version-script
290 AC_PROG_LD
291 AC_PROG_LD_GNU
292 if test "x$lt_cv_prog_gnu_ld" = "xno"; then
293    no_version_script=yes
294 fi
295
296 AM_CONDITIONAL(NO_VERSION_SCRIPT, test x$no_version_script = xyes)
297
298 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)
299 AC_CHECK_HEADERS(sys/user.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)
300
301
302 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
303 if test x$have_zlib = xyes; then
304    AC_TRY_COMPILE([#include <zlib.h>], [
305    void main () {
306    #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
307    }
308    #else
309    #error No good zlib found
310    #endif
311    ],[
312         AC_MSG_RESULT(Using system zlib)
313         zlib_msg="system zlib"
314    ],[
315         AC_MSG_RESULT(Using embedded zlib)
316         have_zlib=no
317         zlib_msg="bundled zlib"
318    ])
319 fi
320
321 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
322 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
323
324 # for mono/metadata/debug-symfile.c
325 AC_CHECK_HEADERS(elf.h)
326
327 # for support
328 AC_CHECK_HEADERS(poll.h)
329 AC_CHECK_HEADERS(sys/poll.h)
330 AC_CHECK_HEADERS(sys/wait.h)
331 AC_CHECK_HEADERS(grp.h)
332 AC_CHECK_HEADERS(syslog.h)
333
334 # for mono/dis
335 AC_CHECK_HEADERS(wchar.h)
336 AC_CHECK_HEADERS(ieeefp.h)
337 AC_MSG_CHECKING(for isinf)
338 AC_TRY_LINK([#include <math.h>], [
339         int f = isinf (1);
340 ], [
341         AC_MSG_RESULT(yes)
342         AC_DEFINE(HAVE_ISINF, 1, [isinf available])
343 ], [
344         # We'll have to use signals
345         AC_MSG_RESULT(no)
346 ])
347
348
349 # not 64 bit clean in cross-compile
350 AC_CHECK_SIZEOF(void *, 4)
351
352 WARN=''
353 if test x"$GCC" = xyes; then
354         WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings'
355                 # The runtime code does not respect ANSI C strict aliasing rules
356                 CFLAGS="$CFLAGS -fno-strict-aliasing"
357
358                 ORIG_CFLAGS=$CFLAGS
359                 CFLAGS="$CFLAGS -Wdeclaration-after-statement"
360                 AC_MSG_CHECKING(for -Wdeclaration-after-statement option to gcc)
361                 AC_TRY_COMPILE([], [
362                                                    void main () { }
363                 ], [
364                    AC_MSG_RESULT(yes)
365                 ], [
366                    AC_MSG_RESULT(no)
367                    CFLAGS=$ORIG_CFLAGS
368                 ])
369 else
370         # The Sun Forte compiler complains about inline functions that access static variables
371         # so disable all inlining.
372         case "$host" in
373         *-*-solaris*)
374                 CFLAGS="$CFLAGS -Dinline="
375                 ;;
376         esac
377 fi
378 CFLAGS="$CFLAGS -g $WARN"
379 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
380
381 # Where's the 'mcs' source tree?
382 if test -d $srcdir/mcs; then
383   mcsdir=mcs
384 else
385   mcsdir=../mcs
386 fi
387
388 #
389 # A sanity check to catch cases where the package was unpacked
390 # with an ancient tar program (Solaris)
391 #
392 AC_ARG_ENABLE(solaris-tar-check,
393 [  --disable-solaris-tar-check    disable solaris tar check],
394    do_solaris_tar_check=no, do_solaris_tar_check=yes)
395
396 if test x"$do_solaris_tar_check" = xyes; then
397         AC_MSG_CHECKING(integrity of package)
398         if test -f $srcdir/$mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
399         then
400                 AC_MSG_RESULT(ok)
401         else
402                 errorm="Your mono distribution is incomplete;  if unpacking from a tar file, make sure you use GNU tar;  see http://www.mono-project.com/IncompletePackage for more details"
403                 AC_MSG_ERROR([$errorm])
404         fi
405 fi
406
407 mcs_topdir='$(top_srcdir)/'$mcsdir
408 mcs_topdir_from_srcdir='$(top_builddir)/'$mcsdir
409
410 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
411 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
412
413 AC_SUBST([mcs_topdir])
414 AC_SUBST([mcs_topdir_from_srcdir])
415
416 # Where's the 'olive' source tree?
417 if test -d $srcdir/olive; then
418   olivedir=olive
419 else
420   olivedir=../olive
421 fi
422
423 if test -d $srcdir/$olivedir; then
424 olive_topdir='$(top_srcdir)/'$olivedir
425 fi
426
427 # gettext: prepare the translation directories. 
428 # we do not configure the full gettext, as we consume it dynamically from C#
429 AM_PO_SUBDIRS
430
431 if test "x$USE_NLS" = "xyes"; then
432    AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
433
434    if test "x$HAVE_MSGFMT" = "xno"; then
435           AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
436    fi
437 fi
438
439 AC_ARG_WITH([libgdiplus], 
440         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)], 
441         [], [with_libgdiplus=installed])
442
443 case $with_libgdiplus in
444 no|installed) libgdiplus_loc= ;;
445 yes|sibling) libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la ;;
446 /*) libgdiplus_loc=$with_libgdiplus ;;
447 *) libgdiplus_loc=`pwd`/$with_libgdiplus ;;
448 esac
449 AC_SUBST([libgdiplus_loc])
450
451 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
452 if test "x$PKG_CONFIG" = "xno"; then
453         AC_MSG_ERROR([You need to install pkg-config])
454 fi
455
456 pkg_config_path=
457 AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir],
458         if test x$with_crosspkgdir = "x"; then
459                 if test -s $PKG_CONFIG_PATH; then
460                         pkg_config_path=$PKG_CONFIG_PATH
461                 fi
462         else
463                 pkg_config_path=$with_crosspkgdir
464                 PKG_CONFIG_PATH=$pkg_config_path
465                 export PKG_CONFIG_PATH
466         fi
467 )
468
469 AC_ARG_WITH([glib],
470         [  --with-glib=embedded|system    Choose glib API: system or embedded (default to system)],
471         [], [with_glib=system])
472
473 eglib_dir=
474
475 case $with_glib in
476 embedded) 
477   GLIB_CFLAGS='-I$(top_srcdir)/eglib/src -I$(top_builddir)/eglib/src'
478   GLIB_LIBS='-L$(top_builddir)/eglib/src -leglib -lm'
479   BUILD_GLIB_CFLAGS="$GLIB_CFLAGS"
480   BUILD_GLIB_LIBS="$GLIB_LIBS"
481   GMODULE_CFLAGS="$GLIB_CFLAGS"
482   GMODULE_LIBS="$GLIB_LIBS"
483   eglib_dir=eglib
484   AC_CONFIG_SUBDIRS(eglib)
485   ;;
486 system)
487   if test "x$cross_compiling" = "xyes"; then
488     pkg_config_path="$PKG_CONFIG_PATH"
489     unset PKG_CONFIG_PATH
490   fi
491   BUILD_GLIB_CFLAGS=`$PKG_CONFIG --cflags glib-2.0 gthread-2.0`
492   BUILD_GLIB_LIBS=`$PKG_CONFIG --libs glib-2.0 gthread-2.0`
493   if test "x$cross_compiling" = "xyes"; then
494     PKG_CONFIG_PATH=$pkg_config_path
495     export PKG_CONFIG_PATH
496   fi
497   
498   ## Versions of dependencies
499   GLIB_REQUIRED_VERSION=2.4.0
500
501   dnl
502   dnl No, you will not replace this check with a pkg.m4 check
503   dnl
504   if $PKG_CONFIG --atleast-version=$GLIB_REQUIRED_VERSION glib-2.0; then
505       GLIB_CFLAGS=`$PKG_CONFIG --cflags glib-2.0 gthread-2.0`
506       GLIB_LIBS=`$PKG_CONFIG --libs glib-2.0 gthread-2.0`
507       GMODULE_CFLAGS=`$PKG_CONFIG --cflags gmodule-2.0`
508       GMODULE_LIBS=`$PKG_CONFIG --libs gmodule-2.0`
509   else
510         AC_MSG_ERROR([You need at least glib-2.0 $GLIB_REQUIRED_VERSION])
511   fi
512   ;;
513 *)
514   AC_MSG_ERROR([Invalid argument to --with-glib.])
515 esac
516 AM_CONDITIONAL(EGLIB_BUILD, test x$with_glib = xembedded)
517   
518 AC_SUBST(GLIB_CFLAGS)
519 AC_SUBST(GLIB_LIBS)
520 AC_SUBST(GMODULE_CFLAGS)
521 AC_SUBST(GMODULE_LIBS)
522 AC_SUBST(BUILD_GLIB_CFLAGS)
523 AC_SUBST(BUILD_GLIB_LIBS)
524 AC_SUBST(eglib_dir)
525
526 if test x$cross_compiling$platform_win32 = xnoyes; then
527    AC_MSG_CHECKING(for cygwin glib2-dev package)
528    if [ cygcheck --f /usr/lib/libglib-2.0.dll.a | grep -q glib2-devel ]; then
529       AC_MSG_RESULT(found)
530           AC_MSG_ERROR([Mono cannot be built with the cygwin glib2-devel package installed, because that package doesn't work with -mno-cygwin. Please uninstall it then re-run configure.])
531    else
532       AC_MSG_RESULT(not found, ok)
533    fi
534
535    AC_MSG_CHECKING(for broken gwin32.h)
536    glib_include=`$PKG_CONFIG --cflags-only-I glib-2.0 | sed -e 's/ -I.*//g' | sed -e 's/-I//g'`
537    if test -f $glib_include/glib/gwin32.h; then
538           if [ grep ftruncate $glib_include/glib/gwin32.h | grep -q define ]; then
539                  AC_MSG_RESULT(failed)
540                  hashmark='#'
541                  AC_MSG_ERROR([Your version of gwin32.h is broken and will cause compilation errors when building mono. Please fix it by deleting the line: '$hashmark   define ftruncate...' from '$glib_include/glib/gwin32.h' then re-run configure.])
542           fi
543    fi
544    AC_MSG_RESULT(ok)
545 fi
546
547 AC_ARG_WITH(gc, [  --with-gc=boehm,included,none  Defaults to included],[gc=$with_gc],[gc=$gc_default])
548
549 # Enable support for fast thread-local storage
550 # Some systems have broken support, so we allow to disable it.
551 AC_ARG_WITH(tls, [  --with-tls=__thread,pthread    select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
552
553 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
554 # This does not work on some platforms (bug #55253)
555 AC_ARG_WITH(sigaltstack, [  --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
556
557 AC_ARG_WITH(static_mono, [  --with-static_mono=yes,no      link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
558
559 if test "x$enable_static" = "xno"; then
560    with_static_mono=no
561 fi
562
563 if test "x$platform_win32" = "xyes"; then
564    # Boehm GC requires the runtime to be in its own dll
565    with_static_mono=no
566 fi
567
568 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
569 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
570
571 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
572 if test "x$with_xen_opt" = "xyes"; then
573         AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
574         ORIG_CFLAGS=$CFLAGS
575         CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
576         AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
577         AC_TRY_COMPILE([], [
578                                            void main () { }
579         ], [
580            AC_MSG_RESULT(yes)
581            # Pass it to libgc as well
582            CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
583         ], [
584            AC_MSG_RESULT(no)
585            CFLAGS=$ORIG_CFLAGS
586         ])
587 fi
588
589 AC_ARG_ENABLE(quiet-build, [  --enable-quiet-build  Enable quiet runtime build (on by default)], enable_quiet_build=$enableval, enable_quiet_build=yes)
590
591 DISABLED_FEATURES=none
592
593 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
594      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug,
595      reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, simd.],
596 [
597         for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
598                 eval "mono_feature_disable_$feature='yes'"
599         done
600         DISABLED_FEATURES=$enable_minimal
601         disabled="Disabled:    $enable_minimal"
602 ],[])
603
604 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
605
606 if test "x$mono_feature_disable_aot" = "xyes"; then
607         AC_DEFINE(DISABLE_AOT_COMPILER, 1, [Disable AOT Compiler])
608         AC_MSG_NOTICE([Disabled AOT compiler])
609 fi
610
611 if test "x$mono_feature_disable_profiler" = "xyes"; then
612         AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
613         AC_MSG_NOTICE([Disabled support for the profiler])
614 fi
615 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
616
617 if test "x$mono_feature_disable_decimal" = "xyes"; then
618         AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
619         AC_MSG_NOTICE([Disabled support for decimal])
620 fi
621
622 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
623         AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
624         AC_MSG_NOTICE([Disabled support for P/Invoke])
625 fi
626
627 if test "x$mono_feature_disable_debug" = "xyes"; then
628         AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
629         AC_MSG_NOTICE([Disabled support for runtime debugging])
630 fi
631
632 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
633         AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
634         mono_feature_disable_reflection_emit_save=yes
635         AC_MSG_NOTICE([Disabled support for Reflection.Emit])
636 fi
637
638 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
639         AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
640         AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
641 fi
642
643 if test "x$mono_feature_disable_large_code" = "xyes"; then
644         AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
645         AC_MSG_NOTICE([Disabled support for large assemblies])
646 fi
647
648 if test "x$mono_feature_disable_logging" = "xyes"; then
649         AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
650         AC_MSG_NOTICE([Disabled support for logging])
651 fi
652
653 if test "x$mono_feature_disable_com" = "xyes"; then
654         AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
655         AC_MSG_NOTICE([Disabled COM support])
656 fi
657
658 if test "x$mono_feature_disable_ssa" = "xyes"; then
659         AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
660         AC_MSG_NOTICE([Disabled SSA JIT optimizations])
661 fi
662
663 if test "x$mono_feature_disable_generics" = "xyes"; then
664         AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
665         AC_MSG_NOTICE([Disabled Generics Support])
666 fi
667
668 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
669         AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
670         AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
671 fi
672
673 if test "x$mono_feature_disable_portability" = "xyes"; then
674         AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
675         AC_MSG_NOTICE([Disabled IO Portability layer])
676 fi
677
678 if test "x$mono_feature_disable_attach" = "xyes"; then
679         AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
680         AC_MSG_NOTICE([Disabled agent attach])
681 fi
682
683 if test "x$mono_feature_disable_full_messages" = "xyes"; then
684         AC_DEFINE(DISABLE_FULL_MESSAGES, 1, [Disables building in the full table of WAPI messages])
685         AC_MSG_NOTICE([Disabled full messages for Win32 errors, only core message strings shipped])
686 fi
687
688 if test "x$mono_feature_disable_verifier" = "xyes"; then
689         AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
690         AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
691 fi
692
693
694 if test "x$mono_feature_disable_jit" = "xyes"; then
695         AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode will be supported by the runtime.])
696         AC_MSG_NOTICE([Disabled the JIT engine, only full AOT will be supported])
697 fi
698
699 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
700
701 if test "x$mono_feature_disable_simd" = "xyes"; then
702         AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
703         AC_MSG_NOTICE([Disabled SIMD support])
704 fi
705
706 AC_MSG_CHECKING(for visibility __attribute__)
707 AC_TRY_COMPILE([], [
708    void __attribute__ ((visibility ("hidden"))) doit (void) {}
709    void main () { doit (); }
710 ], [
711    have_visibility_hidden=yes
712    AC_MSG_RESULT(yes)
713 ], [
714    have_visibility_hidden=no
715    AC_MSG_RESULT(no)
716 ])
717
718 AC_MSG_CHECKING(for deprecated __attribute__)
719 AC_TRY_COMPILE([
720      int doit (void) __attribute__ ((deprecated));
721      int doit (void) { return 0; }
722 ], [
723         return 0;
724 ], [
725    have_deprecated=yes
726    AC_MSG_RESULT(yes)
727 ], [
728    have_deprecated=no
729    AC_MSG_RESULT(no)
730 ])
731
732 AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
733 if test x$enable_parallel_mark = xyes; then
734         libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
735 fi
736
737 LIBGC_CFLAGS=
738 LIBGC_LIBS=
739 LIBGC_STATIC_LIBS=
740 libgc_dir=
741 case "x$gc" in
742         xboehm|xbohem|xyes)
743                 AC_CHECK_HEADERS(gc.h gc/gc.h, gc_headers=yes)
744                 AC_CHECK_LIB(gc, GC_malloc, found_boehm="yes",,$libdl)
745
746                 if test "x$found_boehm" != "xyes"; then
747                         AC_MSG_ERROR("GC requested but libgc not found! Install libgc or run configure with --with-gc=none.")
748                 fi
749                 if test "x$gc_headers" != "xyes"; then
750                         AC_MSG_ERROR("GC requested but header files not found! You may need to install them by hand.")
751                 fi
752
753                 AC_DEFINE(HAVE_BOEHM_GC, 1, [Have Boehm GC])
754                 AC_SUBST(HAVE_BOEHM_GC)
755                 LIBGC_LIBS="-lgc $libdl"
756                 LIBGC_STATIC_LIBS="$LIBGC_LIBS"
757
758                 # AC_CHECK_FUNCS does not work for some reason...
759                 AC_CHECK_LIB(gc, GC_gcj_malloc, found_gcj_malloc="yes",,$libdl)
760                 if test "x$found_gcj_malloc" = "xyes"; then
761                         AC_DEFINE(HAVE_GC_GCJ_MALLOC, 1, [Have GC_gcj_malloc])
762                         AC_DEFINE_UNQUOTED(USED_GC_NAME, "System Boehm (with typed GC)", [GC description])
763                 else
764                         AC_DEFINE_UNQUOTED(USED_GC_NAME, "System Boehm (no typed GC)", [GC description])
765                 fi
766                 AC_CHECK_LIB(gc, GC_enable, found_gc_enable="yes",,$libdl)
767                 if test "x$found_gc_enable" = "xyes"; then
768                         AC_DEFINE(HAVE_GC_ENABLE, 1, [Have 'GC_enable'])
769                 fi
770                 ;;
771
772         xincluded)
773                 found_boehm=yes
774                 gc_headers=yes
775                 use_included_gc=yes
776                 libgc_dir=libgc
777
778                 LIBGC_CFLAGS='-I$(top_srcdir)/libgc/include'
779                 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
780                 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
781
782                 AC_DEFINE(HAVE_BOEHM_GC, 1, [Have Boehm GC])
783                 AC_SUBST(HAVE_BOEHM_GC)
784
785                 AC_DEFINE(HAVE_GC_H, 1, [Have gc.h])
786                 AC_DEFINE(USE_INCLUDED_LIBGC, 1, [Use included libgc])
787
788                 # The included libgc contains GCJ support
789                 AC_DEFINE(HAVE_GC_GCJ_MALLOC, 1, [Have GC_gcj_malloc])
790                 AC_DEFINE(HAVE_GC_ENABLE, 1, [Have GC_enable])
791                 if test x$enable_parallel_mark = xyes; then
792                         AC_DEFINE_UNQUOTED(USED_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
793                 else
794                         AC_DEFINE_UNQUOTED(USED_GC_NAME, "Included Boehm (with typed GC)", [GC description])
795                 fi
796                 ;;
797
798         xsgen)
799                 found_boehm=no
800                 gc_headers=no
801                 use_included_gc=no
802                 AC_DEFINE(HAVE_SGEN_GC,1,[Using the simple generational GC.])
803                 AC_DEFINE(HAVE_MOVING_COLLECTOR,1,[The GC can move objects.])
804                 AC_DEFINE(HAVE_WRITE_BARRIERS,1,[The GC needs write barriers.])
805                 AC_DEFINE_UNQUOTED(USED_GC_NAME, "Simple generational", [GC description])
806                 ;;
807
808         xnone)
809                 AC_MSG_WARN("Compiling mono without GC.")
810                 AC_DEFINE_UNQUOTED(USED_GC_NAME, "none", [GC description])
811                 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
812                 ;;
813         *)
814                 AC_MSG_ERROR([Invalid argument to --with-gc.])
815                 ;;
816 esac
817
818 AC_ARG_WITH(large-heap, [  --with-large-heap=yes,no       Enable support for GC heaps larger than 3GB (defaults to no)], [large_heap=$withval], [large_heap=no])
819 if test "x$large_heap" = "xyes"; then
820    echo "FOO"
821    CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
822 fi
823
824 AM_CONDITIONAL(INCLUDED_LIBGC, test x$use_included_gc = xyes)
825 AC_SUBST(LIBGC_CFLAGS)
826 AC_SUBST(LIBGC_LIBS)
827 AC_SUBST(LIBGC_STATIC_LIBS)
828 AC_SUBST(libgc_dir)
829
830 dnl
831 dnl End of libgc checks
832 dnl
833
834 dnl *************************************
835 dnl *** Checks for zero length arrays ***
836 dnl *************************************
837 AC_MSG_CHECKING(whether $CC supports zero length arrays)
838 AC_TRY_COMPILE([
839         struct s {
840                 int  length;
841                 char data [0];
842         };
843 ], [], [
844         AC_MSG_RESULT(yes)
845         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
846 ], [
847         AC_MSG_RESULT(no)
848         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
849 ])
850
851 if test x$platform_win32 = xno; then
852
853         dnl hires monotonic clock support
854         AC_SEARCH_LIBS(clock_gettime, rt)
855
856         dnl dynamic loader support
857         AC_CHECK_FUNC(dlopen, DL_LIB="",
858                 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
859         )
860         if test x$dl_support = xno; then
861                 AC_MSG_WARN([No dynamic loading support available])
862         else
863                 LIBS="$LIBS $DL_LIB"
864                 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
865                 dnl from glib's configure.in
866                 AC_CACHE_CHECK([for preceeding underscore in symbols],
867                         mono_cv_uscore,[
868                         AC_TRY_RUN([#include <dlfcn.h>
869                         int mono_underscore_test (void) { return 42; }
870                         int main() {
871                           void *f1 = (void*)0, *f2 = (void*)0, *handle;
872                           handle = dlopen ((void*)0, 0);
873                           if (handle) {
874                             f1 = dlsym (handle, "mono_underscore_test");
875                             f2 = dlsym (handle, "_mono_underscore_test");
876                           } return (!f2 || f1);
877                         }],
878                                 [mono_cv_uscore=yes],
879                                 [mono_cv_uscore=no],
880                         [])
881                 ])
882                 if test "x$mono_cv_uscore" = "xyes"; then
883                         MONO_DL_NEED_USCORE=1
884                 else
885                         MONO_DL_NEED_USCORE=0
886                 fi
887                 AC_SUBST(MONO_DL_NEED_USCORE)
888                 AC_CHECK_FUNC(dlerror)
889         fi
890
891         dnl ******************************************************************
892         dnl *** Checks for the IKVM JNI interface library                  ***
893         dnl ******************************************************************
894         AC_ARG_WITH(ikvm-native, [  --with-ikvm-native=yes,no      build the IKVM JNI interface library (defaults to yes)],[with_ikvm_native=$withval],[with_ikvm_native=yes])
895
896         ikvm_native_dir=
897         if test x$with_ikvm_native = xyes; then
898                 ikvm_native_dir=ikvm-native
899                 jdk_headers_found="IKVM Native"
900         fi
901
902         AC_SUBST(ikvm_native_dir)
903
904         AC_CHECK_HEADERS(execinfo.h)
905
906         AC_CHECK_FUNCS(getgrgid_r)
907         AC_CHECK_FUNCS(getgrnam_r)
908         AC_CHECK_FUNCS(getpwnam_r)
909         AC_CHECK_FUNCS(getpwuid_r)
910         AC_CHECK_FUNCS(getresuid)
911         AC_CHECK_FUNCS(setresuid)
912         AC_CHECK_FUNCS(kqueue)
913         AC_CHECK_FUNCS(backtrace_symbols)
914         AC_CHECK_FUNCS(mkstemp)
915         AC_CHECK_FUNCS(mmap)
916         AC_CHECK_FUNCS(madvise)
917         AC_CHECK_FUNCS(getrusage)
918         AC_CHECK_FUNCS(getpriority)
919         AC_CHECK_FUNCS(setpriority)
920
921         AC_CHECK_FUNCS(sched_setaffinity)
922
923         dnl ******************************************************************
924         dnl *** Check for large file support                               ***
925         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
926         dnl ******************************************************************
927         
928         # Check that off_t can represent 2**63 - 1 correctly, working around
929         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
930         # CPPFLAGS and sets $large_offt to yes if the test succeeds
931         large_offt=no
932         AC_DEFUN([LARGE_FILES], [
933                 large_CPPFLAGS=$CPPFLAGS
934                 CPPFLAGS="$CPPFLAGS $1"
935                 AC_TRY_RUN([
936                         #include <sys/types.h>
937
938                         #define BIG_OFF_T (((off_t)1<<62)-1+((off_t)1<<62))
939
940                         int main(void) {
941                                 int big_off_t=((BIG_OFF_T%2147483629==721) &&
942                                                (BIG_OFF_T%2147483647==1));
943                                 if(big_off_t) {
944                                         exit(0);
945                                 } else {
946                                         exit(1);
947                                 }
948                         }
949                 ], [
950                         AC_MSG_RESULT(ok)
951                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
952                         large_CPPFLAGS="$large_CPPFLAGS $1"
953                         large_offt=yes
954                 ], [
955                         AC_MSG_RESULT(no)
956                 ], "")
957                 CPPFLAGS=$large_CPPFLAGS
958         ])
959
960         AC_MSG_CHECKING(if off_t is 64 bits wide)
961         LARGE_FILES("")
962         if test $large_offt = no; then
963                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
964                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
965         fi
966         if test $large_offt = no; then
967                 AC_MSG_WARN([No 64 bit file size support available])
968         fi
969         
970         dnl *****************************
971         dnl *** Checks for libsocket  ***
972         dnl *****************************
973         AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
974
975         dnl *******************************
976         dnl *** Checks for MSG_NOSIGNAL ***
977         dnl *******************************
978         AC_MSG_CHECKING(for MSG_NOSIGNAL)
979         AC_TRY_COMPILE([#include <sys/socket.h>], [
980                 int f = MSG_NOSIGNAL;
981         ], [
982                 # Yes, we have it...
983                 AC_MSG_RESULT(yes)
984                 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
985         ], [
986                 # We'll have to use signals
987                 AC_MSG_RESULT(no)
988         ])
989
990         dnl *****************************
991         dnl *** Checks for SOL_IP     ***
992         dnl *****************************
993         AC_MSG_CHECKING(for SOL_IP)
994         AC_TRY_COMPILE([#include <netdb.h>], [
995                 int level = SOL_IP;
996         ], [
997                 # Yes, we have it...
998                 AC_MSG_RESULT(yes)
999                 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
1000         ], [
1001                 # We'll have to use getprotobyname
1002                 AC_MSG_RESULT(no)
1003         ])
1004
1005         dnl *****************************
1006         dnl *** Checks for SOL_IPV6     ***
1007         dnl *****************************
1008         AC_MSG_CHECKING(for SOL_IPV6)
1009         AC_TRY_COMPILE([#include <netdb.h>], [
1010                 int level = SOL_IPV6;
1011         ], [
1012                 # Yes, we have it...
1013                 AC_MSG_RESULT(yes)
1014                 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
1015         ], [
1016                 # We'll have to use getprotobyname
1017                 AC_MSG_RESULT(no)
1018         ])
1019
1020         dnl *****************************
1021         dnl *** Checks for SOL_TCP    ***
1022         dnl *****************************
1023         AC_MSG_CHECKING(for SOL_TCP)
1024         AC_TRY_COMPILE([#include <netdb.h>], [
1025                 int level = SOL_TCP;
1026         ], [
1027                 # Yes, we have it...
1028                 AC_MSG_RESULT(yes)
1029                 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
1030         ], [
1031                 # We'll have to use getprotobyname
1032                 AC_MSG_RESULT(no)
1033         ])
1034
1035         dnl *****************************
1036         dnl *** Checks for IP_PKTINFO ***
1037         dnl *****************************
1038         AC_MSG_CHECKING(for IP_PKTINFO)
1039         AC_TRY_COMPILE([#include <netdb.h>], [
1040                 int level = IP_PKTINFO;
1041         ], [
1042                 # Yes, we have it...
1043                 AC_MSG_RESULT(yes)
1044                 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1045         ], [
1046                 AC_MSG_RESULT(no)
1047         ])
1048
1049         dnl *****************************
1050         dnl *** Checks for IPV6_PKTINFO ***
1051         dnl *****************************
1052         AC_MSG_CHECKING(for IPV6_PKTINFO)
1053         AC_TRY_COMPILE([#include <netdb.h>], [
1054                 int level = IPV6_PKTINFO;
1055         ], [
1056                 # Yes, we have it...
1057                 AC_MSG_RESULT(yes)
1058                 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
1059         ], [
1060                 AC_MSG_RESULT(no)
1061         ])
1062
1063         dnl **********************************
1064         dnl *** Checks for IP_DONTFRAGMENT ***
1065         dnl **********************************
1066         AC_MSG_CHECKING(for IP_DONTFRAGMENT)
1067         AC_TRY_COMPILE([#include <netdb.h>], [
1068                 int level = IP_DONTFRAGMENT;
1069         ], [
1070                 # Yes, we have it...
1071                 AC_MSG_RESULT(yes)
1072                 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
1073         ], [
1074                 AC_MSG_RESULT(no)
1075         ])
1076
1077         dnl **********************************
1078         dnl *** Checks for IP_MTU_DISCOVER ***
1079         dnl **********************************
1080         AC_MSG_CHECKING(for IP_MTU_DISCOVER)
1081         AC_TRY_COMPILE([#include <netdb.h>], [
1082                 int level = IP_MTU_DISCOVER;
1083         ], [
1084                 # Yes, we have it...
1085                 AC_MSG_RESULT(yes)
1086                 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
1087         ], [
1088                 AC_MSG_RESULT(no)
1089         ])
1090
1091         dnl *********************************
1092         dnl *** Check for struct ip_mreqn ***
1093         dnl *********************************
1094         AC_MSG_CHECKING(for struct ip_mreqn)
1095         AC_TRY_COMPILE([#include <netinet/in.h>], [
1096                 struct ip_mreqn mreq;
1097                 mreq.imr_address.s_addr = 0;
1098         ], [
1099                 # Yes, we have it...
1100                 AC_MSG_RESULT(yes)
1101                 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
1102         ], [
1103                 # We'll just have to try and use struct ip_mreq
1104                 AC_MSG_RESULT(no)
1105                 AC_MSG_CHECKING(for struct ip_mreq)
1106                 AC_TRY_COMPILE([#include <netinet/in.h>], [
1107                         struct ip_mreq mreq;
1108                         mreq.imr_interface.s_addr = 0;
1109                 ], [
1110                         # Yes, we have it...
1111                         AC_MSG_RESULT(yes)
1112                         AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
1113                 ], [
1114                         # No multicast support
1115                         AC_MSG_RESULT(no)
1116                 ])
1117         ])
1118         
1119         dnl **********************************
1120         dnl *** Check for gethostbyname2_r ***
1121         dnl **********************************
1122         AC_MSG_CHECKING(for gethostbyname2_r)
1123                 AC_TRY_LINK([#include <netdb.h>], [
1124                 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
1125         ], [
1126                 # Yes, we have it...
1127                 AC_MSG_RESULT(yes)
1128                 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
1129         ], [
1130                 AC_MSG_RESULT(no)
1131         ])
1132
1133         dnl *****************************
1134         dnl *** Checks for libnsl     ***
1135         dnl *****************************
1136         AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
1137
1138         AC_CHECK_FUNCS(inet_pton inet_aton)
1139
1140         dnl ***********************************************
1141         dnl *** Checks for size of sockaddr_un.sun_path ***
1142         dnl ***********************************************
1143         # AC_CHECK_SIZEOF can't cope with struct members :-(
1144         AC_MSG_CHECKING(size of sockaddr_un.sun_path)
1145         AC_CACHE_VAL(mono_cv_sizeof_sunpath,
1146                 [AC_TRY_RUN([
1147                         #include <sys/types.h>
1148                         #include <stdio.h>
1149                         #include <sys/un.h>
1150
1151                         int main(void) {
1152                                 struct sockaddr_un sock_un;
1153                                 FILE *f=fopen("conftestval", "w");
1154                                 if(!f) exit(1);
1155                                 fprintf(f, "%d\n", sizeof(sock_un.sun_path));
1156                                 exit(0);
1157                         }
1158                 ], mono_cv_sizeof_sunpath=`cat conftestval`,
1159                    mono_cv_sizeof_sunpath=0,
1160                    mono_cv_sizeof_sunpath=0)])dnl
1161         AC_MSG_RESULT($mono_cv_sizeof_sunpath)
1162         AC_DEFINE_UNQUOTED(MONO_SIZEOF_SUNPATH, $mono_cv_sizeof_sunpath, [Sizeof sock_un.sun_path])
1163
1164         dnl *****************************
1165         dnl *** Checks for libxnet    ***
1166         dnl *****************************
1167         case "${host}" in
1168                 *solaris* )
1169                         AC_MSG_CHECKING(for Solaris XPG4 support)
1170                         if test -f /usr/lib/libxnet.so; then
1171                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
1172                                 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
1173                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
1174                                 LIBS="$LIBS -lxnet"
1175                                 AC_MSG_RESULT(yes)
1176                         else
1177                                 AC_MSG_RESULT(no)
1178                         fi
1179
1180                         if test "$GCC" = "yes"; then
1181                                 CFLAGS="$CFLAGS -Wno-char-subscripts"
1182                         fi
1183                 ;;
1184         esac
1185
1186         dnl *****************************
1187         dnl *** Checks for libpthread ***
1188         dnl *****************************
1189 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
1190 # and libpthread does not exist
1191 #
1192         case "${host}" in
1193                 *-*-*freebsd*)
1194                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
1195                 ;;
1196                 *)
1197                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
1198                 ;;
1199         esac
1200         AC_CHECK_HEADERS(pthread.h)
1201         AC_CHECK_FUNCS(pthread_mutex_timedlock)
1202         AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np)
1203         AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
1204         AC_TRY_COMPILE([ #include <pthread.h>], [
1205                 pthread_mutexattr_t attr;
1206                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
1207         ], [
1208                 AC_MSG_RESULT(ok)
1209         ], [
1210                 AC_MSG_RESULT(no)
1211                 AC_MSG_WARN(Using mono_mutex_t for recursive mutexes)
1212                 AC_DEFINE(USE_MONO_MUTEX, 1, [Use mono_mutex_t])
1213         ])
1214         AC_CHECK_FUNCS(pthread_attr_setstacksize)
1215         AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
1216         AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
1217
1218         dnl ***********************************
1219         dnl *** Checks for signals
1220         dnl ***********************************
1221         AC_CHECK_HEADERS(signal.h)
1222         AC_CHECK_FUNCS(sigaction)
1223
1224         dnl ***********************************
1225         dnl *** Checks for working __thread ***
1226         dnl ***********************************
1227         AC_MSG_CHECKING(for working __thread)
1228         if test "x$with_tls" != "x__thread"; then
1229                 AC_MSG_RESULT(disabled)
1230         else
1231                 AC_TRY_RUN([
1232                         #include <pthread.h>
1233                         __thread int i;
1234                         static int res1, res2;
1235
1236                         void thread_main (void *arg)
1237                         {
1238                                 i = arg;
1239                                 sleep (1);
1240                                 if (arg == 1)
1241                                         res1 = (i == arg);
1242                                 else
1243                                         res2 = (i == arg);
1244                         }
1245
1246                         int main () {
1247                                 pthread_t t1, t2;
1248
1249                                 i = 5;
1250
1251                                 pthread_create (&t1, NULL, thread_main, 1);
1252                                 pthread_create (&t2, NULL, thread_main, 2);
1253
1254                                 pthread_join (t1, NULL);
1255                                 pthread_join (t2, NULL);
1256
1257                                 return !(res1 + res2 == 2);
1258                         }
1259                 ], [
1260                                 AC_MSG_RESULT(yes)
1261                 ], [
1262                                 AC_MSG_RESULT(no)
1263                                 with_tls=pthread
1264                 ])
1265         fi
1266
1267         dnl **************************************
1268         dnl *** Checks for working sigaltstack ***
1269         dnl **************************************
1270         AC_MSG_CHECKING(for working sigaltstack)
1271         if test "x$with_sigaltstack" != "xyes"; then
1272                 AC_MSG_RESULT(disabled)
1273         else
1274                 AC_TRY_RUN([
1275                         #include <stdio.h>
1276                         #include <stdlib.h>
1277                         #include <unistd.h>
1278                         #include <signal.h>
1279                         #include <pthread.h>
1280                         #include <sys/wait.h>
1281                         #if defined(__FreeBSD__) || defined(__NetBSD__)
1282                         #define SA_STACK SA_ONSTACK
1283                         #endif
1284                         static void
1285                         sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
1286                         {
1287                                 exit (0);
1288                         }
1289
1290                         static void *
1291                         loop (void *ignored)
1292                         {
1293                                 char *ptr = NULL;
1294
1295                                 *ptr = 0;
1296                                 return NULL;
1297                         }
1298
1299                         static void
1300                         child ()
1301                         {
1302                                 struct sigaction sa;
1303                                 struct sigaltstack sas;
1304                                 pthread_t id;
1305                                 pthread_attr_t attr;
1306
1307                                 sa.sa_sigaction = sigsegv_signal_handler;
1308                                 sigemptyset (&sa.sa_mask);
1309                                 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
1310                                 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
1311                                         perror ("sigaction");
1312                                         return;
1313                                 }
1314
1315                                 sas.ss_sp = malloc (SIGSTKSZ);
1316                                 sas.ss_size = SIGSTKSZ;
1317                                 sas.ss_flags = 0;
1318                                 if (sigaltstack (&sas, NULL) == -1) {
1319                                         perror ("sigaltstack");
1320                                         return;
1321                                 }
1322
1323                                 pthread_attr_init (&attr);
1324                                 if (pthread_create(&id, &attr, loop, &attr) != 0) {
1325                                         printf ("pthread_create\n");
1326                                         return;
1327                                 }
1328
1329                                 sleep (100);
1330                         }
1331
1332                         int
1333                         main ()
1334                         {
1335                                 pid_t son;
1336                                 int status;
1337                                 int i;
1338
1339                                 son = fork ();
1340                                 if (son == -1) {
1341                                         return 1;
1342                                 }
1343
1344                                 if (son == 0) {
1345                                         child ();
1346                                         return 0;
1347                                 }
1348
1349                                 for (i = 0; i < 3; ++i) {
1350                                         sleep (1);
1351                                         waitpid (son, &status, WNOHANG);
1352                                         if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
1353                                                 return 0;
1354                                 }
1355
1356                                 kill (son, SIGKILL);
1357                                 return 1;
1358                         }
1359
1360                 ], [
1361                                 AC_MSG_RESULT(yes)
1362                                 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
1363                 ], [
1364                                 with_sigaltstack=no
1365                                 AC_MSG_RESULT(no)
1366                 ])
1367         fi
1368
1369         dnl ********************************
1370         dnl *** Checks for semaphore lib ***
1371         dnl ********************************
1372         # 'Real Time' functions on Solaris
1373         # posix4 on Solaris 2.6
1374         # pthread (first!) on Linux
1375         AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
1376
1377         AC_SEARCH_LIBS(shm_open, pthread rt posix4) 
1378         AC_CHECK_FUNCS(shm_open)
1379
1380         dnl ********************************
1381         dnl *** Checks for timezone stuff **
1382         dnl ********************************
1383         AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
1384                 AC_TRY_COMPILE([
1385                         #include <time.h>
1386                         ], [
1387                         struct tm tm;
1388                         tm.tm_gmtoff = 1;
1389                         ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
1390         if test $ac_cv_struct_tm_gmtoff = yes; then
1391                 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
1392         else
1393                 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
1394                         AC_TRY_COMPILE([
1395                                 #include <time.h>
1396                         ], [
1397                                 timezone = 1;
1398                         ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
1399                 if test $ac_cv_var_timezone = yes; then
1400                         AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
1401                 else
1402                         AC_ERROR(unable to find a way to determine timezone)
1403                 fi
1404         fi
1405
1406         dnl *********************************
1407         dnl *** Checks for math functions ***
1408         dnl *********************************
1409         LIBS="$LIBS -lm";
1410         if test "x$has_broken_apple_cpp" != "xyes"; then
1411                 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
1412                         AC_TRY_LINK([#include <math.h>], 
1413                         [ finite(0.0); ], 
1414                         AC_DEFINE(HAVE_FINITE, 1, [Have finite]) AC_MSG_RESULT(yes),
1415                         AC_MSG_RESULT(no)))
1416         fi
1417         AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
1418                 AC_TRY_LINK([#include <math.h>], 
1419                 [ isfinite(0.0); ], 
1420                 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
1421                 AC_MSG_RESULT(no)))
1422
1423         dnl ****************************************************************
1424         dnl *** Checks for working poll() (macosx defines it but doesn't ***
1425         dnl *** have it in the library (duh))                            ***
1426         dnl ****************************************************************
1427         AC_CHECK_FUNCS(poll)
1428
1429         dnl *************************
1430         dnl *** Check for signbit ***
1431         dnl *************************
1432         AC_MSG_CHECKING(for signbit)
1433         AC_TRY_LINK([#include <math.h>], [
1434                 int s = signbit(1.0);
1435         ], [
1436                 AC_MSG_RESULT(yes)
1437                 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
1438         ], [
1439                 AC_MSG_RESULT(no)
1440         ]) 
1441
1442         dnl **********************************
1443         dnl *** epoll                      ***
1444         dnl **********************************
1445         AC_CHECK_HEADERS(sys/epoll.h)
1446         haveepoll=no
1447         AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
1448         if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes" ; then
1449                 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
1450         fi
1451
1452         dnl ******************************
1453         dnl *** Checks for SIOCGIFCONF ***
1454         dnl ******************************
1455         AC_CHECK_HEADERS(sys/ioctl.h)
1456         AC_CHECK_HEADERS(net/if.h)
1457         AC_MSG_CHECKING(for ifreq)
1458         AC_TRY_COMPILE([
1459                 #include <stdio.h>
1460                 #include <sys/ioctl.h>
1461                 #include <net/if.h>
1462                 ], [
1463                 struct ifconf ifc;
1464                 struct ifreq *ifr;
1465                 void *x;
1466                 ifc.ifc_len = 0;
1467                 ifc.ifc_buf = NULL;
1468                 x = (void *) &ifr->ifr_addr;
1469                 ],[
1470                         AC_MSG_RESULT(yes)
1471                         AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
1472                 ], [
1473                         AC_MSG_RESULT(no)
1474                 ])
1475         dnl **********************************
1476         dnl ***     Checks for sin_len     ***
1477         dnl **********************************
1478         AC_MSG_CHECKING(for sockaddr_in.sin_len)
1479         AC_TRY_COMPILE([
1480                 #include <netinet/in.h>
1481                 ], [
1482                 struct sockaddr_in saddr;
1483                 saddr.sin_len = sizeof (saddr);
1484                 ],[
1485                         AC_MSG_RESULT(yes)
1486                         AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
1487                 ], [
1488                         AC_MSG_RESULT(no)
1489                 ])      
1490         dnl **********************************
1491         dnl ***    Checks for sin6_len     ***
1492         dnl **********************************
1493         AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
1494         AC_TRY_COMPILE([
1495                 #include <netinet/in.h>
1496                 ], [
1497                 struct sockaddr_in6 saddr6;
1498                 saddr6.sin6_len = sizeof (saddr6);
1499                 ],[
1500                         AC_MSG_RESULT(yes)
1501                         AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
1502                 ], [
1503                         AC_MSG_RESULT(no)
1504                 ])      
1505         dnl **********************************
1506         dnl *** Checks for MonoPosixHelper ***
1507         dnl **********************************
1508         AC_CHECK_HEADERS(checklist.h)
1509         AC_CHECK_HEADERS(fstab.h)
1510         AC_CHECK_HEADERS(attr/xattr.h)
1511         AC_CHECK_HEADERS(sys/extattr.h)
1512         AC_CHECK_HEADERS(sys/sendfile.h)
1513         AC_CHECK_HEADERS(sys/statvfs.h)
1514         AC_CHECK_HEADERS(sys/statfs.h)
1515         AC_CHECK_HEADERS(sys/vfstab.h)
1516         AC_CHECK_HEADERS(sys/xattr.h)
1517         AC_CHECK_HEADERS(sys/mman.h)
1518         AC_CHECK_HEADERS(sys/param.h)
1519         AC_CHECK_HEADERS(sys/mount.h)
1520         AC_CHECK_FUNCS(getdomainname)
1521         AC_CHECK_FUNCS(setdomainname)
1522         AC_CHECK_FUNCS(fgetgrent)
1523         AC_CHECK_FUNCS(fgetpwent)
1524         AC_CHECK_FUNCS(fgetpwent)
1525         AC_CHECK_FUNCS(getfsstat)
1526         AC_CHECK_FUNCS(lutimes)
1527         AC_CHECK_FUNCS(mremap)
1528         AC_CHECK_FUNCS(remap_file_pages)
1529         AC_CHECK_FUNCS(posix_fadvise)
1530         AC_CHECK_FUNCS(posix_fallocate)
1531         AC_CHECK_FUNCS(posix_madvise)
1532         AC_CHECK_FUNCS(vsnprintf)
1533         AC_CHECK_FUNCS(sendfile)
1534         AC_CHECK_FUNCS(sethostid)
1535         AC_CHECK_FUNCS(statfs)
1536         AC_CHECK_FUNCS(fstatfs)
1537         AC_CHECK_FUNCS(statvfs)
1538         AC_CHECK_FUNCS(fstatvfs)
1539         AC_CHECK_FUNCS(stime)
1540         AC_CHECK_FUNCS(strerror_r)
1541         AC_CHECK_FUNCS(ttyname_r)
1542         AC_CHECK_SIZEOF(size_t)
1543         AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
1544                 [#include <sys/types.h>
1545                  #include <sys/stat.h>
1546                  #include <unistd.h>])
1547         AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
1548                 [#include <sys/types.h>
1549                  #include <sys/stat.h>
1550                  #include <unistd.h>])
1551         AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
1552                 [#include <sys/time.h>])
1553         AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
1554                 [#include <unistd.h>
1555                  #include <fcntl.h>])
1556         AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
1557                 [#include <sys/poll.h>])
1558         AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
1559                 [#include <sys/types.h>
1560                  #include <sys/stat.h>
1561                  #include <unistd.h>])
1562         AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
1563                 [#include <time.h>])
1564         AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
1565                 [#include <sys/time.h>
1566                  #include <sys/types.h>
1567                  #include <utime.h>])
1568         AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
1569                 [#include <sys/time.h>])
1570         AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
1571                 [#include <sys/types.h>
1572                  #include <utime.h>])
1573         AC_CHECK_MEMBERS(
1574                 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,, 
1575                 [#include <sys/types.h>
1576                  #include <dirent.h>])
1577
1578         dnl Favour xattr through glibc, but use libattr if we have to
1579         AC_CHECK_FUNC(lsetxattr, ,
1580                 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
1581         )
1582         AC_SUBST(XATTR_LIB)
1583
1584         dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
1585         AC_CHECK_MEMBERS(
1586                 [struct kinfo_proc.kp_proc],,, 
1587                 [#include <sys/types.h>
1588                  #include <sys/sysctl.h>
1589                  #include <sys/proc.h>
1590                  ])
1591
1592         dnl *********************************
1593         dnl *** Checks for Windows compilation ***
1594         dnl *********************************
1595         AC_CHECK_HEADERS(sys/time.h)
1596         AC_CHECK_HEADERS(sys/param.h)
1597         AC_CHECK_HEADERS(dirent.h)
1598
1599         dnl *********************************
1600         dnl *** Check for Console 2.0 I/O ***
1601         dnl *********************************
1602         AC_CHECK_HEADERS([curses.h])
1603         AC_CHECK_HEADERS([term.h], [], [],
1604         [#if HAVE_CURSES_H
1605          #include <curses.h>
1606          #endif
1607         ])
1608         AC_CHECK_HEADERS([termios.h])
1609
1610         dnl * This is provided in io-layer, but on windows it's only available
1611         dnl * on xp+
1612         AC_DEFINE(HAVE_GETPROCESSID, 1, [Define if GetProcessId is available])
1613 else
1614         jdk_headers_found=no
1615         AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
1616         AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
1617         AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
1618         AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
1619         AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
1620         AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
1621         AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
1622
1623         dnl *********************************
1624         dnl *** Check for struct ip_mreqn ***
1625         dnl *********************************
1626         AC_MSG_CHECKING(for struct ip_mreqn)
1627         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
1628                 struct ip_mreqn mreq;
1629                 mreq.imr_address.s_addr = 0;
1630         ], [
1631                 # Yes, we have it...
1632                 AC_MSG_RESULT(yes)
1633                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
1634         ], [
1635                 # We'll just have to try and use struct ip_mreq
1636                 AC_MSG_RESULT(no)
1637                 AC_MSG_CHECKING(for struct ip_mreq)
1638                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
1639                         struct ip_mreq mreq;
1640                         mreq.imr_interface.s_addr = 0;
1641                 ], [
1642                         # Yes, we have it...
1643                         AC_MSG_RESULT(yes)
1644                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
1645                 ], [
1646                         # No multicast support
1647                         AC_MSG_RESULT(no)
1648                 ])
1649         ])
1650         AC_CHECK_FUNCS(GetProcessId)
1651 fi
1652
1653 dnl socklen_t check
1654 AC_MSG_CHECKING(for socklen_t)
1655 AC_TRY_COMPILE([
1656 #include <sys/types.h>
1657 #include <sys/socket.h>
1658 ],[
1659   socklen_t foo;
1660 ],[
1661 ac_cv_c_socklen_t=yes
1662         AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
1663         AC_MSG_RESULT(yes)
1664 ],[
1665         AC_MSG_RESULT(no)
1666 ])
1667
1668 AC_MSG_CHECKING(for array element initalizer support)
1669 AC_TRY_COMPILE([#include <sys/socket.h>], [
1670         const int array[] = {[1] = 2,};
1671 ], [
1672         # Yes, we have it...
1673         AC_MSG_RESULT(yes)
1674         AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
1675 ], [
1676         # We'll have to use signals
1677         AC_MSG_RESULT(no)
1678 ])
1679
1680 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
1681         # Simply calling trunc (0.0) is no good since gcc will optimize the call away
1682         AC_TRY_LINK([#include <math.h>], 
1683         [ static void *p = &trunc; ],
1684         [
1685                 AC_DEFINE(HAVE_TRUNC) 
1686                 AC_MSG_RESULT(yes)
1687                 ac_cv_trunc=yes
1688         ],
1689         AC_MSG_RESULT(no)))
1690
1691 if test "x$ac_cv_truncl" != "xyes"; then
1692    AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
1693 fi
1694
1695 AC_CHECK_FUNCS(round)
1696 AC_CHECK_FUNCS(rint)
1697
1698 dnl ****************************
1699 dnl *** Look for /dev/random ***
1700 dnl ****************************
1701
1702 AC_MSG_CHECKING([if usage of random device is requested])
1703 AC_ARG_ENABLE(dev-random,
1704 [  --disable-dev-random    disable the use of the random device (enabled by default)],
1705 try_dev_random=$enableval, try_dev_random=yes)
1706
1707 AC_MSG_RESULT($try_dev_random)
1708
1709 case "{$target}" in
1710     *-openbsd*)
1711     NAME_DEV_RANDOM="/dev/srandom"
1712     ;;
1713
1714 dnl Win32 does not have /dev/random, they have their own method...
1715
1716     *-*-mingw*|*-*-cygwin*)
1717     ac_cv_have_dev_random=no
1718     ;;
1719
1720 dnl Everywhere else, it's /dev/random
1721
1722     *)
1723     NAME_DEV_RANDOM="/dev/random"
1724     ;;
1725 esac
1726
1727 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
1728
1729 dnl Now check if the device actually exists
1730
1731 if test "x$try_dev_random" = "xyes"; then
1732     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
1733     [if test -r "$NAME_DEV_RANDOM" ; then
1734         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
1735     if test "x$ac_cv_have_dev_random" = "xyes"; then
1736         AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
1737     fi
1738 else
1739     AC_MSG_CHECKING(for random device)
1740     ac_cv_have_dev_random=no
1741     AC_MSG_RESULT(has been disabled)
1742 fi
1743
1744 if test "x$platform_win32" = "xyes"; then
1745     AC_DEFINE(HAVE_CRYPT_RNG)
1746 fi
1747
1748 if test "x$ac_cv_have_dev_random" = "xno" \
1749     && test "x$platform_win32" = "xno"; then
1750     AC_MSG_WARN([[
1751 ***
1752 *** A system-provided entropy source was not found on this system.
1753 *** Because of this, the System.Security.Cryptography random number generator
1754 *** will throw a NotImplemented exception.
1755 ***
1756 *** If you are seeing this message, and you know your system DOES have an
1757 *** entropy collection in place, please contact <crichton@gimp.org> and
1758 *** provide information about the system and how to access the random device.
1759 ***
1760 *** Otherwise you can install either egd or prngd and set the environment
1761 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
1762 ***]])
1763 fi
1764  
1765 AC_MSG_CHECKING([if inter-process shared handles are requested])
1766 AC_ARG_ENABLE(shared-handles, [  --disable-shared-handles disable inter-process shared handles], try_shared_handles=$enableval, try_shared_handles=yes)
1767 AC_MSG_RESULT($try_shared_handles)
1768 if test "x$try_shared_handles" != "xyes"; then
1769         AC_DEFINE(DISABLE_SHARED_HANDLES, 1, [Disable inter-process shared handles])
1770         AC_SUBST(DISABLE_SHARED_HANDLES)
1771 fi
1772
1773 if test x$gc = xsgen; then
1774    if test x$with_tls != x__thread; then
1775           AC_MSG_ERROR([The SGEN garbage collector depends on a working __thread implementation, and either --with-thread=pthread was passed to configure, or the configure test for __thread failed.])
1776    fi
1777 fi
1778
1779 AC_ARG_ENABLE(nunit-tests, [  --enable-nunit-tests      Run the nunit tests of the class library on 'make check'])
1780 AM_CONDITIONAL(ENABLE_NUNIT_TESTS, [test x$enable_nunit_tests = xyes])
1781
1782 AC_MSG_CHECKING([if big-arrays are to be enabled])
1783 AC_ARG_ENABLE(big-arrays,  [  --enable-big-arrays       Enable the allocation and indexing of arrays greater than Int32.MaxValue], enable_big_arrays=$enableval, enable_big_arrays=no)
1784 if test "x$enable_big_arrays" = "xyes" ; then
1785     if  test "x$ac_cv_sizeof_void_p" = "x8"; then
1786         AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
1787     else
1788         AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
1789     fi
1790 fi
1791 AC_MSG_RESULT($enable_big_arrays)
1792
1793 dnl **************
1794 dnl *** DTRACE ***
1795 dnl **************
1796
1797 AC_ARG_ENABLE(dtrace,[  --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
1798
1799 if test "x$enable_dtrace" = "xyes"; then
1800    if test "x$has_dtrace" = "xno"; then
1801           AC_MSG_ERROR([DTrace probes are not supported on this platform.])
1802    fi
1803    AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
1804    if test "x$DTRACE" = "xno"; then
1805           AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
1806           enable_dtrace=no
1807    elif ! $DTRACE -h $srcdir/data/mono.d > /dev/null 2>&1; then
1808           AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
1809           enable_dtrace=no
1810    fi
1811 fi
1812
1813 dtrace_g=no
1814 if test "x$enable_dtrace" = "xyes"; then
1815         AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
1816         DTRACEFLAGS=
1817         if test "x$ac_cv_sizeof_void_p" = "x8"; then
1818                 case "$host" in
1819                         powerpc-*-darwin*)
1820                         DTRACEFLAGS="-arch ppc64"
1821                         ;;
1822                         i*86-*-darwin*)
1823                         DTRACEFLAGS="-arch x86_64"
1824                         ;;
1825                         *)
1826                         DTRACEFLAGS=-64
1827                         ;;
1828                 esac
1829         else
1830                 case "$host" in
1831                         powerpc-*-darwin*)
1832                         DTRACEFLAGS="-arch ppc"
1833                         ;;
1834                         i*86-*-darwin*)
1835                         DTRACEFLAGS="-arch i386"
1836                         ;;
1837                         *)
1838                         DTRACEFLAGS=-32
1839                         ;;
1840                 esac
1841         fi
1842         AC_SUBST(DTRACEFLAGS)
1843         case "$host" in
1844                 *-*-solaris*)
1845                 dtrace_g=yes
1846                 ;;
1847         esac
1848         AC_CHECK_HEADERS([sys/sdt.h])
1849 fi
1850 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
1851 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
1852
1853 dnl **************
1854 dnl ***  LLVM  ***
1855 dnl **************
1856
1857 AC_ARG_ENABLE(llvm,[  --enable-llvm     Enable the experimental LLVM back-end], enable_llvm=$enableval, enable_llvm=no)
1858
1859 if test "x$enable_llvm" = "xyes"; then
1860    AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
1861    if test "x$LLVM_CONFIG" = "xno"; then
1862           AC_MSG_ERROR([llvm-config not found.])
1863    fi
1864
1865    LLVM_CXXFLAGS=`$LLVM_CONFIG --cflags`
1866    LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
1867    LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter jit x86codegen`
1868    LLVM_LIBS="$LLVM_LDFLAGS $LLVM_LIBS -lstdc++"
1869
1870    AC_SUBST(LLVM_CXXFLAGS)
1871    AC_SUBST(LLVM_LIBS)
1872    AC_SUBST(LLVM_LDFLAGS)
1873    AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
1874 fi
1875
1876 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
1877
1878 TARGET="unknown"
1879 ACCESS_UNALIGNED="yes"
1880
1881 JIT_SUPPORTED=no
1882 INTERP_SUPPORTED=no
1883 LIBC="libc.so.6"
1884 INTL="libc.so.6"
1885 SQLITE="libsqlite.so.0"
1886 SQLITE3="libsqlite3.so.0"
1887 X11="libX11.so"
1888
1889 sizeof_register="SIZEOF_VOID_P"
1890
1891 jit_wanted=false
1892 interp_wanted=false
1893 case "$host" in
1894 #       mips-sgi-irix5.* | mips-sgi-irix6.*)
1895 #               TARGET=MIPS;
1896 #               ACCESS_UNALIGNED="no"
1897 #               ;;
1898         mips*)
1899                 TARGET=MIPS;
1900                 arch_target=mips;
1901                 ACCESS_UNALIGNED="no"
1902                 JIT_SUPPORTED=yes
1903                 jit_wanted=true
1904
1905                 AC_MSG_CHECKING(for mips n32)
1906                 AC_TRY_COMPILE([], [
1907                 void main () {
1908                 #if _MIPS_SIM != _ABIN32
1909                 #error Not mips n32
1910                 #endif
1911                 }
1912                 ],[
1913                 AC_MSG_RESULT(yes)
1914                 sizeof_register=8
1915                 ],[
1916                 AC_MSG_RESULT(no)
1917                 ])
1918                 ;;
1919         i*86-*-*)
1920                 TARGET=X86;
1921                 arch_target=x86;
1922                 JIT_SUPPORTED=yes
1923                 jit_wanted=true
1924                 case $host_os in
1925                   solaris*)
1926                         LIBC="libc.so"
1927                         INTL="libintl.so"
1928                         if test "x$ac_cv_sizeof_void_p" = "x8"; then
1929                                 TARGET=AMD64
1930                                 arch_target=amd64
1931                         fi
1932
1933                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
1934                         # int astruct __attribute__ ((visibility ("hidden")));
1935                         # void foo ()
1936                         # {
1937                         #       void *p = &astruct;
1938                         # }
1939                         # gcc -fPIC --shared -o libfoo.so foo.c
1940                         # yields:
1941                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
1942                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
1943                         have_visibility_hidden=no
1944
1945                 esac
1946                 ;;
1947         x86_64-*-* | amd64-*-*)
1948                 TARGET=AMD64;
1949                 arch_target=amd64;
1950                 JIT_SUPPORTED=yes
1951                 jit_wanted=true
1952                 ;;
1953         ia64-*-*)
1954                 TARGET=IA64
1955                 arch_target=ia64
1956                 ACCESS_UNALIGNED="no"
1957                 JIT_SUPPORTED=yes
1958                 jit_wanted=true
1959                 LIBC="libc.so.6.1"
1960                 INTL="libc.so.6.1"
1961                 AC_CHECK_LIB(unwind, _U_dyn_register, [], [AC_MSG_ERROR(library libunwind not found)])
1962                 libmono_ldflags="-lunwind"
1963                 ;;
1964         sparc*-*-*)
1965                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
1966                    TARGET=SPARC64
1967                 else
1968                         TARGET=SPARC
1969                 fi
1970                 arch_target=sparc;
1971                 JIT_SUPPORTED=yes
1972                 ACCESS_UNALIGNED="no"
1973                 case $host_os in
1974                   linux*) ;;
1975                   *)
1976                         LIBC="libc.so"
1977                         INTL="libintl.so"
1978                 esac
1979                 jit_wanted=true
1980                 if test x"$GCC" = xyes; then
1981                         # We don't support v8 cpus
1982                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
1983                 fi
1984                 if test x"$AR" = xfalse; then
1985                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
1986                 fi
1987                 ;;
1988        alpha*-*-linux* | alpha*-*-osf*)
1989                 TARGET=ALPHA;
1990                 ACCESS_UNALIGNED="no"
1991                 JIT_SUPPORTED=yes
1992                 jit_wanted=true
1993                 arch_target=alpha;
1994                 CFLAGS="$CFLAGS -mieee -O0"
1995                 case $host_os in
1996                   linux*)
1997                         LIBC="libc.so.6.1"
1998                         INTL="libc.so.6.1"
1999                 esac
2000                ;;
2001         *-*-mingw*|*-*-cygwin*)
2002                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
2003                 have_visibility_hidden=no
2004                 INTL="intl"
2005                 ;;
2006         hppa2.0w-hp-hpux11.00 | hppa64-hp-hpux11.00)
2007                 TARGET=HPPA;
2008                 arch_target=hppa; 
2009                 LIBC="libc.sl"
2010                 ACCESS_UNALIGNED="no"
2011                 INTERP_SUPPORTED=yes
2012                 interp_wanted=true
2013                 ;;
2014         hppa*linux*)
2015                 TARGET=HPPA;
2016                 AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
2017                 arch_target=hppa; 
2018                 ACCESS_UNALIGNED="no"
2019                 JIT_SUPPORTED=yes
2020                 jit_wanted=true
2021                 ;;
2022         macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
2023         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* )
2024                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
2025                         TARGET=POWERPC64;
2026                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
2027                         CFLAGS="$CFLAGS -mminimal-toc"
2028                 else
2029                         TARGET=POWERPC;
2030                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
2031                 fi
2032                 AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
2033                 arch_target=ppc;
2034                 JIT_SUPPORTED=yes
2035                 jit_wanted=true
2036                 ;;
2037         arm*-darwin*)
2038                 TARGET=ARM;
2039                 arch_target=arm;
2040                 ACCESS_UNALIGNED="no"
2041                 JIT_SUPPORTED=yes
2042                 CPPFLAGS="$CPPFLAGS -DARM_FPU_NONE=1"
2043                 jit_wanted=true
2044                 ;;
2045         arm*-linux*)
2046                 TARGET=ARM;
2047                 arch_target=arm;
2048                 ACCESS_UNALIGNED="no"
2049                 JIT_SUPPORTED=yes
2050                 jit_wanted=true
2051                 ;;
2052         s390-*-linux*)
2053                 TARGET=S390;
2054                 AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
2055                 arch_target=s390;
2056                 ACCESS_UNALIGNED="no"
2057                 JIT_SUPPORTED=yes
2058                 jit_wanted=true
2059                 # Required CFLAGS for s390[x].  USE_STRING_INLINES is automatic with gcc 4.1
2060                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
2061                 ;;
2062         s390x-*-linux*)
2063                 TARGET=S390x;
2064                 AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
2065                 arch_target=s390x;
2066                 ACCESS_UNALIGNED="no"
2067                 JIT_SUPPORTED=yes
2068                 jit_wanted=true
2069                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
2070                 ;;
2071 esac
2072
2073 if test "x$host" != "x$target"; then
2074    case "$target" in
2075    powerpc64-ps3-linux-gnu)
2076                 TARGET=POWERPC64
2077                 arch_target=powerpc64
2078                 AC_DEFINE(TARGET_PS3, 1, [...])
2079                 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
2080                 # It would be better to just use TARGET_POWERPC64, but lots of code already
2081                 # uses this define
2082                 AC_DEFINE(__mono_ppc64__, 1, [...])
2083                 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
2084                 sizeof_register=8
2085                 target_byte_order=G_BIG_ENDIAN
2086                 ;;
2087
2088    powerpc64-xbox360-linux-gnu)
2089                 TARGET=POWERPC64
2090                 arch_target=powerpc64
2091                 AC_DEFINE(TARGET_XBOX360, 1, [...])
2092                 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
2093                 # It would be better to just use TARGET_POWERPC64, but lots of code already
2094                 # uses this define
2095                 sizeof_register=8
2096                 target_byte_order=G_BIG_ENDIAN
2097                 ;;
2098         *)
2099                 AC_MSG_ERROR([Cross compiling is only supported for targets matching 'powerpc64-{ps3,xbox360}-linux-gnu'])
2100         esac
2101 fi
2102
2103 # FIXME: Define the others as well
2104 case "$TARGET" in
2105 X86)
2106         AC_DEFINE(TARGET_X86, 1, [...])
2107         ;;
2108 AMD64)
2109         AC_DEFINE(TARGET_AMD64, 1, [...])
2110         ;;
2111 ARM)
2112         AC_DEFINE(TARGET_ARM, 1, [...])
2113         ;;
2114 POWERPC)
2115         AC_DEFINE(TARGET_POWERPC, 1, [...])
2116         ;;
2117 POWERPC64)
2118         AC_DEFINE(TARGET_POWERPC, 1, [...])
2119         AC_DEFINE(TARGET_POWERPC64, 1, [...])
2120         ;;
2121 esac
2122
2123 if test "x$sizeof_register" = "x4"; then
2124    AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
2125 elif test "x$sizeof_register" = "x8"; then
2126    AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
2127 else
2128    AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
2129 fi
2130
2131 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
2132    AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
2133 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
2134    AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
2135 else
2136    AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
2137 fi
2138
2139 if test "x$have_visibility_hidden" = "xyes"; then
2140    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
2141 fi
2142
2143 if test "x$have_deprecated" = "xyes"; then
2144    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
2145 fi
2146
2147 AC_ARG_WITH(jit, [  --with-jit=yes,no              If you want to build scripts that default to the JIT (defaults to no)],[
2148         if test x$withval = xyes; then
2149            jit_wanted=true
2150         else
2151            jit_wanted=false
2152         fi
2153 ])
2154
2155 AC_ARG_WITH(interp, [  --with-interp=yes,no           If you want to build scripts that default to the interpreter (defaults to no)],[
2156         if test x$withval = xyes; then
2157            interp_wanted=true
2158         else
2159            interp_wanted=false
2160         fi
2161 ])
2162
2163 USEJIT=false
2164 if test x$JIT_SUPPORTED = xyes; then
2165    if $jit_wanted; then
2166       USEJIT=true
2167       jit_status="Building and using the JIT"
2168    else
2169       if $interp_wanted; then
2170          jit_status="Building the JIT, defaulting to the interpreter"
2171       else
2172          AC_ERROR(No JIT or interpreter support available or selected.)
2173       fi
2174    fi
2175 else
2176    if test x$interp_wanted = xtrue; then
2177       jit_status="interpreter"
2178    else
2179       AC_ERROR(No JIT or interpreter support available or selected.)
2180    fi
2181 fi
2182
2183 AM_CONDITIONAL(USE_JIT, test x$USEJIT = xtrue)
2184
2185 libsuffix=".so"
2186
2187 case "$host" in
2188      *-*-darwin*)
2189         libsuffix=".dylib"
2190         LIBC="libc.dylib"
2191         INTL="libintl.dylib"
2192         SQLITE="libsqlite.0.dylib"
2193         SQLITE3="libsqlite3.0.dylib"
2194         X11="libX11.dylib"
2195         ;;
2196      *-*-*netbsd*)
2197         LIBC="libc.so.12"
2198         INTL="libintl.so.0"
2199         ;;
2200     *-*-*freebsd*)
2201         LIBC="libc.so"
2202         INTL="libintl.so"
2203         ;;
2204     *-*-*openbsd*)
2205         LIBC="libc.so"
2206         INTL="libintl.so"
2207         ;;
2208     *-*-*linux*)
2209         AC_PATH_X
2210         AC_MSG_CHECKING(for the soname of libX11.so)
2211         for i in $x_libraries /usr/lib /usr/lib64; do
2212                 for r in 4 5 6; do
2213                         if test -f $i/libX11.so.$r; then
2214                                 X11=libX11.so.$r
2215                                 AC_MSG_RESULT($X11)
2216                         fi
2217                 done
2218         done
2219         
2220         if test "x$X11" = "xlibX11.so"; then
2221                 AC_MSG_WARN([Could not find X development libs. Do you have the -devel package installed? WinForms may not work...]);
2222         fi
2223         ;;
2224 esac
2225
2226
2227 AC_SUBST(libsuffix)
2228
2229 AC_CHECK_HEADERS(valgrind/memcheck.h)
2230
2231 if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
2232         if test "x$with_tls" = "x__thread"; then
2233                 #
2234                 # On some linux distributions, TLS works in executables, but linking 
2235                 # against a shared library containing TLS fails with:
2236                 # undefined reference to `__tls_get_addr'
2237                 #
2238                 rm -f conftest.c conftest.so conftest
2239                 echo "static __thread int foo; void main () { foo = 5; }" > conftest.c
2240                 $CC -fPIC --shared -o conftest.so conftest.c > /dev/null 2>&1
2241                 $CC -o conftest conftest.so > /dev/null 2>&1
2242                 if test ! -f conftest; then
2243                    AC_MSG_WARN([Disabling usage of __thread.]);
2244                    with_tls=pthread
2245                 fi
2246                 rm -f conftest.c conftest.so conftest
2247         fi
2248 fi
2249
2250 mono_debugger_supported=no
2251 if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xALPHA"; then
2252         if test x$use_included_gc = xyes; then
2253                 case "$host" in
2254                 *-*-*linux*)
2255                         mono_debugger_supported=yes
2256                         ;;
2257                 *86-apple-darwin*)
2258                         mono_debugger_supported=yes
2259                         ;;              
2260                 esac
2261         fi
2262 fi
2263
2264 AC_MSG_CHECKING(if the Mono Debugger is supported on this platform)
2265 if test "x$mono_debugger_supported" = "xyes"; then
2266         AC_DEFINE(MONO_DEBUGGER_SUPPORTED,1,[The Mono Debugger is supported on this platform])
2267 fi
2268 AC_MSG_RESULT($mono_debugger_supported)
2269 AM_CONDITIONAL(MONO_DEBUGGER_SUPPORTED, test x$mono_debugger_supported = xyes)
2270
2271 if test "x$with_tls" = "x__thread"; then
2272         AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
2273         # Pass the information to libgc
2274         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
2275         AC_MSG_CHECKING(if the tls_model attribute is supported)
2276         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
2277                 ], [
2278                         AC_MSG_RESULT(yes)
2279                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tld_model available])
2280                 ], [
2281                         AC_MSG_RESULT(no)
2282         ])
2283 fi
2284
2285 if test ${TARGET} = ARM && test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
2286         dnl ******************************************
2287         dnl *** Check to see what FPU is available ***
2288         dnl ******************************************
2289         AC_MSG_CHECKING(which FPU to use)
2290
2291         AC_TRY_COMPILE([], [
2292                 __asm__ ("ldfd f0, [r0]");
2293                 ], fpu=FPA, fpu=NONE)
2294
2295         AC_MSG_RESULT($fpu)
2296         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
2297         unset fpu
2298 fi
2299
2300 if test ${TARGET} = unknown; then
2301         CPPFLAGS="$CPPFLAGS -DNO_PORT"
2302         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
2303 fi
2304
2305 if test ${ACCESS_UNALIGNED} = no; then
2306         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
2307 fi
2308
2309 case "x$gc" in
2310         xincluded)
2311                 # Pass CPPFLAGS to libgc configure
2312                 # We should use a separate variable for this to avoid passing useless and
2313                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
2314                 # This should be executed late so we pick up the final version of CPPFLAGS
2315                 # The problem with this approach, is that during a reconfigure, the main
2316                 # configure scripts gets invoked with these arguments, so we use separate
2317                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
2318                 LIBGC_CPPFLAGS=$CPPFLAGS
2319                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
2320                         LIBGC_CPPFLAGS=`echo $LIBGC_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
2321                 fi
2322                 ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$LIBGC_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
2323                 AC_CONFIG_SUBDIRS(libgc)
2324                 ;;
2325 esac
2326
2327 #AC_ARG_WITH(profile2,  [  --with-profile2=yes,no          If you want to install the 2.0 FX (defaults to yes)],                 [], [with_profile2=yes])
2328 AC_ARG_WITH(profile4,  [  --with-profile4=yes,no          If you want to install the 4.0 FX (defaults to no)],                  [], [with_profile4=no])
2329 AC_ARG_WITH(moonlight, [  --with-moonlight=yes,no         If you want to build the Moonlight 2.1 assemblies (defaults to yes)], [], [with_moonlight=yes])
2330 AC_ARG_WITH(monotouch, [  --with-monotouch=yes,no         If you want to build the raw MonoTouch 2.1 assemblies (defaults to no)], [], [with_monotouch=no])
2331
2332 OPROFILE=no
2333 AC_ARG_WITH(oprofile,[  --with-oprofile=no,<oprofile install dir>   Enable oprofile support (defaults to no)],[
2334         if test x$with_oprofile != xno; then
2335             oprofile_include=$with_oprofile/include
2336             if test ! -f $oprofile_include/opagent.h; then
2337                   AC_MSG_ERROR([oprofile include file not found at $oprofile_include/opagent.h])
2338                 fi
2339             OPROFILE=yes
2340                 OPROFILE_CFLAGS="-I$oprofile_include"
2341             OPROFILE_LIBS="-L$with_oprofile/lib/oprofile -lopagent"
2342             AC_DEFINE(HAVE_OPROFILE,1,[Have oprofile support])
2343         fi
2344 ])
2345
2346 MALLOC_MEMPOOLS=no
2347 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
2348         if test x$with_malloc_mempools = xyes; then
2349                 MALLOC_MEMPOOLS=yes
2350                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
2351         fi
2352 ])
2353
2354
2355 DISABLE_MCS_DOCS=no
2356 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
2357         if test x$with_mcs_docs != xyes; then
2358                 DISABLE_MCS_DOCS=yes
2359         fi
2360 ])
2361
2362 dnl
2363 dnl Consistency settings
2364 dnl
2365 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
2366    DISABLE_MCS_DOCS=yes
2367    docs_dir=""
2368 else
2369    docs_dir=docs
2370 fi
2371 AC_SUBST(docs_dir)
2372
2373 AM_CONDITIONAL(HAVE_OPROFILE, test x$OPROFILE = xyes)
2374 AC_SUBST(OPROFILE_CFLAGS)
2375 AC_SUBST(OPROFILE_LIBS)
2376
2377 libmono_ldflags="$libmono_ldflags $LIBS"
2378
2379 AM_CONDITIONAL(INSTALL_2_1, [test "x$with_moonlight" = xyes])
2380 AM_CONDITIONAL(INSTALL_4_0, [test "x$with_profile4" = xyes])
2381 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" = xyes])
2382
2383 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
2384 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
2385 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
2386 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
2387 AM_CONDITIONAL(X86, test x$TARGET = xX86)
2388 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
2389 AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
2390 AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
2391 AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
2392 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
2393 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
2394 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
2395 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
2396 AM_CONDITIONAL(S390, test x$TARGET = xS390)
2397 AM_CONDITIONAL(S390x, test x$TARGET = xS390x)
2398 AM_CONDITIONAL(HPPA, test x$TARGET = xHPPA)
2399
2400 AM_CONDITIONAL(JIT_SUPPORTED, test x$JIT_SUPPORTED = xyes)
2401 AM_CONDITIONAL(INTERP_SUPPORTED, test x$interp_wanted = xtrue)
2402 AM_CONDITIONAL(INCLUDED_LIBGC, test x$gc = xincluded)
2403
2404 AC_SUBST(LIBC)
2405 AC_SUBST(INTL)
2406 AC_SUBST(SQLITE)
2407 AC_SUBST(SQLITE3)
2408 AC_SUBST(X11)
2409 AC_DEFINE_UNQUOTED(ARCHITECTURE,"$arch_target",[The architecture this is running on])
2410 AC_SUBST(arch_target)
2411 AC_SUBST(CFLAGS)
2412 AC_SUBST(CPPFLAGS)
2413 AC_SUBST(LDFLAGS)
2414
2415 mono_build_root=`pwd`
2416 AC_SUBST(mono_build_root)
2417
2418 if test x$USEJIT = xtrue; then
2419   mono_runtime=mono/mini/mono
2420 else
2421   mono_runtime=mono/interpreter/mint
2422 fi
2423 AC_SUBST(mono_runtime)
2424
2425 mono_cfg_root=$mono_build_root/runtime
2426 if test x$platform_win32 = xyes; then
2427   if test "x$cross_compiling" = "xno"; then
2428     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
2429   else
2430     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\\'`\\etc
2431   fi
2432 else
2433   mono_cfg_dir=$mono_cfg_root/etc
2434 fi
2435 AC_SUBST(mono_cfg_dir)
2436
2437 AC_CONFIG_FILES([po/mcs/Makefile.in])
2438
2439 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
2440 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
2441
2442 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
2443 [   depth=../../../..
2444     case $srcdir in
2445     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
2446     .) reldir=$depth ;;
2447     *) reldir=$depth/$srcdir ;;
2448     esac
2449     $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
2450     cd runtime/etc/mono/1.0
2451     rm -f machine.config
2452     $LN_S $reldir/data/net_1_1/machine.config machine.config
2453     cd $depth
2454 ],[LN_S='$LN_S'])
2455
2456 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
2457 [   depth=../../../..
2458     case $srcdir in
2459     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
2460     .) reldir=$depth ;;
2461     *) reldir=$depth/$srcdir ;;
2462     esac
2463     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
2464     cd runtime/etc/mono/2.0
2465     rm -f machine.config
2466     $LN_S $reldir/data/net_2_0/machine.config machine.config
2467     cd $depth
2468 ],[LN_S='$LN_S'])
2469
2470 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
2471 [   depth=../../../..
2472     case $srcdir in
2473     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
2474     .) reldir=$depth ;;
2475     *) reldir=$depth/$srcdir ;;
2476     esac
2477     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
2478     cd runtime/etc/mono/2.0
2479     rm -f web.config
2480     $LN_S $reldir/data/net_2_0/web.config web.config
2481     cd $depth
2482 ],[LN_S='$LN_S'])
2483
2484 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
2485 [   depth=../../..
2486     case $srcdir in
2487     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
2488     .) reldir=$depth ;;
2489     *) reldir=$depth/$srcdir ;;
2490     esac
2491     $ac_aux_dir/install-sh -d runtime/etc/mono/
2492     cd runtime/etc/mono/
2493     rm -f browscap.ini
2494     $LN_S $reldir/data/browscap.ini browscap.ini
2495     cd $depth
2496 ],[LN_S='$LN_S'])
2497
2498 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
2499 [   depth=../../../../..
2500     case $srcdir in
2501     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
2502     .) reldir=$depth ;;
2503     *) reldir=$depth/$srcdir ;;
2504     esac
2505     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
2506     cd runtime/etc/mono/2.0/Browsers
2507     rm -f Compat.browser
2508     $LN_S $reldir/data/net_2_0/Browsers/Compat.browser Compat.browser
2509     cd $depth
2510 ],[LN_S='$LN_S'])
2511
2512 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
2513 [   depth=../../../..
2514     case $srcdir in
2515     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
2516     .) reldir=$depth ;;
2517     *) reldir=$depth/$srcdir ;;
2518     esac
2519     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
2520     cd runtime/etc/mono/4.0
2521     rm -f machine.config
2522     $LN_S $reldir/data/net_4_0/machine.config machine.config
2523     cd $depth
2524 ],[LN_S='$LN_S'])
2525
2526 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
2527 [   depth=../../../..
2528     case $srcdir in
2529     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
2530     .) reldir=$depth ;;
2531     *) reldir=$depth/$srcdir ;;
2532     esac
2533     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
2534     cd runtime/etc/mono/4.0
2535     rm -f web.config
2536     $LN_S $reldir/data/net_4_0/web.config web.config
2537     cd $depth
2538 ],[LN_S='$LN_S'])
2539
2540 if test x$enable_quiet_build = xyes; then
2541    AC_CONFIG_COMMANDS([quiet], [for i in `find mono libgc support -name Makefile.in | sed -e 's/Makefile.in/Makefile/g'`; do if test -f $i; then $srcdir/scripts/patch-quiet.sh $i; fi; done], [shell=$SHELL])
2542    AC_CONFIG_COMMANDS([quiet-libtool], [sed -e 's/$echo "copying selected/$show "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
2543 fi
2544
2545 AC_OUTPUT([
2546 Makefile
2547 mono-core.spec
2548 mono-uninstalled.pc
2549 scripts/mono-find-provides
2550 scripts/mono-find-requires
2551 mono/Makefile
2552 mono/utils/Makefile
2553 mono/metadata/Makefile
2554 mono/dis/Makefile
2555 mono/cil/Makefile
2556 mono/arch/Makefile
2557 mono/arch/x86/Makefile
2558 mono/arch/amd64/Makefile
2559 mono/arch/hppa/Makefile
2560 mono/arch/ppc/Makefile
2561 mono/arch/sparc/Makefile
2562 mono/arch/s390/Makefile
2563 mono/arch/s390x/Makefile
2564 mono/arch/arm/Makefile
2565 mono/arch/alpha/Makefile
2566 mono/arch/ia64/Makefile
2567 mono/arch/mips/Makefile
2568 mono/interpreter/Makefile
2569 mono/tests/Makefile
2570 mono/tests/tests-config
2571 mono/tests/assemblyresolve/Makefile
2572 mono/tests/cas/Makefile
2573 mono/tests/cas/assembly/Makefile
2574 mono/tests/cas/demand/Makefile
2575 mono/tests/cas/inheritance/Makefile
2576 mono/tests/cas/linkdemand/Makefile
2577 mono/tests/cas/threads/Makefile
2578 mono/benchmark/Makefile
2579 mono/monograph/Makefile
2580 mono/io-layer/Makefile
2581 mono/mini/Makefile
2582 mono/profiler/Makefile
2583 ikvm-native/Makefile
2584 scripts/Makefile
2585 man/Makefile
2586 web/Makefile
2587 docs/Makefile
2588 data/Makefile
2589 data/net_2_0/Makefile
2590 data/net_4_0/Makefile
2591 data/net_2_0/Browsers/Makefile
2592 data/mint.pc
2593 data/mono.pc
2594 data/mono-cairo.pc
2595 data/mono-nunit.pc
2596 data/mono-options.pc
2597 data/mono-lineeditor.pc
2598 data/monodoc.pc
2599 data/mono.web.pc
2600 data/dotnet.pc
2601 data/dotnet35.pc
2602 data/wcf.pc
2603 data/cecil.pc
2604 data/system.web.extensions_1.0.pc
2605 data/system.web.extensions.design_1.0.pc
2606 data/system.web.mvc.pc
2607 samples/Makefile
2608 support/Makefile
2609 data/config
2610 tools/Makefile
2611 tools/locale-builder/Makefile
2612 runtime/Makefile
2613 msvc/Makefile
2614 po/Makefile
2615 ])
2616
2617 if test x$platform_win32 = xyes; then
2618    # Get rid of 'cyg' prefixes in library names
2619    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
2620    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
2621    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
2622    # executable doesn't work...
2623    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
2624 fi
2625
2626 (
2627   case $prefix in
2628   NONE) prefix=$ac_default_prefix ;;
2629   esac
2630   case $exec_prefix in
2631   NONE) exec_prefix='${prefix}' ;;
2632   esac
2633
2634   test -w $srcdir/$mcsdir/build || chmod +w $srcdir/$mcsdir/build
2635
2636   #
2637   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
2638   # any existing config.make.  This allows people to share the same source tree
2639   # with different build directories, one native and one cross
2640   #
2641   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
2642     echo "prefix=$prefix" > $srcdir/$mcsdir/build/config.make
2643     echo "exec_prefix=$exec_prefix" >> $srcdir/$mcsdir/build/config.make
2644     echo "sysconfdir=$sysconfdir" >> $srcdir/$mcsdir/build/config.make
2645     echo 'mono_libdir=${exec_prefix}/lib' >> $srcdir/$mcsdir/build/config.make
2646     echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $srcdir/$mcsdir/build/config.make
2647     echo 'IL_FLAGS = /debug' >> $srcdir/$mcsdir/build/config.make
2648     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $srcdir/$mcsdir/build/config.make
2649     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $srcdir/$mcsdir/build/config.make
2650     case $INSTALL in
2651     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
2652     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
2653     esac
2654
2655     echo "INSTALL = $mcs_INSTALL" >> $srcdir/$mcsdir/build/config.make
2656
2657     export VERSION
2658     [myver=$($AWK 'BEGIN {
2659       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
2660       if(length(vsplit [1]) > 4) {
2661         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
2662       }
2663       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
2664     }')]
2665
2666     echo "MONO_VERSION = $myver" >> $srcdir/$mcsdir/build/config.make
2667   fi
2668
2669   if test x$platform_darwin = xyes; then
2670         echo "PLATFORM = darwin" >> $srcdir/$mcsdir/build/config.make
2671   fi
2672
2673   if test x$TARGET = xAMD64 -a x$platform_win32 = xno -a "x$AOT_SUPPORTED" = "xyes"; then
2674          echo "ENABLE_AOT = 1" >> $srcdir/$mcsdir/build/config.make
2675   fi
2676
2677   # if we have an olive folder, override the default settings
2678   if test -d $olivedir; then
2679
2680     test -w $srcdir/$olivedir/build || chmod +w $srcdir/$olivedir/build
2681
2682     if test x$cross_compiling = xno && test x$enable_olive_build != xno; then
2683       echo "prefix=$prefix" > $srcdir/$olivedir/build/config.make
2684       echo "exec_prefix=$exec_prefix" >> $srcdir/$olivedir/build/config.make
2685       echo 'mono_libdir=${exec_prefix}/lib' >> $srcdir/$olivedir/build/config.make
2686       echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $srcdir/$olivedir/build/config.make
2687       echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $srcdir/$olivedir/build/config.make
2688       echo "MONO_VERSION = $myver" >> $srcdir/$olivedir/build/config.make
2689       if test x$with_moonlight = xyes; then
2690         echo "WITH_MOONLIGHT = yes" >> $srcdir/$olivedir/build/config.make
2691       fi
2692     fi
2693   fi
2694
2695   if test x$DISABLE_MCS_DOCS = xyes; then
2696         echo "DISABLE_MCS_DOCS = yes" >> $srcdir/$mcsdir/build/config.make
2697   fi
2698 )
2699
2700 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
2701
2702 echo "
2703         mcs source:    $mcs_topdir
2704         olive source:  $olive_topdir
2705
2706         GC:            $gc
2707         GLIB:          $with_glib
2708         TLS:           $with_tls
2709         SIGALTSTACK:   $with_sigaltstack
2710         Engine:        $jit_status
2711         Moon Profile:  $with_moonlight
2712         4.0 Alpha:     $with_profile4
2713         MonoTouch:     $with_monotouch
2714         JNI support:   $jdk_headers_found
2715         libgdiplus:    $libgdiplus_msg
2716         zlib:          $zlib_msg
2717         oprofile:      $OPROFILE
2718         BigArrays:     $enable_big_arrays
2719         DTrace:        $enable_dtrace
2720         Parallel Mark: $enable_parallel_mark
2721         LLVM Back End: $enable_llvm
2722         $disabled
2723
2724 "
2725 if test x$with_static_mono = xno -a "x$platform_win32" != "xyes"; then
2726    AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)
2727 fi
2728
2729 if test x$gc = xsgen; then
2730         echo IMPORTANT:
2731         echo IMPORTANT: You have selected an experimental, work-in-progress 
2732         echo IMPORTANT: GC engine.  This GC engine is currently not supported
2733         echo IMPORTANT: and is not yet ready for use.  
2734         echo IMPORTANT:
2735         echo IMPORTANT: There are known problems with it, use at your own risk.
2736 fi
2737
2738 if test x$enable_llvm = xyes; then
2739    echo IMPORTANT:
2740    echo IMPORTANT: The LLVM Back End is experimental and has known problems.
2741    echo IMPORTANT:
2742 fi