2007-01-25 Radek Doulik <rodo@novell.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(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
1426
1427         dnl *********************************
1428         dnl *** Check for struct ip_mreqn ***
1429         dnl *********************************
1430         AC_MSG_CHECKING(for struct ip_mreqn)
1431         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
1432                 struct ip_mreqn mreq;
1433                 mreq.imr_address.s_addr = 0;
1434         ], [
1435                 # Yes, we have it...
1436                 AC_MSG_RESULT(yes)
1437                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
1438         ], [
1439                 # We'll just have to try and use struct ip_mreq
1440                 AC_MSG_RESULT(no)
1441                 AC_MSG_CHECKING(for struct ip_mreq)
1442                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
1443                         struct ip_mreq mreq;
1444                         mreq.imr_interface.s_addr = 0;
1445                 ], [
1446                         # Yes, we have it...
1447                         AC_MSG_RESULT(yes)
1448                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
1449                 ], [
1450                         # No multicast support
1451                         AC_MSG_RESULT(no)
1452                 ])
1453         ])
1454         AC_CHECK_FUNCS(GetProcessId)
1455 fi
1456
1457 dnl socklen_t check
1458 AC_MSG_CHECKING(for socklen_t)
1459 AC_TRY_COMPILE([
1460 #include <sys/types.h>
1461 #include <sys/socket.h>
1462 ],[
1463   socklen_t foo;
1464 ],[
1465 ac_cv_c_socklen_t=yes
1466         AC_DEFINE(HAVE_SOCKLEN_T)
1467         AC_MSG_RESULT(yes)
1468 ],[
1469         AC_MSG_RESULT(no)
1470 ])
1471
1472 AC_MSG_CHECKING(for array element initalizer support)
1473 AC_TRY_COMPILE([#include <sys/socket.h>], [
1474         const int array[] = {[1] = 2,};
1475 ], [
1476         # Yes, we have it...
1477         AC_MSG_RESULT(yes)
1478         AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
1479 ], [
1480         # We'll have to use signals
1481         AC_MSG_RESULT(no)
1482 ])
1483
1484 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
1485         # Simply calling trunc (0.0) is no good since gcc will optimize the call away
1486         AC_TRY_LINK([#include <math.h>], 
1487         [ static void *p = &trunc; ],
1488         [
1489                 AC_DEFINE(HAVE_TRUNC) 
1490                 AC_MSG_RESULT(yes)
1491                 ac_cv_trunc=yes
1492         ],
1493         AC_MSG_RESULT(no)))
1494
1495 if test "x$ac_cv_truncl" != "xyes"; then
1496    AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL) LIBS="$LIBS -lsunmath"])
1497 fi
1498
1499 dnl ****************************
1500 dnl *** Look for /dev/random ***
1501 dnl ****************************
1502
1503 AC_MSG_CHECKING([if usage of random device is requested])
1504 AC_ARG_ENABLE(dev-random,
1505 [  --disable-dev-random    disable the use of the random device],
1506 try_dev_random=$enableval, try_dev_random=yes)
1507 AC_MSG_RESULT($try_dev_random)
1508
1509 case "{$target}" in
1510     *-openbsd*)
1511     NAME_DEV_RANDOM="/dev/srandom"
1512     ;;
1513
1514 dnl Win32 does not have /dev/random, they have their own method...
1515
1516     *-*-mingw*|*-*-cygwin*)
1517     ac_cv_have_dev_random=no
1518     ;;
1519
1520 dnl Everywhere else, it's /dev/random
1521
1522     *)
1523     NAME_DEV_RANDOM="/dev/random"
1524     ;;
1525 esac
1526
1527 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM")
1528
1529 dnl Now check if the device actually exists
1530
1531 if test "x$try_dev_random" = "xyes"; then
1532     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
1533     [if test -r "$NAME_DEV_RANDOM" ; then
1534         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
1535     if test "x$ac_cv_have_dev_random" = "xyes"; then
1536         AC_DEFINE(HAVE_CRYPT_RNG)
1537     fi
1538 else
1539     AC_MSG_CHECKING(for random device)
1540     ac_cv_have_dev_random=no
1541     AC_MSG_RESULT(has been disabled)
1542 fi
1543
1544 if test "x$platform_win32" = "xyes"; then
1545     AC_DEFINE(HAVE_CRYPT_RNG)
1546 fi
1547
1548 if test "x$ac_cv_have_dev_random" = "xno" \
1549     && test "x$platform_win32" = "xno"; then
1550     AC_MSG_WARN([[
1551 ***
1552 *** A system-provided entropy source was not found on this system.
1553 *** Because of this, the System.Security.Cryptography random number generator
1554 *** will throw a NotImplemented exception.
1555 ***
1556 *** If you are seeing this message, and you know your system DOES have an
1557 *** entropy collection in place, please contact <crichton@gimp.org> and
1558 *** provide information about the system and how to access the random device.
1559 ***
1560 *** Otherwise you can install either egd or prngd and set the environment
1561 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
1562 ***]])
1563 fi
1564  
1565 AC_MSG_CHECKING([if inter-process shared handles are requested])
1566 AC_ARG_ENABLE(shared-handles, [  --disable-shared-handles disable inter-process shared handles], try_shared_handles=$enableval, try_shared_handles=yes)
1567 AC_MSG_RESULT($try_shared_handles)
1568 if test "x$try_shared_handles" != "xyes"; then
1569         AC_DEFINE(DISABLE_SHARED_HANDLES)
1570         AC_SUBST(DISABLE_SHARED_HANDLES)
1571 fi
1572
1573 AC_ARG_ENABLE(nunit-tests, [ --enable-nunit-tests       Run the nunit tests of the class library on 'make check'])
1574 AM_CONDITIONAL(ENABLE_NUNIT_TESTS, [test x$enable_nunit_tests = xyes])
1575
1576 TARGET="unknown"
1577 ACCESS_UNALIGNED="yes"
1578
1579 JIT_SUPPORTED=no
1580 INTERP_SUPPORTED=no
1581 LIBC="libc.so.6"
1582 INTL="libc.so.6"
1583 SQLITE="libsqlite.so.0"
1584 SQLITE3="libsqlite3.so.0"
1585 X11="libX11.so"
1586
1587 jit_wanted=false
1588 interp_wanted=false
1589 case "$host" in
1590 #       mips-sgi-irix5.* | mips-sgi-irix6.*)
1591 #               TARGET=MIPS;
1592 #               ACCESS_UNALIGNED="no"
1593 #               ;;
1594         mips*)
1595                 TARGET=MIPS;
1596                 arch_target=mips;
1597                 ACCESS_UNALIGNED="no"
1598                 JIT_SUPPORTED=yes
1599                 jit_wanted=true
1600                 ;;
1601         i*86-*-*)
1602                 TARGET=X86;
1603                 arch_target=x86;
1604                 JIT_SUPPORTED=yes
1605                 jit_wanted=true
1606                 case $host_os in
1607                   solaris*)
1608                         LIBC="libc.so"
1609                         INTL="libintl.so"
1610
1611                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
1612                         # int astruct __attribute__ ((visibility ("hidden")));
1613                         # void foo ()
1614                         # {
1615                         #       void *p = &astruct;
1616                         # }
1617                         # gcc -fPIC --shared -o libfoo.so foo.c
1618                         # yields:
1619                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
1620                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
1621                         have_visibility_hidden=no
1622
1623                         libmono_ldflags="$libmono_ldflags $LIBS"
1624                 esac
1625                 ;;
1626         x86_64-*-* | amd64-*-*)
1627                 TARGET=AMD64;
1628                 arch_target=amd64;
1629                 JIT_SUPPORTED=yes
1630                 jit_wanted=true
1631                 ;;
1632         ia64-*-*)
1633                 TARGET=IA64
1634                 arch_target=ia64
1635                 ACCESS_UNALIGNED="no"
1636                 JIT_SUPPORTED=yes
1637                 jit_wanted=true
1638                 LIBC="libc.so.6.1"
1639                 INTL="libc.so.6.1"
1640                 AC_CHECK_LIB(unwind, _U_dyn_register, [], [AC_MSG_ERROR(library libunwind not found)])
1641                 libmono_ldflags="-lunwind"
1642                 ;;
1643         sparc*-*-*)
1644                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
1645                    TARGET=SPARC64
1646                 else
1647                         TARGET=SPARC
1648                 fi
1649                 arch_target=sparc;
1650                 JIT_SUPPORTED=yes
1651                 ACCESS_UNALIGNED="no"
1652                 case $host_os in
1653                   linux*) ;;
1654                   *)
1655                         LIBC="libc.so"
1656                         INTL="libintl.so"
1657                         libmono_ldflags="$libmono_ldflags $LIBS"
1658                 esac
1659                 jit_wanted=true
1660                 if test x"$GCC" = xyes; then
1661                         # We don't support v8 cpus
1662                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
1663                 fi
1664                 if test x"$AR" = xfalse; then
1665                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
1666                 fi
1667                 ;;
1668        alpha*-*-linux* | alpha*-*-osf*)
1669                 TARGET=ALPHA;
1670                 ACCESS_UNALIGNED="no"
1671                 JIT_SUPPORTED=yes
1672                 jit_wanted=true
1673                 arch_target=alpha;
1674                 CFLAGS="$CFLAGS -mieee -O0"
1675                 case $host_os in
1676                   linux*)
1677                         LIBC="libc.so.6.1"
1678                         INTL="libc.so.6.1"
1679                 esac
1680                ;;
1681         *-*-mingw*|*-*-cygwin*)
1682                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
1683                 have_visibility_hidden=no
1684                 INTL="intl"
1685                 ;;
1686         hppa2.0w-hp-hpux11.00 | hppa64-hp-hpux11.00)
1687                 TARGET=HPPA;
1688                 arch_target=hppa; 
1689                 LIBC="libc.sl"
1690                 ACCESS_UNALIGNED="no"
1691                 INTERP_SUPPORTED=yes
1692                 interp_wanted=true
1693                 ;;
1694         hppa*linux*)
1695                 TARGET=HPPA;
1696                 arch_target=hppa; 
1697                 ACCESS_UNALIGNED="no"
1698                 INTERP_SUPPORTED=yes
1699                 interp_wanted=true
1700                 ;;
1701         macppc-*-openbsd* | powerpc-*-linux* | powerpc-*-openbsd* | \
1702         powerpc-*-sysv* | powerpc-*-darwin*)
1703                 TARGET=POWERPC;
1704                 AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
1705                 arch_target=ppc;
1706                 JIT_SUPPORTED=yes
1707                 jit_wanted=true
1708                 ;;
1709         arm*-linux*)
1710                 TARGET=ARM;
1711                 arch_target=arm;
1712                 ACCESS_UNALIGNED="no"
1713                 JIT_SUPPORTED=yes
1714                 jit_wanted=true
1715                 ;;
1716         s390-*-linux*)
1717                 TARGET=S390;
1718                 AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
1719                 arch_target=s390;
1720                 ACCESS_UNALIGNED="no"
1721                 JIT_SUPPORTED=yes
1722                 jit_wanted=true
1723                 # Required CFLAGS for s390[x].  USE_STRING_INLINES is automatic with gcc 4.1
1724                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
1725                 ;;
1726         s390x-*-linux*)
1727                 TARGET=S390x;
1728                 AC_DEFINE(MONO_ARCH_REGPARMS,1,[Architecture uses registers for Parameters])
1729                 arch_target=s390x;
1730                 ACCESS_UNALIGNED="no"
1731                 JIT_SUPPORTED=yes
1732                 jit_wanted=true
1733                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
1734                 ;;
1735 esac
1736
1737 if test "x$have_visibility_hidden" = "xyes"; then
1738    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
1739 fi
1740
1741 AC_ARG_WITH(jit, [  --with-jit=yes,no       If you want to build scripts that default to the JIT],[
1742         if test x$withval = xyes; then
1743            jit_wanted=true
1744         else
1745            jit_wanted=false
1746         fi
1747 ])
1748
1749 AC_ARG_WITH(interp, [  --with-interp=yes,no    If you want to build scripts that default to the interpreter],[
1750         if test x$withval = xyes; then
1751            interp_wanted=true
1752         else
1753            interp_wanted=false
1754         fi
1755 ])
1756
1757 USEJIT=false
1758 if test x$JIT_SUPPORTED = xyes; then
1759    if $jit_wanted; then
1760       USEJIT=true
1761       jit_status="Building and using the JIT"
1762    else
1763       if $interp_wanted; then
1764          jit_status="Building the JIT, defaulting to the interpreter"
1765       else
1766          AC_ERROR(No JIT or interpreter support available or selected.)
1767       fi
1768    fi
1769 else
1770    if test x$interp_wanted = xtrue; then
1771       jit_status="interpreter"
1772    else
1773       AC_ERROR(No JIT or interpreter support available or selected.)
1774    fi
1775 fi
1776
1777 AM_CONDITIONAL(USE_JIT, test x$USEJIT = xtrue)
1778
1779 libsuffix=".so"
1780
1781 case "$host" in
1782      *-*-darwin*)
1783         libsuffix=".dylib"
1784         LIBC="libc.dylib"
1785         INTL="libintl.dylib"
1786         SQLITE="libsqlite.0.dylib"
1787         SQLITE3="libsqlite3.0.dylib"
1788         X11="libX11.dylib"
1789         ;;
1790      *-*-*netbsd*)
1791         LIBC="libc.so.12"
1792         INTL="libintl.so.0"
1793         ;;
1794     *-*-*freebsd*)
1795         LIBC="libc.so"
1796         INTL="libintl.so"
1797         ;;
1798     *-*-*openbsd*)
1799         LIBC="libc.so"
1800         INTL="libintl.so"
1801         ;;
1802     *-*-*linux*)
1803         AC_PATH_X
1804         AC_MSG_CHECKING(for the soname of libX11.so)
1805         for i in $x_libraries /usr/lib /usr/lib64; do
1806                 for r in 4 5 6; do
1807                         if test -f $i/libX11.so.$r; then
1808                                 X11=libX11.so.$r
1809                                 AC_MSG_RESULT($X11)
1810                         fi
1811                 done
1812         done
1813         
1814         if test "x$X11" = "xlibX11.so"; then
1815                 AC_MSG_WARN([Could not find X development libs. Do you have the -devel package installed? WinForms may not work...]);
1816         fi
1817         ;;
1818 esac
1819
1820
1821 AC_SUBST(libsuffix)
1822
1823 if test "x$TARGET" != "xAMD64"; then
1824    # valgrind headers don't compile under x86-64
1825    AC_CHECK_HEADERS(valgrind/memcheck.h)
1826 fi
1827
1828 if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
1829         if test "x$with_tls" = "x__thread"; then
1830                 #
1831                 # On some linux distributions, TLS works in executables, but linking 
1832                 # against a shared library containing TLS fails with:
1833                 # undefined reference to `__tls_get_addr'
1834                 #
1835                 rm -f conftest.c conftest.so conftest
1836                 echo "static __thread int foo; void main () { foo = 5; }" > conftest.c
1837                 $CC -fPIC --shared -o conftest.so conftest.c > /dev/null 2>&1
1838                 $CC -o conftest conftest.so > /dev/null 2>&1
1839                 if test ! -f conftest; then
1840                    AC_MSG_WARN([Disabling usage of __thread.]);
1841                    with_tls=pthread
1842                 fi
1843                 rm -f conftest.c conftest.so conftest
1844         fi
1845 fi
1846
1847 mono_debugger_supported=no
1848 if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xALPHA"; then
1849         if test x$use_included_gc = xyes; then
1850                 case "$host" in
1851                 *-*-*linux*)
1852                         mono_debugger_supported=yes
1853                         ;;
1854                 esac
1855         fi
1856 fi
1857
1858 AC_MSG_CHECKING(if the Mono Debugger is supported on this platform)
1859 if test "x$mono_debugger_supported" = "xyes"; then
1860         AC_DEFINE(MONO_DEBUGGER_SUPPORTED,1,[The Mono Debugger is supported on this platform])
1861 fi
1862 AC_MSG_RESULT($mono_debugger_supported)
1863 AM_CONDITIONAL(MONO_DEBUGGER_SUPPORTED, test x$mono_debugger_supported = xyes)
1864
1865 if test "x$with_tls" = "x__thread"; then
1866         AC_DEFINE(HAVE_KW_THREAD)
1867         # Pass the information to libgc
1868         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
1869         AC_MSG_CHECKING(if the tls_model attribute is supported)
1870         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
1871                 ], [
1872                         AC_MSG_RESULT(yes)
1873                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tld_model available])
1874                 ], [
1875                         AC_MSG_RESULT(no)
1876         ])
1877 fi
1878
1879 if test ${TARGET} = ARM; then
1880         dnl ******************************************
1881         dnl *** Check to see what FPU is available ***
1882         dnl ******************************************
1883         AC_MSG_CHECKING(which FPU to use)
1884
1885         AC_TRY_COMPILE([], [
1886                 __asm__ ("ldfd f0, [r0]");
1887                 ], fpu=FPA, [
1888                         AC_TRY_COMPILE([], [
1889                                 __asm__ ("fldd d0, [r0]");
1890                         ], fpu=VFP, fpu=NONE)
1891                 ])
1892
1893         AC_MSG_RESULT($fpu)
1894         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
1895         unset fpu
1896 fi
1897
1898 if test ${TARGET} = unknown; then
1899         CPPFLAGS="$CPPFLAGS -DNO_PORT"
1900         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
1901 fi
1902
1903 if test ${ACCESS_UNALIGNED} = no; then
1904         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
1905 fi
1906
1907 PREVIEW=yes
1908 AC_ARG_WITH(preview, [ --with-preview=yes,no     If you want to install the 2.0 FX preview],[
1909         if test x$with_preview = xno; then
1910               PREVIEW=no
1911         fi
1912 ])
1913
1914 AM_CONDITIONAL(INSTALL_2_0, test x$PREVIEW = xyes)
1915
1916 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
1917 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
1918 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
1919 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
1920 AM_CONDITIONAL(X86, test x$TARGET = xX86)
1921 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
1922 AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
1923 AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
1924 AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
1925 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
1926 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
1927 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
1928 AM_CONDITIONAL(S390, test x$TARGET = xS390)
1929 AM_CONDITIONAL(S390x, test x$TARGET = xS390x)
1930 AM_CONDITIONAL(HPPA, test x$TARGET = xHPPA)
1931
1932 AM_CONDITIONAL(JIT_SUPPORTED, test x$JIT_SUPPORTED = xyes)
1933 AM_CONDITIONAL(INTERP_SUPPORTED, test x$interp_wanted = xtrue)
1934 AM_CONDITIONAL(INCLUDED_LIBGC, test x$gc = xincluded)
1935
1936 AC_SUBST(LIBC)
1937 AC_SUBST(INTL)
1938 AC_SUBST(SQLITE)
1939 AC_SUBST(SQLITE3)
1940 AC_SUBST(X11)
1941 AC_DEFINE_UNQUOTED(ARCHITECTURE,"$arch_target",[The architecture this is running on])
1942 AC_SUBST(arch_target)
1943 AC_SUBST(CFLAGS)
1944 AC_SUBST(CPPFLAGS)
1945 AC_SUBST(LDFLAGS)
1946
1947 mono_build_root=`pwd`
1948 AC_SUBST(mono_build_root)
1949
1950 if test x$USEJIT = xtrue; then
1951   mono_runtime=mono/mini/mono
1952 else
1953   mono_runtime=mono/interpreter/mint
1954 fi
1955 AC_SUBST(mono_runtime)
1956
1957 mono_cfg_root=$mono_build_root/runtime
1958 if test x$platform_win32 = xyes; then
1959   mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
1960 else
1961   mono_cfg_dir=$mono_cfg_root/etc
1962 fi
1963 AC_SUBST(mono_cfg_dir)
1964
1965 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
1966 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
1967 AC_CONFIG_FILES([runtime/semdel-wrapper],[chmod +x runtime/semdel-wrapper])
1968
1969 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
1970 [   depth=../../../..
1971     case $srcdir in
1972     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
1973     .) reldir=$depth ;;
1974     *) reldir=$depth/$srcdir ;;
1975     esac
1976     $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
1977     cd runtime/etc/mono/1.0
1978     rm -f machine.config
1979     $LN_S $reldir/data/net_1_1/machine.config machine.config
1980     cd $depth
1981 ],[LN_S='$LN_S'])
1982
1983 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
1984 [   depth=../../../..
1985     case $srcdir in
1986     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
1987     .) reldir=$depth ;;
1988     *) reldir=$depth/$srcdir ;;
1989     esac
1990     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
1991     cd runtime/etc/mono/2.0
1992     rm -f machine.config
1993     $LN_S $reldir/data/net_2_0/machine.config machine.config
1994     cd $depth
1995 ],[LN_S='$LN_S'])
1996
1997 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
1998 [   depth=../../../..
1999     case $srcdir in
2000     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
2001     .) reldir=$depth ;;
2002     *) reldir=$depth/$srcdir ;;
2003     esac
2004     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
2005     cd runtime/etc/mono/2.0
2006     rm -f web.config
2007     $LN_S $reldir/data/net_2_0/web.config web.config
2008     cd $depth
2009 ],[LN_S='$LN_S'])
2010
2011 AC_OUTPUT([
2012 Makefile
2013 mint.pc
2014 mono.pc
2015 mono-cairo.pc
2016 dotnet.pc
2017 mono-uninstalled.pc
2018 scripts/mono-nunit.pc
2019 scripts/mono-find-provides
2020 scripts/mono-find-requires
2021 mono/Makefile
2022 mono/utils/Makefile
2023 mono/metadata/Makefile
2024 mono/dis/Makefile
2025 mono/cil/Makefile
2026 mono/arch/Makefile
2027 mono/os/Makefile
2028 mono/arch/x86/Makefile
2029 mono/arch/amd64/Makefile
2030 mono/arch/hppa/Makefile
2031 mono/arch/ppc/Makefile
2032 mono/arch/sparc/Makefile
2033 mono/arch/s390/Makefile
2034 mono/arch/s390x/Makefile
2035 mono/arch/arm/Makefile
2036 mono/arch/alpha/Makefile
2037 mono/arch/ia64/Makefile
2038 mono/arch/mips/Makefile
2039 mono/interpreter/Makefile
2040 mono/tests/Makefile
2041 mono/tests/tests-config
2042 mono/tests/cas/Makefile
2043 mono/tests/cas/assembly/Makefile
2044 mono/tests/cas/demand/Makefile
2045 mono/tests/cas/inheritance/Makefile
2046 mono/tests/cas/linkdemand/Makefile
2047 mono/tests/cas/threads/Makefile
2048 mono/benchmark/Makefile
2049 mono/monoburg/Makefile
2050 mono/monograph/Makefile
2051 mono/io-layer/Makefile
2052 mono/mini/Makefile
2053 mono/profiler/Makefile
2054 ikvm-native/Makefile
2055 scripts/Makefile
2056 man/Makefile
2057 web/Makefile
2058 docs/Makefile
2059 data/Makefile
2060 data/net_1_1/Makefile
2061 data/net_2_0/Makefile
2062 samples/Makefile
2063 support/Makefile
2064 data/config
2065 tools/Makefile
2066 tools/locale-builder/Makefile
2067 runtime/Makefile
2068 ])
2069
2070 if test x$platform_win32 = xyes; then
2071    # Get rid of 'cyg' prefixes in library names
2072    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
2073    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
2074    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
2075    # executable doesn't work...
2076    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
2077 fi
2078
2079 (
2080   case $prefix in
2081   NONE) prefix=$ac_default_prefix ;;
2082   esac
2083   case $exec_prefix in
2084   NONE) exec_prefix='${prefix}' ;;
2085   esac
2086
2087   test -w $srcdir/$mcsdir/build || chmod +w $srcdir/$mcsdir/build
2088
2089   #
2090   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
2091   # any existing config.make.  This allows people to share the same source tree
2092   # with different build directories, one native and one cross
2093   #
2094   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
2095     echo "prefix=$prefix" > $srcdir/$mcsdir/build/config.make
2096     echo "exec_prefix=$exec_prefix" >> $srcdir/$mcsdir/build/config.make
2097     echo 'mono_libdir=${exec_prefix}/lib' >> $srcdir/$mcsdir/build/config.make
2098     echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $srcdir/$mcsdir/build/config.make
2099     echo 'IL_FLAGS = /debug' >> $srcdir/$mcsdir/build/config.make
2100     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $srcdir/$mcsdir/build/config.make
2101     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $srcdir/$mcsdir/build/config.make
2102
2103     case $INSTALL in
2104     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
2105     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
2106     esac
2107
2108     echo "INSTALL = $mcs_INSTALL" >> $srcdir/$mcsdir/build/config.make
2109
2110     export VERSION
2111     [myver=$($AWK 'BEGIN {
2112       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
2113       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
2114     }')]
2115
2116     echo "MONO_VERSION = $myver" >> $srcdir/$mcsdir/build/config.make
2117   fi
2118 )
2119
2120 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
2121
2122 echo "
2123         mcs source:  $mcs_topdir
2124         GC:          $gc
2125         TLS:         $with_tls
2126         SIGALTSTACK: $with_sigaltstack
2127         Engine:      $jit_status
2128         2.0 Alpha:   $PREVIEW
2129         JNI support: $jdk_headers_found
2130         libgdiplus:  $libgdiplus_msg
2131         zlib:        $zlib_msg
2132         $disabled
2133
2134 "
2135 if test x$with_static_mono = xno -a "x$platform_win32" != "xyes"; then
2136    AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexepcted bugs)
2137 fi
2138
2139 if test x$gc = xsgen; then
2140         echo IMPORTANT:
2141         echo IMPORTANT: You have selected an experimental, work-in-progress 
2142         echo IMPORTANT: GC engine.  This GC engine is currently not supported
2143         echo IMPORTANT: and is not yet ready for use.  
2144         echo IMPORTANT:
2145         echo IMPORTANT: There are known problems with it, use at your own risk.
2146 fi