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