Bump API snapshot submodule
[mono-project.git] / configure.ac
blob60563f292b89b28b32659b29a995d53d880a6528
1 # Process this file with autoconf to produce a configure script.
2 #AC_PREREQ([2.62])
4 AC_INIT(mono, [5.15.0],
5         [https://github.com/mono/mono/issues/new])
7 AC_CONFIG_SRCDIR([README.md])
8 AC_CONFIG_MACRO_DIR([m4])
9 AC_CANONICAL_SYSTEM
10 AC_CANONICAL_HOST
12 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
13 # The extra brackets are to foil regex-based scans.
14 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
16 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign subdir-objects]
17                  m4_esyscmd([case `automake --version | head -n 1` in    # parallel-tests is default in automake 1.13+, we need to explicitly enable it
18                              *1.11*|*1.12*) echo parallel-tests;;        # for 1.11 and 1.12 but not below as those versions don't recognize the flag
19                              esac]))                                     # TODO: remove this hack once we require automake 1.11+
21 AC_CONFIG_HEADERS([config.h])
22 AM_MAINTAINER_MODE
24 API_VER=2.0
25 AC_SUBST(API_VER)
27 AC_PROG_LN_S
29 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
31 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
32 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
33 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
35 # This is the version number of the corlib-runtime interface. When
36 # making changes to this interface (by changing the layout
37 # of classes the runtime knows about, changing icall signature or
38 # semantics etc), increment this variable.
40 # This can be reset to 0 when Mono's version number is bumped
41 # since it's part of the corlib version (the prefix '1' in the full
42 # version number is to ensure the number isn't treated as octal in C)
43 MONO_CORLIB_COUNTER=7
44 MONO_CORLIB_VERSION=`printf "1%02d%02d%02d%03d" $MONO_VERSION_MAJOR $MONO_VERSION_MINOR 0 $MONO_CORLIB_COUNTER`
46 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,$MONO_CORLIB_VERSION,[Version of the corlib-runtime interface])
47 AC_SUBST(MONO_CORLIB_VERSION)
49 case $host_os in
50 *cygwin* )
51                  echo "Run configure using ./configure --host=i686-pc-mingw32"
52                  exit 1
53 esac
55 # In case of cygwin, override LN_S, irrespective of what it determines.
56 # The build uses cygwin, but the actual runtime doesn't.
57 case $host_os in
58 *cygwin* ) LN_S='cp -p';;
59 esac
62 # libgc defaults
64 libgc_configure_args=
66 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
67 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
68 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
69 CFLAGS_FOR_LIBGC=$CFLAGS
70 CPPFLAGS_FOR_BTLS=$CPPFLAGS
71 CFLAGS_FOR_BTLS=$CFLAGS
73 # libgc uses some deprecated APIs
74 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
77 # These are the flags that need to be stored in the mono.pc file for 
78 # compiling code that will embed Mono
80 libmono_cflags=""
81 libmono_ldflags=""
82 AC_SUBST(libmono_cflags)
83 AC_SUBST(libmono_ldflags)
85 # Variable to have relocatable .pc files (lib, or lib64)
86 # realpath isn't always available, and requires that all but the tip of the provided
87 # path exists. Fall back to the old behaviour, but realpath allows depth >1
88 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
89 # too deep for the old method to work
90 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
91 AC_SUBST(reloc_libdir)
93 # Set to yes if Unix sockets cannot be created in an anonymous namespace
94 need_link_unlink=no
96 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
97 extra_runtime_ldflags=""
100 # Hack for WASM
101 # Current autotools (v1.15) doesn't have a triplet we can use for wasm so the kludge we do is to
102 # work around it by using a feature flag instead
103 AC_ARG_ENABLE(wasm,[  --enable-wasm    Hack to set the current runtime to target wasm], enable_wasm=$enableval)
105 # Thread configuration inspired by sleepycat's db
106 AC_MSG_CHECKING([host platform characteristics])
108 libgc_threads=no
109 has_dtrace=no
110 parallel_mark=yes
111 ikvm_native=yes
113 host_win32=no
114 target_win32=no
115 platform_android=no
116 platform_tizen=no
117 platform_ios=no
118 host_darwin=no
119 host_linux=no
122 if test "x$enable_wasm" = "xyes"; then
123 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
124 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
125 libdl="-ldl"
126 libgc_threads=pthreads
127 platform_wasm=yes
129 else
131 case "$host" in
132         *-mingw*|*-*-cygwin*)
133                 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
134                 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
135                 host_win32=yes
136                 mono_cv_clang=no
137                 if test "x$cross_compiling" = "xno"; then
138                         if test "x$host" = "x$build" -a "x$host" = "x$target"; then
139                                 target_win32=yes
140                         fi
141                 else
142                         if test "x$host" = "x$target"; then
143                                 target_win32=yes
144                         fi
145                 fi
146                 HOST_CC="gcc"
147                 # Windows Vista or later is required
148                 CPPFLAGS="$CPPFLAGS -DWINVER=0x0600 -D_WIN32_WINNT=0x0600 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
149                 LDFLAGS="$LDFLAGS -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
150                 libmono_cflags="-mms-bitfields -mwindows"
151                 libmono_ldflags="-mms-bitfields -mwindows"
152                 libdl=
153                 libgc_threads=win32
154                 with_sigaltstack=no
155                 with_tls=pthread
156                 with_sgen_default_concurrent=yes
157                 LN_S=cp
158                 # This forces libgc to use the DllMain based thread registration code on win32
159                 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
160                 ;;
161         *-*-*netbsd*)
162                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
163                 libmono_cflags="-D_REENTRANT"
164                 LDFLAGS="$LDFLAGS -pthread"
165                 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
166                 libmono_ldflags="-pthread"
167                 need_link_unlink=yes
168                 libdl="-ldl"
169                 libgc_threads=pthreads
170                 with_sigaltstack=no
171                 use_sigposix=yes
172                 with_sgen_default_concurrent=yes
173                 ;;
174         *-*-kfreebsd*-gnu)
175                 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
176                 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
177                 libmono_ldflags="-lpthread -pthread"
178                 libdl="-ldl"
179                 libgc_threads=pthreads
180                 need_link_unlink=yes
181                 with_sigaltstack=no
182                 use_sigposix=yes
183                 with_sgen_default_concurrent=yes
184                 ;;
185         *-*-*freebsd*)
186                 if test "x$PTHREAD_CFLAGS" = "x"; then
187                         CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
188                         libmono_cflags=
189                 else
190                         CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
191                         libmono_cflags="$PTHREAD_CFLAGS"
192                 fi
193                 if test "x$PTHREAD_LIBS" = "x"; then
194                         LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
195                         libmono_ldflags="-pthread"
196                 else
197                         LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
198                         libmono_ldflags="$PTHREAD_LIBS"
199                 fi
200                 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
201                 need_link_unlink=yes
202                 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
203                 libdl=
204                 libgc_threads=pthreads
205                 use_sigposix=yes
206                 has_dtrace=yes
207                 with_sgen_default_concurrent=yes
208                 ;;
209         *-*-*openbsd*)
210                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
211                 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
212                 if test "x$disable_munmap" != "xyes"; then
213                 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
214                 fi
215                 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
216                 LDFLAGS="$LDFLAGS -pthread"
217                 need_link_unlink=yes
218                 AC_DEFINE(PTHREAD_POINTER_ID)
219                 libdl=
220                 libgc_threads=pthreads
221                 with_tls=pthread
222                 with_sigaltstack=no
223                 use_sigposix=yes
224                 with_sgen_default_concurrent=yes
225                 ;;
226         *-*-linux-android*)
227                 platform_android=yes
228                 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
229                 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
231                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
232                 if test "x$disable_munmap" != "xyes"; then
233                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
234                 fi
235                 libmono_cflags="-D_REENTRANT"
236                 libdl="-ldl"
237                 libgc_threads=pthreads
238                 use_sigposix=yes
240                 with_tls=pthread
241                 with_sigaltstack=no
242                 with_static_mono=no
244                 # Android doesn't support boehm, as it's missing <link.h>
245                 support_boehm=no
246                 with_gc=sgen
248                 # isinf(3) requires -lm; see isinf check below
249                 LDFLAGS="$LDFLAGS -lm"
251                 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
252                 # PAGE_SIZE; breaks mono/io-layer/collection.c
253                 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
254                 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
255                 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
257                 # to bypass the underscore linker check, can't work when cross-compiling
258                 mono_cv_uscore=yes
259                 mono_cv_clang=no
260                 ;;
261         *-*-linux*)
262                 host_linux=yes
263                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
264                 if test "x$disable_munmap" != "xyes"; then
265                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
266                 fi
267                 libmono_cflags="-D_REENTRANT"
268                 libdl="-ldl"
269                 libgc_threads=pthreads
270                 use_sigposix=yes
271                 if test "x$cross_compiling" != "xno"; then
272                         # to bypass the underscore linker check, not
273                         # available during cross-compilation
274                         mono_cv_uscore=no
275                 fi
276                 case "$host" in
277                 *-tizen-linux-*)
278                         platform_tizen=yes
279                         ;;
280                 esac
281                 case "$host" in
282                 aarch64-*)
283                         support_boehm=no
284                         with_gc=sgen
285                         ;;
286                 powerpc*-*-linux*)
287                         # https://bugzilla.novell.com/show_bug.cgi?id=504411
288                         disable_munmap=yes
289                         ;;
290                 esac
291                 with_sgen_default_concurrent=yes
292                 ;;
293         *-*-nacl*)
294                 echo "nacl no longer supported."
295                 exit 1
296                 ;;
297         *-*-hpux*)
298                 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
299                 # +ESdbgasm only valid on bundled cc on RISC
300                 # silently ignored for ia64
301                 if test $GCC != "yes"; then
302                         CFLAGS="$CFLAGS +ESdbgasm"
303                         # Arrange for run-time dereferencing of null
304                         # pointers to produce a SIGSEGV signal.
305                         LDFLAGS="$LDFLAGS -z"
306                 fi
307                 CFLAGS="$CFLAGS +ESdbgasm"
308                 LDFLAGS="$LDFLAGS -z"
309                 libmono_cflags="-D_REENTRANT"
310                 libmono_ldflags="-lpthread"
311                 libgc_threads=pthreads
312                 need_link_unlink=yes
313                 use_sigposix=yes
314                 ;;
315         *-*-solaris*)
316                 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
317                 need_link_unlink=yes
318                 libmono_cflags="-D_REENTRANT"
319                 libgc_threads=pthreads
320                 has_dtrace=yes
321                 use_sigposix=yes
322                 enable_solaris_tar_check=yes
323                 ;;
324         *-*-darwin*)
325                 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
326                 host_darwin=yes
327                 target_mach=yes
328                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
329                 libmono_cflags="-D_THREAD_SAFE"
330                 need_link_unlink=yes
331                 AC_DEFINE(PTHREAD_POINTER_ID)
332                 AC_DEFINE(USE_MACH_SEMA, 1, [...])
333                 libdl=
334                 libgc_threads=pthreads
335                 has_dtrace=yes
336                 if test "x$cross_compiling" = "xyes"; then
337                         has_broken_apple_cpp=yes
338                 fi
339                 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
340                 dnl its gcc defaults to 64-bit mode.  They have also deprecated the usage of ucontext
341                 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
342                 case "$host" in
343                         dnl Snow Leopard and newer config.guess reports as this
344                         i*86-*-darwin*)
345                                 BROKEN_DARWIN_FLAGS="-arch i386 -D_XOPEN_SOURCE"
346                                 BROKEN_DARWIN_CPPFLAGS="-D_XOPEN_SOURCE"
347                                 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
348                                 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
349                                 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
350                                 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
351                                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
352                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
353                                 with_sgen_default_concurrent=yes
354                                 ;;
355                         x*64-*-darwin*)
356                                 with_sgen_default_concurrent=yes
357                                 ;;
358                         arm*-darwin*)
359                                 platform_ios=yes
360                                 has_dtrace=no
361                                 ;;
362                         aarch64*-darwin*)
363                                 platform_ios=yes
364                                 ;;
365                 esac
366                 ;;
367         *-*-haiku*)
368                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
369                 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
370                 libdl=
371                 LIBS="$LIBS -lnetwork -ltextencoding"
372                 need_link_unlink=yes
373                 AC_DEFINE(PTHREAD_POINTER_ID)
374                 dnl Haiku does not support static TLS with __thread
375                 with_tls=pthread
376                 libgc_threads=pthreads
377                 use_sigposix=yes
378                 ;;
379         *-*-aix*|*-*-os400*)
380                 dnl Set up a 64-bit build
381                 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
382                 LDFLAGS="-maix64"
383                 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
384                 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
385                 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
386                 dnl specifiy 64-bit mode for tools.
387                 AR="/usr/bin/ar -X64"
388                 NM="/usr/bin/nm -X64"
389                 dnl SGen is the future (changes to Boehm support code would be
390                 dnl required if you wish to re-enable Boehm)
391                 support_boehm=no
392                 with_gc=sgen
393                 need_link_unlink=yes
394                 use_sigposix=yes
395                 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
396                 with_sigaltstack=no
397                 dnl use pthread TLS, __thread has issues with the compiler flags we use
398                 with_tls=pthread
399                 dnl ppc Linux is the same? test further
400                 disable_munmap=yes
401                 ;;
402         *)
403                 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
404                 libdl="-ldl"
405                 ;;
406 esac
408 # WASM hack
411 AC_MSG_RESULT(ok)
413 if test x$need_link_unlink = xyes; then
414    AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
417 if test x$host_win32 = xyes; then
418    AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
421 if test x$target_win32 = xyes; then
422    AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
425 if test x$host_darwin = xyes; then
426    AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
429 # Defined for all targets/platforms using classic Windows API support.
430 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
431 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
433 AC_SUBST(extra_runtime_ldflags)
434 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
435 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
436 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
437 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
438 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
439 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
440 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
441 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
442 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
444 if test -z "$HOST_DARWIN_TRUE"; then :
445 PLATFORM_AOT_SUFFIX=.dylib
448 if test -z "$HOST_LINUX_TRUE"; then :
449 PLATFORM_AOT_SUFFIX=.so
452 if test -z "$HOST_WIN32_TRUE"; then :
453 PLATFORM_AOT_SUFFIX=.dll
456 AC_SUBST(PLATFORM_AOT_SUFFIX)
458 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
460 AC_CHECK_TOOL(CC, gcc, gcc)
461 AC_PROG_CC
462 AC_CHECK_TOOL(CXX, g++, g++)
463 AC_PROG_CXX
464 AM_PROG_AS
465 AC_PROG_INSTALL
466 AC_PROG_AWK
467 AM_PROG_CC_C_O
468 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
469 : ${CCAS='$(CC)'}
470 # Set ASFLAGS if not already set.
471 : ${CCASFLAGS='$(CFLAGS)'}
472 AC_SUBST(CCAS)
473 AC_SUBST(CCASFLAGS)
475 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
476 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
477 if test "x$CXX" = "xg++"; then
478         if test "x$GXX" != "xyes"; then
479                 # automake/libtool is so broken, it requires g++ even if the c++ sources
480                 # are inside automake conditionals
481                 AC_MSG_ERROR([You need to install g++])
482         fi
485 dnl may require a specific autoconf version
486 dnl AC_PROG_CC_FOR_BUILD
487 dnl CC_FOR_BUILD not automatically detected
488 CC_FOR_BUILD=$CC
489 CFLAGS_FOR_BUILD=$CFLAGS
490 BUILD_EXEEXT=
491 if test "x$cross_compiling" = "xyes"; then
492         CC_FOR_BUILD=cc
493         CFLAGS_FOR_BUILD=
494         BUILD_EXEEXT=""
496 AC_SUBST(CC_FOR_BUILD)
497 AC_SUBST(CFLAGS_FOR_BUILD)
498 AC_SUBST(HOST_CC)
499 AC_SUBST(BUILD_EXEEXT)
501 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
502 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
504 # Set STDC_HEADERS
505 AC_HEADER_STDC
506 AC_LIBTOOL_WIN32_DLL
507 # This causes monodis to not link correctly
508 #AC_DISABLE_FAST_INSTALL
510 #lookup makedev() header
511 AC_HEADER_MAJOR
513 AM_PROG_LIBTOOL
514 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
515 DOLT
517 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
518 AC_SUBST(export_ldflags)
520 # Test whenever ld supports -version-script
521 AC_PROG_LD
522 AC_PROG_LD_GNU
524 AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h sys/prctl.h)
525 AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h sys/inotify.h arpa/inet.h complex.h unwind.h)
526 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
527                   [], [], [#include <stddef.h>
528                   #include <sys/socket.h>
529                   #include <linux/socket.h>])
531 AC_CHECK_HEADERS(sys/user.h, [], [],
533 #ifdef HAVE_SYS_PARAM_H
534 # include <sys/param.h>
535 #endif
538 AC_CHECK_HEADERS(linux/serial.h)
540 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
541 if test x$have_zlib = xyes; then
542    AC_TRY_COMPILE([#include <zlib.h>], [
543    #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
544    #else
545    #error No good zlib found
546    #endif
547    ],[
548         AC_MSG_RESULT(Using system zlib)
549         zlib_msg="system zlib"
550         AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
551    ],[
552         AC_MSG_RESULT(Using embedded zlib)
553         have_zlib=no
554         zlib_msg="bundled zlib"
555    ])
558 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
559 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
561 # for mono/metadata/debug-symfile.c
562 AC_CHECK_HEADERS(elf.h)
564 # for support
565 AC_CHECK_HEADERS(poll.h)
566 AC_CHECK_HEADERS(sys/poll.h)
567 AC_CHECK_HEADERS(sys/wait.h)
568 AC_CHECK_HEADERS(grp.h)
569 AC_CHECK_HEADERS(syslog.h)
570 AC_CHECK_FUNCS(vsyslog)
572 # for mono/dis
573 AC_CHECK_HEADERS(wchar.h)
574 AC_CHECK_HEADERS(ieeefp.h)
575 AC_MSG_CHECKING(for isinf)
576 AC_TRY_LINK([#include <math.h>], [
577         int f = isinf (1.0);
578 ], [
579         AC_MSG_RESULT(yes)
580         AC_DEFINE(HAVE_ISINF, 1, [isinf available])
581 ], [
582         # We'll have to use signals
583         AC_MSG_RESULT(no)
585 # mingw
586 AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
587         AC_TRY_LINK([#include <math.h>], 
588         [ _finite(0.0); ], 
589         AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
590         AC_MSG_RESULT(no)))
592 # for Linux statfs support
593 AC_CHECK_HEADERS(linux/magic.h)
595 # For Android NDK unified headers
596 if test x$platform_android = xyes; then
597         AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
598         AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
600         # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
601         # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
602         # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
603         # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
604         # doesn't contain the required definitions (NDK 14)
605         if test x$have_android_signal_inlines = xyes; then
606                 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
607                 AC_COMPILE_IFELSE([
608                         AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
609                                 int i;
610                                 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
611                                 }
612                         ])],[
613                                 AC_MSG_RESULT(yes)
614                                 android_sigrtminmax_work=yes
615                         ],[
616                                 AC_MSG_RESULT(no)
617                                 android_sigrtminmax_work=no
618                         ]
619                 )
621                 if test x$android_sigrtminmax_work = xno; then
622                         AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
623                 fi
624         fi
626         # Attempt to detect whether we're using Android NDK unified headers
627         AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
628         AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
630         android_unified_headers=no
631         if test x$have_android_api_level = xyes; then
632                 if test x$have_android_versioning = xyes; then
633                         AC_MSG_CHECKING([whether using Android NDK unified headers])
635                         # Both macros are defined only in the NDK unified headers
636                         AC_COMPILE_IFELSE([
637                                 AC_LANG_PROGRAM([
638                                         #include <android/api-level.h>
639                                         #include <android/versioning.h>
640                                 ],[
641                                         #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
642                                         #else
643                                                 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
644                                         #endif
645                                 ])],[
646                                         AC_MSG_RESULT(yes)
647                                         android_unified_headers=yes
648                                 ],[
649                                         AC_MSG_RESULT(no)
650                                         android_unified_headers=no
651                                 ]
652                         )
653                 fi
654         fi
656         if test x$android_unified_headers = xyes; then
657                 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
658         fi
659 fi # Android
661 # not 64 bit clean in cross-compile
662 if test "x$enable_wasm" = "xyes"; then
663 AC_DEFINE(SIZEOF_VOID_P,4)
664 AC_DEFINE(SIZEOF_LONG,4)
665 ac_cv_sizeof_void_p="4"
666 ac_cv_sizeof_long="4"
667 else
668 AC_CHECK_SIZEOF(void *)
669 AC_CHECK_SIZEOF(long)
672 AC_CHECK_SIZEOF(int)
673 AC_CHECK_SIZEOF(long long)
675 AC_CACHE_CHECK([for clang],
676         mono_cv_clang,[
677         AC_TRY_COMPILE([], [
678                 #ifdef __clang__
679                 #else
680                 #error "FAILED"
681                 #endif
682         ],
683         [mono_cv_clang=yes],
684         [mono_cv_clang=no],
685         [])
688 AC_ARG_ENABLE(visibility-hidden,
689 [  --disable-visibility-hidden    disable usage of -fvisiblity=hidden],
690    disable_visibility_hidden=yes, disable_visibility_hidden=no)
692 WARN=''
693 if test x"$GCC" = xyes; then
694         WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes -Wno-format-zero-length'
696                 # We require C99 with some GNU extensions, e.g. `linux` macro
697                 CFLAGS="$CFLAGS -std=gnu99"
699                 # The runtime code does not respect ANSI C strict aliasing rules
700                 CFLAGS="$CFLAGS -fno-strict-aliasing"
702                 # We rely on signed overflow to behave
703                 CFLAGS="$CFLAGS -fwrapv"
705                 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
706                 if test x"$disable_visibility_hidden" = xno; then
707                    # Don't export any symbols by default
708                    SHARED_CFLAGS="-fvisibility=hidden"
709                    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
710                 fi
712                 ORIG_CFLAGS=$CFLAGS
713                 # Check for the normal version, since gcc ignores unknown -Wno options
714                 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
715                 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
716                 AC_TRY_COMPILE([],[
717                 ], [
718                    AC_MSG_RESULT(yes)
719                    CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
720                 ], [
721                    AC_MSG_RESULT(no)
722                    CFLAGS=$ORIG_CFLAGS
723                 ])
725                 if test "x$mono_cv_clang" = "xyes"; then
726                    # https://bugzilla.samba.org/show_bug.cgi?id=8118
727                    WARN="$WARN -Qunused-arguments"
728                    WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
729                    # We rely on zero length arrays in structs
730                    WARN="$WARN -Wno-zero-length-array"
731                 fi
732 else
733         # The Sun Forte compiler complains about inline functions that access static variables
734         # so disable all inlining.
735         case "$host" in
736         *-*-solaris*)
737                 CFLAGS="$CFLAGS -Dinline="
738                 ;;
739         esac
741 CFLAGS="$WARN $CFLAGS -g"
742 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
743 CPPFLAGS="$WARN $CPPFLAGS -g"
745 # Where's the 'mcs' source tree?
746 if test -d $srcdir/mcs; then
747   mcsdir=mcs
748 else
749   mcsdir=../mcs
752 AC_ARG_WITH(mcs-path, [  --with-mcs-path=/path/to/mcs      Specify an alternate mcs source tree],
753         if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
754                 mcsdir=$with_mcs_path
755         fi
758 AC_ARG_WITH(jumptables, [  --with-jumptables=yes,no      enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
761 # A sanity check to catch cases where the package was unpacked
762 # with an ancient tar program (Solaris)
764 AC_ARG_ENABLE(solaris-tar-check,
765 [  --disable-solaris-tar-check    disable solaris tar check],
766    do_solaris_tar_check=no, do_solaris_tar_check=yes)
768 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
769         AC_MSG_CHECKING(integrity of package)
770         if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
771         then
772                 AC_MSG_RESULT(ok)
773         else
774                 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"
775                 AC_MSG_ERROR([$errorm])
776         fi
779 if test "x$with_mcs_path" != "x"; then
780 mcs_topdir=$(cd "$mcsdir" && pwd)
781 mcs_topdir_from_srcdir=$mcs_topdir
782 else
783 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
784 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
787 # Convert mcs_topdir* paths to Windows syntax.
788 if test x$cross_compiling$host_win32 = xnoyes; then
789   mcs_topdir=$(cygpath -m $mcs_topdir)
790   case $mcs_topdir_from_srcdir in
791     /cygdrive/*)
792         mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
793         ;;
794   esac
797 AC_SUBST([mcs_topdir])
798 AC_SUBST([mcs_topdir_from_srcdir])
800 # gettext: prepare the translation directories. 
801 # we do not configure the full gettext, as we consume it dynamically from C#
802 AM_PO_SUBDIRS
804 if test "x$USE_NLS" = "xyes"; then
805    AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
807    if test "x$HAVE_MSGFMT" = "xno"; then
808           AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
809    fi
812 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
814 pkg_config_path=
815 AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir],
816         if test x$with_crosspkgdir = "x"; then
817                 if test -s $PKG_CONFIG_PATH; then
818                         pkg_config_path=$PKG_CONFIG_PATH
819                 fi
820         else
821                 pkg_config_path=$with_crosspkgdir
822                 PKG_CONFIG_PATH=$pkg_config_path
823                 export PKG_CONFIG_PATH
824         fi
827 AC_ARG_ENABLE(ninja,[  --enable-ninja    Enable using ninja where available], enable_ninja=$enableval)
828 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
829 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
831 AC_ARG_ENABLE(werror, [  --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
832 if test x$werror_flag = xyes; then
833         WERROR_CFLAGS="-Werror"
835 AC_SUBST([WERROR_CFLAGS])
836 AC_SUBST([SHARED_CFLAGS])
838 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
839   
840 AC_SUBST(GLIB_CFLAGS)
842 # Enable support for fast thread-local storage
843 # Some systems have broken support, so we allow to disable it.
844 AC_ARG_WITH(tls, [  --with-tls=__thread,pthread    select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
846 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
847 # This does not work on some platforms (bug #55253)
848 AC_ARG_WITH(sigaltstack, [  --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
850 AC_ARG_WITH(static_mono, [  --with-static_mono=yes,no      link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
851 AC_ARG_WITH(shared_mono, [  --with-shared_mono=yes,no      build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
852 # Same as --with-shared_mono=no
853 AC_ARG_ENABLE(libraries, [  --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
855 if test "x$enable_static" = "xno"; then
856    with_static_mono=no
859 if test "x$enable_shared" = "xno"; then
860    with_shared_mono=no
863 if test "x$enable_libraries" = "xno"; then
864    with_shared_mono=no
867 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
869 if test "x$host_win32" = "xyes"; then
870    # Boehm GC requires the runtime to be in its own dll
871    with_static_mono=no
874 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
875 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
876 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
877 AC_ARG_ENABLE(support-build, [  --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
879 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
880 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
881         AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
882         ORIG_CFLAGS=$CFLAGS
883         CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
884         AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
885         AC_TRY_COMPILE([], [
886         ], [
887            AC_MSG_RESULT(yes)
888            # Pass it to libgc as well
889            CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
890         ], [
891            AC_MSG_RESULT(no)
892            CFLAGS=$ORIG_CFLAGS
893         ])
896 AC_ARG_ENABLE(small-config, [  --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
898 if test x$enable_small_config = xyes; then
899         AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
900         CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
903 AC_ARG_ENABLE(system-aot, [  --enable-system-aot  Enable the Ahead-Of-Time compilation of system assemblies during the build (on by default on some platforms)], enable_system_aot=$enableval, enable_system_aot=default)
905 DISABLED_FEATURES=none
906 csc_compiler=default
907 endian=unknown
908 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
909 AC_MSG_CHECKING([CSharp compiler to use])
910 AC_ARG_WITH(csc, [  --with-csc=mcs,roslyn,default      Configures the CSharp compiler to use],[
911    if test x$withval = xmcs; then
912        csc_compiler=mcs
913    elif test x$withval = xroslyn; then
914        csc_compiler=roslyn
915    elif test x$withval = xdefault; then
916        :
917    else
918        AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
919    fi
920 ],[csc_compiler=default])
922 if test $csc_compiler = default; then
923    if test $endian = big; then
924       csc_compiler=mcs
925    elif test $endian = little; then
926       case "$host" in
927         powerpc*) csc_compiler=mcs ;;
928         *) csc_compiler=roslyn ;;
929       esac
930    else
931       csc_compiler=mcs
932    fi
934 AC_MSG_RESULT($csc_compiler)
936 AC_ARG_WITH(jemalloc,             [  --with-jemalloc=yes,no               If jemalloc is enabled (defaults to no)],                                     [], [with_jemalloc=no])
937 AC_ARG_WITH(jemalloc-always,      [  --with-jemalloc_always=yes,no        If jemalloc is enabled and always used (defaults to yes)],                    [], [with_jemalloc_always=no])
938 AC_ARG_WITH(jemalloc-assert,      [  --with-jemalloc_assert=yes,no        If jemalloc performs runtime checks for memory correctness (defaults to no)], [], [with_jemalloc_assert=no])
941 if test x$target_win32 = xyes; then
942 with_jemalloc=no
943 with_jemalloc_assert=no
944 with_jemalloc_always=no
947 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
948 if test "x$with_jemalloc_assert" = "xyes"; then
949 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
950 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
951 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
954 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
955 if test "x$with_jemalloc_always" = "xyes"; then
956 with_jemalloc=yes
957 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
958 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
959 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
962 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
963 if test "x$with_jemalloc" = "xyes"; then
964 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
965 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
966 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
968 if test "x$target_mach" = "xyes"; then
969         JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
972 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
973 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
975 AC_SUBST(JEMALLOC_CFLAGS)
976 AC_SUBST(JEMALLOC_CPPFLAGS)
977 AC_SUBST(JEMALLOC_LDFLAGS)
978 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
982 # Terminology:
983 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
984 # MERP - The MS telemetry profile. Not for general use.
985 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
987 # Structured crashes are not merp crashes. Structured crashes are json dumps made by mono during crashes. Merp upload is going to use the dumping code is a very specific way, and is enabled at runtime with an icall.
989 #--with-crash_privacy=yes --with-structured_crashes=no means we don't wanna dump in non-merp-enabled builds, and we want to not send symbol strings. This is going to be the default pair of settings for VS4Mac.
990 #--with-crash_privacy=yes --with-structured_crashes=yes means you want to see crashes on your console, and you want to not see unmanaged symbol names. This is an option for proprietary apps that have manual bugs filed.
991 #--with-crash_privacy=no --with-structured_crashes=no means you want to see no crash dumps on failure and you don't care about privacy. This is how you'd set a "don't want it, don't care" configuration.
992 #--with-crash_privacy=no --with-structured_crashes=yes means you want full crashes and you want to see them in the terminal, not on telemetry. This is going to be how we build for CI.
994 AC_ARG_WITH(crash-privacy,       [  --with-crash_privacy=yes,no         If you want your crashes to not include names of symbols present in the binary. ], [], [with_crash_privacy=no])
995 AC_ARG_WITH(structured-crashes,  [  --with-structured_crashes=yes,no    If you want your unmanaged crashes to result in a small crash dump file. ],        [], [with_structured_crashes=yes])
997 if test "x$with_crash_privacy" = "xno"; then
998 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1001 if test "x$with_structured_crashes" = "xno"; then
1002 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1005 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1006 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1008 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1009 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1011 if test x$enable_monodroid = xyes; then
1012         AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1015 if test x$enable_monotouch = xyes; then
1016         AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1020 # Set the build profiles and options before things which use them
1023 AC_ARG_WITH(profile4_x,          [  --with-profile4_x=yes,no            If you want to install the 4.x FX (defaults to yes)],                       [], [with_profile4_x=default])
1024 AC_ARG_WITH(monodroid,           [  --with-monodroid=yes,no             If you want to build the MonoDroid assemblies (defaults to no)],            [], [with_monodroid=default])
1025 AC_ARG_WITH(monotouch,           [  --with-monotouch=yes,no             If you want to build the Xamarin.iOS assemblies (defaults to no)],          [], [with_monotouch=default])
1026 AC_ARG_WITH(monotouch_watch,     [  --with-monotouch_watch=yes,no       If you want to build the Xamarin.WatchOS assemblies (defaults to no)],      [], [with_monotouch_watch=default])
1027 AC_ARG_WITH(monotouch_tv,        [  --with-monotouch_tv=yes,no          If you want to build the Xamarin.TVOS assemblies (defaults to no)],         [], [with_monotouch_tv=default])
1028 AC_ARG_WITH(bitcode,             [  --with-bitcode=yes,no               If bitcode is enabled (defaults to no)],                                    [], [with_bitcode=default])
1029 AC_ARG_WITH(xammac,              [  --with-xammac=yes,no                If you want to build the Xamarin.Mac assemblies (defaults to no)],          [], [with_xammac=default])
1030 AC_ARG_WITH(testing_aot_hybrid,  [  --with-testing_aot_hybrid=yes,no    If you want to build the testing_aot_hybrid assemblies (defaults to no)],   [], [with_testing_aot_hybrid=default])
1031 AC_ARG_WITH(testing_aot_full,    [  --with-testing_aot_full=yes,no      If you want to build the testing_aot_full assemblies (defaults to no)],     [], [with_testing_aot_full=default])
1032 AC_ARG_WITH(winaot,              [  --with-winaot=yes,no                If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1033 AC_ARG_WITH(orbis,               [  --with-orbis=yes,no                 If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1034 AC_ARG_WITH(unreal,              [  --with-unreal=yes,no                If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1035 AC_ARG_WITH(wasm,                [  --with-wasm=yes,no                  If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1038 AC_ARG_WITH(runtime-preset, [  --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,bitcode,unreal   Which default profile to build (defaults to net_4_x)],  [], [with_runtime_preset=net_4_x])
1039 AC_ARG_WITH(spectre-mitigation,             [  --with-spectre-mitigation=yes,no   If you want to build the runtime with compiler flags that enable Spectre mitigation (defaults to no)], [], [with_spectre_mitigation=default])
1040 AC_ARG_WITH(spectre-indirect-branch-choice,   [  --with-spectre-indirect-branch-choice=keep,thunk,inline,extern   Convert indirect branches to the specified kind of thunk (defaults to inline)], [], [with_spectre_indirect_branch_choice=inline])
1041 AC_ARG_WITH(spectre-function-return-choice, [  --with-spectre-function-return-choice=keep,thunk,inline,extern   Convert function return instructions to the specified kind of thunk (defaults to inline)], [], [with_spectre_function_return_choice=inline])
1044 dnl Spectre compiler mitigation flag checks
1046 if test "x$with_spectre_mitigation" = "xyes"; then
1047    AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1048    SPECTRE_CFLAGS=
1049    SPECTRE_INDIRECT_BRANCH_KIND=
1050    case "x$with_spectre_indirect_branch_choice" in
1051        xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1052        xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1053        xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1054        xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1055        *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1056    esac
1058    SPECTRE_FUNCTION_RETURN_KIND=""
1059    case "x$with_spectre_function_return_choice" in
1060        xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1061        xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1062        xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1063        xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1064        *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1065    esac
1067    AX_CHECK_COMPILE_FLAG(
1068         [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1069         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1070    )
1072    AX_CHECK_COMPILE_FLAG(
1073         [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1074         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1075    )
1077    if test "x$SPECTRE_CFLAGS" != "x" ; then
1078         CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1079         CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1080         spectre_mitigation_status="mitigation enabled"
1081    fi
1082 else
1083         spectre_mitigation_status="no mitigation"
1087 dnl Profile defaults
1089 TEST_PROFILE=default
1090 enable_llvm_default=no
1092 with_profile4_x_default=no
1093 with_monodroid_default=no
1094 with_monotouch_default=no
1095 with_monotouch_watch_default=no
1096 with_monotouch_tv_default=no
1097 with_xammac_default=no
1098 with_testing_aot_hybrid_default=no
1099 with_testing_aot_full_default=no
1100 with_winaot_default=no
1101 with_orbis_default=no
1102 with_unreal_default=no
1103 with_wasm_default=no
1105 with_bitcode_default=no
1106 enable_cooperative_suspend_default=no
1108 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1110 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1112 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1113    DISABLE_MCS_DOCS_default=yes
1114 elif test x$with_runtime_preset = xnet_4_x; then
1115    with_profile4_x_default=yes
1116 elif test x$with_runtime_preset = xall; then
1117    with_profile4_x_default=yes
1118    with_monodroid_default=yes
1119    with_monotouch_default=yes
1120    with_monotouch_watch_default=yes
1121    with_monotouch_tv_default=yes
1122    with_xammac_default=yes
1123    with_winaot_default=yes
1124    with_orbis_default=yes
1125    with_unreal_default=yes
1126    with_wasm_default=yes
1127    with_testing_aot_hybrid_default=yes
1128    with_testing_aot_full_default=yes
1129 elif test x$with_runtime_preset = xbitcode; then
1130    DISABLE_MCS_DOCS_default=yes
1131    with_testing_aot_full_default=yes
1132    with_bitcode_default=yes
1133    enable_cooperative_suspend_default=yes
1134    TEST_PROFILE=testing_aot_full
1135    enable_llvm_default=yes
1137    mono_feature_disable_com='yes'
1138    mono_feature_disable_remoting='yes'
1139    mono_feature_disable_reflection_emit_save='yes'
1140    mono_feature_disable_reflection_emit='yes'
1141    mono_feature_disable_appdomains='yes'
1143    AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1144    AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1145    AOT_MODE="llvmonly"
1146 elif test x$with_runtime_preset = xfullaot; then
1147    DISABLE_MCS_DOCS_default=yes
1148    with_testing_aot_full_default=yes
1149    TEST_PROFILE=testing_aot_full
1151    mono_feature_disable_com='yes'
1152    mono_feature_disable_remoting='yes'
1153    mono_feature_disable_reflection_emit_save='yes'
1154    mono_feature_disable_reflection_emit='yes'
1155    mono_feature_disable_appdomains='yes'
1157    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1158    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1159    AOT_MODE="full"
1160 elif test x$with_runtime_preset = xfullaot_llvm; then
1161    DISABLE_MCS_DOCS_default=yes
1162    with_testing_aot_full_default=yes
1163    TEST_PROFILE=testing_aot_full
1165    mono_feature_disable_com='yes'
1166    mono_feature_disable_remoting='yes'
1167    mono_feature_disable_reflection_emit_save='yes'
1168    mono_feature_disable_reflection_emit='yes'
1169    mono_feature_disable_appdomains='yes'
1171    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1172    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1173    AOT_MODE="full"
1174 elif test x$with_runtime_preset = xhybridaot; then
1175    DISABLE_MCS_DOCS_default=yes
1176    with_testing_aot_hybrid_default=yes
1177    TEST_PROFILE=testing_aot_hybrid 
1179    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1180    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1181 elif test x$with_runtime_preset = xhybridaot_llvm; then
1182    DISABLE_MCS_DOCS_default=yes
1183    with_testing_aot_hybrid_default=yes
1184    TEST_PROFILE=testing_aot_hybrid
1186    AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1187    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1188 elif test x$with_runtime_preset = xaot; then
1189    with_profile4_x_default=yes
1191    AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1192    AOT_RUN_FLAGS=""
1194    DISABLE_MCS_DOCS_default=yes
1195 elif test x$with_runtime_preset = xaot_llvm; then
1196    with_profile4_x_default=yes
1198    AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1199    AOT_RUN_FLAGS=""
1201    DISABLE_MCS_DOCS_default=yes
1202 elif test x$with_runtime_preset = xwinaot; then
1203    DISABLE_MCS_DOCS_default=yes
1204    with_winaot_default=yes
1205    TEST_PROFILE=winaot
1207    mono_feature_disable_com='yes'
1208    mono_feature_disable_remoting='yes'
1209    mono_feature_disable_reflection_emit_save='yes'
1210    mono_feature_disable_reflection_emit='yes'
1211    mono_feature_disable_appdomains='yes'
1213    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1214    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1215    AOT_MODE="llvmonly"
1216 elif test x$with_runtime_preset = xorbis; then
1217    DISABLE_MCS_DOCS_default=yes
1218    with_orbis_default=yes
1219    TEST_PROFILE=orbis
1221    mono_feature_disable_com='yes'
1222    mono_feature_disable_remoting='yes'
1223    mono_feature_disable_reflection_emit_save='yes'
1224    mono_feature_disable_reflection_emit='yes'
1225    mono_feature_disable_appdomains='yes'
1227    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1228    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1229    AOT_MODE="full"
1230 elif test x$with_runtime_preset = xunreal; then
1231    DISABLE_MCS_DOCS_default=yes
1232    with_unreal_default=yes
1233    TEST_PROFILE=unreal
1235    mono_feature_disable_com='yes'
1236    mono_feature_disable_remoting='yes'
1237    mono_feature_disable_appdomains='no'
1239    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1240    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1241 elif test x$with_runtime_preset = xwasm; then
1242    DISABLE_MCS_DOCS_default=yes
1243    with_wasm_default=yes
1244    TEST_PROFILE=wasm
1246    mono_feature_disable_com='yes'
1247    mono_feature_disable_remoting='yes'
1248    mono_feature_disable_reflection_emit_save='yes'
1249    mono_feature_disable_reflection_emit='yes'
1250    mono_feature_disable_appdomains='yes'
1252    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1253    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1254 else
1255    with_profile4_x_default=yes
1258 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1259    AC_SUBST(AOT_BUILD_FLAGS)
1260    AC_SUBST(AOT_RUN_FLAGS)
1261    # For llvmonlycheck + fullaotcheck
1262    AC_SUBST(INVARIANT_AOT_OPTIONS)
1265 AC_SUBST(TEST_PROFILE)
1267 if test "x$with_profile4_x" = "xdefault"; then
1268    with_profile4_x=$with_profile4_x_default
1270 if test "x$with_monodroid" = "xdefault"; then
1271    with_monodroid=$with_monodroid_default
1273 if test "x$with_monotouch" = "xdefault"; then
1274    with_monotouch=$with_monotouch_default
1276 if test "x$with_monotouch_watch" = "xdefault"; then
1277    with_monotouch_watch=$with_monotouch_watch_default
1279 if test "x$with_monotouch_tv" = "xdefault"; then
1280    with_monotouch_tv=$with_monotouch_tv_default
1282 if test "x$with_bitcode" = "xdefault"; then
1283    with_bitcode=$with_bitcode_default
1285 if test "x$with_xammac" = "xdefault"; then
1286    with_xammac=$with_xammac_default
1288 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1289    with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1291 if test "x$with_testing_aot_full" = "xdefault"; then
1292    with_testing_aot_full=$with_testing_aot_full_default
1294 if test "x$with_winaot" = "xdefault"; then
1295    with_winaot=$with_winaot_default
1297 if test "x$with_orbis" = "xdefault"; then
1298    with_orbis=$with_orbis_default
1300 if test "x$with_unreal" = "xdefault"; then
1301    with_unreal=$with_unreal_default
1303 if test "x$with_wasm" = "xdefault"; then
1304    with_wasm=$with_wasm_default
1308 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1309 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1310 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1311 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1312 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1313 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1314 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1315 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1316 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1317 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1318 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1319 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1320 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1321 AM_CONDITIONAL(FULL_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full"] || [test "x$TEST_PROFILE" = "xwinaot"] || [test "x$TEST_PROFILE" = "xorbis"] || [test "x$TEST_PROFILE" = "xwasm"])
1322 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1324 default_profile=net_4_x
1325 if test -z "$INSTALL_MONODROID_TRUE"; then :
1326    default_profile=monodroid
1328 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1329    default_profile=monotouch
1331 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1332    default_profile=xammac
1334 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1335    default_profile=testing_aot_hybrid
1337 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1338    default_profile=testing_aot_full
1340 if test -z "$INSTALL_WINAOT_TRUE"; then :
1341    default_profile=winaot
1343 if test -z "$INSTALL_ORBIS_TRUE"; then :
1344    default_profile=orbis
1346 if test -z "$INSTALL_UNREAL_TRUE"; then :
1347    default_profile=unreal
1349 if test -z "$INSTALL_WASM_TRUE"; then :
1350    default_profile=wasm
1352 if test -z "$INSTALL_4_x_TRUE"; then :
1353    default_profile=net_4_x
1355 DEFAULT_PROFILE=$default_profile
1356 AC_SUBST(DEFAULT_PROFILE)
1359 # End build profile configuration
1362 if test x$USE_NLS = xprofile_default; then
1364         AC_MSG_CHECKING([NLS used])
1366         # We make the default value for USE_NLS
1367         # "no" on OSX because it isn't available on most
1368         # default OSX installs. The most common configurations will
1369         # all disable it, so this saves us typing.
1370         if test x$host_darwin = xyes; then
1371                 USE_NLS=no;
1372         else
1373                 USE_NLS=yes;
1374         fi
1376         AC_SUBST([USE_NLS])
1377         AC_MSG_RESULT([$USE_NLS])
1380 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
1381      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, 
1382      reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1383          security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1385         for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1386                 eval "mono_feature_disable_$feature='yes'"
1387         done
1388         DISABLED_FEATURES=$enable_minimal
1389         disabled="Disabled:      $enable_minimal"
1390 ],[])
1392 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1394 if test "x$mono_feature_disable_aot" = "xyes"; then
1395         AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1396         enable_system_aot=no
1397         AC_MSG_NOTICE([Disabled AOT compiler])
1400 if test "x$mono_feature_disable_profiler" = "xyes"; then
1401         AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1402         AC_MSG_NOTICE([Disabled support for the profiler])
1404 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1406 if test "x$mono_feature_disable_decimal" = "xyes"; then
1407         AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1408         AC_MSG_NOTICE([Disabled support for decimal])
1411 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1412         AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1413         AC_MSG_NOTICE([Disabled support for P/Invoke])
1416 if test "x$mono_feature_disable_debug" = "xyes"; then
1417         AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1418         AC_MSG_NOTICE([Disabled support for runtime debugging])
1421 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1422         AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1423         mono_feature_disable_reflection_emit_save=yes
1424         AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1427 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1428         AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1429         AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1432 if test "x$mono_feature_disable_large_code" = "xyes"; then
1433         AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1434         AC_MSG_NOTICE([Disabled support for large assemblies])
1437 if test "x$mono_feature_disable_logging" = "xyes"; then
1438         AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1439         AC_MSG_NOTICE([Disabled support for logging])
1442 if test "x$mono_feature_disable_com" = "xyes"; then
1443         AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1444         AC_MSG_NOTICE([Disabled COM support])
1447 if test "x$mono_feature_disable_ssa" = "xyes"; then
1448         AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1449         AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1452 if test "x$mono_feature_disable_generics" = "xyes"; then
1453         AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1454         AC_MSG_NOTICE([Disabled Generics Support])
1457 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1458         AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1459         AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1462 if test "x$mono_feature_disable_portability" = "xyes"; then
1463         AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1464         AC_MSG_NOTICE([Disabled IO Portability layer])
1467 if test "x$mono_feature_disable_attach" = "xyes"; then
1468         AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1469         AC_MSG_NOTICE([Disabled agent attach])
1472 if test "x$mono_feature_disable_verifier" = "xyes"; then
1473         AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1474         AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1477 if test "x$mono_feature_disable_jit" = "xyes"; then
1478         AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1479         AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1482 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1484 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1485         AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1486         AC_MSG_NOTICE([Disabled the interpreter])
1489 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1491 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1492         AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1495 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1497 if test "x$mono_feature_disable_simd" = "xyes"; then
1498         AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1499         AC_MSG_NOTICE([Disabled SIMD support])
1502 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1503         AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1504         AC_MSG_NOTICE([Disabled Soft Debugger.])
1507 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1509 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1510         AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1511         AC_MSG_NOTICE([Disabled Performance Counters.])
1513 if test "x$mono_feature_disable_normalization" = "xyes"; then
1514         AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1515         AC_MSG_NOTICE([Disabled String normalization support.])
1518 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1519 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1520         AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1521         AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1524 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1525         AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1526         AC_MSG_NOTICE([Disabled Shared perfcounters.])
1529 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1530         AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1531         AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1534 if test "x$mono_feature_disable_remoting" = "xyes"; then
1535         AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1536         AC_MSG_NOTICE([Disabled remoting])
1539 if test "x$mono_feature_disable_security" = "xyes"; then
1540         AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1541         AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1544 if test "x$mono_feature_disable_lldb" = "xyes"; then
1545         AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1546         AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1549 if test "x$mono_feature_disable_mdb" = "xyes"; then
1550         AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1551         AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1554 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1555         AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1556         AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1560 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1561         AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1562         AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1565 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1566         AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1567         AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1570 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1571         AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1572         AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1575 AC_ARG_ENABLE(executables, [  --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1576 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1578 has_extension_module=no
1579 AC_ARG_ENABLE(extension-module, [  --enable-extension-module=LIST enable the core-extensions from LIST],
1581         for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1582                 if test x$extension = xdefault ; then
1583                         has_extension_module=yes;
1584                 fi
1585         done
1586         if test x$enable_extension_module = xyes; then
1587                 has_extension_module=yes;
1588         fi
1589 ], [])
1591 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1593 if test x$has_extension_module != xno ; then
1594         AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1595         AC_MSG_NOTICE([Enabling mono extension module.])
1598 # Deprecated
1599 AC_ARG_ENABLE(gsharedvt, [  --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1601 AC_MSG_CHECKING(for visibility __attribute__)
1602 AC_COMPILE_IFELSE([
1603         AC_LANG_SOURCE([[
1604                 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1605                 int main () { doit (); return 0; }
1606         ]])
1607 ], [
1608    have_visibility_hidden=yes
1609    AC_MSG_RESULT(yes)
1610 ], [
1611    have_visibility_hidden=no
1612    AC_MSG_RESULT(no)
1616 dnl Boehm GC configuration
1619 AC_ARG_WITH(libgc,   [  --with-libgc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1621 AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1622 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1624 if test "x$support_boehm" = "xyes"; then
1626         AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1627         if test x$enable_parallel_mark = xyes; then
1628                 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1629         fi
1631         gc_msg=""
1632         LIBGC_CPPFLAGS=
1633         LIBGC_LIBS=
1634         LIBGC_STATIC_LIBS=
1635         libgc_dir=
1636         case "x$libgc" in
1637                 xincluded)
1638                         if test "x$support_boehm" = "xyes"; then
1639                                 libgc_dir=libgc
1640                         fi
1642                         LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1643                         LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1644                         LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1646                         BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1648                         if test x$target_win32 = xyes; then
1649                                 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1650                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1651                         fi
1653                         gc_msg="Included Boehm GC with typed GC"
1654                         if test x$enable_parallel_mark = xyes; then
1655                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1656                                 gc_msg="$gc_msg and parallel mark"
1657                         else
1658                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1659                         fi
1660                         ;;
1662                 xboehm|xbohem|xyes)
1663                         AC_MSG_WARN("External Boehm is no longer supported")
1664                         ;;
1666                 xsgen)
1667                         AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1668                         ;;
1670                 xnone)
1671                         AC_MSG_WARN("Compiling mono without GC.")
1672                         AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1673                         AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1674                         gc_msg="none"
1675                         ;;
1676                 *)
1677                         AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1678                         ;;
1679         esac
1681         AC_ARG_WITH(large-heap, [  --with-large-heap=yes,no       Enable support for GC heaps larger than 3GB (defaults to no)], [large_heap=$withval], [large_heap=no])
1682         if test "x$large_heap" = "xyes"; then
1683            CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1684         fi
1686         AC_SUBST(LIBGC_CPPFLAGS)
1687         AC_SUBST(LIBGC_LIBS)
1688         AC_SUBST(LIBGC_STATIC_LIBS)
1689         AC_SUBST(libgc_dir)
1690         AC_SUBST(BOEHM_DEFINES)
1693 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1696 dnl End of Boehm GC Configuration
1699 dnl *************************************
1700 dnl *** Checks for zero length arrays ***
1701 dnl *************************************
1702 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1703 AC_TRY_COMPILE([
1704         struct s {
1705                 int  length;
1706                 char data [0];
1707         };
1708 ], [], [
1709         AC_MSG_RESULT(yes)
1710         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1711 ], [
1712         AC_MSG_RESULT(no)
1713         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1716 dnl ***********************************
1717 dnl *** Checks for signals
1718 dnl ***********************************
1719 AC_CHECK_HEADERS(signal.h)
1720 AC_CHECK_FUNCS(sigaction)
1721 AC_CHECK_FUNCS(kill)
1722 AC_CHECK_FUNCS(signal)
1724 # signal() is declared inline in Android headers
1725 # so we need to workaround it by overriding the check.
1726 if test x$platform_android = xyes; then
1727         AC_DEFINE(HAVE_SIGNAL,1)
1730 if test x$host_win32 = xno; then
1731         dnl *************************************
1732         dnl *** Checks for time capabilities ***
1733         dnl *************************************
1735         AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1736         AC_TRY_COMPILE([#include <time.h>], [
1737                 const int foo = CLOCK_MONOTONIC;
1738         ],[
1739                 AC_MSG_RESULT(yes)
1740                 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1741         ], [
1742                 AC_MSG_RESULT(no)
1743         ])
1745         AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1746         AC_TRY_COMPILE([#include <time.h>], [
1747                 const int foo = CLOCK_MONOTONIC_COARSE;
1748         ],[
1749                 AC_MSG_RESULT(yes)
1750                 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1751         ], [
1752                 AC_MSG_RESULT(no)
1753         ])
1755         AC_MSG_CHECKING(for CLOCK_REALTIME)
1756         AC_TRY_COMPILE([#include <time.h>], [
1757                 const int foo = CLOCK_REALTIME;
1758         ],[
1759                 AC_MSG_RESULT(yes)
1760                 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1761         ], [
1762                 AC_MSG_RESULT(no)
1763         ])
1765         AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1766         AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1767         AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1768         AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1769         AC_CHECK_FUNC(futimes,            [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1770         AC_CHECK_FUNC(futimens,           [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1772         dnl hires monotonic clock support
1773         AC_SEARCH_LIBS(clock_gettime, rt)
1774         AC_CHECK_FUNCS(clock_nanosleep)
1776         dnl dynamic loader support
1777         AC_CHECK_FUNC(dlopen, DL_LIB="",
1778                 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1779         )
1780         if test x$dl_support = xno; then
1781                 AC_MSG_WARN([No dynamic loading support available])
1782         else
1783                 LIBS="$LIBS $DL_LIB"
1784                 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1785                 dnl from glib's configure.ac
1786                 AC_CACHE_CHECK([for preceeding underscore in symbols],
1787                         mono_cv_uscore,[
1788                         AC_TRY_RUN([#include <dlfcn.h>
1789                         int mono_underscore_test (void) { return 42; }
1790                         int main() {
1791                           void *f1 = (void*)0, *f2 = (void*)0, *handle;
1792                           handle = dlopen ((void*)0, 0);
1793                           if (handle) {
1794                             f1 = dlsym (handle, "mono_underscore_test");
1795                             f2 = dlsym (handle, "_mono_underscore_test");
1796                           } return (!f2 || f1);
1797                         }],
1798                                 [mono_cv_uscore=yes],
1799                                 [mono_cv_uscore=no],
1800                         [])
1801                 ])
1802                 if test "x$mono_cv_uscore" = "xyes"; then
1803                         MONO_DL_NEED_USCORE=1
1804                 else
1805                         MONO_DL_NEED_USCORE=0
1806                 fi
1807                 AC_SUBST(MONO_DL_NEED_USCORE)
1808                 AC_CHECK_FUNC(dlerror)
1809         fi
1811         dnl ******************************************************************
1812         dnl *** Checks for the IKVM JNI interface library                  ***
1813         dnl ******************************************************************
1814         AC_ARG_WITH(ikvm-native, [  --with-ikvm-native=yes,no      build the IKVM JNI interface library (defaults to yes)],[with_ikvm_native=$withval],[with_ikvm_native=$ikvm_native])
1816         ikvm_native_dir=
1817         if test x$with_ikvm_native = xyes; then
1818                 ikvm_native_dir=ikvm-native
1819                 jdk_headers_found="IKVM Native"
1820         fi
1822         AC_SUBST(ikvm_native_dir)
1824         AC_CHECK_HEADERS(execinfo.h)
1826         AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1828         AC_CHECK_FUNCS(getgrgid_r)
1829         AC_CHECK_FUNCS(getgrnam_r)
1830         AC_CHECK_FUNCS(getresuid)
1831         AC_CHECK_FUNCS(setresuid)
1832         AC_CHECK_FUNCS(kqueue)
1833         AC_CHECK_FUNCS(backtrace_symbols)
1834         AC_CHECK_FUNCS(mkstemp)
1835         AC_CHECK_FUNCS(mmap)
1836         AC_CHECK_FUNCS(madvise)
1837         AC_CHECK_FUNCS(getrusage)
1838         AC_CHECK_FUNCS(getpriority)
1839         AC_CHECK_FUNCS(setpriority)
1840         AC_CHECK_FUNCS(dl_iterate_phdr)
1841         AC_CHECK_FUNCS(dladdr)
1842         AC_CHECK_FUNCS(sysconf)
1843         AC_CHECK_FUNCS(getrlimit)
1844         AC_CHECK_FUNCS(prctl)
1846         AC_CHECK_FUNCS(sched_getaffinity)
1847         AC_CHECK_FUNCS(sched_setaffinity)
1848         AC_CHECK_FUNCS(sched_getcpu)
1850         if test x$platform_android != xyes; then
1851                 AC_CHECK_FUNCS(getpwnam_r)
1852                 AC_CHECK_FUNCS(getpwuid_r)
1853         fi
1855         AC_FUNC_STRERROR_R()
1857         dnl ****************************************************************
1858         dnl *** Check for sched_setaffinity from glibc versions before   ***
1859         dnl *** 2.3.4. The older versions of the function only take 2    ***
1860         dnl *** parameters, not 3.                                       ***
1861         dnl ***                                                          ***
1862         dnl *** Because the interface change was not made in a minor     ***
1863         dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros    ***
1864         dnl *** won't always indicate the interface sched_affinity has.  ***
1865         dnl ****************************************************************
1866         AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1867         AC_TRY_COMPILE([#include <sched.h>], [
1868             int mask = 1; 
1869             sched_setaffinity(0, &mask);
1870         ], [
1871                 # Yes, we have it...
1872                 AC_MSG_RESULT(yes)
1873                 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1874         ], [
1875                 # We have the new, three-parameter version
1876                 AC_MSG_RESULT(no)
1877         ])
1878         AC_TRY_COMPILE([#include <sched.h>], [
1879              CPU_COUNT((void *) 0);
1880         ], [
1881                 AC_MSG_RESULT(yes)
1882                 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1883         ], [
1884                 # We have the new, three-parameter version
1885                 AC_MSG_RESULT(no)
1886         ])
1888         dnl ******************************************************************
1889         dnl *** Check for large file support                               ***
1890         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1891         dnl ******************************************************************
1892         
1893         # Check that off_t can represent 2**63 - 1 correctly, working around
1894         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
1895         # CPPFLAGS and sets $large_offt to yes if the test succeeds
1896         large_offt=no
1897         AC_DEFUN([LARGE_FILES], [
1898                 large_CPPFLAGS=$CPPFLAGS
1899                 CPPFLAGS="$CPPFLAGS $1"
1900                 AC_TRY_COMPILE([
1901                         #include <sys/types.h>
1902                         #include <limits.h>
1903                 ], [
1904                         /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1905                         #define COMPILE_TIME_ASSERT(pred) \
1906                                 switch(0){case 0:case pred:;}
1907                         COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1908                 ], [
1909                         AC_MSG_RESULT(ok)
1910                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1911                         large_CPPFLAGS="$large_CPPFLAGS $1"
1912                         large_offt=yes
1913                 ], [
1914                         AC_MSG_RESULT(no)
1915                 ])
1916                 CPPFLAGS=$large_CPPFLAGS
1917         ])
1919         AC_MSG_CHECKING(if off_t is 64 bits wide)
1920         LARGE_FILES("")
1921         if test $large_offt = no; then
1922                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1923                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1924         fi
1925         if test $large_offt = no; then
1926                 AC_MSG_WARN([No 64 bit file size support available])
1927         fi
1928         
1929         dnl *****************************
1930         dnl *** Checks for libsocket  ***
1931         dnl *****************************
1932         AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1934         case "$host" in
1935                 *-*-*freebsd*)
1936                         dnl *****************************
1937                         dnl *** Checks for libinotify ***
1938                         dnl *****************************
1939                         AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1940         esac
1942         dnl *******************************
1943         dnl *** Checks for MSG_NOSIGNAL ***
1944         dnl *******************************
1945         AC_MSG_CHECKING(for MSG_NOSIGNAL)
1946         AC_TRY_COMPILE([#include <sys/socket.h>], [
1947                 int f = MSG_NOSIGNAL;
1948         ], [
1949                 # Yes, we have it...
1950                 AC_MSG_RESULT(yes)
1951                 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1952         ], [
1953                 # We'll have to use signals
1954                 AC_MSG_RESULT(no)
1955         ])
1957         dnl *****************************
1958         dnl *** Checks for IPPROTO_IP ***
1959         dnl *****************************
1960         AC_MSG_CHECKING(for IPPROTO_IP)
1961         AC_TRY_COMPILE([#include <netinet/in.h>], [
1962                 int level = IPPROTO_IP;
1963         ], [
1964                 # Yes, we have it...
1965                 AC_MSG_RESULT(yes)
1966                 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1967         ], [
1968                 # We'll have to use getprotobyname
1969                 AC_MSG_RESULT(no)
1970         ])
1972         dnl *******************************
1973         dnl *** Checks for IPPROTO_IPV6 ***
1974         dnl *******************************
1975         AC_MSG_CHECKING(for IPPROTO_IPV6)
1976         AC_TRY_COMPILE([#include <netinet/in.h>], [
1977                 int level = IPPROTO_IPV6;
1978         ], [
1979                 # Yes, we have it...
1980                 AC_MSG_RESULT(yes)
1981                 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1982         ], [
1983                 # We'll have to use getprotobyname
1984                 AC_MSG_RESULT(no)
1985         ])
1987         dnl ******************************
1988         dnl *** Checks for IPPROTO_TCP ***
1989         dnl ******************************
1990         AC_MSG_CHECKING(for IPPROTO_TCP)
1991         AC_TRY_COMPILE([#include <netinet/in.h>], [
1992                 int level = IPPROTO_TCP;
1993         ], [
1994                 # Yes, we have it...
1995                 AC_MSG_RESULT(yes)
1996                 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1997         ], [
1998                 # We'll have to use getprotobyname
1999                 AC_MSG_RESULT(no)
2000         ])
2002         dnl *****************************
2003         dnl *** Checks for SOL_IP     ***
2004         dnl *****************************
2005         AC_MSG_CHECKING(for SOL_IP)
2006         AC_TRY_COMPILE([#include <netdb.h>], [
2007                 int level = SOL_IP;
2008         ], [
2009                 # Yes, we have it...
2010                 AC_MSG_RESULT(yes)
2011                 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2012         ], [
2013                 # We'll have to use getprotobyname
2014                 AC_MSG_RESULT(no)
2015         ])
2017         dnl *****************************
2018         dnl *** Checks for SOL_IPV6     ***
2019         dnl *****************************
2020         AC_MSG_CHECKING(for SOL_IPV6)
2021         AC_TRY_COMPILE([#include <netdb.h>], [
2022                 int level = SOL_IPV6;
2023         ], [
2024                 # Yes, we have it...
2025                 AC_MSG_RESULT(yes)
2026                 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2027         ], [
2028                 # We'll have to use getprotobyname
2029                 AC_MSG_RESULT(no)
2030         ])
2032         dnl *****************************
2033         dnl *** Checks for SOL_TCP    ***
2034         dnl *****************************
2035         AC_MSG_CHECKING(for SOL_TCP)
2036         AC_TRY_COMPILE([#include <netdb.h>], [
2037                 int level = SOL_TCP;
2038         ], [
2039                 # Yes, we have it...
2040                 AC_MSG_RESULT(yes)
2041                 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2042         ], [
2043                 # We'll have to use getprotobyname
2044                 AC_MSG_RESULT(no)
2045         ])
2047         dnl *****************************
2048         dnl *** Checks for IP_PKTINFO ***
2049         dnl *****************************
2050         AC_MSG_CHECKING(for IP_PKTINFO)
2051         AC_TRY_COMPILE([#include <linux/in.h>], [
2052                 int level = IP_PKTINFO;
2053         ], [
2054                 # Yes, we have it...
2055                 AC_MSG_RESULT(yes)
2056                 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2057         ], [
2058                 AC_MSG_RESULT(no)
2059         ])
2061         dnl *****************************
2062         dnl *** Checks for IPV6_PKTINFO ***
2063         dnl *****************************
2064         AC_MSG_CHECKING(for IPV6_PKTINFO)
2065         AC_TRY_COMPILE([#include <netdb.h>], [
2066                 int level = IPV6_PKTINFO;
2067         ], [
2068                 # Yes, we have it...
2069                 AC_MSG_RESULT(yes)
2070                 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2071         ], [
2072                 AC_MSG_RESULT(no)
2073         ])
2075         dnl **********************************
2076         dnl *** Checks for IP_DONTFRAG     ***
2077         dnl **********************************
2078         AC_MSG_CHECKING(for IP_DONTFRAG)
2079         AC_TRY_COMPILE([#include <netinet/in.h>], [
2080                 int level = IP_DONTFRAG;
2081         ], [
2082                 # Yes, we have it...
2083                 AC_MSG_RESULT(yes)
2084                 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2085         ], [
2086                 AC_MSG_RESULT(no)
2087         ])
2089         dnl **********************************
2090         dnl *** Checks for IP_DONTFRAGMENT ***
2091         dnl **********************************
2092         AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2093         AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2094                 int level = IP_DONTFRAGMENT;
2095         ], [
2096                 # Yes, we have it...
2097                 AC_MSG_RESULT(yes)
2098                 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2099         ], [
2100                 AC_MSG_RESULT(no)
2101         ])
2103         dnl **********************************
2104         dnl *** Checks for IP_MTU_DISCOVER ***
2105         dnl **********************************
2106         AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2107         AC_TRY_COMPILE([#include <linux/in.h>], [
2108                 int level = IP_MTU_DISCOVER;
2109         ], [
2110                 # Yes, we have it...
2111                 AC_MSG_RESULT(yes)
2112                 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2113         ], [
2114                 AC_MSG_RESULT(no)
2115         ])
2117         dnl **********************************
2118         dnl *** Checks for  IP_PMTUDISC_DO ***
2119         dnl **********************************
2120         AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2121         AC_TRY_COMPILE([#include <linux/in.h>], [
2122                 int level = IP_PMTUDISC_DO;
2123         ], [
2124                 # Yes, we have it...
2125                 AC_MSG_RESULT(yes)
2126                 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2127         ], [
2128                 AC_MSG_RESULT(no)
2129         ])
2131         dnl *********************************
2132         dnl *** Check for struct ip_mreqn ***
2133         dnl *********************************
2134         AC_MSG_CHECKING(for struct ip_mreqn)
2135         AC_TRY_COMPILE([#include <netinet/in.h>], [
2136                 struct ip_mreqn mreq;
2137                 mreq.imr_address.s_addr = 0;
2138         ], [
2139                 # Yes, we have it...
2140                 AC_MSG_RESULT(yes)
2141                 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2142         ], [
2143                 # We'll just have to try and use struct ip_mreq
2144                 AC_MSG_RESULT(no)
2145                 AC_MSG_CHECKING(for struct ip_mreq)
2146                 AC_TRY_COMPILE([#include <netinet/in.h>], [
2147                         struct ip_mreq mreq;
2148                         mreq.imr_interface.s_addr = 0;
2149                 ], [
2150                         # Yes, we have it...
2151                         AC_MSG_RESULT(yes)
2152                         AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2153                 ], [
2154                         # No multicast support
2155                         AC_MSG_RESULT(no)
2156                 ])
2157         ])
2158         
2159         dnl **********************************
2160         dnl *** Check for getaddrinfo ***
2161         dnl **********************************
2162         AC_MSG_CHECKING(for getaddrinfo)
2163                 AC_TRY_LINK([
2164                 #include <stdio.h>
2165                 #include <netdb.h>
2166         ], [
2167                 getaddrinfo(NULL,NULL,NULL,NULL);
2168         ], [
2169                 # Yes, we have it...
2170                 AC_MSG_RESULT(yes)
2171                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2172         ], [
2173                 AC_MSG_RESULT(no)
2174         ])
2176         dnl **********************************
2177         dnl *** Check for gethostbyname2_r ***
2178         dnl **********************************
2179         AC_MSG_CHECKING(for gethostbyname2_r)
2180                 AC_TRY_LINK([
2181                 #include <stdio.h>
2182                 #include <netdb.h>
2183         ], [
2185                 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2186         ], [
2187                 # Yes, we have it...
2188                 AC_MSG_RESULT(yes)
2189                 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2190         ], [
2191                 AC_MSG_RESULT(no)
2192         ])
2194         dnl **********************************
2195         dnl *** Check for gethostbyname2 ***
2196         dnl **********************************
2197         AC_MSG_CHECKING(for gethostbyname2)
2198                 AC_TRY_LINK([
2199                 #include <stdio.h>
2200                 #include <netdb.h>
2201         ], [
2202                 gethostbyname2(NULL,0);
2203         ], [
2204                 # Yes, we have it...
2205                 AC_MSG_RESULT(yes)
2206                 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2207         ], [
2208                 AC_MSG_RESULT(no)
2209         ])
2211         dnl **********************************
2212         dnl *** Check for gethostbyname ***
2213         dnl **********************************
2214         AC_MSG_CHECKING(for gethostbyname)
2215                 AC_TRY_LINK([
2216                 #include <stdio.h>
2217                 #include <netdb.h>
2218         ], [
2219                 gethostbyname(NULL);
2220         ], [
2221                 # Yes, we have it...
2222                 AC_MSG_RESULT(yes)
2223                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2224         ], [
2225                 AC_MSG_RESULT(no)
2226         ])
2228         dnl **********************************
2229         dnl *** Check for getprotobyname ***
2230         dnl **********************************
2231         AC_MSG_CHECKING(for getprotobyname)
2232                 AC_TRY_LINK([
2233                 #include <stdio.h>
2234                 #include <netdb.h>
2235         ], [
2236                 getprotobyname(NULL);
2237         ], [
2238                 # Yes, we have it...
2239                 AC_MSG_RESULT(yes)
2240                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2241         ], [
2242                 AC_MSG_RESULT(no)
2243         ])
2245         dnl **********************************
2246         dnl *** Check for getnameinfo ***
2247         dnl **********************************
2248         AC_MSG_CHECKING(for getnameinfo)
2249                 AC_TRY_LINK([
2250                 #include <stdio.h>
2251                 #include <netdb.h>
2252         ], [
2253                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2254         ], [
2255                 # Yes, we have it...
2256                 AC_MSG_RESULT(yes)
2257                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2258         ], [
2259                 AC_MSG_RESULT(no)
2260         ])
2263         dnl **********************************
2264         dnl *** Check for inet_ntop ***
2265         dnl **********************************
2266         AC_MSG_CHECKING(for inet_ntop)
2267                 AC_TRY_LINK([
2268                 #include <stdio.h>
2269                 #include <arpa/inet.h>
2270         ], [
2271                 inet_ntop (0, NULL, NULL, 0);
2272         ], [
2273                 # Yes, we have it...
2274                 AC_MSG_RESULT(yes)
2275                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2276         ], [
2277                 AC_MSG_RESULT(no)
2278         ])
2280         dnl *****************************
2281         dnl *** Checks for libnsl     ***
2282         dnl *****************************
2283         AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2285         AC_CHECK_FUNCS(inet_pton inet_aton)
2287         dnl *****************************
2288         dnl *** Checks for libxnet    ***
2289         dnl *****************************
2290         case "${host}" in
2291                 *solaris* )
2292                         AC_MSG_CHECKING(for Solaris XPG4 support)
2293                         if test -f /usr/lib/libxnet.so; then
2294                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2295                                 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2296                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2297                                 LIBS="$LIBS -lxnet"
2298                                 AC_MSG_RESULT(yes)
2299                         else
2300                                 AC_MSG_RESULT(no)
2301                         fi
2303                         if test "$GCC" = "yes"; then
2304                                 CFLAGS="$CFLAGS -Wno-char-subscripts"
2305                         fi
2306                 ;;
2307         esac
2309         dnl *****************************
2310         dnl *** Checks for libpthread ***
2311         dnl *****************************
2312 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2313 # and libpthread does not exist
2315         case "${host}" in
2316                 *-*-*haiku*)
2317                         dnl Haiku has pthread in libroot (libc equiv)
2318                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2319                 ;;
2320                 *-*-*freebsd*)
2321                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2322                 ;;
2323                 *-*-*openbsd*)
2324                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2325                 ;;
2326                 *)
2327                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2328                 ;;
2329         esac
2330         AC_CHECK_HEADERS(pthread.h)
2331         AC_CHECK_HEADERS(pthread_np.h)
2332         AC_CHECK_FUNCS(pthread_mutex_timedlock)
2333         AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2334         AC_CHECK_FUNCS(pthread_kill)
2335         AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2336         AC_TRY_COMPILE([ #include <pthread.h>], [
2337                 pthread_mutexattr_t attr;
2338                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2339         ], [
2340                 AC_MSG_RESULT(ok)
2341         ], [
2342                 AC_MSG_RESULT(no)
2343                 AC_ERROR(Posix system lacks support for recursive mutexes)
2344         ])
2345         AC_CHECK_FUNCS(pthread_attr_setstacksize)
2346         AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2347         AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2349         dnl **********************************
2350         dnl *** Check for mincore ***
2351         dnl **********************************
2352         AC_MSG_CHECKING(for mincore)
2353                 AC_TRY_LINK([
2354                 #include <stdio.h>
2355                 #include <sys/types.h>
2356                 #include <sys/mman.h>
2357         ], [
2358                 mincore(NULL, 0, NULL);
2359         ], [
2360                 # Yes, we have it...
2361                 AC_MSG_RESULT(yes)
2362                 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2363         ], [
2364                 AC_MSG_RESULT(no)
2365         ])
2367         dnl ***********************************
2368         dnl *** Checks for working __thread ***
2369         dnl ***********************************
2370         AC_MSG_CHECKING(for working __thread)
2371         if test "x$with_tls" != "x__thread"; then
2372                 AC_MSG_RESULT(disabled)
2373         elif test "x$cross_compiling" = "xyes"; then
2374                 AC_MSG_RESULT(cross compiling, assuming yes)
2375         else
2376                 AC_TRY_RUN([
2377                         #if defined(__APPLE__) && defined(__clang__)
2378                         #error "__thread does not currently work with clang on Mac OS X"
2379                         #endif
2380                         
2381                         #include <pthread.h>
2382                         __thread int i;
2383                         static int res1, res2;
2385                         void thread_main (void *arg)
2386                         {
2387                                 i = arg;
2388                                 sleep (1);
2389                                 if (arg == 1)
2390                                         res1 = (i == arg);
2391                                 else
2392                                         res2 = (i == arg);
2393                         }
2395                         int main () {
2396                                 pthread_t t1, t2;
2398                                 i = 5;
2400                                 pthread_create (&t1, NULL, thread_main, 1);
2401                                 pthread_create (&t2, NULL, thread_main, 2);
2403                                 pthread_join (t1, NULL);
2404                                 pthread_join (t2, NULL);
2406                                 return !(res1 + res2 == 2);
2407                         }
2408                 ], [
2409                                 AC_MSG_RESULT(yes)
2410                 ], [
2411                                 AC_MSG_RESULT(no)
2412                                 with_tls=pthread
2413                 ])
2414         fi
2416         dnl **************************************
2417         dnl *** Checks for working sigaltstack ***
2418         dnl **************************************
2419         AC_MSG_CHECKING(for working sigaltstack)
2420         if test "x$with_sigaltstack" != "xyes"; then
2421                 AC_MSG_RESULT(disabled)
2422         elif test "x$cross_compiling" = "xyes"; then
2423                 AC_MSG_RESULT(cross compiling, assuming yes)
2424         else
2425                 AC_TRY_RUN([
2426                         #include <stdio.h>
2427                         #include <stdlib.h>
2428                         #include <unistd.h>
2429                         #include <signal.h>
2430                         #include <pthread.h>
2431                         #include <sys/wait.h>
2432                         #if defined(__FreeBSD__) || defined(__NetBSD__)
2433                         #define SA_STACK SA_ONSTACK
2434                         #endif
2435                         static void
2436                         sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2437                         {
2438                                 exit (0);
2439                         }
2441                         volatile char*__ptr = NULL;
2442                         static void *
2443                         loop (void *ignored)
2444                         {
2445                                 *__ptr = 0;
2446                                 return NULL;
2447                         }
2449                         static void
2450                         child ()
2451                         {
2452                                 struct sigaction sa;
2453                                 stack_t sas;
2454                                 pthread_t id;
2455                                 pthread_attr_t attr;
2457                                 sa.sa_sigaction = sigsegv_signal_handler;
2458                                 sigemptyset (&sa.sa_mask);
2459                                 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2460                                 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2461                                         perror ("sigaction");
2462                                         return;
2463                                 }
2465                                 /* x86 darwin deliver segfaults using SIGBUS */
2466                                 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2467                                         perror ("sigaction");
2468                                         return;
2469                                 }
2470                                 sas.ss_sp = malloc (SIGSTKSZ);
2471                                 sas.ss_size = SIGSTKSZ;
2472                                 sas.ss_flags = 0;
2473                                 if (sigaltstack (&sas, NULL) == -1) {
2474                                         perror ("sigaltstack");
2475                                         return;
2476                                 }
2478                                 pthread_attr_init (&attr);
2479                                 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2480                                         printf ("pthread_create\n");
2481                                         return;
2482                                 }
2484                                 sleep (100);
2485                         }
2487                         int
2488                         main ()
2489                         {
2490                                 pid_t son;
2491                                 int status;
2492                                 int i;
2494                                 son = fork ();
2495                                 if (son == -1) {
2496                                         return 1;
2497                                 }
2499                                 if (son == 0) {
2500                                         child ();
2501                                         return 0;
2502                                 }
2504                                 for (i = 0; i < 300; ++i) {
2505                                         waitpid (son, &status, WNOHANG);
2506                                         if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2507                                                 return 0;
2508                                         usleep (10000);
2509                                 }
2511                                 kill (son, SIGKILL);
2512                                 return 1;
2513                         }
2515                 ], [
2516                                 AC_MSG_RESULT(yes)
2517                                 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2518                 ], [
2519                                 with_sigaltstack=no
2520                                 AC_MSG_RESULT(no)
2521                 ])
2522         fi
2524         dnl ********************************
2525         dnl *** Checks for semaphore lib ***
2526         dnl ********************************
2527         # 'Real Time' functions on Solaris
2528         # posix4 on Solaris 2.6
2529         # pthread (first!) on Linux
2530         AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
2532         AC_SEARCH_LIBS(shm_open, pthread rt posix4) 
2533         AC_CHECK_FUNCS(shm_open)
2535         dnl ********************************
2536         dnl *** Checks for timezone stuff **
2537         dnl ********************************
2538         AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2539                 AC_TRY_COMPILE([
2540                         #include <time.h>
2541                         ], [
2542                         struct tm tm;
2543                         tm.tm_gmtoff = 1;
2544                         ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2545         if test $ac_cv_struct_tm_gmtoff = yes; then
2546                 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2547         else
2548                 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2549                         AC_TRY_COMPILE([
2550                                 #include <time.h>
2551                         ], [
2552                                 timezone = 1;
2553                         ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2554                 if test $ac_cv_var_timezone = yes; then
2555                         AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2556                 else
2557                         AC_ERROR(unable to find a way to determine timezone)
2558                 fi
2559         fi
2561         dnl *********************************
2562         dnl *** Checks for math functions ***
2563         dnl *********************************
2564         AC_SEARCH_LIBS(sqrtf, m)
2565         if test "x$has_broken_apple_cpp" != "xyes"; then
2566                 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2567                         AC_TRY_LINK([#include <math.h>], 
2568                         [ finite(0.0); ], 
2569                         AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2570                         AC_MSG_RESULT(no)))
2571         fi
2572         AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2573                 AC_TRY_LINK([#include <math.h>], 
2574                 [ isfinite(0.0); ], 
2575                 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2576                 AC_MSG_RESULT(no)))
2578         dnl ****************************************************************
2579         dnl *** Checks for working poll() (macosx defines it but doesn't ***
2580         dnl *** have it in the library (duh))                            ***
2581         dnl ****************************************************************
2582         AC_CHECK_FUNCS(poll)
2584         dnl *************************
2585         dnl *** Check for signbit ***
2586         dnl *************************
2587         AC_MSG_CHECKING(for signbit)
2588         AC_TRY_LINK([#include <math.h>], [
2589                 int s = signbit(1.0);
2590         ], [
2591                 AC_MSG_RESULT(yes)
2592                 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2593         ], [
2594                 AC_MSG_RESULT(no)
2595         ]) 
2597         dnl **********************************
2598         dnl *** epoll                      ***
2599         dnl **********************************
2600         AC_CHECK_HEADERS(sys/epoll.h)
2601         haveepoll=no
2602         AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2603         if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2604                 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2605         fi
2607         havekqueue=no
2609         AC_CHECK_HEADERS(sys/event.h)
2610         AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2612         dnl **************************************
2613         dnl * Darwin has a race that prevents us from using reliably:
2614         dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2615         dnl * Since kqueue is mostly used for scaling large web servers, 
2616         dnl * and very few folks run Mono on large web servers on OSX, falling
2617         dnl * back 
2618         dnl **************************************
2619         if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2620                 if test "x$host_darwin" = "xno"; then
2621                         AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2622                 fi
2623         fi
2625         dnl ******************************
2626         dnl *** Checks for SIOCGIFCONF ***
2627         dnl ******************************
2628         AC_CHECK_HEADERS(sys/ioctl.h)
2629         AC_CHECK_HEADERS(net/if.h, [], [],
2630            [
2631            #ifdef HAVE_SYS_TYPES_H
2632            # include <sys/types.h>
2633            #endif
2634            #ifdef HAVE_SYS_SOCKET_H
2635            # include <sys/socket.h>
2636            #endif
2637            ])
2638         AC_MSG_CHECKING(for ifreq)
2639         AC_TRY_COMPILE([
2640                 #include <stdio.h>
2641                 #include <sys/ioctl.h>
2642                 #include <net/if.h>
2643                 ], [
2644                 struct ifconf ifc;
2645                 struct ifreq *ifr;
2646                 void *x;
2647                 ifc.ifc_len = 0;
2648                 ifc.ifc_buf = NULL;
2649                 x = (void *) &ifr->ifr_addr;
2650                 ],[
2651                         AC_MSG_RESULT(yes)
2652                         AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2653                 ], [
2654                         AC_MSG_RESULT(no)
2655                 ])
2656         dnl **********************************
2657         dnl ***     Checks for sin_len     ***
2658         dnl **********************************
2659         AC_MSG_CHECKING(for sockaddr_in.sin_len)
2660         AC_TRY_COMPILE([
2661                 #include <netinet/in.h>
2662                 ], [
2663                 struct sockaddr_in saddr;
2664                 saddr.sin_len = sizeof (saddr);
2665                 ],[
2666                         AC_MSG_RESULT(yes)
2667                         AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2668                 ], [
2669                         AC_MSG_RESULT(no)
2670                 ])      
2671         dnl **********************************
2672         dnl ***    Checks for sin6_len     ***
2673         dnl **********************************
2674         AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2675         AC_TRY_COMPILE([
2676                 #include <netinet/in.h>
2677                 ], [
2678                 struct sockaddr_in6 saddr6;
2679                 saddr6.sin6_len = sizeof (saddr6);
2680                 ],[
2681                         AC_MSG_RESULT(yes)
2682                         AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2683                 ], [
2684                         AC_MSG_RESULT(no)
2685                 ])
2686         dnl **********************************
2687         dnl *** Check for getifaddrs       ***
2688         dnl **********************************
2689         AC_MSG_CHECKING(for getifaddrs)
2690                 AC_TRY_LINK([
2691                 #include <stdio.h>
2692                 #include <sys/types.h>
2693                 #include <sys/socket.h>
2694                 #include <ifaddrs.h>
2695         ], [
2696                 getifaddrs(NULL);
2697         ], [
2698                 # Yes, we have it...
2699                 AC_MSG_RESULT(yes)
2700                 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2701         ], [
2702                 AC_MSG_RESULT(no)
2703         ])
2704         dnl **********************************
2705         dnl *** Check for if_nametoindex   ***
2706         dnl **********************************
2707         AC_MSG_CHECKING(for if_nametoindex)
2708                 AC_TRY_LINK([
2709                 #include <stdio.h>
2710                 #include <sys/types.h>
2711                 #include <sys/socket.h>
2712                 #include <net/if.h>
2713         ], [
2714                 if_nametoindex(NULL);
2715         ], [
2716                 # Yes, we have it...
2717                 AC_MSG_RESULT(yes)
2718                 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2719         ], [
2720                 AC_MSG_RESULT(no)
2721         ])
2722         dnl **********************************
2723         dnl *** Check for access ***
2724         dnl **********************************
2725         AC_MSG_CHECKING(for access)
2726                 AC_TRY_LINK([
2727                 #include <unistd.h>
2728         ], [
2729                 access(NULL,0);
2730         ], [
2731                 # Yes, we have it...
2732                 AC_MSG_RESULT(yes)
2733                 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2734         ], [
2735                 AC_MSG_RESULT(no)
2736         ])
2737                         
2738         dnl **********************************
2739         dnl *** Checks for proclib         ***
2740         dnl **********************************
2741         AC_CHECK_HEADER(sys/errno.h, [AC_DEFINE(HAVE_SYS_ERRNO_H, 1, Define to 1 if you have the <sys/errno.h> header file.)])
2742         dnl **********************************
2743         dnl *** Checks for MonoPosixHelper ***
2744         dnl **********************************
2745         AC_CHECK_HEADERS(checklist.h)
2746         AC_CHECK_HEADERS(pathconf.h)
2747         AC_CHECK_HEADERS(fstab.h)
2748         AC_CHECK_HEADERS(attr/xattr.h)
2749         AC_CHECK_HEADERS(sys/extattr.h)
2750         AC_CHECK_HEADERS(sys/sendfile.h)
2751         AC_CHECK_HEADERS(sys/statvfs.h)
2752         AC_CHECK_HEADERS(sys/statfs.h)
2753         AC_CHECK_HEADERS(sys/vfstab.h)
2754         AC_CHECK_HEADERS(sys/xattr.h)
2755         AC_CHECK_HEADERS(sys/mman.h)
2756         AC_CHECK_HEADERS(sys/param.h)
2757         AC_CHECK_HEADERS(sys/mount.h, [], [],
2758                 [
2759                 #ifdef HAVE_SYS_PARAM_H
2760                 # include <sys/param.h>
2761                 #endif
2762                 ])
2763         AC_CHECK_HEADERS(sys/mount.h)
2764         AC_CHECK_FUNCS(confstr)
2765         AC_CHECK_FUNCS(seekdir telldir)
2766         AC_CHECK_FUNCS(getdomainname)
2767         AC_CHECK_FUNCS(setdomainname)
2768         AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2769         AC_CHECK_FUNCS(setgroups)
2770         AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2771         AC_CHECK_FUNCS(getfsstat)
2772         AC_CHECK_FUNCS(lutimes futimes)
2773         AC_CHECK_FUNCS(mremap)
2774         AC_CHECK_FUNCS(remap_file_pages)
2775         AC_CHECK_FUNCS(posix_fadvise)
2776         AC_CHECK_FUNCS(posix_fallocate)
2777         AC_CHECK_FUNCS(posix_madvise)
2778         AC_CHECK_FUNCS(vsnprintf)
2779         AC_CHECK_FUNCS(sendfile)
2780         AC_CHECK_FUNCS(gethostid sethostid)
2781         AC_CHECK_FUNCS(sethostname)
2782         AC_CHECK_FUNCS(statfs)
2783         AC_CHECK_FUNCS(fstatfs)
2784         AC_CHECK_FUNCS(statvfs)
2785         AC_CHECK_FUNCS(fstatvfs)
2786         AC_CHECK_FUNCS(stime)
2787         AC_CHECK_FUNCS(ttyname_r)
2788         AC_CHECK_FUNCS(psignal)
2789         AC_CHECK_FUNCS(getlogin_r)
2790         AC_CHECK_FUNCS(lockf)
2791         AC_CHECK_FUNCS(swab)
2792         AC_CHECK_FUNCS(setusershell endusershell)
2793         AC_CHECK_FUNCS(futimens utimensat)
2794         AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2795         AC_CHECK_FUNCS(readv writev preadv pwritev)
2796         AC_CHECK_FUNCS(setpgid)
2797         AC_CHECK_FUNCS(system)
2798         AC_CHECK_FUNCS(fork execv execve)
2799         AC_CHECK_FUNCS(accept4)
2800         AC_CHECK_FUNCS(localtime_r)
2801         AC_CHECK_FUNCS(mkdtemp)
2802         AC_CHECK_SIZEOF(size_t)
2803         AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
2804                 [#include <sys/types.h>
2805                  #include <sys/stat.h>
2806                  #include <unistd.h>])
2807         AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2808                 [#include <sys/types.h>
2809                  #include <sys/stat.h>
2810                  #include <unistd.h>])
2811         AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2812                 [#include <sys/time.h>])
2813         AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2814                 [#include <sys/socket.h>])
2815         AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2816                 [#include <unistd.h>
2817                  #include <fcntl.h>])
2818         AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2819                 [#include <sys/uio.h>])
2820         AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2821                 [#include <sys/socket.h>])
2822         AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2823                 [#include <sys/poll.h>])
2824         AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2825                 [#include <sys/socket.h>])
2826         AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2827                 [#include <sys/socket.h>])
2828         AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2829                 [#include <netinet/in.h>])
2830         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2831                 [#include <netinet/in.h>])
2832         AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2833                 [#include <sys/un.h>])
2834         AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2835                 [#include <sys/types.h>
2836                  #include <sys/stat.h>
2837                  #include <unistd.h>])
2838         AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2839                 [#include <time.h>])
2840         AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2841                 [#include <sys/time.h>
2842                  #include <sys/types.h>
2843                  #include <utime.h>])
2844         AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2845                 [#include <sys/time.h>])
2846         AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2847                 [#include <sys/types.h>
2848                  #include <utime.h>])
2849         AC_CHECK_MEMBERS(
2850                 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,, 
2851                 [#include <sys/types.h>
2852                  #include <dirent.h>])
2853         AC_CHECK_MEMBERS(
2854                 [struct passwd.pw_gecos],,, 
2855                 [#include <sys/types.h>
2856                  #include <pwd.h>])
2857         AC_CHECK_MEMBERS(
2858                 [struct statfs.f_flags],,, 
2859                 [#include <sys/types.h>
2860                  #include <sys/vfs.h>])
2861         AC_CHECK_MEMBERS(
2862                 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,, 
2863                 [#include <sys/types.h>
2864                  #include <sys/stat.h>
2865                  #include <unistd.h>])
2867         dnl Favour xattr through glibc, but use libattr if we have to
2868         AC_CHECK_FUNC(lsetxattr, ,
2869                 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2870         )
2871         AC_SUBST(XATTR_LIB)
2873         dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2874         AC_CHECK_MEMBERS(
2875                 [struct kinfo_proc.kp_proc],,, 
2876                 [#include <sys/types.h>
2877                  #include <sys/param.h>
2878                  #include <sys/sysctl.h>
2879                  #include <sys/proc.h>
2880                  ])
2882         dnl *********************************
2883         dnl *** Checks for Windows compilation ***
2884         dnl *********************************
2885         AC_CHECK_HEADERS(sys/time.h)
2886         AC_CHECK_HEADERS(sys/param.h)
2887         AC_CHECK_HEADERS(dirent.h)
2889         dnl ******************************************
2890         dnl *** Checks for OSX and iOS compilation ***
2891         dnl ******************************************
2892         AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2894         dnl *********************************
2895         dnl *** Check for Console 2.0 I/O ***
2896         dnl *********************************
2897         AC_CHECK_HEADERS([curses.h])
2898         AC_CHECK_HEADERS([term.h], [], [],
2899         [#if HAVE_CURSES_H
2900          #include <curses.h>
2901          #endif
2902         ])
2903         AC_CHECK_HEADERS([termios.h])
2905         dnl *********************************
2906         dnl *** Checks for random         ***
2907         dnl *********************************
2908         if test x$host_darwin = xno; then
2909                 AC_CHECK_HEADERS(sys/random.h)
2910                 AC_CHECK_FUNCS(getrandom getentropy)
2911         fi
2913         dnl *********************************
2914         dnl *** Checks for System.Native  ***
2915         dnl *********************************
2917         AC_MSG_CHECKING(for linux/in.h)
2918         AC_TRY_COMPILE([
2919                 #include <sys/socket.h>
2920                 #include <linux/in.h>
2921         ], [
2922         ],[
2923                 AC_MSG_RESULT(yes)
2924                 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
2925         ], [
2926                 AC_MSG_RESULT(no)
2927         ])
2929         AC_MSG_CHECKING(for struct in_pktinfo)
2930         AC_TRY_COMPILE([
2931                 #ifdef HAVE_LINUX_IN_H
2932                 #include <sys/socket.h>
2933                 #include <linux/in.h>
2934                 #else
2935                 #include <netinet/in.h>
2936                 #endif
2937         ], [
2938                 struct in_pktinfo pktinfo;
2939         ],[
2940                 AC_MSG_RESULT(yes)
2941                 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
2942         ], [
2943                 AC_MSG_RESULT(no)
2944         ])
2946         AC_MSG_CHECKING(for struct ip_mreqn)
2947         AC_TRY_COMPILE([
2948                 #if HAVE_LINUX_IN_H
2949                 #include <sys/socket.h>
2950                 #include <linux/in.h>
2951                 #else
2952                 #include <netinet/in.h>
2953                 #endif
2954         ], [
2955                 struct ip_mreqn mreqn;
2956         ],[
2957                 AC_MSG_RESULT(yes)
2958                 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
2959         ], [
2960                 AC_MSG_RESULT(no)
2961         ])
2963         if test x$host_darwin = xno; then
2964                 AC_MSG_CHECKING(for struct flock64)
2965                 AC_TRY_COMPILE([
2966                         #include <fcntl.h>
2967                 ], [
2968                         struct flock64;
2969                 ],[
2970                         AC_MSG_RESULT(yes)
2971                         AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)
2972                 ], [
2973                         AC_MSG_RESULT(no)
2974                 ])
2975         fi
2977         AC_CHECK_FUNC(lseek64,           [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
2978         AC_CHECK_FUNC(mmap64,            [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
2979         AC_CHECK_FUNC(ftruncate64,       [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
2980         AC_CHECK_FUNC(posix_fadvise64,   [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
2981         AC_CHECK_FUNC(stat64,            [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
2982         AC_CHECK_DECL(pipe2,             [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
2983         AC_CHECK_FUNC(getmntinfo,        [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
2984         AC_CHECK_FUNC(strcpy_s,          [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
2985         AC_CHECK_FUNC(strlcpy,           [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
2986         AC_CHECK_FUNC(posix_fadvise,     [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
2987         AC_CHECK_FUNC(ioctl,             [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
2988         AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
2989         AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
2990         AC_CHECK_DECL(TIOCGWINSZ,        [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
2991         AC_CHECK_FUNC(tcgetattr,         [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
2992         AC_CHECK_FUNC(tcsetattr,         [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
2993         AC_CHECK_DECL(ECHO,              [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
2994         AC_CHECK_DECL(ICANON,            [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
2995         AC_CHECK_DECL(TCSANOW,           [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
2997         AC_CHECK_MEMBER(struct stat.st_birthtimespec, [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtime])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
2998         AC_CHECK_MEMBER(struct stat.st_atimespec,     [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
2999         AC_CHECK_MEMBER(struct stat.st_atim,          [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3000         AC_CHECK_MEMBER(struct stat.st_atimensec,     [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3001         AC_CHECK_MEMBER(struct dirent.d_namlen,       [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3002         AC_CHECK_MEMBER(struct statfs.f_fstypename,   [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3003         AC_CHECK_MEMBER(struct statvfs.f_fstypename,  [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3005         AC_MSG_CHECKING(for struct statfs)
3006         AC_TRY_COMPILE([
3007                 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3008                 #include <sys/mount.h>
3009                 #else
3010                 #include <sys/statfs.h>
3011                 #endif
3012         ], [
3013                 struct statfs;
3014         ],[
3015                 AC_MSG_RESULT(yes)
3016                 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3017         ], [
3018                 AC_MSG_RESULT(no)
3019         ])
3021         if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3022                 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3023         fi
3025         AC_MSG_CHECKING(for readdir_r)
3026         AC_TRY_COMPILE([
3027                 #include <dirent.h>
3028         ], [
3029                 DIR* dir;
3030                 struct dirent* entry;
3031                 struct dirent* result;
3032                 readdir_r(dir, entry, &result);
3033         ],[
3034                 AC_MSG_RESULT(yes)
3035                 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3036         ], [
3037                 AC_MSG_RESULT(no)
3038         ])
3040         AC_MSG_CHECKING(for kevent with void *data)
3041         AC_TRY_COMPILE([
3042                 #include <sys/types.h>
3043                 #include <sys/event.h>
3044         ], [
3045                 struct kevent event;
3046                 void* data;
3047                 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3048         ],[
3049                 AC_MSG_RESULT(yes)
3050                 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3051         ], [
3052                 AC_MSG_RESULT(no)
3053         ])
3055         AC_CHECK_MEMBER(struct fd_set.fds_bits,   [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3056         AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3058         AC_MSG_CHECKING(for sendfile with 4 arguments)
3059         AC_TRY_COMPILE([
3060                 #include <sys/sendfile.h>
3061         ], [
3062                 int result = sendfile(0, 0, 0, 0);
3063         ],[
3064                 AC_MSG_RESULT(yes)
3065                 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3066         ], [
3067                 AC_MSG_RESULT(no)
3068         ])
3070         AC_MSG_CHECKING(for sendfile with 6 arguments)
3071         AC_TRY_COMPILE([
3072                 #include <stdlib.h>
3073                 #include <sys/types.h>
3074                 #include <sys/socket.h>
3075                 #include <sys/uio.h>
3076         ], [
3077                 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3078         ],[
3079                 AC_MSG_RESULT(yes)
3080                 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3081         ], [
3082                 AC_MSG_RESULT(no)
3083         ])
3085         AC_CHECK_FUNC(fcopyfile,     [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3086         AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3087         AC_CHECK_FUNC(accept4,       [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3088         AC_CHECK_FUNC(kqueue,        [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3090         ORIG_CFLAGS="$CFLAGS"
3091         CFLAGS="-Werror -Wsign-conversion"
3093         AC_MSG_CHECKING(for getnameinfo with signed flags)
3094         AC_TRY_COMPILE([
3095                 #include <sys/types.h>
3096                 #include <netdb.h>
3097         ], [
3098                 const struct sockaddr *addr;
3099                 socklen_t addrlen;
3100                 char *host;
3101                 socklen_t hostlen;
3102                 char *serv;
3103                 socklen_t servlen;
3104                 int flags;
3105                 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3106         ],[
3107                 AC_MSG_RESULT(yes)
3108                 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3109         ], [
3110                 AC_MSG_RESULT(no)
3111         ])
3113         CFLAGS="$ORIG_CFLAGS"
3115         if test "x$host_linux" = "xyes"; then
3116                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3117         else
3118                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3119         fi
3121         ORIG_CFLAGS="$CFLAGS"
3122         CFLAGS="-Werror -Wsign-conversion"
3124         AC_MSG_CHECKING(for bind with unsigned addrlen)
3125         AC_TRY_COMPILE([
3126                 #include <sys/socket.h>
3127         ], [
3128                 int fd;
3129                 struct sockaddr* addr;
3130                 socklen_t addrLen;
3131                 bind(fd, addr, addrLen);
3132         ],[
3133                 AC_MSG_RESULT(yes)
3134                 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3135         ], [
3136                 AC_MSG_RESULT(no)
3137         ])
3139         AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3140         AC_TRY_COMPILE([
3141                 #include <netinet/in.h>
3142                 #include <netinet/tcp.h>
3143         ], [
3144                 struct ipv6_mreq opt;
3145                 unsigned int index = 0;
3146                 opt.ipv6mr_interface = index;
3147         ],[
3148                 AC_MSG_RESULT(yes)
3149                 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3150         ], [
3151                 AC_MSG_RESULT(no)
3152         ])
3154         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3155         AC_TRY_COMPILE([
3156                 #include <sys/inotify.h>
3157         ], [
3158                 intptr_t fd;
3159                 uint32_t wd;
3160                 int result = inotify_rm_watch(fd, wd);
3161         ],[
3162                 AC_MSG_RESULT(yes)
3163                 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3164         ], [
3165                 AC_MSG_RESULT(no)
3166         ])
3168         CFLAGS="$ORIG_CFLAGS"
3170         AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3171         if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3172                 AC_MSG_RESULT(no)
3173         else
3174                 AC_TRY_RUN([
3175                         #include <sys/mman.h>
3176                         #include <fcntl.h>
3177                         #include <unistd.h>
3179                         int main ()
3180                         {
3181                                 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3182                                 if (fd == -1)
3183                                         return -1;
3185                                 shm_unlink("/mono_configure_shm_open");
3187                                 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3188                                 //       on at least the current version of Mac OS X
3190                                 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3191                                         return -1;
3193                                 return 0;
3194                         }
3195                 ],[
3196                         AC_MSG_RESULT(yes)
3197                         AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3198                 ], [
3199                         AC_MSG_RESULT(no)
3200                 ])
3201         fi
3203         AC_MSG_CHECKING(for getpriority with int who)
3204         AC_TRY_COMPILE([
3205                 #include <sys/resource.h>
3206         ], [
3207                 int which;
3208                 int who;
3209                 int result = getpriority(which, who);
3210         ],[
3211                 AC_MSG_RESULT(yes)
3212                 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3213         ], [
3214                 AC_MSG_RESULT(no)
3215         ])
3217         AC_MSG_CHECKING(for kevent with int parameters)
3218         AC_TRY_COMPILE([
3219                 #include <sys/types.h>
3220                 #include <sys/event.h>
3221         ], [
3222                 int kg;
3223                 const struct kevent* chagelist;
3224                 int nchanges;
3225                 struct kevent* eventlist;
3226                 int nevents;
3227                 const struct timespec* timeout;
3228                 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3229         ],[
3230                 AC_MSG_RESULT(yes)
3231                 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3232         ], [
3233                 AC_MSG_RESULT(no)
3234         ])
3236         ORIG_CFLAGS="$CFLAGS"
3237         CFLAGS="-Werror -Wimplicit-function-declaration"
3239         AC_MSG_CHECKING(for mkstemps)
3240         AC_TRY_COMPILE([
3241                 #include <stdlib.h>
3242                 #include <unistd.h>
3243                 #include <string.h>
3244         ], [
3245                 char *template;
3246                 int suffixlen;
3247                 int result = mkstemps(template, suffixlen);
3248         ],[
3249                 AC_MSG_RESULT(yes)
3250                 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3251                 have_mkstemps=yes
3252         ], [
3253                 AC_MSG_RESULT(no)
3254         ])
3256         CFLAGS="$ORIG_CFLAGS"
3258         if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3259                 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3260         fi
3262         AC_MSG_CHECKING(for tcp/var.h)
3263         AC_TRY_COMPILE([
3264                 #include <sys/types.h>
3265                 #include <sys/socketvar.h>
3266                 #include <netinet/ip.h>
3267                 #include <netinet/tcp.h>
3268                 #include <netinet/tcp_var.h>
3269         ], [
3270         ],[
3271                 AC_MSG_RESULT(yes)
3272                 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3273         ], [
3274                 AC_MSG_RESULT(no)
3275         ])
3277         AC_CHECK_HEADERS([sys/cdefs.h])
3279         AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3280         AC_TRY_COMPILE([
3281                 #ifdef HAVE_SYS_CDEFS_H
3282                 #include <sys/cdefs.h>
3283                 #endif
3284                 #include <netinet/tcp.h>
3285         ], [
3286                 int result = TCP_ESTABLISHED;
3287         ],[
3288                 AC_MSG_RESULT(yes)
3289                 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3290         ], [
3291                 AC_MSG_RESULT(no)
3292         ])
3294         AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3296         AC_MSG_CHECKING(for struct rt_msghdr)
3297         AC_TRY_COMPILE([
3298                 #include <sys/types.h>
3299                 #include <net/route.h>
3300         ], [
3301                 struct rt_msghdr;
3302         ],[
3303                 AC_MSG_RESULT(yes)
3304                 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3305         ], [
3306                 AC_MSG_RESULT(no)
3307         ])
3309         AC_CHECK_HEADERS([sys/sysctl.h])
3310         AC_CHECK_HEADERS([linux/rtnetlink.h])
3312         AC_CHECK_FUNC(getpeereid,    [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3313         AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3314         AC_CHECK_FUNC(uname,         [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3316         ORIG_CFLAGS="$CFLAGS"
3317         CFLAGS="-Werror -Weverything"
3319         AC_MSG_CHECKING(for getdomainname with size_t namelen)
3320         AC_TRY_COMPILE([
3321                 #include <unistd.h>
3322         ], [
3323                 size_t namelen = 20;
3324                 char name[20];
3325                 int result = getdomainname(name, namelen);
3326         ],[
3327                 AC_MSG_RESULT(yes)
3328                 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3329         ], [
3330                 AC_MSG_RESULT(no)
3331         ])
3333         CFLAGS="$ORIG_CFLAGS"
3335         AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3336         AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3337         AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3339         if test "x$ac_cv_func_inotify_init" = "xyes" -a "x$ac_cv_func_inotify_add_watch" = "xyes" -a "x$ac_cv_func_inotify_rm_watch" = "xyes"; then
3340                 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3341         elif test "x$host_linux" = "xyes"; then
3342                 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3343         fi
3345         AC_CHECK_HEADERS([crt_externs.h])
3347         AC_MSG_CHECKING(for _NSGetEnviron)
3348         AC_TRY_COMPILE([
3349                 #include <crt_externs.h>
3350         ], [
3351                 char **result = *(_NSGetEnviron());
3352         ],[
3353                 AC_MSG_RESULT(yes)
3354                 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3355         ], [
3356                 AC_MSG_RESULT(no)
3357         ])
3359         AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3361 else
3362         dnl *********************************
3363         dnl *** Checks for Windows compilation ***
3364         dnl *********************************
3365         AC_CHECK_HEADERS(winternl.h)
3367         jdk_headers_found=no
3368         AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3369         AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3370         AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3371         AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3372         AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3373         AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3374         AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3376         dnl *********************************
3377         dnl *** Check for struct ip_mreqn ***
3378         dnl *********************************
3379         AC_MSG_CHECKING(for struct ip_mreqn)
3380         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3381                 struct ip_mreqn mreq;
3382                 mreq.imr_address.s_addr = 0;
3383         ], [
3384                 # Yes, we have it...
3385                 AC_MSG_RESULT(yes)
3386                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3387         ], [
3388                 # We'll just have to try and use struct ip_mreq
3389                 AC_MSG_RESULT(no)
3390                 AC_MSG_CHECKING(for struct ip_mreq)
3391                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3392                         struct ip_mreq mreq;
3393                         mreq.imr_interface.s_addr = 0;
3394                 ], [
3395                         # Yes, we have it...
3396                         AC_MSG_RESULT(yes)
3397                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3398                 ], [
3399                         # No multicast support
3400                         AC_MSG_RESULT(no)
3401                 ])
3402         ])
3404         dnl **********************************
3405         dnl *** Check for getaddrinfo ***
3406         dnl **********************************
3407         AC_MSG_CHECKING(for getaddrinfo)
3408                 AC_TRY_LINK([
3409                 #include <stdio.h>
3410                 #include <winsock2.h>
3411                 #include <ws2tcpip.h>
3412         ], [
3413                 getaddrinfo(NULL,NULL,NULL,NULL);
3414         ], [
3415                 # Yes, we have it...
3416                 AC_MSG_RESULT(yes)
3417                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3418         ], [
3419                 AC_MSG_RESULT(no)
3420         ])
3422         dnl **********************************
3423         dnl *** Check for gethostbyname ***
3424         dnl **********************************
3425         AC_MSG_CHECKING(for gethostbyname)
3426                 AC_TRY_LINK([
3427                 #include <stdio.h>
3428                 #include <winsock2.h>
3429                 #include <ws2tcpip.h>
3430         ], [
3431                 gethostbyname(NULL);
3432         ], [
3433                 # Yes, we have it...
3434                 AC_MSG_RESULT(yes)
3435                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3436         ], [
3437                 AC_MSG_RESULT(no)
3438         ])
3440         dnl **********************************
3441         dnl *** Check for getprotobyname ***
3442         dnl **********************************
3443         AC_MSG_CHECKING(for getprotobyname)
3444                 AC_TRY_LINK([
3445                 #include <stdio.h>
3446                 #include <winsock2.h>
3447                 #include <ws2tcpip.h>
3448         ], [
3449                 getprotobyname(NULL);
3450         ], [
3451                 # Yes, we have it...
3452                 AC_MSG_RESULT(yes)
3453                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3454         ], [
3455                 AC_MSG_RESULT(no)
3456         ])
3458         dnl **********************************
3459         dnl *** Check for getnameinfo ***
3460         dnl **********************************
3461         AC_MSG_CHECKING(for getnameinfo)
3462                 AC_TRY_LINK([
3463                 #include <stdio.h>
3464                 #include <winsock2.h>
3465                 #include <ws2tcpip.h>
3466         ], [
3467                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3468         ], [
3469                 # Yes, we have it...
3470                 AC_MSG_RESULT(yes)
3471                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3472         ], [
3473                 AC_MSG_RESULT(no)
3474         ])
3476         dnl **********************************
3477         dnl *** Check for inet_ntop ***
3478         dnl **********************************
3479         AC_MSG_CHECKING(for inet_ntop)
3480                 AC_TRY_LINK([
3481                 #include <stdio.h>
3482                 #include <winsock2.h>
3483                 #include <ws2tcpip.h>
3484         ], [
3485                 inet_ntop (0, NULL, NULL, 0);
3486         ], [
3487                 # Yes, we have it...
3488                 AC_MSG_RESULT(yes)
3489                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3490         ], [
3491                 AC_MSG_RESULT(no)
3492         ])
3494         dnl **********************************
3495         dnl *** Check for inet_pton ***
3496         dnl **********************************
3497         AC_MSG_CHECKING(for inet_pton)
3498                 AC_TRY_LINK([
3499                 #include <stdio.h>
3500                 #include <winsock2.h>
3501                 #include <ws2tcpip.h>
3502         ], [
3503                 #ifndef inet_pton
3504                 (void) inet_pton;
3505                 #endif
3506                 inet_pton (0, NULL, NULL);
3507         ], [
3508                 # Yes, we have it...
3509                 AC_MSG_RESULT(yes)
3510                 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3511         ], [
3512                 AC_MSG_RESULT(no)
3513         ])
3515         AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3516         AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3517         AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3518         AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3519         AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3520         AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3521         AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3524 dnl socklen_t check
3525 AC_MSG_CHECKING(for socklen_t)
3526 AC_TRY_COMPILE([
3527 #include <sys/types.h>
3528 #include <sys/socket.h>
3530   socklen_t foo;
3532 ac_cv_c_socklen_t=yes
3533         AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3534         AC_MSG_RESULT(yes)
3536         AC_MSG_RESULT(no)
3539 AC_MSG_CHECKING(for array element initializer support)
3540 AC_TRY_COMPILE([#include <sys/socket.h>], [
3541         const int array[] = {[1] = 2,};
3542 ], [
3543         # Yes, we have it...
3544         AC_MSG_RESULT(yes)
3545         AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
3546 ], [
3547         # We'll have to use signals
3548         AC_MSG_RESULT(no)
3551 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
3552         # Simply calling trunc (0.0) is no good since gcc will optimize the call away
3553         AC_TRY_LINK([#include <math.h>], 
3554         [ static void *p = &trunc; ],
3555         [
3556                 AC_DEFINE(HAVE_TRUNC) 
3557                 AC_MSG_RESULT(yes)
3558                 ac_cv_trunc=yes
3559         ],
3560         AC_MSG_RESULT(no)))
3562 if test "x$ac_cv_truncl" != "xyes"; then
3563    AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
3566 AC_CHECK_FUNCS(execvp)
3568 dnl ****************************
3569 dnl *** Look for /dev/random ***
3570 dnl ****************************
3572 AC_MSG_CHECKING([if usage of random device is requested])
3573 AC_ARG_ENABLE(dev-random,
3574 [  --disable-dev-random    disable the use of the random device (enabled by default)],
3575 try_dev_random=$enableval, try_dev_random=yes)
3577 AC_MSG_RESULT($try_dev_random)
3579 case "{$build}" in
3581 dnl IBM i does not have /dev/random, use unblocking only
3583     *-*-os400*)
3584     NAME_DEV_RANDOM="/dev/urandom"
3585     ;;
3587 dnl Win32 does not have /dev/random, they have their own method...
3589     *-mingw*|*-*-cygwin*)
3590     ac_cv_have_dev_random=no
3591     ;;
3593 dnl Everywhere else, it's /dev/random
3595     *)
3596     NAME_DEV_RANDOM="/dev/random"
3597     ;;
3598 esac
3600 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3602 dnl Now check if the device actually exists
3604 if test "x$try_dev_random" = "xyes"; then
3605     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3606     [if test -r "$NAME_DEV_RANDOM" ; then
3607         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3608     if test "x$ac_cv_have_dev_random" = "xyes"; then
3609         AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3610     fi
3611 else
3612     AC_MSG_CHECKING(for random device)
3613     ac_cv_have_dev_random=no
3614     AC_MSG_RESULT(has been disabled)
3617 if test "x$host_win32" = "xyes"; then
3618     AC_DEFINE(HAVE_CRYPT_RNG)
3621 if test "x$ac_cv_have_dev_random" = "xno" \
3622     && test "x$host_win32" = "xno"; then
3623     AC_MSG_WARN([[
3625 *** A system-provided entropy source was not found on this system.
3626 *** Because of this, the System.Security.Cryptography random number generator
3627 *** will throw a NotImplemented exception.
3629 *** If you are seeing this message, and you know your system DOES have an
3630 *** entropy collection in place, please report an issue on GitHub and
3631 *** provide information about the system and how to access the random device.
3633 *** Otherwise you can install either egd or prngd and set the environment
3634 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3635 ***]])
3638 AC_ARG_ENABLE(bcl-opt, [  --disable-bcl-opt     BCL is compiled with no optimizations (allows accurate BCL debugging)], test_bcl_opt=$enableval, test_bcl_opt=yes)
3640 AC_MSG_CHECKING([if big-arrays are to be enabled])
3641 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)
3642 if test "x$enable_big_arrays" = "xyes" ; then
3643     if  test "x$ac_cv_sizeof_void_p" = "x8"; then
3644         AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3645     else
3646         AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3647     fi
3649 AC_MSG_RESULT($enable_big_arrays)
3651 dnl **************
3652 dnl *** DTRACE ***
3653 dnl **************
3655 AC_ARG_ENABLE(dtrace,[  --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3657 if test "x$enable_dtrace" = "xyes"; then
3658    if test "x$has_dtrace" = "xno"; then
3659           AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3660    fi
3661    AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3662    if test "x$DTRACE" = "xno"; then
3663           AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3664           enable_dtrace=no
3665    elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3666           AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3667           enable_dtrace=no
3668    fi
3671 dtrace_g=no
3672 if test "x$enable_dtrace" = "xyes"; then
3673         AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3674         DTRACEFLAGS=
3675         if test "x$ac_cv_sizeof_void_p" = "x8"; then
3676                 case "$host" in
3677                         powerpc-*-darwin*)
3678                         DTRACEFLAGS="-arch ppc64"
3679                         ;;
3680                         i*86-*-darwin*)
3681                         DTRACEFLAGS="-arch x86_64"
3682                         ;;
3683                         *)
3684                         DTRACEFLAGS=-64
3685                         ;;
3686                 esac
3687         else
3688                 case "$host" in
3689                         powerpc-*-darwin*)
3690                         DTRACEFLAGS="-arch ppc"
3691                         ;;
3692                         i*86-*-darwin*)
3693                         DTRACEFLAGS="-arch i386"
3694                         ;;
3695                         *)
3696                         DTRACEFLAGS=-32
3697                         ;;
3698                 esac
3699         fi
3700         AC_SUBST(DTRACEFLAGS)
3701         case "$host" in
3702                 *-*-solaris*)
3703                 dtrace_g=yes
3704                 ;;
3705         esac
3706         AC_CHECK_HEADERS([sys/sdt.h])
3708 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3709 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3711 dnl **************************
3712 dnl *** AOT cross offsets  ***
3713 dnl **************************
3715 AC_ARG_WITH(cross-offsets, [  --with-cross-offsets=<offsets file path>    Explicit AOT cross offsets file],
3716     AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3718 dnl **************
3719 dnl ***  LLVM  ***
3720 dnl **************
3722 AC_ARG_ENABLE(llvm,[  --enable-llvm     Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3723 AC_ARG_ENABLE(loadedllvm,[  --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3724 AC_ARG_ENABLE(llvm-version-check,[  --enable-llvm-version-check Check that the LLVM matches the version expected by mono], enable_llvm_version_check=$enableval, enable_llvm_version_check=no)
3725 AC_ARG_ENABLE(llvm-runtime,[  --enable-llvm-runtime     Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3727 AC_ARG_WITH(llvm, [  --with-llvm=<llvm prefix>    Enable the LLVM back-end], enable_llvm=yes,)
3729 if test "x$enable_llvm" = "xdefault"; then
3730    enable_llvm=$enable_llvm_default
3733 if test "x$enable_llvm" = "xyes"; then
3734    if test "x$with_llvm" != "x"; then
3735           LLVM_CONFIG=$with_llvm/bin/llvm-config
3736           if test x$host_win32 = xyes; then
3737                 LLVM_CONFIG=$LLVM_CONFIG.exe
3738           fi
3739           if test ! -x $LLVM_CONFIG; then
3740                  AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3741       fi
3742    else
3743       AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3744       if test "x$LLVM_CONFIG" = "xno"; then
3745              AC_MSG_ERROR([llvm-config not found.])
3746       fi
3747    fi
3749    llvm_codegen="x86codegen"
3750    LLVM_ARCH_LIBS="-lLLVMX86Disassembler -lLLVMX86CodeGen -lLLVMX86AsmParser -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils"
3751    case "$target" in
3752    arm*)
3753                 llvm_codegen="armcodegen"
3754                 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3755                 ;;
3756    aarch64*)
3757                 llvm_codegen="aarch64codegen"
3758                 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3759                 ;;
3760    powerpc*)
3761                 llvm_codegen="powerpccodegen"
3762                 LLVM_ARCH_LIBS="-lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter"
3763                 ;;
3764    esac
3766    if test "x$host_win32" = "xno"; then
3768    # Should be something like '2.6' or '2.7svn'
3769    llvm_version=`$LLVM_CONFIG --version`
3770    llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3771    AC_MSG_CHECKING(LLVM version)
3772    AC_MSG_RESULT($llvm_version $llvm_api_version)
3773    if echo $llvm_version | grep -q 'mono'; then
3774           if test "x$enable_llvm_version_check" = "xyes"; then
3775                  if test "$llvm_version" != "$expected_llvm_version"; then
3776                         AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3777                  fi
3778           fi
3779    else
3780           AC_MSG_ERROR([Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm, with the GIT branch which matches this version of mono, i.e. 'mono-2-10' for Mono 2.10.])
3781    fi
3783    # The output of --cflags seems to include optimizations flags too
3784    if test $llvm_api_version -gt 100; then
3785           # The --cflags argument includes all kinds of warnings -pendantic etc.
3786           LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3787           LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3788    else
3789           LLVM_CFLAGS=`$LLVM_CONFIG --cflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
3790       LLVM_CXXFLAGS=`$LLVM_CONFIG --cxxflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
3791    fi
3792    # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3793    # from LLVM classes.
3794    LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3795    LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3796    # This might include empty lines
3797    LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3798    llvm_jit_supported=yes
3799    llvm_jit_libs="jit mcjit $llvm_codegen"
3800    if test "x$host" != "x$target"; then
3801       # No need for jit libs
3802           llvm_jit_supported=no
3803       llvm_jit_libs=""
3804    elif test $llvm_api_version -gt 100; then
3805       llvm_jit_libs="orcjit $llvm_codegen"
3806    fi
3807    LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3808    if test "x$LLVM_LIBS" = "x"; then
3809           echo "$LLVM_CONFIG --libs failed."
3810           exit 1
3811    fi
3812    LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3813    # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3814    if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3815       LLVM_LIBS="$LLVM_LIBS -lc++"
3816    else
3817       LLVM_LIBS="$LLVM_LIBS -lstdc++"
3818    fi
3820    expected_llvm_version="3.4svn-mono-mono/e656cac"
3822    else
3823        LLVM_CFLAGS="-I$with_llvm/include -DNDEBUG -D__NO_CTYPE_INLINE -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3824        LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3825        LLVM_LDFLAGS="-L$with_llvm/lib"
3826        LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3827        LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3828          -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMSelectionDAG -lLLVMAsmPrinter \
3829          -lLLVMMCDisassembler -lLLVMJIT -lLLVMAnalysis -lLLVMTarget \
3830          -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3831          -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3832          -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3833          -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3834          -lLLVMSupport -lstdc++"
3835        LLVM_LIBS="$LLVM_LIBS $LLVM_ARCH_LIBS $LLVM_SYSTEM_LIBS"
3837        llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3838        llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3839    fi  
3841    if test "x$llvm_api_version" = "x"; then
3842           LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3843           LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3844    else
3845           LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3846           LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3847    fi   
3849    AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3851    AC_SUBST(LLVM_CFLAGS)
3852    AC_SUBST(LLVM_CXXFLAGS)
3853    AC_SUBST(LLVM_LIBS)
3854    AC_SUBST(LLVM_LDFLAGS)
3855    AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3858 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3859 if test "x$enable_loadedllvm" = "xyes"; then
3860    AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3862 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3864 if test "x$enable_llvm" = "xyes"; then
3865    enable_llvm_runtime=yes
3867 if test "x$enable_llvm_runtime" = "xyes"; then
3868    AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3870 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3872 TARGET="unknown"
3873 ACCESS_UNALIGNED="yes"
3875 LIBC="libc.so.6"
3876 INTL="libc.so.6"
3877 SQLITE="libsqlite.so.0"
3878 SQLITE3="libsqlite3.so.0"
3879 X11="libX11.so"
3880 GDKX11="libgdk-x11-2.0.so.0"
3881 GTKX11="libgtk-x11-2.0.so.0"
3882 XINERAMA="libXinerama.so.1"
3884 sizeof_register="SIZEOF_VOID_P"
3886 jit_wanted=true
3887 boehm_supported=true
3888 BTLS_SUPPORTED=no
3889 BTLS_PLATFORM=
3891 if test "x$enable_wasm" = "xyes"; then
3892 TARGET=WASM
3893 HOST=WASM
3894 arch_target=wasm
3895 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3896 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3897 BTLS_SUPPORTED=no
3898 with_tls=pthread
3899 target_mach=no
3901 else
3903 case "$host" in
3904         mips*)
3905                 TARGET=MIPS;
3906                 arch_target=mips;
3907                 with_tls=pthread;
3908                 ACCESS_UNALIGNED="no"
3910                 AC_MSG_CHECKING(for mips n32)
3911                 AC_TRY_COMPILE([],[
3912                 #if _MIPS_SIM != _ABIN32
3913                 #error Not mips n32
3914                 #endif
3915                 ],[
3916                 AC_MSG_RESULT(yes)
3917                 sizeof_register=8
3918                 ],[
3919                 AC_MSG_RESULT(no)
3920                 ])
3921                 ;;
3922         i*86-*-*)
3923                 TARGET=X86;
3924                 arch_target=x86;
3925                 case $host_os in
3926                   solaris*)
3927                         LIBC="libc.so"
3928                         INTL="libintl.so"
3929                         if test "x$ac_cv_sizeof_void_p" = "x8"; then
3930                                 TARGET=AMD64
3931                                 arch_target=amd64
3932                         fi
3934                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3935                         # int astruct __attribute__ ((visibility ("hidden")));
3936                         # void foo ()
3937                         # {
3938                         #       void *p = &astruct;
3939                         # }
3940                         # gcc -fPIC --shared -o libfoo.so foo.c
3941                         # yields:
3942                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3943                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3944                         have_visibility_hidden=no
3945                         ;;
3946                   mingw*|cygwin*)
3947                         have_visibility_hidden=no                 
3948                         ;;
3949                   haiku*)
3950                         LIBC=libroot.so
3951                         ;;
3952                   linux*)
3953                         AOT_SUPPORTED="yes"
3954                         BTLS_SUPPORTED=yes
3955                         BTLS_PLATFORM=i386
3956                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3957                         ;;
3958                   darwin*)
3959                         AOT_SUPPORTED="yes"
3960                         BTLS_SUPPORTED=yes
3961                         BTLS_PLATFORM=i386
3962                         ;;
3963                   openbsd*|freebsd*|kfreebsd-gnu*)
3964                         AOT_SUPPORTED="yes"
3965                         BTLS_SUPPORTED=yes
3966                         BTLS_PLATFORM=i386
3967                         ;;
3968                 esac
3969                 ;;
3970         x86_64-*-* | amd64-*-*)
3971                 TARGET=AMD64;
3972                 arch_target=amd64;
3973                 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3974                         AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3975                         sizeof_register=8
3976                 fi
3977                 case $host_os in
3978                   linux*)
3979                         AOT_SUPPORTED="yes"
3980                         BTLS_SUPPORTED=yes
3981                         BTLS_PLATFORM=x86_64
3982                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3983                         ;;
3984                   darwin*)
3985                         AOT_SUPPORTED="yes"
3986                         BTLS_SUPPORTED=yes
3987                         BTLS_PLATFORM=x86_64
3988                         boehm_supported=false
3989                         ;;
3990                   openbsd*|freebsd*|kfreebsd-gnu*)
3991                         AOT_SUPPORTED="yes"
3992                         BTLS_SUPPORTED=yes
3993                         BTLS_PLATFORM=x86_64
3994                         ;;
3995                   mingw*)
3996                         ;;
3997                 esac
3998                 ;;
3999         sparc*-*-*)
4000                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4001                    TARGET=SPARC64
4002                 else
4003                         TARGET=SPARC
4004                 fi
4005                 arch_target=sparc;
4006                 ACCESS_UNALIGNED="no"
4007                 case $host_os in
4008                   linux*) ;;
4009                   *)
4010                         LIBC="libc.so"
4011                         INTL="libintl.so"
4012                 esac
4013                 if test x"$GCC" = xyes; then
4014                         # We don't support v8 cpus
4015                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4016                 fi
4017                 if test x"$AR" = xfalse; then
4018                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4019                 fi
4020                 ;;
4021         *-mingw*|*-*-cygwin*)
4022                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4023                 have_visibility_hidden=no
4024                 INTL="intl"
4025                 ;;
4026         macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4027         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4028         powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
4029                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4030                         TARGET=POWERPC64;
4031                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4032                         if ! (echo $CC | grep -q -- 'clang'); then
4033                                 CFLAGS="$CFLAGS -mminimal-toc"
4034                         fi
4035                 else
4036                         TARGET=POWERPC;
4037                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4038                 fi
4039                 arch_target=ppc;
4040                 case $host_os in
4041                   aix*|os400*)
4042                         BTLS_SUPPORTED=yes
4043                         BTLS_PLATFORM=powerpc
4044                         dnl on AIX/PASE, shared libraries can be inside archives
4045                         dnl if they are, we specify them by lib.a(lib.so)
4046                         dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4047                         LIBC="libc.a(shr_64.o)"
4048                         INTL="libintl.a(libintl.so.8)"
4049                         ;;
4050                   linux*)
4051                         BTLS_SUPPORTED=yes
4052                         BTLS_PLATFORM=powerpc
4053                         ;;
4054                 esac
4055                 ;;
4056         armv7k-*-darwin*)
4057                 TARGET=ARM;
4058                 TARGET_SYS=WATCHOS
4059                 arch_target=arm;
4060                 arm_fpu=VFP_HARD
4061                 ACCESS_UNALIGNED="no"
4062                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4063                 ;;
4065         arm*-darwin*)
4066                 TARGET=ARM;
4067                 arch_target=arm;
4068                 ACCESS_UNALIGNED="no"
4069                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4070                 ;;
4071         arm*-linux*)
4072                 TARGET=ARM;
4073                 arch_target=arm;
4074                 ACCESS_UNALIGNED="no"
4075                 AOT_SUPPORTED="yes"
4076                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4077                 BTLS_SUPPORTED=yes
4078                 BTLS_PLATFORM=arm
4079                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4080                 case "$target" in
4081                 arm*-linux*-gnueabi)
4082                         BTLS_PLATFORM=armsoft
4083                         ;;
4084                 esac
4085                 ;;
4086         arm*-netbsd*-eabi*)
4087                 TARGET=ARM;
4088                 arch_target=arm;
4089                 ACCESS_UNALIGNED="no"
4090                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4091                 ;;
4092         aarch64-*)
4093                 # https://lkml.org/lkml/2012/7/15/133
4094                 TARGET=ARM64
4095                 arch_target=arm64
4096                 boehm_supported=false
4097                 AOT_SUPPORTED="yes"
4098                 BTLS_SUPPORTED=yes
4099                 BTLS_PLATFORM=aarch64
4100                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4101                 ;;
4102         s390x-*-linux*)
4103                 TARGET=S390X;
4104                 arch_target=s390x;
4105                 ACCESS_UNALIGNED="yes"
4106                 BTLS_SUPPORTED=yes
4107                 BTLS_PLATFORM=s390x
4108                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4109                 ;;
4110 esac
4112 HOST=$TARGET
4114 if test "x$host" != "x$target"; then
4115    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4116    enable_mcs_build=no
4117    enable_support_build=no
4118    BTLS_SUPPORTED=no
4119    case "$target" in
4120    arm*-darwin*)
4121                 TARGET=ARM;
4122                 arch_target=arm;
4123                 ACCESS_UNALIGNED="no"
4124                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4125                 # Can't use tls, since it depends on the runtime detection of tls offsets
4126                 # in mono-compiler.h
4127                 with_tls=pthread
4128                 case "$target" in
4129                 armv7k-*)
4130                         arm_fpu=VFP_HARD
4131                         AC_DEFINE(TARGET_WATCHOS, 1, [...])
4132                         ;;
4133                 esac            
4134                 ;;
4135    powerpc64-ps3-linux-gnu)
4136                 TARGET=POWERPC64
4137                 arch_target=powerpc64
4138                 AC_DEFINE(TARGET_PS3, 1, [...])
4139                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4140                 # uses this define
4141                 AC_DEFINE(__mono_ppc64__, 1, [...])
4142                 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
4143                 sizeof_register=8
4144                 target_byte_order=G_BIG_ENDIAN
4145                 ;;
4146    powerpc64-xbox360-linux-gnu)
4147                 TARGET=POWERPC64
4148                 arch_target=powerpc64
4149                 AC_DEFINE(TARGET_XBOX360, 1, [...])
4150                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4151                 # uses this define
4152                 sizeof_register=8
4153                 target_byte_order=G_BIG_ENDIAN
4154                 ;;
4155    arm*-linux-*)
4156                 TARGET=ARM;
4157                 arch_target=arm;
4158                 AC_DEFINE(TARGET_ARM, 1, [...])
4159                 ACCESS_UNALIGNED="no"
4160                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4161                 # Can't use tls, since it depends on the runtime detection of tls offsets
4162                 # in mono-compiler.h
4163                 with_tls=pthread
4164                 target_mach=no
4165                 case "$target" in
4166                 armv7l-unknown-linux-gnueabi*)
4167                         # TEGRA
4168                         CPPFLAGS="$CPPFLAGS"
4169                         ;;
4170                 armv5-*-linux-androideabi*)
4171                         AC_DEFINE(TARGET_ANDROID, 1, [...])
4172                         CPPFLAGS="$CPPFLAGS"
4173                         ;;
4174                 *-linux-androideabi*)
4175                         AC_DEFINE(TARGET_ANDROID, 1, [...])
4176                         CPPFLAGS="$CPPFLAGS"
4177                         ;;
4178                 esac
4179                 ;;
4180    arm*-netbsd*-eabi*)
4181                 TARGET=ARM;
4182                 arch_target=arm;
4183                 AC_DEFINE(TARGET_ARM, 1, [...])
4184                 ACCESS_UNALIGNED="no"
4185                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4186                 # Can't use tls, since it depends on the runtime detection of tls offsets
4187                 # in mono-compiler.h
4188                 with_tls=pthread
4189                 target_mach=no
4190                 ;;
4191    i686*-linux-*)
4192                 TARGET=X86;
4193                 arch_target=x86;
4194                 AC_DEFINE(TARGET_X86, 1, [...])
4195                 CPPFLAGS="$CPPFLAGS"
4196                 # Can't use tls, since it depends on the runtime detection of tls offsets
4197                 # in mono-compiler.h            
4198                 with_tls=pthread
4199                 target_mach=no
4201                 case "$target" in
4202                 *-linux-android*)
4203                         AC_DEFINE(TARGET_ANDROID, 1, [...])
4204                         ;;
4205                 esac
4206                 ;;
4207    x86_64*-linux-*)
4208                 TARGET=AMD64;
4209                 arch_target=amd64;
4210                 AC_DEFINE(TARGET_AMD64, 1, [...])
4211                 CPPFLAGS="$CPPFLAGS"
4212                 # Can't use tls, since it depends on the runtime detection of tls offsets
4213                 # in mono-compiler.h
4214                 with_tls=pthread
4215                 target_mach=no
4217                 case "$target" in
4218                 *-linux-android*)
4219                         AC_DEFINE(TARGET_ANDROID, 1, [...])
4220                         ;;
4221                 esac
4222                 ;;
4223    x86_64-ps4-freebsd)
4224                 TARGET=AMD64;
4225                 arch_target=amd64;
4226                 AC_DEFINE(TARGET_AMD64, 1, [...])
4227                 AC_DEFINE(TARGET_PS4, 1, [...])
4228                 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4229                 CPPFLAGS="$CPPFLAGS"
4230                 # Can't use tls, since it depends on the runtime detection of tls offsets
4231                 # in mono-compiler.h
4232                 with_tls=pthread
4233                 target_mach=no
4234                 target_win32=no
4235                 ;;
4236    aarch64*-linux-*)
4237                 TARGET=ARM64;
4238                 arch_target=arm64;
4239                 AC_DEFINE(TARGET_ARM64, 1, [...])
4240                 CPPFLAGS="$CPPFLAGS"
4241                 # Can't use tls, since it depends on the runtime detection of tls offsets
4242                 # in mono-compiler.h
4243                 with_tls=pthread
4244                 target_mach=no
4245                 case "$target" in
4246                 *-linux-android*)
4247                         AC_DEFINE(TARGET_ANDROID, 1, [...])
4248                         ;;
4249                 esac
4250                 ;;
4251         aarch64-*)
4252                 TARGET=ARM64
4253                 ;;
4254         *)
4255                 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4256         esac
4259 case "$TARGET" in
4260 X86)
4261         AC_DEFINE(TARGET_X86, 1, [...])
4262         ;;
4263 AMD64)
4264         AC_DEFINE(TARGET_AMD64, 1, [...])
4265         ;;
4266 ARM)
4267         AC_DEFINE(TARGET_ARM, 1, [...])
4268         ;;
4269 ARM64)
4270         AC_DEFINE(TARGET_ARM64, 1, [...])
4271         ;;
4272 POWERPC)
4273         AC_DEFINE(TARGET_POWERPC, 1, [...])
4274         ;;
4275 POWERPC64)
4276         AC_DEFINE(TARGET_POWERPC, 1, [...])
4277         AC_DEFINE(TARGET_POWERPC64, 1, [...])
4278         ;;
4279 S390X)
4280         AC_DEFINE(TARGET_S390X, 1, [...])
4281         ;;
4282 MIPS)
4283         AC_DEFINE(TARGET_MIPS, 1, [...])
4284         ;;
4285 SPARC)
4286         AC_DEFINE(TARGET_SPARC, 1, [...])
4287         ;;
4288 SPARC64)
4289         AC_DEFINE(TARGET_SPARC64, 1, [...])
4290         ;;
4291 esac
4293 case "$HOST" in
4294 X86)
4295         AC_DEFINE(HOST_X86, 1, [...])
4296         ;;
4297 AMD64)
4298         AC_DEFINE(HOST_AMD64, 1, [...])
4299         ;;
4300 ARM)
4301         AC_DEFINE(HOST_ARM, 1, [...])
4302         ;;
4303 ARM64)
4304         AC_DEFINE(HOST_ARM64, 1, [...])
4305         ;;
4306 POWERPC)
4307         AC_DEFINE(HOST_POWERPC, 1, [...])
4308         ;;
4309 POWERPC64)
4310         AC_DEFINE(HOST_POWERPC, 1, [...])
4311         AC_DEFINE(HOST_POWERPC64, 1, [...])
4312         ;;
4313 S390X)
4314         AC_DEFINE(HOST_S390X, 1, [...])
4315         ;;
4316 MIPS)
4317         AC_DEFINE(HOST_MIPS, 1, [...])
4318         ;;
4319 SPARC)
4320         AC_DEFINE(HOST_SPARC, 1, [...])
4321         ;;
4322 SPARC64)
4323         AC_DEFINE(HOST_SPARC64, 1, [...])
4324         ;;
4325 esac
4327 #WASM hack
4331 dnl *************
4332 dnl *** VTUNE ***
4333 dnl *************
4335 AC_ARG_ENABLE(vtune,[  --enable-vtune   Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4336 AC_ARG_WITH(vtune, [  --with-vtune=<vtune prefix>       Enable jit vtune profiling], enable_vtune=yes,)
4338 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4340 if test "x$enable_vtune" = "xyes"; then
4341         if test "x$with_vtune" = "x"; then
4342                 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4343         else
4344                 VTUNE_PATH=$with_vtune
4345         fi
4346         VTUNE_INCLUDE=$VTUNE_PATH/include
4347         case "$TARGET" in
4348         X86)
4349                 VTUNE_LIB=$VTUNE_PATH/lib32
4350                 ;;
4351         AMD64)
4352                 VTUNE_LIB=$VTUNE_PATH/lib64
4353                 ;;
4354         *)
4355                 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4356                 ;;
4357         esac
4358         if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4359                 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4360         fi
4361         if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4362                 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4363         fi
4365         VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4366         VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4368         AC_SUBST(VTUNE_LIBS)
4369         AC_SUBST(VTUNE_CFLAGS)
4371 dnl Use GCC atomic ops if they work on the target.
4372 if test x$GCC = "xyes"; then
4373         case $TARGET in
4374         X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
4375                 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4376                 ;;
4377         esac
4380 if test "x$target_mach" = "xyes"; then
4382    if test "x$TARGET_SYS" = "xWATCHOS"; then
4383           AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4384           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4385           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4386           BTLS_SUPPORTED=no
4387    elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4388           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4389           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4390           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4391           BTLS_SUPPORTED=no
4392    else
4393        AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4394        #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4395        #error fail this for ios
4396        #endif
4397        ], [
4398                   AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4399           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4400           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4401           target_osx=yes
4402        ], [
4403           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4404           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4405           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4406           BTLS_SUPPORTED=no
4407                   target_ios=yes
4408        ])
4409         fi
4410    AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4413 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4415 if test "x$sizeof_register" = "x4"; then
4416    AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
4417 elif test "x$sizeof_register" = "x8"; then
4418    AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
4419 else
4420    AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
4423 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4425 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4426    AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4427 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4428    AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4429 else
4430    AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4433 if test "x$have_visibility_hidden" = "xyes"; then
4434    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4437 if test "x$have_deprecated" = "xyes"; then
4438    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4441 dnl 
4442 dnl Simple Generational checks (sgen)
4444 SGEN_DEFINES=
4445 AC_ARG_WITH(sgen,                    [  --with-sgen=yes,no             Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4446 AC_ARG_WITH(sgen-default-concurrent, [  --with-sgen-default-concurrent=yes,no             Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4447 if test x$buildsgen = xyes; then
4448    AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4449    SGEN_DEFINES="-DHAVE_SGEN_GC"
4451         conc_gc_msg=""
4452    if test x$with_sgen_default_concurrent != xno; then
4453        AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4454            conc_gc_msg=" (concurrent by default)"
4455    fi
4457    if test "x$gc_msg" = "x"; then
4458       gc_msg="sgen$conc_gc_msg"
4459    else
4460       gc_msg="sgen$conc_gc_msg and $gc_msg"
4461    fi
4463 AC_SUBST(SGEN_DEFINES)
4464 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4466 jit_status="Building and using the JIT"
4468 libsuffix=".so"
4470 case "$host" in
4471      *-*-darwin*)
4472         libsuffix=".dylib"
4473         LIBC="libc.dylib"
4474         INTL="libintl.dylib"
4475         SQLITE="libsqlite.0.dylib"
4476         SQLITE3="libsqlite3.0.dylib"
4477         X11="libX11.dylib"
4478         GDKX11="libgdk-x11-2.0.dylib"
4479         GTKX11="libgtk-x11-2.0.dylib"
4480         ;;
4481      *-*-*netbsd*)
4482         LIBC="libc.so"
4483         INTL="libintl.so"
4484         SQLITE="libsqlite.so"
4485         SQLITE3="libsqlite3.so"
4486         ;;
4487      *-*-kfreebsd*-gnu)
4488         LIBC="libc.so.0.1"
4489         INTL="libc.so.0.1"
4490         X11="libX11.so.6"
4491         ;;
4492     *-*-*freebsd*)
4493         LIBC="libc.so.7"
4494         INTL="libintl.so"
4495         SQLITE="libsqlite.so"
4496         SQLITE3="libsqlite3.so"
4497         ;;
4498     *-*-*openbsd*)
4499         LIBC="libc.so"
4500         INTL="libintl.so"
4501         SQLITE="libsqlite.so"
4502         SQLITE3="libsqlite3.so"
4503         ;;
4504     *-*-*linux*)
4505         AC_PATH_X
4506         dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4507         AC_MSG_CHECKING(for the soname of libX11.so)
4508         for i in $x_libraries $dlsearch_path; do
4509                 for r in 4 5 6; do
4510                         if test -f $i/libX11.so.$r; then
4511                                 X11=libX11.so.$r
4512                                 AC_MSG_RESULT($X11)
4513                         fi
4514                 done
4515         done
4516         
4517         if test "x$X11" = "xlibX11.so"; then
4518                 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4519                 X11=libX11.so.6
4520         fi
4521         ;;
4522 esac
4524 AC_SUBST(libsuffix)
4526 ######################################
4527 # EGLIB CHECKS
4528 ######################################
4530 GNUC_PRETTY=
4531 GNUC_UNUSED=
4532 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4533 if test x$GCC = xyes; then
4534    GNUC_UNUSED='__attribute__((__unused__))'
4535    GNUC_NORETURN='__attribute__((__noreturn__))'
4536    case $host_cpu in
4537      i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4538    esac
4540 AC_SUBST(GNUC_PRETTY)
4541 AC_SUBST(GNUC_UNUSED)
4542 AC_SUBST(GNUC_NORETURN)
4543 AC_SUBST(BREAKPOINT)
4545 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4547 case $host in
4548 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4549     PATHSEP='\\'
4550     SEARCHSEP=';'
4551     OS="WIN32"
4552     PIDTYPE='void *'
4553     ;;
4555     PATHSEP='/'
4556     SEARCHSEP=':'
4557     OS="UNIX"
4558     PIDTYPE='int'
4559     ;;
4560 esac
4562 case $host in
4563         *-*-solaris*)
4564         CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4565         ;;
4566 esac
4568 case $target in
4569 arm*-darwin*|aarch64*-*)
4570     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4571     ;;
4572 i*86-*-darwin*)
4573     ORDER=G_LITTLE_ENDIAN
4574     ;;
4575 *-*-haiku*)
4576     LDFLAGS="$LDFLAGS -ltextencoding"
4577     ;;
4578 *-*-openbsd*)
4579     CFLAGS="$CFLAGS -pthread"
4580     LDFLAGS="$LDFLAGS -pthread"
4581     ;;
4582 esac
4584 AC_SUBST(ORDER)
4585 AC_SUBST(CFLAGS)
4586 AC_SUBST(PATHSEP)
4587 AC_SUBST(SEARCHSEP)
4588 AC_SUBST(OS)
4589 AC_SUBST(PIDTYPE)
4591 # Defined for all targets/platforms using classic Windows API support.
4592 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4593 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4595 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4596 AC_CHECK_FUNCS(getrlimit)
4597 AC_CHECK_FUNCS(fork execv execve)
4599 AC_ARG_WITH([overridable-allocators], [  --with-overridable-allocators  allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4601 if test x$with_overridable_allocators = xyes; then
4602         AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4603   AC_MSG_NOTICE([Overridable allocator support enabled])
4604 else
4605   AC_MSG_NOTICE([Overridable allocator support disabled])
4609 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4610 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4611 # removed once support for 10.6 is dropped.
4613 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4615 if test x$target_osx = xyes; then
4616 AC_CHECK_FUNCS(getpwuid_r)
4617 elif test x$target_ios = xno; then
4618 AC_CHECK_FUNCS(strndup getpwuid_r)
4621 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4623 AC_SEARCH_LIBS(sqrtf, m)
4625 # nanosleep may not be part of libc, also search it in other libraries
4626 AC_SEARCH_LIBS(nanosleep, rt)
4628 AC_SEARCH_LIBS(dlopen, dl)
4629 old_ldflags="${LDFLAGS}"
4630 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4631 if test $lt_cv_prog_gnu_ld = yes; then
4632         LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4633 else
4634         case $host in
4635         *-*-aix*|*-*-os400*)
4636                 ;;
4637         *)
4638                 dnl Try to use export-dynamic anyways
4639                 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4640                 ;;
4641         esac
4643 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4644 if test $found_export_dynamic = no; then
4645         LDFLAGS="${old_ldflags}"
4648 AC_MSG_CHECKING(for varargs macros)
4649 AC_TRY_COMPILE([],[
4650 int foo (int i, int j);
4651 #define bar(...) foo (1, __VA_ARGS__)
4652 void main () {
4653          bar (2);
4655 ],have_iso_varargs=yes,have_iso_varargs=no)
4656 AC_MSG_RESULT($have_iso_varargs)
4657 G_HAVE_ISO_VARARGS=0
4658 if test "x$have_iso_varargs" = "xyes"; then
4659    G_HAVE_ISO_VARARGS=1
4661 AC_SUBST(G_HAVE_ISO_VARARGS)
4663 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h localcharset.h sys/types.h sys/resource.h)
4664 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4665 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4666 AC_SUBST(HAVE_ALLOCA_H)
4668 # Get the exact type of size_t, not just its size.
4669 # This is so we can find an exact printf format among u, lu, llu, I64u.
4670 # To avoid warnings about slight mismatches.
4671 # C99 runtime "zu" dependency is being avoided here.
4673 # We have to compile as C++ because C is too lenient
4674 # and lets the wrong thing compile, with warnings.
4676 # Note: "zu" or ifdef <something> have the advantage
4677 # of producing installable "biarch" headers. i.e. one Mac header
4678 # for Mac/x86 and Mac/amd64.
4680 AC_LANG_PUSH(C++)
4682 # Check long before int because it is the overwhelming Unix answer,
4683 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4685 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4687 AC_MSG_CHECKING(if size_t is unsigned long)
4688 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4689         #include <stddef.h>
4690         unsigned long *a = (size_t*)0;
4691 ])], [
4692         AC_MSG_RESULT(yes)
4693         AC_SUBST(GSIZE_FORMAT, '"%lu"')
4694 ], [
4695         AC_MSG_RESULT(no)
4696         AC_MSG_CHECKING(if size_t is unsigned int)
4697         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4698                 #include <stddef.h>
4699                 unsigned *a = (size_t*)0;
4700         ])], [
4701                 AC_MSG_RESULT(yes)
4702                 AC_SUBST(GSIZE_FORMAT, '"%u"')
4703         ], [
4704 # At this point the majority of systems have their answer,
4705 # and we descend into non-standard or new-standard territory.
4707 # Check __int64 first because I64 on some systems predates ll, enabling
4708 # new compiler/old runtime interop, and the types always have the same size.
4709                 AC_MSG_RESULT(no)
4710                 AC_MSG_CHECKING(if size_t is unsigned __int64)
4711                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4712                         #include <stddef.h>
4713                         unsigned __int64 *a = (size_t*)0;
4714                 ])], [
4715                         AC_MSG_RESULT(yes)
4716                         AC_SUBST(GSIZE_FORMAT, '"%I64u"')
4717                 ], [
4718                         AC_MSG_RESULT(no)
4719                         AC_MSG_CHECKING(if size_t is unsigned long long)
4720                         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4721                                 #include <stddef.h>
4722                                 unsigned long long *a = (size_t*)0;
4723                         ])], [
4724                                 AC_MSG_RESULT(yes)
4725                                 AC_SUBST(GSIZE_FORMAT, '"%llu"')
4726                         ], [
4727                                 AC_MSG_RESULT(no)
4728                                 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4729                         ] )
4730                 ] )
4731         ] )
4732 ] )
4734 AC_LANG_POP
4736 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4737 # This provides for an exact match with functions that
4738 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4739 # uintptr_t is not necessarily the same.
4741 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4742 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4744 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4745    GSIZE="size_t"
4746    GSSIZE="ptrdiff_t"
4747 else
4748    GSIZE="uintptr_t"
4749    GSSIZE="intptr_t"
4752 AC_SUBST(GSIZE)
4753 AC_SUBST(GSSIZE)
4754 AC_SUBST(GSIZE_FORMAT)
4757 # END OF EGLIB CHECKS
4760 AC_ARG_WITH([libgdiplus],
4761         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4762         [], [with_libgdiplus=installed])
4764 # default install location
4765 libgdiplus_install_loc=libgdiplus${libsuffix}
4766 case "$host" in
4767     *-*-*linux*)
4768     libgdiplus_install_loc=libgdiplus${libsuffix}.0
4769     ;;
4770 esac
4772 case $with_libgdiplus in
4773     no)
4774     libgdiplus_loc=
4775     ;;
4777     installed)
4778     libgdiplus_loc=
4779     if test x$cross_compiling = xno; then
4780         if test x$host_darwin = xyes; then
4781             a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4782             if test -x $a; then
4783               libgdiplus_install_loc=$a
4784               libgdiplus_loc=$a
4785             fi
4786         fi
4787     fi
4788     ;;
4790     yes|sibling)
4791     libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4792     ;;
4794     /*) # absolute path, assume it is an install location
4795     libgdiplus_loc=$with_libgdiplus
4796     libgdiplus_install_loc=$with_libgdiplus
4797     ;;
4799     *)
4800     libgdiplus_loc=`pwd`/$with_libgdiplus
4801     ;;
4802 esac
4803 AC_SUBST(libgdiplus_loc)
4804 AC_SUBST(libgdiplus_install_loc)
4806 AC_ARG_ENABLE(icall-symbol-map,[  --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no)
4807 if test "x$icall_symbol_map" = "xyes"; then
4808    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4811 AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4812 if test "x$icall_export" = "xyes"; then
4813    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4816 AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4817 if test "x$icall_tables" = "xno"; then
4818    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4821 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4823 if test "x$with_tls" = "x__thread"; then
4824         AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4825         # Pass the information to libgc
4826         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4827         AC_MSG_CHECKING(if the tls_model attribute is supported)
4828         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4829                 ], [
4830                         AC_MSG_RESULT(yes)
4831                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4832                 ], [
4833                         AC_MSG_RESULT(no)
4834         ])
4837 if test ${TARGET} = ARM; then
4838         dnl ******************************************
4839         dnl *** Check to see what FPU is available ***
4840         dnl ******************************************
4841         AC_MSG_CHECKING(which FPU to use)
4843         #
4844         # This is a bit tricky:
4845         #
4846         # if (__ARM_PCS_VFP) {
4847         #       /* mfloat-abi=hard == VFP with hard ABI */
4848         # } elif (!__SOFTFP__) {
4849         #       /* mfloat-abi=softfp == VFP with soft ABI */
4850         # } else {
4851         #       /* mfloat-abi=soft == no VFP */
4852         # }
4853         #
4854         # The exception is iOS (w/ GCC) where none of the above
4855         # are defined (but iOS always uses the 'softfp' ABI).
4856         #
4857         # No support for FPA.
4858         #
4860         fpu=NONE
4862         # iOS GCC always uses the 'softfp' ABI.
4863         if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4864                 fpu=VFP
4865         fi
4867         # Are we using the 'hard' ABI?
4868         if test x$fpu = xNONE; then
4869                 AC_TRY_COMPILE([], [
4870                         #ifndef __ARM_PCS_VFP
4871                         #error "Float ABI is not 'hard'"
4872                         #endif
4873                 ], [
4874                         fpu=VFP_HARD
4875                 ], [
4876                         fpu=NONE
4877                 ])
4878         fi
4880         # No 'hard' ABI. 'soft' or 'softfp'?
4881         if test x$fpu = xNONE; then
4882                 AC_TRY_COMPILE([], [
4883                         #ifdef __SOFTFP__
4884                         #error "Float ABI is not 'softfp'"
4885                         #endif
4886                 ], [
4887                         fpu=VFP
4888                 ], [
4889                         fpu=NONE
4890                 ])
4891         fi
4893         if test x$arm_fpu != x; then
4894            fpu=$arm_fpu
4895         fi
4897         AC_MSG_RESULT($fpu)
4898         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4899         unset fpu
4901         dnl *********************************************
4902         dnl *** Check which ARM version(s) we can use ***
4903         dnl *********************************************
4904         AC_MSG_CHECKING(which ARM version to use)
4906         AC_TRY_COMPILE([], [
4907                 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4908                 #error Not on ARM v5.
4909                 #endif
4910         ], [
4911                 arm_v5=yes
4913                 arm_ver=ARMv5
4914         ], [])
4916         AC_TRY_COMPILE([], [
4917                 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4918                 #error Not on ARM v6.
4919                 #endif
4920         ], [
4921                 arm_v5=yes
4922                 arm_v6=yes
4924                 arm_ver=ARMv6
4925         ], [])
4927         AC_TRY_COMPILE([], [
4928                 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4929                 #error Not on ARM v7.
4930                 #endif
4931         ], [
4932                 arm_v5=yes
4933                 arm_v6=yes
4934                 arm_v7=yes
4936                 arm_ver=ARMv7
4937         ], [])
4939         AC_MSG_RESULT($arm_ver)
4941         if test x$arm_v5 = xyes; then
4942                 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4943                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4944         fi
4946         if test x$arm_v6 = xyes; then
4947                 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4948                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4949         fi
4951         if test x$arm_v7 = xyes; then
4952                 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4953                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4954         fi
4957 if test ${TARGET} = unknown; then
4958         CPPFLAGS="$CPPFLAGS -DNO_PORT"
4959         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4962 if test "x$platform_android" = "xyes"; then
4963         case "x${TARGET}" in
4964         xARM)
4965                 case "x$arm_ver" in
4966                 xARMv5)
4967                         BTLS_SUPPORTED=yes
4968                         BTLS_PLATFORM=android-armv5
4969                         ;;
4970                 xARMv6)
4971                         BTLS_SUPPORTED=yes
4972                         BTLS_PLATFORM=android-armv6
4973                         ;;
4974                 xARMv7)
4975                         BTLS_SUPPORTED=yes
4976                         BTLS_PLATFORM=android-armv7
4977                         ;;
4978                 *)
4979                         BTLS_SUPPORTED=no
4980                         ;;
4981                 esac
4982                 ;;
4983         xARM64)
4984                 BTLS_SUPPORTED=yes
4985                 BTLS_PLATFORM=android-v8a
4986                 ;;
4987         xX86)
4988                 BTLS_SUPPORTED=yes
4989                 BTLS_PLATFORM=android-x86
4990                 ;;
4991         xAMD64)
4992                 BTLS_SUPPORTED=yes
4993                 BTLS_PLATFORM=android-x64
4994                 ;;
4995         *)
4996                 BTLS_SUPPORTED=no
4997                 ;;
4998         esac
5001 if test ${ACCESS_UNALIGNED} = no; then
5002         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5005 if test x$host_darwin = xyes; then
5006         AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5007         AS_IF(
5008                 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5009                 [AC_MSG_RESULT([no])],
5010                 [
5011                         # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5012                         AR_FLAGS="Scru"
5013                         RANLIB="$RANLIB -no_warning_for_no_symbols"
5014                         AC_MSG_RESULT([yes])
5015                 ]
5016         )
5019 case "x$libgc" in
5020         xincluded)
5021                 # Pass CPPFLAGS to libgc configure
5022                 # We should use a separate variable for this to avoid passing useless and
5023                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5024                 # This should be executed late so we pick up the final version of CPPFLAGS
5025                 # The problem with this approach, is that during a reconfigure, the main
5026                 # configure scripts gets invoked with these arguments, so we use separate
5027                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5028                 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5029                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5030                         TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5031                 fi
5032                 # Don't pass -finstrument-for-thread-suspension in, 
5033                 # if these are instrumented it will be very bad news 
5034                 # (infinite recursion, undefined parking behavior, etc)
5035                 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5036                 ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
5037                 if test "x$support_boehm" = "xyes"; then
5038                         AC_CONFIG_SUBDIRS(libgc)
5039                 fi
5040                 ;;
5041 esac
5043 MALLOC_MEMPOOLS=no
5044 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5045         if test x$with_malloc_mempools = xyes; then
5046                 MALLOC_MEMPOOLS=yes
5047                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5048         fi
5052 DISABLE_MCS_DOCS=default
5053 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
5054         if test x$with_mcs_docs != xyes; then
5055                 DISABLE_MCS_DOCS=yes
5056         fi
5058 if test -n "$INSTALL_4_x_TRUE"; then :
5059         DISABLE_MCS_DOCS=yes
5061 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5062    DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5065 AC_ARG_WITH(lazy_gc_thread_creation, [  --with-lazy-gc-thread-creation=yes|no      Enable lazy runtime thread creation, embedding host must do it explicitly (defaults to no)],[
5066         if test x$with_lazy_gc_thread_creation != xno ; then
5067                 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5068         fi
5069 ], [with_lazy_gc_thread_creation=no])
5071 AC_ARG_WITH(cooperative_gc,        [  --with-cooperative-gc=yes|no        Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [AC_MSG_WARN([--with-cooperative-gc is deprecated, use --enable-cooperative-suspend instead])], [with_cooperative_gc=default])
5072 AC_ARG_ENABLE(cooperative_suspend, [  --enable-cooperative-suspend      Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5074 if test x$enable_cooperative_suspend = xdefault -a test x$with_cooperative_gc != xdefault; then
5075         enable_cooperative_suspend=$with_cooperative_gc
5078 if test x$enable_cooperative_suspend = xdefault; then
5079         enable_cooperative_suspend=$enable_cooperative_suspend_default
5082 if test x$enable_cooperative_suspend != xno; then
5083         AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5086 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5088 AC_ARG_ENABLE(hybrid_suspend, [ --enable-hybrid-suspend     Enable hybrid stop-the-world garbage collection (sgen only) - cooperative suspend for threads running managed and runtime code, and preemptive suspend for threads running native and P/Invoke code (defaults to no)], [], [enable_hybrid_suspend=no])
5090 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5091         AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5094 if test x$enable_hybrid_suspend != xno ; then
5095         AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5098 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5100 AC_ARG_ENABLE(checked_build, [  --enable-checked-build=LIST      To enable checked build (expensive asserts), configure with a comma-separated LIST of checked build modules and then include that same list in the environment variable MONO_CHECK_MODE at runtime. Recognized checked build modules: all, gc, metadata, thread, private_types],[
5102         if test x$enable_checked_build != x ; then
5103                 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5104         fi
5105         for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5106                 eval "mono_checked_build_test_enable_$feature='yes'"
5107         done
5109         if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5110                 eval "mono_checked_build_test_enable_gc='yes'"
5111                 eval "mono_checked_build_test_enable_metadata='yes'"
5112                 eval "mono_checked_build_test_enable_thread='yes'"
5113                 eval "mono_checked_build_test_enable_private_types='yes'"
5114         fi
5116         if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5117                 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5118         fi
5120         if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5121                 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5122         fi
5124         if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5125                 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5126         fi
5128         if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5129                 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5130         fi
5131 ], [])
5133 AC_CHECK_HEADER([malloc.h], 
5134                 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
5135                         [Define to 1 if you have /usr/include/malloc.h.])],,)
5137 if test x"$GCC" = xyes; then
5138         # Implicit function declarations are not 64 bit safe
5139         # Do this late, since this causes lots of configure tests to fail
5140         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5141         # jay has a lot of implicit declarations
5142         JAY_CFLAGS="-Wno-implicit-function-declaration"
5145 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5146 # instead of libmono-static.a
5147 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5148    LIBMONO_LA=libmini-static.la
5149 else
5150    if test x$buildsgen = xyes; then
5151       LIBMONO_LA=libmonosgen-$API_VER.la
5152    else
5153       LIBMONO_LA=libmonoboehm-$API_VER.la
5154    fi
5156 AC_SUBST(LIBMONO_LA)
5158 dnl **************
5159 dnl ***  Btls  ***
5160 dnl **************
5162 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5163 AC_ARG_ENABLE(btls-lib, [  --disable-btls-lib             Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5164 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
5166 if test "x$enable_btls" = "xno"; then
5167    enable_btls_lib=no
5170 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5172 btls_android=no
5173 if test "x$enable_btls" = "xyes"; then
5174         AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5175         if test "x$CMAKE" = "xno"; then
5176                 AC_MSG_ERROR("cmake not found")
5177         fi
5179         BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5180         AC_SUBST(BTLS_ROOT)
5182         btls_arch=
5183         btls_cflags=
5184         BTLS_CMAKE_ARGS=
5186         case "$BTLS_PLATFORM" in
5187         i386)
5188                 btls_arch=i386
5189                 btls_cflags="-m32"
5190                 case $host_os in
5191                         darwin*)
5192                                 btls_cflags="$btls_cflags -arch i386"
5193                 esac
5194                 ;;
5195         x86_64)
5196                 btls_arch=x86_64
5197                 ;;
5198         arm)
5199                 btls_arch=arm
5200                 btls_cflags="-DOPENSSL_NO_ASM=1"
5201                 ;;
5202         armsoft)
5203                 btls_arch=arm
5204                 btls_cflags="-DOPENSSL_NO_ASM=1"
5205                 ;;
5206         aarch64)
5207                 btls_arch=aarch64
5208                 btls_cflags="-march=armv8-a+crypto"
5209                 ;;
5210         s390x)
5211                 btls_arch=s390x
5212                 ;;
5213         powerpc)
5214                 btls_arch=powerpc
5215                 case $host_os in
5216                         aix*|os400*)
5217                                 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5218                                 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5219                 esac
5220                 ;;
5221         android-armv5)
5222                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5223                 ;;
5224         android-armv6)
5225                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5226                 ;;
5227         android-armv7)
5228                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
5229                 ;;
5230         android-v8a)
5231                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
5232                 ;;
5233         android-x86)
5234                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
5235                 ;;
5236         android-x64)
5237                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
5238                 ;;
5239         *)
5240                 AC_MSG_ERROR(Invalid BTLS platform)
5241         esac
5243         if test "x$platform_android" = "xyes"; then
5244                 btls_android=yes
5245                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5246                 if test "x$with_btls_android_ndk" != "x"; then
5247                         BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5248                 else
5249                         AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5250                 fi
5251         fi
5253         if test "x$btls_arch" != "x"; then
5254                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5255         fi
5257         BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5258         AC_SUBST(BTLS_ARCH)
5259         AC_SUBST(BTLS_CFLAGS)
5260         AC_SUBST(BTLS_PLATFORM)
5261         AC_SUBST(BTLS_CMAKE_ARGS)
5263         AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5264 else
5265         enable_btls=no
5268 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5270 if test x$DISABLE_MCS_DOCS = xyes; then
5271    docs_dir=""
5272 else
5273    docs_dir=docs
5275 AC_SUBST(docs_dir)
5277 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
5278 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5279 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5281 libmono_ldflags="$libmono_ldflags $LIBS"
5283 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5284 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5285 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5286 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5287 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5288 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5289 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5290 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5291 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5292 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5293 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5294 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5295 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5296 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5297 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5298 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5299 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5300 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5302 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5304 AC_SUBST(LIBC)
5305 AC_SUBST(INTL)
5306 AC_SUBST(SQLITE)
5307 AC_SUBST(SQLITE3)
5308 AC_SUBST(X11)
5309 AC_SUBST(GDKX11)
5310 AC_SUBST(GTKX11)
5311 AC_SUBST(XINERAMA)
5312 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5313 AC_SUBST(arch_target)
5314 AC_SUBST(CFLAGS)
5315 AC_SUBST(CPPFLAGS)
5316 AC_SUBST(LDFLAGS)
5318 #This must always be defined when building the runtime
5319 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5321 mono_build_root=`pwd`
5322 AC_SUBST(mono_build_root)
5324 mono_runtime=mono/mini/mono
5325 AC_SUBST(mono_runtime)
5327 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.7.0/tools/csc.exe
5329 if test $csc_compiler = mcs; then
5330   CSC=$mcs_topdir/class/lib/build/mcs.exe
5331 else
5332   CSC=$CSC_LOCATION
5335 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5337 mono_cfg_root=$mono_build_root/runtime
5338 if test x$host_win32 = xyes; then
5339   if test "x$cross_compiling" = "xno"; then
5340     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5341     CSC=`cygpath -m -a $CSC`
5342     CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5343   else
5344     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5345   fi
5346 else
5347   mono_cfg_dir=$mono_cfg_root/etc
5349 AC_SUBST(mono_cfg_dir)
5351 AC_SUBST(CSC)
5353 AC_CONFIG_FILES([po/mcs/Makefile.in])
5355 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5356 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5358 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5359 [   depth=../../../..
5360     case $srcdir in
5361     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5362     .) reldir=$depth ;;
5363     *) reldir=$depth/$srcdir ;;
5364     esac
5365     $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5366     cd runtime/etc/mono/1.0
5367     rm -f machine.config
5368     $LN_S $reldir/data/net_1_1/machine.config machine.config
5369     cd $depth
5370 ],[LN_S='$LN_S'])
5372 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5373 [   depth=../../../..
5374     case $srcdir in
5375     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5376     .) reldir=$depth ;;
5377     *) reldir=$depth/$srcdir ;;
5378     esac
5379     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5380     cd runtime/etc/mono/2.0
5381     rm -f machine.config
5382     $LN_S $reldir/data/net_2_0/machine.config machine.config
5383     cd $depth
5384 ],[LN_S='$LN_S'])
5386 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5387 [   depth=../../../..
5388     case $srcdir in
5389     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5390     .) reldir=$depth ;;
5391     *) reldir=$depth/$srcdir ;;
5392     esac
5393     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5394     cd runtime/etc/mono/2.0
5395     rm -f web.config
5396     $LN_S $reldir/data/net_2_0/web.config web.config
5397     cd $depth
5398 ],[LN_S='$LN_S'])
5400 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5401 [   depth=../../..
5402     case $srcdir in
5403     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5404     .) reldir=$depth ;;
5405     *) reldir=$depth/$srcdir ;;
5406     esac
5407     $ac_aux_dir/install-sh -d runtime/etc/mono/
5408     cd runtime/etc/mono/
5409     rm -f browscap.ini
5410     $LN_S $reldir/data/browscap.ini browscap.ini
5411     cd $depth
5412 ],[LN_S='$LN_S'])
5414 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5415 [   depth=../../../../..
5416     case $srcdir in
5417     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5418     .) reldir=$depth ;;
5419     *) reldir=$depth/$srcdir ;;
5420     esac
5421     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5422     cd runtime/etc/mono/2.0/Browsers
5423     rm -f Compat.browser
5424     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5425     cd $depth
5426 ],[LN_S='$LN_S'])
5428 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5429 [   depth=../../../../..
5430     case $srcdir in
5431     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5432     .) reldir=$depth ;;
5433     *) reldir=$depth/$srcdir ;;
5434     esac
5435     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5436     cd runtime/etc/mono/4.0/Browsers
5437     rm -f Compat.browser
5438     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5439     cd $depth
5440 ],[LN_S='$LN_S'])
5442 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5443 [   depth=../../../../..
5444     case $srcdir in
5445     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5446     .) reldir=$depth ;;
5447     *) reldir=$depth/$srcdir ;;
5448     esac
5449     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5450     cd runtime/etc/mono/4.5/Browsers
5451     rm -f Compat.browser
5452     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5453     cd $depth
5454 ],[LN_S='$LN_S'])
5456 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5457 [   depth=../../../..
5458     case $srcdir in
5459     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5460     .) reldir=$depth ;;
5461     *) reldir=$depth/$srcdir ;;
5462     esac
5463     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5464     cd runtime/etc/mono/4.0
5465     rm -f machine.config
5466     $LN_S $reldir/data/net_4_0/machine.config machine.config
5467     cd $depth
5468 ],[LN_S='$LN_S'])
5470 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5471 [   depth=../../../..
5472     case $srcdir in
5473     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5474     .) reldir=$depth ;;
5475     *) reldir=$depth/$srcdir ;;
5476     esac
5477     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5478     cd runtime/etc/mono/4.0
5479     rm -f web.config
5480     $LN_S $reldir/data/net_4_0/web.config web.config
5481     cd $depth
5482 ],[LN_S='$LN_S'])
5484 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5485 [   depth=../../../..
5486     case $srcdir in
5487     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5488     .) reldir=$depth ;;
5489     *) reldir=$depth/$srcdir ;;
5490     esac
5491     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5492     cd runtime/etc/mono/4.5
5493     rm -f machine.config
5494     $LN_S $reldir/data/net_4_5/machine.config machine.config
5495     cd $depth
5496 ],[LN_S='$LN_S'])
5498 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5499 [   depth=../../../..
5500     case $srcdir in
5501     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5502     .) reldir=$depth ;;
5503     *) reldir=$depth/$srcdir ;;
5504     esac
5505     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5506     cd runtime/etc/mono/4.5
5507     rm -f web.config
5508     $LN_S $reldir/data/net_4_5/web.config web.config
5509     cd $depth
5510 ],[LN_S='$LN_S'])
5512 AC_CONFIG_COMMANDS([quiet-libtool], [sed -e 's/echo "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
5513 AC_CONFIG_COMMANDS([nolock-libtool], [sed -e 's/lock_old_archive_extraction=yes/lock_old_archive_extraction=no/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
5515 AC_OUTPUT([
5516 Makefile
5517 mono-uninstalled.pc
5518 acceptance-tests/Makefile
5519 llvm/Makefile
5520 scripts/mono-find-provides
5521 scripts/mono-find-requires
5522 mk/Makefile
5523 mono/Makefile
5524 mono/btls/Makefile
5525 mono/utils/Makefile
5526 mono/utils/jemalloc/Makefile
5527 mono/metadata/Makefile
5528 mono/dis/Makefile
5529 mono/cil/Makefile
5530 mono/arch/Makefile
5531 mono/arch/x86/Makefile
5532 mono/arch/amd64/Makefile
5533 mono/arch/ppc/Makefile
5534 mono/arch/sparc/Makefile
5535 mono/arch/s390x/Makefile
5536 mono/arch/arm/Makefile
5537 mono/arch/arm64/Makefile
5538 mono/arch/mips/Makefile
5539 mono/sgen/Makefile
5540 mono/tests/Makefile
5541 mono/tests/tests-config
5542 mono/tests/gc-descriptors/Makefile
5543 mono/tests/testing_gac/Makefile
5544 mono/unit-tests/Makefile
5545 mono/benchmark/Makefile
5546 mono/mini/Makefile
5547 mono/profiler/Makefile
5548 mono/eglib/Makefile
5549 mono/eglib/eglib-config.h
5550 m4/Makefile
5551 ikvm-native/Makefile
5552 scripts/Makefile
5553 man/Makefile
5554 docs/Makefile
5555 data/Makefile
5556 data/net_2_0/Makefile
5557 data/net_4_0/Makefile
5558 data/net_4_5/Makefile
5559 data/net_2_0/Browsers/Makefile
5560 data/net_4_0/Browsers/Makefile
5561 data/net_4_5/Browsers/Makefile
5562 data/mint.pc
5563 data/mono-2.pc
5564 data/monosgen-2.pc
5565 data/mono.pc
5566 data/mono-cairo.pc
5567 data/mono-nunit.pc
5568 data/mono-options.pc
5569 data/mono-lineeditor.pc
5570 data/monodoc.pc
5571 data/dotnet.pc
5572 data/dotnet35.pc
5573 data/wcf.pc
5574 data/cecil.pc
5575 data/system.web.extensions_1.0.pc
5576 data/system.web.extensions.design_1.0.pc
5577 data/system.web.mvc.pc
5578 data/system.web.mvc2.pc
5579 data/system.web.mvc3.pc
5580 data/aspnetwebstack.pc
5581 data/reactive.pc
5582 samples/Makefile
5583 support/Makefile
5584 data/config
5585 tools/Makefile
5586 tools/locale-builder/Makefile
5587 tools/sgen/Makefile
5588 tools/monograph/Makefile
5589 tools/pedump/Makefile
5590 runtime/Makefile
5591 msvc/Makefile
5592 po/Makefile
5595 # Update all submodules recursively to ensure everything is checked out
5596 $srcdir/scripts/update_submodules.sh
5598 if test x$host_win32 = xyes; then
5599    # Get rid of 'cyg' prefixes in library names
5600    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5601    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5602    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5603    # executable doesn't work...
5604    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5607 if test x$host_darwin = xyes; then
5608    # This doesn't seem to be required and it slows down parallel builds
5609    sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5613   case $prefix in
5614   NONE) prefix=$ac_default_prefix ;;
5615   esac
5616   case $exec_prefix in
5617   NONE) exec_prefix='${prefix}' ;;
5618   esac
5620   #
5621   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
5622   # any existing config.make.  This allows people to share the same source tree
5623   # with different build directories, one native and one cross
5624   #
5625   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5627     test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5629     echo "prefix=$prefix" > $mcs_topdir/build/config.make
5630     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5631     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5632     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5633     echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5634     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5635     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5636     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5637     echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5639     case $INSTALL in
5640     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5641     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5642     esac
5644     echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5646     export VERSION
5647     [myver=$($AWK 'BEGIN {
5648       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5649       if(length(vsplit [1]) > 4) {
5650         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5651       }
5652       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5653     }')]
5655     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5656     echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5658     if test x$host_darwin = xyes; then
5659       echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
5660       echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
5661       echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
5662     elif test x$host_win32 = xyes; then
5663       echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5664       echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5665       echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
5666     else
5667       echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5668       echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5669       echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5670     fi
5672     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5673       echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5674     fi
5676         if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5677            enable_system_aot=yes
5678         fi
5680     if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5681       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5682     fi
5684     if test x$DISABLE_MCS_DOCS = xyes; then
5685       echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5686     fi
5688     if test x$has_extension_module != xno; then
5689         echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5690     fi
5691     
5692     echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5693     
5694     if test "x$test_bcl_opt" = "xyes"; then    
5695       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5696     fi
5698     echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5700     if test $csc_compiler = mcs; then
5701       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5702     fi
5704     if test "x$AOT_BUILD_FLAGS" != "x" ; then
5705       echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5706       echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5707       echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5708     fi
5710     if test "x$AOT_MODE" != "x" ; then
5711       echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5712     fi
5714     if test "x$enable_btls" = "xyes"; then
5715       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5716     fi
5718   fi
5722 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5724 btls_platform_string=
5725 if test x$enable_btls = xyes; then
5726         if test x$btls_android = xyes; then
5727                 btls_platform_string=" (android:$BTLS_PLATFORM)"
5728         else
5729                 btls_platform_string=" ($BTLS_PLATFORM)"
5730         fi
5733 echo "
5734         mcs source:    $mcsdir
5735         C# Compiler:   $csc_compiler
5737    Engine:
5738         Host:          $host
5739         Target:        $target
5740         GC:            $gc_msg 
5741         TLS:           $with_tls
5742         SIGALTSTACK:   $with_sigaltstack
5743         Engine:        $jit_status
5744         BigArrays:     $enable_big_arrays
5745         DTrace:        $enable_dtrace
5746         LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5747         Spectre:       $spectre_mitigation_status
5749    Libraries:
5750         .NET 4.x:        $with_profile4_x
5751         Xamarin.Android: $with_monodroid
5752         Xamarin.iOS:     $with_monotouch
5753         Xamarin.WatchOS: $with_monotouch_watch
5754         Xamarin.TVOS:    $with_monotouch_tv
5755         Xamarin.Mac:     $with_xammac
5756         Windows AOT:     $with_winaot
5757         Orbis:           $with_orbis
5758         Unreal:          $with_unreal
5759         WebAssembly:     $with_wasm
5760         Test profiles:   AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5761         JNI support:     $jdk_headers_found
5762         libgdiplus:      $libgdiplus_msg
5763         zlib:            $zlib_msg
5764         BTLS:            $enable_btls$btls_platform_string
5765         jemalloc:        $with_jemalloc (always use: $with_jemalloc_always)
5766         $disabled
5768 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5769    AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)