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