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