1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.17.0],
5 [https://github.com/mono/mono/issues/new])
7 AC_CONFIG_SRCDIR([README.md])
8 AC_CONFIG_MACRO_DIR([m4])
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])
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=13
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)
51 echo "Run configure using ./configure --host=i686-pc-mingw32"
55 # In case of cygwin, override LN_S, irrespective of what it determines.
56 # The build uses cygwin, but the actual runtime doesn't.
58 *cygwin* ) LN_S='cp -p';;
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
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
96 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
97 extra_runtime_ldflags=""
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])
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"
126 libgc_threads=pthreads
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])
137 if test "x$cross_compiling" = "xno"; then
138 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
142 if test "x$host" = "x$target"; then
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"
156 with_sgen_default_concurrent=yes
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"
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"
169 libgc_threads=pthreads
172 with_sgen_default_concurrent=yes
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"
179 libgc_threads=pthreads
183 with_sgen_default_concurrent=yes
186 if test "x$PTHREAD_CFLAGS" = "x"; then
187 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
190 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
191 libmono_cflags="$PTHREAD_CFLAGS"
193 if test "x$PTHREAD_LIBS" = "x"; then
194 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
195 libmono_ldflags="-pthread"
197 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
198 libmono_ldflags="$PTHREAD_LIBS"
200 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
202 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
204 libgc_threads=pthreads
207 with_sgen_default_concurrent=yes
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"
215 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
216 LDFLAGS="$LDFLAGS -pthread"
218 AC_DEFINE(PTHREAD_POINTER_ID)
220 libgc_threads=pthreads
224 with_sgen_default_concurrent=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"
235 libmono_cflags="-D_REENTRANT"
237 libgc_threads=pthreads
244 # Android doesn't support boehm, as it's missing <link.h>
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
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"
267 libmono_cflags="-D_REENTRANT"
269 libgc_threads=pthreads
271 if test "x$cross_compiling" != "xno"; then
272 # to bypass the underscore linker check, not
273 # available during cross-compilation
287 # https://bugzilla.novell.com/show_bug.cgi?id=504411
291 with_sgen_default_concurrent=yes
294 echo "nacl no longer supported."
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"
307 CFLAGS="$CFLAGS +ESdbgasm"
308 LDFLAGS="$LDFLAGS -z"
309 libmono_cflags="-D_REENTRANT"
310 libmono_ldflags="-lpthread"
311 libgc_threads=pthreads
316 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
318 libmono_cflags="-D_REENTRANT"
319 libgc_threads=pthreads
322 enable_solaris_tar_check=yes
325 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
328 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
329 libmono_cflags="-D_THREAD_SAFE"
331 AC_DEFINE(PTHREAD_POINTER_ID)
332 AC_DEFINE(USE_MACH_SEMA, 1, [...])
334 libgc_threads=pthreads
336 if test "x$cross_compiling" = "xyes"; then
337 has_broken_apple_cpp=yes
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
343 dnl Snow Leopard and newer config.guess reports as this
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
356 with_sgen_default_concurrent=yes
368 CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
369 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
371 LIBS="$LIBS -lnetwork -ltextencoding"
373 AC_DEFINE(PTHREAD_POINTER_ID)
374 dnl Haiku does not support static TLS with __thread
376 libgc_threads=pthreads
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"
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)
395 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
397 dnl use pthread TLS, __thread has issues with the compiler flags we use
399 dnl ppc Linux is the same? test further
403 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
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)
462 AC_CHECK_TOOL(CXX, g++, g++)
468 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
470 # Set ASFLAGS if not already set.
471 : ${CCASFLAGS='$(CFLAGS)'}
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++])
485 dnl may require a specific autoconf version
486 dnl AC_PROG_CC_FOR_BUILD
487 dnl CC_FOR_BUILD not automatically detected
489 CFLAGS_FOR_BUILD=$CFLAGS
491 if test "x$cross_compiling" = "xyes"; then
496 AC_SUBST(CC_FOR_BUILD)
497 AC_SUBST(CFLAGS_FOR_BUILD)
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])
507 # This causes monodis to not link correctly
508 #AC_DISABLE_FAST_INSTALL
510 #lookup makedev() header
514 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
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
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>
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)
545 #error No good zlib found
548 AC_MSG_RESULT(Using system zlib)
549 zlib_msg="system zlib"
550 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
552 AC_MSG_RESULT(Using embedded zlib)
554 zlib_msg="bundled zlib"
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)
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)
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>], [
580 AC_DEFINE(HAVE_ISINF, 1, [isinf available])
582 # We'll have to use signals
586 AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
587 AC_TRY_LINK([#include <math.h>],
589 AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
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])
608 AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
610 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
614 android_sigrtminmax_work=yes
617 android_sigrtminmax_work=no
621 if test x$android_sigrtminmax_work = xno; then
622 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
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
638 #include <android/api-level.h>
639 #include <android/versioning.h>
641 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
643 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
647 android_unified_headers=yes
650 android_unified_headers=no
656 if test x$android_unified_headers = xyes; then
657 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
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"
668 AC_CHECK_SIZEOF(void *)
669 AC_CHECK_SIZEOF(long)
673 AC_CHECK_SIZEOF(long long)
675 AC_CACHE_CHECK([for clang],
688 AC_ARG_ENABLE(visibility-hidden,
689 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
690 disable_visibility_hidden=yes, disable_visibility_hidden=no)
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"
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)
719 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
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"
733 # The Sun Forte compiler complains about inline functions that access static variables
734 # so disable all inlining.
737 CFLAGS="$CFLAGS -Dinline="
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
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
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
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])
779 if test "x$with_mcs_path" != "x"; then
780 mcs_topdir=$(cd "$mcsdir" && pwd)
781 mcs_topdir_from_srcdir=$mcs_topdir
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
792 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
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#
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.])
812 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
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
821 pkg_config_path=$with_crosspkgdir
822 PKG_CONFIG_PATH=$pkg_config_path
823 export PKG_CONFIG_PATH
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'
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
859 if test "x$enable_shared" = "xno"; then
863 if test "x$enable_libraries" = "xno"; then
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
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])
883 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
884 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
888 # Pass it to libgc as well
889 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
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
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
913 elif test x$withval = xroslyn; then
915 elif test x$withval = xdefault; then
918 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
920 ],[csc_compiler=default])
922 if test $csc_compiler = default; then
923 if test $endian = big; then
925 elif test $endian = little; then
927 powerpc*) csc_compiler=mcs ;;
928 *) csc_compiler=roslyn ;;
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
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
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)
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])
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)]) ;;
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)]) ;;
1067 AX_CHECK_COMPILE_FLAG(
1068 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1069 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1072 AX_CHECK_COMPILE_FLAG(
1073 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1074 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1077 if test "x$SPECTRE_CFLAGS" != "x" ; then
1078 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1079 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1080 spectre_mitigation_status="mitigation enabled"
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"
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"
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"
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"
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"
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
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"
1216 elif test x$with_runtime_preset = xorbis; then
1217 DISABLE_MCS_DOCS_default=yes
1218 with_orbis_default=yes
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"
1230 elif test x$with_runtime_preset = xunreal; then
1231 DISABLE_MCS_DOCS_default=yes
1232 with_unreal_default=yes
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
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"
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
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'"
1388 DISABLED_FEATURES=$enable_minimal
1389 disabled="Disabled: $enable_minimal"
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;
1586 if test x$enable_extension_module = xyes; then
1587 has_extension_module=yes;
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.])
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__)
1604 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1605 int main () { doit (); return 0; }
1608 have_visibility_hidden=yes
1611 have_visibility_hidden=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"
1638 if test "x$support_boehm" = "xyes"; then
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"
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"
1658 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1663 AC_MSG_WARN("External Boehm is no longer supported")
1667 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
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.])
1677 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
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"
1686 AC_SUBST(LIBGC_CPPFLAGS)
1687 AC_SUBST(LIBGC_LIBS)
1688 AC_SUBST(LIBGC_STATIC_LIBS)
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)
1710 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
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;
1740 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1745 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1746 AC_TRY_COMPILE([#include <time.h>], [
1747 const int foo = CLOCK_MONOTONIC_COARSE;
1750 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1755 AC_MSG_CHECKING(for CLOCK_REALTIME)
1756 AC_TRY_COMPILE([#include <time.h>], [
1757 const int foo = CLOCK_REALTIME;
1760 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
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)
1780 if test x$dl_support = xno; then
1781 AC_MSG_WARN([No dynamic loading support available])
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],
1788 AC_TRY_RUN([#include <dlfcn.h>
1789 int mono_underscore_test (void) { return 42; }
1791 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1792 handle = dlopen ((void*)0, 0);
1794 f1 = dlsym (handle, "mono_underscore_test");
1795 f2 = dlsym (handle, "_mono_underscore_test");
1796 } return (!f2 || f1);
1798 [mono_cv_uscore=yes],
1799 [mono_cv_uscore=no],
1802 if test "x$mono_cv_uscore" = "xyes"; then
1803 MONO_DL_NEED_USCORE=1
1805 MONO_DL_NEED_USCORE=0
1807 AC_SUBST(MONO_DL_NEED_USCORE)
1808 AC_CHECK_FUNC(dlerror)
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])
1817 if test x$with_ikvm_native = xyes; then
1818 ikvm_native_dir=ikvm-native
1819 jdk_headers_found="IKVM Native"
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)
1845 AC_CHECK_FUNCS(arc4random)
1847 AC_CHECK_FUNCS(sched_getaffinity)
1848 AC_CHECK_FUNCS(sched_setaffinity)
1849 AC_CHECK_FUNCS(sched_getcpu)
1851 if test x$platform_android != xyes; then
1852 AC_CHECK_FUNCS(getpwnam_r)
1853 AC_CHECK_FUNCS(getpwuid_r)
1856 AC_FUNC_STRERROR_R()
1858 dnl ****************************************************************
1859 dnl *** Check for sched_setaffinity from glibc versions before ***
1860 dnl *** 2.3.4. The older versions of the function only take 2 ***
1861 dnl *** parameters, not 3. ***
1863 dnl *** Because the interface change was not made in a minor ***
1864 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1865 dnl *** won't always indicate the interface sched_affinity has. ***
1866 dnl ****************************************************************
1867 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1868 AC_TRY_COMPILE([#include <sched.h>], [
1870 sched_setaffinity(0, &mask);
1872 # Yes, we have it...
1874 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1876 # We have the new, three-parameter version
1879 AC_TRY_COMPILE([#include <sched.h>], [
1880 CPU_COUNT((void *) 0);
1883 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1885 # We have the new, three-parameter version
1889 dnl ******************************************************************
1890 dnl *** Check for large file support ***
1891 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1892 dnl ******************************************************************
1894 # Check that off_t can represent 2**63 - 1 correctly, working around
1895 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1896 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1898 AC_DEFUN([LARGE_FILES], [
1899 large_CPPFLAGS=$CPPFLAGS
1900 CPPFLAGS="$CPPFLAGS $1"
1902 #include <sys/types.h>
1905 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1906 #define COMPILE_TIME_ASSERT(pred) \
1907 switch(0){case 0:case pred:;}
1908 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1911 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1912 large_CPPFLAGS="$large_CPPFLAGS $1"
1917 CPPFLAGS=$large_CPPFLAGS
1920 AC_MSG_CHECKING(if off_t is 64 bits wide)
1922 if test $large_offt = no; then
1923 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1924 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1926 if test $large_offt = no; then
1927 AC_MSG_WARN([No 64 bit file size support available])
1930 dnl *****************************
1931 dnl *** Checks for libsocket ***
1932 dnl *****************************
1933 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1937 dnl *****************************
1938 dnl *** Checks for libinotify ***
1939 dnl *****************************
1940 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1943 dnl *******************************
1944 dnl *** Checks for MSG_NOSIGNAL ***
1945 dnl *******************************
1946 AC_MSG_CHECKING(for MSG_NOSIGNAL)
1947 AC_TRY_COMPILE([#include <sys/socket.h>], [
1948 int f = MSG_NOSIGNAL;
1950 # Yes, we have it...
1952 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1954 # We'll have to use signals
1958 dnl *****************************
1959 dnl *** Checks for IPPROTO_IP ***
1960 dnl *****************************
1961 AC_MSG_CHECKING(for IPPROTO_IP)
1962 AC_TRY_COMPILE([#include <netinet/in.h>], [
1963 int level = IPPROTO_IP;
1965 # Yes, we have it...
1967 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1969 # We'll have to use getprotobyname
1973 dnl *******************************
1974 dnl *** Checks for IPPROTO_IPV6 ***
1975 dnl *******************************
1976 AC_MSG_CHECKING(for IPPROTO_IPV6)
1977 AC_TRY_COMPILE([#include <netinet/in.h>], [
1978 int level = IPPROTO_IPV6;
1980 # Yes, we have it...
1982 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1984 # We'll have to use getprotobyname
1988 dnl ******************************
1989 dnl *** Checks for IPPROTO_TCP ***
1990 dnl ******************************
1991 AC_MSG_CHECKING(for IPPROTO_TCP)
1992 AC_TRY_COMPILE([#include <netinet/in.h>], [
1993 int level = IPPROTO_TCP;
1995 # Yes, we have it...
1997 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1999 # We'll have to use getprotobyname
2003 dnl *****************************
2004 dnl *** Checks for SOL_IP ***
2005 dnl *****************************
2006 AC_MSG_CHECKING(for SOL_IP)
2007 AC_TRY_COMPILE([#include <netdb.h>], [
2010 # Yes, we have it...
2012 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2014 # We'll have to use getprotobyname
2018 dnl *****************************
2019 dnl *** Checks for SOL_IPV6 ***
2020 dnl *****************************
2021 AC_MSG_CHECKING(for SOL_IPV6)
2022 AC_TRY_COMPILE([#include <netdb.h>], [
2023 int level = SOL_IPV6;
2025 # Yes, we have it...
2027 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2029 # We'll have to use getprotobyname
2033 dnl *****************************
2034 dnl *** Checks for SOL_TCP ***
2035 dnl *****************************
2036 AC_MSG_CHECKING(for SOL_TCP)
2037 AC_TRY_COMPILE([#include <netdb.h>], [
2038 int level = SOL_TCP;
2040 # Yes, we have it...
2042 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2044 # We'll have to use getprotobyname
2048 dnl *****************************
2049 dnl *** Checks for IP_PKTINFO ***
2050 dnl *****************************
2051 AC_MSG_CHECKING(for IP_PKTINFO)
2052 AC_TRY_COMPILE([#include <linux/in.h>], [
2053 int level = IP_PKTINFO;
2055 # Yes, we have it...
2057 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2062 dnl *****************************
2063 dnl *** Checks for IPV6_PKTINFO ***
2064 dnl *****************************
2065 AC_MSG_CHECKING(for IPV6_PKTINFO)
2066 AC_TRY_COMPILE([#include <netdb.h>], [
2067 int level = IPV6_PKTINFO;
2069 # Yes, we have it...
2071 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2076 dnl **********************************
2077 dnl *** Checks for IP_DONTFRAG ***
2078 dnl **********************************
2079 AC_MSG_CHECKING(for IP_DONTFRAG)
2080 AC_TRY_COMPILE([#include <netinet/in.h>], [
2081 int level = IP_DONTFRAG;
2083 # Yes, we have it...
2085 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2090 dnl **********************************
2091 dnl *** Checks for IP_DONTFRAGMENT ***
2092 dnl **********************************
2093 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2094 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2095 int level = IP_DONTFRAGMENT;
2097 # Yes, we have it...
2099 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2104 dnl **********************************
2105 dnl *** Checks for IP_MTU_DISCOVER ***
2106 dnl **********************************
2107 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2108 AC_TRY_COMPILE([#include <linux/in.h>], [
2109 int level = IP_MTU_DISCOVER;
2111 # Yes, we have it...
2113 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2118 dnl **********************************
2119 dnl *** Checks for IP_PMTUDISC_DO ***
2120 dnl **********************************
2121 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2122 AC_TRY_COMPILE([#include <linux/in.h>], [
2123 int level = IP_PMTUDISC_DO;
2125 # Yes, we have it...
2127 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2132 dnl *********************************
2133 dnl *** Check for struct ip_mreqn ***
2134 dnl *********************************
2135 AC_MSG_CHECKING(for struct ip_mreqn)
2136 AC_TRY_COMPILE([#include <netinet/in.h>], [
2137 struct ip_mreqn mreq;
2138 mreq.imr_address.s_addr = 0;
2140 # Yes, we have it...
2142 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2144 # We'll just have to try and use struct ip_mreq
2146 AC_MSG_CHECKING(for struct ip_mreq)
2147 AC_TRY_COMPILE([#include <netinet/in.h>], [
2148 struct ip_mreq mreq;
2149 mreq.imr_interface.s_addr = 0;
2151 # Yes, we have it...
2153 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2155 # No multicast support
2160 dnl **********************************
2161 dnl *** Check for getaddrinfo ***
2162 dnl **********************************
2163 AC_MSG_CHECKING(for getaddrinfo)
2168 getaddrinfo(NULL,NULL,NULL,NULL);
2170 # Yes, we have it...
2172 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2177 dnl **********************************
2178 dnl *** Check for gethostbyname2_r ***
2179 dnl **********************************
2180 AC_MSG_CHECKING(for gethostbyname2_r)
2186 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2188 # Yes, we have it...
2190 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2195 dnl **********************************
2196 dnl *** Check for gethostbyname2 ***
2197 dnl **********************************
2198 AC_MSG_CHECKING(for gethostbyname2)
2203 gethostbyname2(NULL,0);
2205 # Yes, we have it...
2207 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2212 dnl **********************************
2213 dnl *** Check for gethostbyname ***
2214 dnl **********************************
2215 AC_MSG_CHECKING(for gethostbyname)
2220 gethostbyname(NULL);
2222 # Yes, we have it...
2224 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2229 dnl **********************************
2230 dnl *** Check for getprotobyname ***
2231 dnl **********************************
2232 AC_MSG_CHECKING(for getprotobyname)
2237 getprotobyname(NULL);
2239 # Yes, we have it...
2241 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2246 dnl **********************************
2247 dnl *** Check for getnameinfo ***
2248 dnl **********************************
2249 AC_MSG_CHECKING(for getnameinfo)
2254 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2256 # Yes, we have it...
2258 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2264 dnl **********************************
2265 dnl *** Check for inet_ntop ***
2266 dnl **********************************
2267 AC_MSG_CHECKING(for inet_ntop)
2270 #include <arpa/inet.h>
2272 inet_ntop (0, NULL, NULL, 0);
2274 # Yes, we have it...
2276 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2281 dnl *****************************
2282 dnl *** Checks for libnsl ***
2283 dnl *****************************
2284 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2286 AC_CHECK_FUNCS(inet_pton inet_aton)
2288 dnl *****************************
2289 dnl *** Checks for libxnet ***
2290 dnl *****************************
2293 AC_MSG_CHECKING(for Solaris XPG4 support)
2294 if test -f /usr/lib/libxnet.so; then
2295 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2296 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2297 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2304 if test "$GCC" = "yes"; then
2305 CFLAGS="$CFLAGS -Wno-char-subscripts"
2310 dnl *****************************
2311 dnl *** Checks for libpthread ***
2312 dnl *****************************
2313 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2314 # and libpthread does not exist
2318 dnl Haiku has pthread in libroot (libc equiv)
2319 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2322 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2325 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2328 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2331 AC_CHECK_HEADERS(pthread.h)
2332 AC_CHECK_HEADERS(pthread_np.h)
2333 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2334 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2335 AC_CHECK_FUNCS(pthread_kill)
2336 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2337 AC_TRY_COMPILE([ #include <pthread.h>], [
2338 pthread_mutexattr_t attr;
2339 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2344 AC_ERROR(Posix system lacks support for recursive mutexes)
2346 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2347 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2348 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2350 dnl **********************************
2351 dnl *** Check for mincore ***
2352 dnl **********************************
2353 AC_MSG_CHECKING(for mincore)
2356 #include <sys/types.h>
2357 #include <sys/mman.h>
2359 mincore(NULL, 0, NULL);
2361 # Yes, we have it...
2363 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2368 dnl ***********************************
2369 dnl *** Checks for working __thread ***
2370 dnl ***********************************
2371 AC_MSG_CHECKING(for working __thread)
2372 if test "x$with_tls" != "x__thread"; then
2373 AC_MSG_RESULT(disabled)
2374 elif test "x$cross_compiling" = "xyes"; then
2375 AC_MSG_RESULT(cross compiling, assuming yes)
2378 #if defined(__APPLE__) && defined(__clang__)
2379 #error "__thread does not currently work with clang on Mac OS X"
2382 #include <pthread.h>
2384 static int res1, res2;
2386 void thread_main (void *arg)
2401 pthread_create (&t1, NULL, thread_main, 1);
2402 pthread_create (&t2, NULL, thread_main, 2);
2404 pthread_join (t1, NULL);
2405 pthread_join (t2, NULL);
2407 return !(res1 + res2 == 2);
2417 dnl **************************************
2418 dnl *** Checks for working sigaltstack ***
2419 dnl **************************************
2420 AC_MSG_CHECKING(for working sigaltstack)
2421 if test "x$with_sigaltstack" != "xyes"; then
2422 AC_MSG_RESULT(disabled)
2423 elif test "x$cross_compiling" = "xyes"; then
2424 AC_MSG_RESULT(cross compiling, assuming yes)
2431 #include <pthread.h>
2432 #include <sys/wait.h>
2433 #if defined(__FreeBSD__) || defined(__NetBSD__)
2434 #define SA_STACK SA_ONSTACK
2437 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2442 volatile char*__ptr = NULL;
2444 loop (void *ignored)
2453 struct sigaction sa;
2456 pthread_attr_t attr;
2458 sa.sa_sigaction = sigsegv_signal_handler;
2459 sigemptyset (&sa.sa_mask);
2460 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2461 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2462 perror ("sigaction");
2466 /* x86 darwin deliver segfaults using SIGBUS */
2467 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2468 perror ("sigaction");
2471 sas.ss_sp = malloc (SIGSTKSZ);
2472 sas.ss_size = SIGSTKSZ;
2474 if (sigaltstack (&sas, NULL) == -1) {
2475 perror ("sigaltstack");
2479 pthread_attr_init (&attr);
2480 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2481 printf ("pthread_create\n");
2505 for (i = 0; i < 300; ++i) {
2506 waitpid (son, &status, WNOHANG);
2507 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2512 kill (son, SIGKILL);
2518 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2525 dnl ********************************
2526 dnl *** Checks for semaphore lib ***
2527 dnl ********************************
2528 # 'Real Time' functions on Solaris
2529 # posix4 on Solaris 2.6
2530 # pthread (first!) on Linux
2531 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2533 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2534 AC_CHECK_FUNCS(shm_open)
2536 dnl ********************************
2537 dnl *** Checks for timezone stuff **
2538 dnl ********************************
2539 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2545 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2546 if test $ac_cv_struct_tm_gmtoff = yes; then
2547 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2549 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2554 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2555 if test $ac_cv_var_timezone = yes; then
2556 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2558 AC_ERROR(unable to find a way to determine timezone)
2562 dnl *********************************
2563 dnl *** Checks for math functions ***
2564 dnl *********************************
2565 AC_SEARCH_LIBS(sqrtf, m)
2566 if test "x$has_broken_apple_cpp" != "xyes"; then
2567 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2568 AC_TRY_LINK([#include <math.h>],
2570 AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2573 AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2574 AC_TRY_LINK([#include <math.h>],
2576 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2579 dnl ****************************************************************
2580 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2581 dnl *** have it in the library (duh)) ***
2582 dnl ****************************************************************
2583 AC_CHECK_FUNCS(poll)
2585 dnl *************************
2586 dnl *** Check for signbit ***
2587 dnl *************************
2588 AC_MSG_CHECKING(for signbit)
2589 AC_TRY_LINK([#include <math.h>], [
2590 int s = signbit(1.0);
2593 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2598 dnl **********************************
2600 dnl **********************************
2601 AC_CHECK_HEADERS(sys/epoll.h)
2603 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2604 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2605 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2610 AC_CHECK_HEADERS(sys/event.h)
2611 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2613 dnl **************************************
2614 dnl * Darwin has a race that prevents us from using reliably:
2615 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2616 dnl * Since kqueue is mostly used for scaling large web servers,
2617 dnl * and very few folks run Mono on large web servers on OSX, falling
2619 dnl **************************************
2620 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2621 if test "x$host_darwin" = "xno"; then
2622 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2626 dnl ******************************
2627 dnl *** Checks for SIOCGIFCONF ***
2628 dnl ******************************
2629 AC_CHECK_HEADERS(sys/ioctl.h)
2630 AC_CHECK_HEADERS(net/if.h, [], [],
2632 #ifdef HAVE_SYS_TYPES_H
2633 # include <sys/types.h>
2635 #ifdef HAVE_SYS_SOCKET_H
2636 # include <sys/socket.h>
2639 AC_MSG_CHECKING(for ifreq)
2642 #include <sys/ioctl.h>
2650 x = (void *) &ifr->ifr_addr;
2653 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2657 dnl **********************************
2658 dnl *** Checks for sin_len ***
2659 dnl **********************************
2660 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2662 #include <netinet/in.h>
2664 struct sockaddr_in saddr;
2665 saddr.sin_len = sizeof (saddr);
2668 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2672 dnl **********************************
2673 dnl *** Checks for sin6_len ***
2674 dnl **********************************
2675 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2677 #include <netinet/in.h>
2679 struct sockaddr_in6 saddr6;
2680 saddr6.sin6_len = sizeof (saddr6);
2683 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2687 dnl **********************************
2688 dnl *** Check for getifaddrs ***
2689 dnl **********************************
2690 AC_MSG_CHECKING(for getifaddrs)
2693 #include <sys/types.h>
2694 #include <sys/socket.h>
2695 #include <ifaddrs.h>
2699 # Yes, we have it...
2701 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2705 dnl **********************************
2706 dnl *** Check for if_nametoindex ***
2707 dnl **********************************
2708 AC_MSG_CHECKING(for if_nametoindex)
2711 #include <sys/types.h>
2712 #include <sys/socket.h>
2715 if_nametoindex(NULL);
2717 # Yes, we have it...
2719 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2723 dnl **********************************
2724 dnl *** Check for access ***
2725 dnl **********************************
2726 AC_MSG_CHECKING(for access)
2732 # Yes, we have it...
2734 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2739 dnl **********************************
2740 dnl *** Checks for proclib ***
2741 dnl **********************************
2742 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.)])
2743 dnl **********************************
2744 dnl *** Checks for MonoPosixHelper ***
2745 dnl **********************************
2746 AC_CHECK_HEADERS(checklist.h)
2747 AC_CHECK_HEADERS(pathconf.h)
2748 AC_CHECK_HEADERS(fstab.h)
2749 AC_CHECK_HEADERS(attr/xattr.h)
2750 AC_CHECK_HEADERS(sys/extattr.h)
2751 AC_CHECK_HEADERS(sys/sendfile.h)
2752 AC_CHECK_HEADERS(sys/statvfs.h)
2753 AC_CHECK_HEADERS(sys/statfs.h)
2754 AC_CHECK_HEADERS(sys/vfstab.h)
2755 AC_CHECK_HEADERS(sys/xattr.h)
2756 AC_CHECK_HEADERS(sys/mman.h)
2757 AC_CHECK_HEADERS(sys/param.h)
2758 AC_CHECK_HEADERS(sys/mount.h, [], [],
2760 #ifdef HAVE_SYS_PARAM_H
2761 # include <sys/param.h>
2764 AC_CHECK_HEADERS(sys/mount.h)
2765 AC_CHECK_FUNCS(confstr)
2766 AC_CHECK_FUNCS(seekdir telldir)
2767 AC_CHECK_FUNCS(getdomainname)
2768 AC_CHECK_FUNCS(setdomainname)
2769 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2770 AC_CHECK_FUNCS(setgroups)
2771 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2772 AC_CHECK_FUNCS(getfsstat)
2773 AC_CHECK_FUNCS(lutimes futimes)
2774 AC_CHECK_FUNCS(mremap)
2775 AC_CHECK_FUNCS(remap_file_pages)
2776 AC_CHECK_FUNCS(posix_fadvise)
2777 AC_CHECK_FUNCS(posix_fallocate)
2778 AC_CHECK_FUNCS(posix_madvise)
2779 AC_CHECK_FUNCS(vsnprintf)
2780 AC_CHECK_FUNCS(sendfile)
2781 AC_CHECK_FUNCS(gethostid sethostid)
2782 AC_CHECK_FUNCS(sethostname)
2783 AC_CHECK_FUNCS(statfs)
2784 AC_CHECK_FUNCS(fstatfs)
2785 AC_CHECK_FUNCS(statvfs)
2786 AC_CHECK_FUNCS(fstatvfs)
2787 AC_CHECK_FUNCS(stime)
2788 AC_CHECK_FUNCS(ttyname_r)
2789 AC_CHECK_FUNCS(psignal)
2790 AC_CHECK_FUNCS(getlogin_r)
2791 AC_CHECK_FUNCS(lockf)
2792 AC_CHECK_FUNCS(swab)
2793 AC_CHECK_FUNCS(setusershell endusershell)
2794 AC_CHECK_FUNCS(futimens utimensat)
2795 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2796 AC_CHECK_FUNCS(readv writev preadv pwritev)
2797 AC_CHECK_FUNCS(setpgid)
2798 AC_CHECK_FUNCS(system)
2799 AC_CHECK_FUNCS(fork execv execve)
2800 AC_CHECK_FUNCS(accept4)
2801 AC_CHECK_FUNCS(localtime_r)
2802 AC_CHECK_FUNCS(mkdtemp)
2803 AC_CHECK_SIZEOF(size_t)
2804 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2805 [#include <sys/types.h>
2806 #include <sys/stat.h>
2807 #include <unistd.h>])
2808 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2809 [#include <sys/types.h>
2810 #include <sys/stat.h>
2811 #include <unistd.h>])
2812 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2813 [#include <sys/time.h>])
2814 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2815 [#include <sys/socket.h>])
2816 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2817 [#include <unistd.h>
2818 #include <fcntl.h>])
2819 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2820 [#include <sys/uio.h>])
2821 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2822 [#include <sys/socket.h>])
2823 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2824 [#include <sys/poll.h>])
2825 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2826 [#include <sys/socket.h>])
2827 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2828 [#include <sys/socket.h>])
2829 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2830 [#include <netinet/in.h>])
2831 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2832 [#include <netinet/in.h>])
2833 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2834 [#include <sys/un.h>])
2835 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2836 [#include <sys/types.h>
2837 #include <sys/stat.h>
2838 #include <unistd.h>])
2839 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2840 [#include <time.h>])
2841 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2842 [#include <sys/time.h>
2843 #include <sys/types.h>
2844 #include <utime.h>])
2845 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2846 [#include <sys/time.h>])
2847 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2848 [#include <sys/types.h>
2849 #include <utime.h>])
2851 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2852 [#include <sys/types.h>
2853 #include <dirent.h>])
2855 [struct passwd.pw_gecos],,,
2856 [#include <sys/types.h>
2859 [struct statfs.f_flags],,,
2860 [#include <sys/types.h>
2861 #include <sys/vfs.h>])
2863 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2864 [#include <sys/types.h>
2865 #include <sys/stat.h>
2866 #include <unistd.h>])
2868 dnl Favour xattr through glibc, but use libattr if we have to
2869 AC_CHECK_FUNC(lsetxattr, ,
2870 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2874 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2876 [struct kinfo_proc.kp_proc],,,
2877 [#include <sys/types.h>
2878 #include <sys/param.h>
2879 #include <sys/sysctl.h>
2880 #include <sys/proc.h>
2883 dnl *********************************
2884 dnl *** Checks for Windows compilation ***
2885 dnl *********************************
2886 AC_CHECK_HEADERS(sys/time.h)
2887 AC_CHECK_HEADERS(sys/param.h)
2888 AC_CHECK_HEADERS(dirent.h)
2890 dnl ******************************************
2891 dnl *** Checks for OSX and iOS compilation ***
2892 dnl ******************************************
2893 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2895 dnl *********************************
2896 dnl *** Check for Console 2.0 I/O ***
2897 dnl *********************************
2898 AC_CHECK_HEADERS([curses.h])
2899 AC_CHECK_HEADERS([term.h], [], [],
2904 AC_CHECK_HEADERS([termios.h])
2906 dnl *********************************
2907 dnl *** Checks for random ***
2908 dnl *********************************
2909 if test x$host_darwin = xno; then
2910 AC_CHECK_HEADERS(sys/random.h)
2911 AC_CHECK_FUNCS(getrandom getentropy)
2914 dnl *********************************
2915 dnl *** Checks for System.Native ***
2916 dnl *********************************
2918 AC_MSG_CHECKING(for linux/in.h)
2920 #include <sys/socket.h>
2921 #include <linux/in.h>
2925 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
2930 AC_MSG_CHECKING(for struct in_pktinfo)
2932 #ifdef HAVE_LINUX_IN_H
2933 #include <sys/socket.h>
2934 #include <linux/in.h>
2936 #include <netinet/in.h>
2939 struct in_pktinfo pktinfo;
2942 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
2947 AC_MSG_CHECKING(for struct ip_mreqn)
2950 #include <sys/socket.h>
2951 #include <linux/in.h>
2953 #include <netinet/in.h>
2956 struct ip_mreqn mreqn;
2959 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
2964 if test x$host_darwin = xno; then
2965 AC_MSG_CHECKING(for struct flock64)
2972 AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)
2978 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
2979 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
2980 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
2981 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
2982 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
2983 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
2984 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
2985 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
2986 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
2987 AC_CHECK_FUNC(posix_fadvise, [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
2988 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
2989 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
2990 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
2991 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
2992 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
2993 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
2994 AC_CHECK_FUNC(arc4random, [AC_DEFINE(HAVE_ARC4RANDOM, 1, [arc4random])])
2995 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
2996 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
2997 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
2999 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3000 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3002 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>]])
3003 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>]])
3004 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>]])
3005 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>]])
3006 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3007 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3008 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3010 AC_MSG_CHECKING(for struct statfs)
3012 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3013 #include <sys/mount.h>
3015 #include <sys/statfs.h>
3021 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3026 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3027 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3030 AC_MSG_CHECKING(for readdir_r)
3035 struct dirent* entry;
3036 struct dirent* result;
3037 readdir_r(dir, entry, &result);
3040 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3045 AC_MSG_CHECKING(for kevent with void *data)
3047 #include <sys/types.h>
3048 #include <sys/event.h>
3050 struct kevent event;
3052 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3055 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3060 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3061 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3063 AC_MSG_CHECKING(for sendfile with 4 arguments)
3065 #include <sys/sendfile.h>
3067 int result = sendfile(0, 0, 0, 0);
3070 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3075 AC_MSG_CHECKING(for sendfile with 6 arguments)
3078 #include <sys/types.h>
3079 #include <sys/socket.h>
3080 #include <sys/uio.h>
3082 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3085 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3090 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3091 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3092 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3093 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3095 ORIG_CFLAGS="$CFLAGS"
3096 CFLAGS="-Werror -Wsign-conversion"
3098 AC_MSG_CHECKING(for getnameinfo with signed flags)
3100 #include <sys/types.h>
3103 const struct sockaddr *addr;
3110 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3113 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3118 CFLAGS="$ORIG_CFLAGS"
3120 if test "x$host_linux" = "xyes"; then
3121 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3123 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3126 ORIG_CFLAGS="$CFLAGS"
3127 CFLAGS="-Werror -Wsign-conversion"
3129 AC_MSG_CHECKING(for bind with unsigned addrlen)
3131 #include <sys/socket.h>
3134 struct sockaddr* addr;
3136 bind(fd, addr, addrLen);
3139 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3144 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3146 #include <netinet/in.h>
3147 #include <netinet/tcp.h>
3149 struct ipv6_mreq opt;
3150 unsigned int index = 0;
3151 opt.ipv6mr_interface = index;
3154 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3159 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3161 #include <sys/inotify.h>
3165 int result = inotify_rm_watch(fd, wd);
3168 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3173 CFLAGS="$ORIG_CFLAGS"
3175 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3176 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3180 #include <sys/mman.h>
3186 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3190 shm_unlink("/mono_configure_shm_open");
3192 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3193 // on at least the current version of Mac OS X
3195 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3202 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3208 AC_MSG_CHECKING(for getpriority with int who)
3210 #include <sys/resource.h>
3214 int result = getpriority(which, who);
3217 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3222 AC_MSG_CHECKING(for kevent with int parameters)
3224 #include <sys/types.h>
3225 #include <sys/event.h>
3228 const struct kevent* chagelist;
3230 struct kevent* eventlist;
3232 const struct timespec* timeout;
3233 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3236 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3241 ORIG_CFLAGS="$CFLAGS"
3242 CFLAGS="-Werror -Wimplicit-function-declaration"
3244 AC_MSG_CHECKING(for mkstemps)
3252 int result = mkstemps(template, suffixlen);
3255 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3261 CFLAGS="$ORIG_CFLAGS"
3263 if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3264 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3267 AC_MSG_CHECKING(for tcp/var.h)
3269 #include <sys/types.h>
3270 #include <sys/socketvar.h>
3271 #include <netinet/ip.h>
3272 #include <netinet/tcp.h>
3273 #include <netinet/tcp_var.h>
3277 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3282 AC_CHECK_HEADERS([sys/cdefs.h])
3284 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3286 #ifdef HAVE_SYS_CDEFS_H
3287 #include <sys/cdefs.h>
3289 #include <netinet/tcp.h>
3291 int result = TCP_ESTABLISHED;
3294 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3299 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3301 AC_MSG_CHECKING(for struct rt_msghdr)
3303 #include <sys/types.h>
3304 #include <net/route.h>
3309 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3314 AC_CHECK_HEADERS([sys/sysctl.h])
3315 AC_CHECK_HEADERS([linux/rtnetlink.h])
3317 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3318 AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3319 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3321 ORIG_CFLAGS="$CFLAGS"
3322 CFLAGS="-Werror -Weverything"
3324 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3328 size_t namelen = 20;
3330 int result = getdomainname(name, namelen);
3333 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3338 CFLAGS="$ORIG_CFLAGS"
3340 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3341 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3342 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3344 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
3345 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3346 elif test "x$host_linux" = "xyes"; then
3347 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3350 AC_CHECK_HEADERS([crt_externs.h])
3352 AC_MSG_CHECKING(for _NSGetEnviron)
3354 #include <crt_externs.h>
3356 char **result = *(_NSGetEnviron());
3359 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3364 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3367 dnl *********************************
3368 dnl *** Checks for Windows compilation ***
3369 dnl *********************************
3370 AC_CHECK_HEADERS(winternl.h)
3372 jdk_headers_found=no
3373 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3374 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3375 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3376 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3377 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3378 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3379 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3381 dnl *********************************
3382 dnl *** Check for struct ip_mreqn ***
3383 dnl *********************************
3384 AC_MSG_CHECKING(for struct ip_mreqn)
3385 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3386 struct ip_mreqn mreq;
3387 mreq.imr_address.s_addr = 0;
3389 # Yes, we have it...
3391 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3393 # We'll just have to try and use struct ip_mreq
3395 AC_MSG_CHECKING(for struct ip_mreq)
3396 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3397 struct ip_mreq mreq;
3398 mreq.imr_interface.s_addr = 0;
3400 # Yes, we have it...
3402 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3404 # No multicast support
3409 dnl **********************************
3410 dnl *** Check for getaddrinfo ***
3411 dnl **********************************
3412 AC_MSG_CHECKING(for getaddrinfo)
3415 #include <winsock2.h>
3416 #include <ws2tcpip.h>
3418 getaddrinfo(NULL,NULL,NULL,NULL);
3420 # Yes, we have it...
3422 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3427 dnl **********************************
3428 dnl *** Check for gethostbyname ***
3429 dnl **********************************
3430 AC_MSG_CHECKING(for gethostbyname)
3433 #include <winsock2.h>
3434 #include <ws2tcpip.h>
3436 gethostbyname(NULL);
3438 # Yes, we have it...
3440 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3445 dnl **********************************
3446 dnl *** Check for getprotobyname ***
3447 dnl **********************************
3448 AC_MSG_CHECKING(for getprotobyname)
3451 #include <winsock2.h>
3452 #include <ws2tcpip.h>
3454 getprotobyname(NULL);
3456 # Yes, we have it...
3458 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3463 dnl **********************************
3464 dnl *** Check for getnameinfo ***
3465 dnl **********************************
3466 AC_MSG_CHECKING(for getnameinfo)
3469 #include <winsock2.h>
3470 #include <ws2tcpip.h>
3472 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3474 # Yes, we have it...
3476 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3481 dnl **********************************
3482 dnl *** Check for inet_ntop ***
3483 dnl **********************************
3484 AC_MSG_CHECKING(for inet_ntop)
3487 #include <winsock2.h>
3488 #include <ws2tcpip.h>
3490 inet_ntop (0, NULL, NULL, 0);
3492 # Yes, we have it...
3494 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3499 dnl **********************************
3500 dnl *** Check for inet_pton ***
3501 dnl **********************************
3502 AC_MSG_CHECKING(for inet_pton)
3505 #include <winsock2.h>
3506 #include <ws2tcpip.h>
3511 inet_pton (0, NULL, NULL);
3513 # Yes, we have it...
3515 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3520 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3521 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3522 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3523 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3524 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3525 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3526 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3530 AC_MSG_CHECKING(for socklen_t)
3532 #include <sys/types.h>
3533 #include <sys/socket.h>
3537 ac_cv_c_socklen_t=yes
3538 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3544 AC_MSG_CHECKING(for array element initializer support)
3545 AC_TRY_COMPILE([#include <sys/socket.h>], [
3546 const int array[] = {[1] = 2,};
3548 # Yes, we have it...
3550 AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
3552 # We'll have to use signals
3556 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
3557 # Simply calling trunc (0.0) is no good since gcc will optimize the call away
3558 AC_TRY_LINK([#include <math.h>],
3559 [ static void *p = &trunc; ],
3561 AC_DEFINE(HAVE_TRUNC)
3567 if test "x$ac_cv_truncl" != "xyes"; then
3568 AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
3571 AC_CHECK_FUNCS(execvp)
3573 dnl ****************************
3574 dnl *** Look for /dev/random ***
3575 dnl ****************************
3577 AC_MSG_CHECKING([if usage of random device is requested])
3578 AC_ARG_ENABLE(dev-random,
3579 [ --disable-dev-random disable the use of the random device (enabled by default)],
3580 try_dev_random=$enableval, try_dev_random=yes)
3582 AC_MSG_RESULT($try_dev_random)
3586 dnl IBM i does not have /dev/random, use unblocking only
3589 NAME_DEV_RANDOM="/dev/urandom"
3592 dnl Win32 does not have /dev/random, they have their own method...
3594 *-mingw*|*-*-cygwin*)
3595 ac_cv_have_dev_random=no
3598 dnl Everywhere else, it's /dev/random
3601 NAME_DEV_RANDOM="/dev/random"
3605 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3607 dnl Now check if the device actually exists
3609 if test "x$try_dev_random" = "xyes"; then
3610 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3611 [if test -r "$NAME_DEV_RANDOM" ; then
3612 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3613 if test "x$ac_cv_have_dev_random" = "xyes"; then
3614 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3617 AC_MSG_CHECKING(for random device)
3618 ac_cv_have_dev_random=no
3619 AC_MSG_RESULT(has been disabled)
3622 if test "x$host_win32" = "xyes"; then
3623 AC_DEFINE(HAVE_CRYPT_RNG)
3626 if test "x$ac_cv_have_dev_random" = "xno" \
3627 && test "x$host_win32" = "xno"; then
3630 *** A system-provided entropy source was not found on this system.
3631 *** Because of this, the System.Security.Cryptography random number generator
3632 *** will throw a NotImplemented exception.
3634 *** If you are seeing this message, and you know your system DOES have an
3635 *** entropy collection in place, please report an issue on GitHub and
3636 *** provide information about the system and how to access the random device.
3638 *** Otherwise you can install either egd or prngd and set the environment
3639 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3643 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)
3645 AC_MSG_CHECKING([if big-arrays are to be enabled])
3646 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)
3647 if test "x$enable_big_arrays" = "xyes" ; then
3648 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3649 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3651 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3654 AC_MSG_RESULT($enable_big_arrays)
3660 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3662 if test "x$enable_dtrace" = "xyes"; then
3663 if test "x$has_dtrace" = "xno"; then
3664 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3666 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3667 if test "x$DTRACE" = "xno"; then
3668 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3670 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3671 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3677 if test "x$enable_dtrace" = "xyes"; then
3678 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3680 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3683 DTRACEFLAGS="-arch ppc64"
3686 DTRACEFLAGS="-arch x86_64"
3695 DTRACEFLAGS="-arch ppc"
3698 DTRACEFLAGS="-arch i386"
3705 AC_SUBST(DTRACEFLAGS)
3711 AC_CHECK_HEADERS([sys/sdt.h])
3713 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3714 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3716 dnl **************************
3717 dnl *** AOT cross offsets ***
3718 dnl **************************
3720 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3721 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3727 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3728 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3729 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)
3730 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3732 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3734 if test "x$enable_llvm" = "xdefault"; then
3735 enable_llvm=$enable_llvm_default
3738 if test "x$enable_llvm" = "xyes"; then
3739 if test "x$with_llvm" != "x"; then
3740 LLVM_CONFIG=$with_llvm/bin/llvm-config
3741 if test x$host_win32 = xyes; then
3742 LLVM_CONFIG=$LLVM_CONFIG.exe
3744 if test ! -x $LLVM_CONFIG; then
3745 AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3748 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3749 if test "x$LLVM_CONFIG" = "xno"; then
3750 AC_MSG_ERROR([llvm-config not found.])
3752 if test "x$with_llvm" = "x"; then
3753 with_llvm=`$LLVM_CONFIG --prefix`
3757 llvm_codegen="x86codegen"
3758 LLVM_ARCH_LIBS="-lLLVMX86Disassembler -lLLVMX86CodeGen -lLLVMX86AsmParser -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils"
3761 llvm_codegen="armcodegen"
3762 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3765 llvm_codegen="aarch64codegen"
3766 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3769 llvm_codegen="powerpccodegen"
3770 LLVM_ARCH_LIBS="-lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter"
3774 if test "x$host_win32" = "xno"; then
3776 # Should be something like '2.6' or '2.7svn'
3777 llvm_version=`$LLVM_CONFIG --version`
3778 llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3779 AC_MSG_CHECKING(LLVM version)
3780 AC_MSG_RESULT($llvm_version $llvm_api_version)
3781 if echo $llvm_version | grep -q 'mono'; then
3782 if test "x$enable_llvm_version_check" = "xyes"; then
3783 if test "$llvm_version" != "$expected_llvm_version"; then
3784 AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3788 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.])
3791 # The output of --cflags seems to include optimizations flags too
3792 if test $llvm_api_version -gt 100; then
3793 # The --cflags argument includes all kinds of warnings -pendantic etc.
3794 LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3795 LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3797 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'`
3798 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'`
3800 # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3801 # from LLVM classes.
3802 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3803 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3804 # This might include empty lines
3805 LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3806 llvm_jit_supported=yes
3807 llvm_jit_libs="jit mcjit $llvm_codegen"
3808 if test "x$host" != "x$target"; then
3809 # No need for jit libs
3810 llvm_jit_supported=no
3812 elif test $llvm_api_version -gt 100; then
3813 llvm_jit_libs="orcjit $llvm_codegen"
3815 LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3816 if test "x$LLVM_LIBS" = "x"; then
3817 echo "$LLVM_CONFIG --libs failed."
3820 LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3821 # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3822 if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3823 LLVM_LIBS="$LLVM_LIBS -lc++"
3825 LLVM_LIBS="$LLVM_LIBS -lstdc++"
3828 expected_llvm_version="3.4svn-mono-mono/e656cac"
3831 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"
3832 LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3833 LLVM_LDFLAGS="-L$with_llvm/lib"
3834 LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3835 LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3836 -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMSelectionDAG -lLLVMAsmPrinter \
3837 -lLLVMMCDisassembler -lLLVMJIT -lLLVMAnalysis -lLLVMTarget \
3838 -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3839 -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3840 -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3841 -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3842 -lLLVMSupport -lstdc++"
3843 LLVM_LIBS="$LLVM_LIBS $LLVM_ARCH_LIBS $LLVM_SYSTEM_LIBS"
3845 llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3846 llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3849 if test "x$llvm_api_version" = "x"; then
3850 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3851 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3853 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3854 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3857 AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3859 AC_SUBST(LLVM_CFLAGS)
3860 AC_SUBST(LLVM_CXXFLAGS)
3862 AC_SUBST(LLVM_LDFLAGS)
3863 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3866 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3867 if test "x$enable_loadedllvm" = "xyes"; then
3868 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3870 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3872 if test "x$enable_llvm" = "xyes"; then
3873 enable_llvm_runtime=yes
3875 if test "x$enable_llvm_runtime" = "xyes"; then
3876 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3878 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3881 ACCESS_UNALIGNED="yes"
3885 SQLITE="libsqlite.so.0"
3886 SQLITE3="libsqlite3.so.0"
3888 GDKX11="libgdk-x11-2.0.so.0"
3889 GTKX11="libgtk-x11-2.0.so.0"
3890 XINERAMA="libXinerama.so.1"
3892 sizeof_register="SIZEOF_VOID_P"
3895 boehm_supported=true
3899 if test "x$enable_wasm" = "xyes"; then
3903 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3904 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3916 ACCESS_UNALIGNED="no"
3918 AC_MSG_CHECKING(for mips n32)
3920 #if _MIPS_SIM != _ABIN32
3937 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3942 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3943 # int astruct __attribute__ ((visibility ("hidden")));
3946 # void *p = &astruct;
3948 # gcc -fPIC --shared -o libfoo.so foo.c
3950 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3951 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3952 have_visibility_hidden=no
3955 have_visibility_hidden=no
3964 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3971 openbsd*|freebsd*|kfreebsd-gnu*)
3978 x86_64-*-* | amd64-*-*)
3981 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3982 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3989 BTLS_PLATFORM=x86_64
3990 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3995 BTLS_PLATFORM=x86_64
3996 boehm_supported=false
3998 openbsd*|freebsd*|kfreebsd-gnu*)
4001 BTLS_PLATFORM=x86_64
4008 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4014 ACCESS_UNALIGNED="no"
4021 if test x"$GCC" = xyes; then
4022 # We don't support v8 cpus
4023 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4025 if test x"$AR" = xfalse; then
4026 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4029 *-mingw*|*-*-cygwin*)
4030 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4031 have_visibility_hidden=no
4034 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4035 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4036 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
4037 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4039 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4040 if ! (echo $CC | grep -q -- 'clang'); then
4041 CFLAGS="$CFLAGS -mminimal-toc"
4045 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4051 BTLS_PLATFORM=powerpc
4052 dnl on AIX/PASE, shared libraries can be inside archives
4053 dnl if they are, we specify them by lib.a(lib.so)
4054 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4055 LIBC="libc.a(shr_64.o)"
4056 INTL="libintl.a(libintl.so.8)"
4060 BTLS_PLATFORM=powerpc
4069 ACCESS_UNALIGNED="no"
4070 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4076 ACCESS_UNALIGNED="no"
4077 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4082 ACCESS_UNALIGNED="no"
4084 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4087 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4089 arm*-linux*-gnueabi)
4090 BTLS_PLATFORM=armsoft
4097 ACCESS_UNALIGNED="no"
4098 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4101 # https://lkml.org/lkml/2012/7/15/133
4104 boehm_supported=false
4107 BTLS_PLATFORM=aarch64
4108 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4113 ACCESS_UNALIGNED="yes"
4116 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4122 if test "x$host" != "x$target"; then
4123 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4125 enable_support_build=no
4131 ACCESS_UNALIGNED="no"
4132 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4133 # Can't use tls, since it depends on the runtime detection of tls offsets
4134 # in mono-compiler.h
4139 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4143 powerpc64-ps3-linux-gnu)
4145 arch_target=powerpc64
4146 AC_DEFINE(TARGET_PS3, 1, [...])
4147 # It would be better to just use TARGET_POWERPC64, but lots of code already
4149 AC_DEFINE(__mono_ppc64__, 1, [...])
4150 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
4152 target_byte_order=G_BIG_ENDIAN
4154 powerpc64-xbox360-linux-gnu)
4156 arch_target=powerpc64
4157 AC_DEFINE(TARGET_XBOX360, 1, [...])
4158 # It would be better to just use TARGET_POWERPC64, but lots of code already
4161 target_byte_order=G_BIG_ENDIAN
4166 AC_DEFINE(TARGET_ARM, 1, [...])
4167 ACCESS_UNALIGNED="no"
4168 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4169 # Can't use tls, since it depends on the runtime detection of tls offsets
4170 # in mono-compiler.h
4174 armv7l-unknown-linux-gnueabi*)
4176 CPPFLAGS="$CPPFLAGS"
4178 armv5-*-linux-androideabi*)
4179 AC_DEFINE(TARGET_ANDROID, 1, [...])
4180 CPPFLAGS="$CPPFLAGS"
4182 *-linux-androideabi*)
4183 AC_DEFINE(TARGET_ANDROID, 1, [...])
4184 CPPFLAGS="$CPPFLAGS"
4191 AC_DEFINE(TARGET_ARM, 1, [...])
4192 ACCESS_UNALIGNED="no"
4193 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4194 # Can't use tls, since it depends on the runtime detection of tls offsets
4195 # in mono-compiler.h
4202 AC_DEFINE(TARGET_X86, 1, [...])
4203 CPPFLAGS="$CPPFLAGS"
4204 # Can't use tls, since it depends on the runtime detection of tls offsets
4205 # in mono-compiler.h
4211 AC_DEFINE(TARGET_ANDROID, 1, [...])
4218 AC_DEFINE(TARGET_AMD64, 1, [...])
4219 CPPFLAGS="$CPPFLAGS"
4220 # Can't use tls, since it depends on the runtime detection of tls offsets
4221 # in mono-compiler.h
4227 AC_DEFINE(TARGET_ANDROID, 1, [...])
4234 AC_DEFINE(TARGET_AMD64, 1, [...])
4235 AC_DEFINE(TARGET_PS4, 1, [...])
4236 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4237 CPPFLAGS="$CPPFLAGS"
4238 # Can't use tls, since it depends on the runtime detection of tls offsets
4239 # in mono-compiler.h
4247 AC_DEFINE(TARGET_ARM64, 1, [...])
4248 CPPFLAGS="$CPPFLAGS"
4249 # Can't use tls, since it depends on the runtime detection of tls offsets
4250 # in mono-compiler.h
4255 AC_DEFINE(TARGET_ANDROID, 1, [...])
4263 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4269 AC_DEFINE(TARGET_X86, 1, [...])
4272 AC_DEFINE(TARGET_AMD64, 1, [...])
4275 AC_DEFINE(TARGET_ARM, 1, [...])
4278 AC_DEFINE(TARGET_ARM64, 1, [...])
4281 AC_DEFINE(TARGET_POWERPC, 1, [...])
4284 AC_DEFINE(TARGET_POWERPC, 1, [...])
4285 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4288 AC_DEFINE(TARGET_S390X, 1, [...])
4291 AC_DEFINE(TARGET_MIPS, 1, [...])
4294 AC_DEFINE(TARGET_SPARC, 1, [...])
4297 AC_DEFINE(TARGET_SPARC64, 1, [...])
4303 AC_DEFINE(HOST_X86, 1, [...])
4306 AC_DEFINE(HOST_AMD64, 1, [...])
4309 AC_DEFINE(HOST_ARM, 1, [...])
4312 AC_DEFINE(HOST_ARM64, 1, [...])
4315 AC_DEFINE(HOST_POWERPC, 1, [...])
4318 AC_DEFINE(HOST_POWERPC, 1, [...])
4319 AC_DEFINE(HOST_POWERPC64, 1, [...])
4322 AC_DEFINE(HOST_S390X, 1, [...])
4325 AC_DEFINE(HOST_MIPS, 1, [...])
4328 AC_DEFINE(HOST_SPARC, 1, [...])
4331 AC_DEFINE(HOST_SPARC64, 1, [...])
4343 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4344 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4346 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4348 if test "x$enable_vtune" = "xyes"; then
4349 if test "x$with_vtune" = "x"; then
4350 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4352 VTUNE_PATH=$with_vtune
4354 VTUNE_INCLUDE=$VTUNE_PATH/include
4357 VTUNE_LIB=$VTUNE_PATH/lib32
4360 VTUNE_LIB=$VTUNE_PATH/lib64
4363 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4366 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4367 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4369 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4370 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4373 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4374 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4376 AC_SUBST(VTUNE_LIBS)
4377 AC_SUBST(VTUNE_CFLAGS)
4379 dnl Use GCC atomic ops if they work on the target.
4380 if test x$GCC = "xyes"; then
4382 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
4383 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4388 if test "x$target_mach" = "xyes"; then
4390 if test "x$TARGET_SYS" = "xWATCHOS"; then
4391 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4392 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4393 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4395 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4396 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4397 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4398 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4401 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4402 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4403 #error fail this for ios
4406 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4407 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4408 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4411 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4412 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4413 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4418 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4421 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4423 if test "x$sizeof_register" = "x4"; then
4424 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
4425 elif test "x$sizeof_register" = "x8"; then
4426 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
4428 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
4431 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4433 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4434 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4435 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4436 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4438 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4441 if test "x$have_visibility_hidden" = "xyes"; then
4442 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4445 if test "x$have_deprecated" = "xyes"; then
4446 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4450 dnl Simple Generational checks (sgen)
4453 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4454 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4455 if test x$buildsgen = xyes; then
4456 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4457 SGEN_DEFINES="-DHAVE_SGEN_GC"
4460 if test x$with_sgen_default_concurrent != xno; then
4461 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4462 conc_gc_msg=" (concurrent by default)"
4465 if test "x$gc_msg" = "x"; then
4466 gc_msg="sgen$conc_gc_msg"
4468 gc_msg="sgen$conc_gc_msg and $gc_msg"
4471 AC_SUBST(SGEN_DEFINES)
4472 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4474 jit_status="Building and using the JIT"
4482 INTL="libintl.dylib"
4483 SQLITE="libsqlite.0.dylib"
4484 SQLITE3="libsqlite3.0.dylib"
4486 GDKX11="libgdk-x11-2.0.dylib"
4487 GTKX11="libgtk-x11-2.0.dylib"
4492 SQLITE="libsqlite.so"
4493 SQLITE3="libsqlite3.so"
4503 SQLITE="libsqlite.so"
4504 SQLITE3="libsqlite3.so"
4509 SQLITE="libsqlite.so"
4510 SQLITE3="libsqlite3.so"
4514 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4515 AC_MSG_CHECKING(for the soname of libX11.so)
4516 for i in $x_libraries $dlsearch_path; do
4518 if test -f $i/libX11.so.$r; then
4525 if test "x$X11" = "xlibX11.so"; then
4526 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4534 ######################################
4536 ######################################
4540 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4541 if test x$GCC = xyes; then
4542 GNUC_UNUSED='__attribute__((__unused__))'
4543 GNUC_NORETURN='__attribute__((__noreturn__))'
4545 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4548 AC_SUBST(GNUC_PRETTY)
4549 AC_SUBST(GNUC_UNUSED)
4550 AC_SUBST(GNUC_NORETURN)
4551 AC_SUBST(BREAKPOINT)
4553 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4556 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4572 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4577 arm*-darwin*|aarch64*-*)
4578 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4581 ORDER=G_LITTLE_ENDIAN
4584 LDFLAGS="$LDFLAGS -ltextencoding"
4587 CFLAGS="$CFLAGS -pthread"
4588 LDFLAGS="$LDFLAGS -pthread"
4599 # Defined for all targets/platforms using classic Windows API support.
4600 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4601 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4603 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4604 AC_CHECK_FUNCS(getrlimit)
4605 AC_CHECK_FUNCS(fork execv execve)
4607 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4609 if test x$with_overridable_allocators = xyes; then
4610 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4611 AC_MSG_NOTICE([Overridable allocator support enabled])
4613 AC_MSG_NOTICE([Overridable allocator support disabled])
4617 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4618 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4619 # removed once support for 10.6 is dropped.
4621 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4623 if test x$target_osx = xyes; then
4624 AC_CHECK_FUNCS(getpwuid_r)
4625 elif test x$target_ios = xno; then
4626 AC_CHECK_FUNCS(strndup getpwuid_r)
4629 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4631 AC_SEARCH_LIBS(sqrtf, m)
4633 # nanosleep may not be part of libc, also search it in other libraries
4634 AC_SEARCH_LIBS(nanosleep, rt)
4636 AC_SEARCH_LIBS(dlopen, dl)
4637 old_ldflags="${LDFLAGS}"
4638 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4639 if test $lt_cv_prog_gnu_ld = yes; then
4640 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4643 *-*-aix*|*-*-os400*)
4646 dnl Try to use export-dynamic anyways
4647 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4651 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4652 if test $found_export_dynamic = no; then
4653 LDFLAGS="${old_ldflags}"
4656 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)
4657 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4658 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4659 AC_SUBST(HAVE_ALLOCA_H)
4661 # Get the exact type of size_t, not just its size.
4662 # This is so we can find an exact printf format among u, lu, llu, I64u.
4663 # To avoid warnings about slight mismatches.
4664 # C99 runtime "zu" dependency is being avoided here.
4666 # We have to compile as C++ because C is too lenient
4667 # and lets the wrong thing compile, with warnings.
4669 # Note: "zu" or ifdef <something> have the advantage
4670 # of producing installable "biarch" headers. i.e. one Mac header
4671 # for Mac/x86 and Mac/amd64.
4675 # Check long before int because it is the overwhelming Unix answer,
4676 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4678 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4680 AC_MSG_CHECKING(if size_t is unsigned long)
4681 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4683 unsigned long *a = (size_t*)0;
4686 AC_SUBST(GSIZE_FORMAT, '"%lu"')
4689 AC_MSG_CHECKING(if size_t is unsigned int)
4690 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4692 unsigned *a = (size_t*)0;
4695 AC_SUBST(GSIZE_FORMAT, '"%u"')
4697 # At this point the majority of systems have their answer,
4698 # and we descend into non-standard or new-standard territory.
4700 # Check __int64 first because I64 on some systems predates ll, enabling
4701 # new compiler/old runtime interop, and the types always have the same size.
4703 AC_MSG_CHECKING(if size_t is unsigned __int64)
4704 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4706 unsigned __int64 *a = (size_t*)0;
4709 AC_SUBST(GSIZE_FORMAT, '"%I64u"')
4712 AC_MSG_CHECKING(if size_t is unsigned long long)
4713 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4715 unsigned long long *a = (size_t*)0;
4718 AC_SUBST(GSIZE_FORMAT, '"%llu"')
4721 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4729 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4730 # This provides for an exact match with functions that
4731 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4732 # uintptr_t is not necessarily the same.
4734 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4735 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4737 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4747 AC_SUBST(GSIZE_FORMAT)
4750 # END OF EGLIB CHECKS
4753 AC_ARG_WITH([libgdiplus],
4754 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4755 [], [with_libgdiplus=installed])
4757 # default install location
4758 libgdiplus_install_loc=libgdiplus${libsuffix}
4761 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4765 case $with_libgdiplus in
4772 if test x$cross_compiling = xno; then
4773 if test x$host_darwin = xyes; then
4774 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4776 libgdiplus_install_loc=$a
4784 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4787 /*) # absolute path, assume it is an install location
4788 libgdiplus_loc=$with_libgdiplus
4789 libgdiplus_install_loc=$with_libgdiplus
4793 libgdiplus_loc=`pwd`/$with_libgdiplus
4796 AC_SUBST(libgdiplus_loc)
4797 AC_SUBST(libgdiplus_install_loc)
4799 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)
4800 if test "x$icall_symbol_map" = "xyes"; then
4801 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4804 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4805 if test "x$icall_export" = "xyes"; then
4806 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4809 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4810 if test "x$icall_tables" = "xno"; then
4811 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4814 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4816 if test "x$with_tls" = "x__thread"; then
4817 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4818 # Pass the information to libgc
4819 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4820 AC_MSG_CHECKING(if the tls_model attribute is supported)
4821 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4824 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4830 if test ${TARGET} = ARM; then
4831 dnl ******************************************
4832 dnl *** Check to see what FPU is available ***
4833 dnl ******************************************
4834 AC_MSG_CHECKING(which FPU to use)
4837 # This is a bit tricky:
4839 # if (__ARM_PCS_VFP) {
4840 # /* mfloat-abi=hard == VFP with hard ABI */
4841 # } elif (!__SOFTFP__) {
4842 # /* mfloat-abi=softfp == VFP with soft ABI */
4844 # /* mfloat-abi=soft == no VFP */
4847 # The exception is iOS (w/ GCC) where none of the above
4848 # are defined (but iOS always uses the 'softfp' ABI).
4850 # No support for FPA.
4855 # iOS GCC always uses the 'softfp' ABI.
4856 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4860 # Are we using the 'hard' ABI?
4861 if test x$fpu = xNONE; then
4862 AC_TRY_COMPILE([], [
4863 #ifndef __ARM_PCS_VFP
4864 #error "Float ABI is not 'hard'"
4873 # No 'hard' ABI. 'soft' or 'softfp'?
4874 if test x$fpu = xNONE; then
4875 AC_TRY_COMPILE([], [
4877 #error "Float ABI is not 'softfp'"
4886 if test x$arm_fpu != x; then
4891 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4894 dnl *********************************************
4895 dnl *** Check which ARM version(s) we can use ***
4896 dnl *********************************************
4897 AC_MSG_CHECKING(which ARM version to use)
4899 AC_TRY_COMPILE([], [
4900 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4901 #error Not on ARM v5.
4909 AC_TRY_COMPILE([], [
4910 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4911 #error Not on ARM v6.
4920 AC_TRY_COMPILE([], [
4921 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4922 #error Not on ARM v7.
4932 AC_MSG_RESULT($arm_ver)
4934 if test x$arm_v5 = xyes; then
4935 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4936 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4939 if test x$arm_v6 = xyes; then
4940 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4941 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4944 if test x$arm_v7 = xyes; then
4945 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4946 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4950 if test ${TARGET} = unknown; then
4951 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4952 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4955 if test "x$platform_android" = "xyes"; then
4956 case "x${TARGET}" in
4961 BTLS_PLATFORM=android-armv5
4965 BTLS_PLATFORM=android-armv6
4969 BTLS_PLATFORM=android-armv7
4978 BTLS_PLATFORM=android-v8a
4982 BTLS_PLATFORM=android-x86
4986 BTLS_PLATFORM=android-x64
4994 if test ${ACCESS_UNALIGNED} = no; then
4995 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4998 if test x$host_darwin = xyes; then
4999 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5001 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5002 [AC_MSG_RESULT([no])],
5004 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5006 RANLIB="$RANLIB -no_warning_for_no_symbols"
5007 AC_MSG_RESULT([yes])
5014 # Pass CPPFLAGS to libgc configure
5015 # We should use a separate variable for this to avoid passing useless and
5016 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5017 # This should be executed late so we pick up the final version of CPPFLAGS
5018 # The problem with this approach, is that during a reconfigure, the main
5019 # configure scripts gets invoked with these arguments, so we use separate
5020 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5021 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5022 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5023 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5025 # Don't pass -finstrument-for-thread-suspension in,
5026 # if these are instrumented it will be very bad news
5027 # (infinite recursion, undefined parking behavior, etc)
5028 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5029 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\""
5030 if test "x$support_boehm" = "xyes"; then
5031 AC_CONFIG_SUBDIRS(libgc)
5037 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5038 if test x$with_malloc_mempools = xyes; then
5040 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5045 DISABLE_MCS_DOCS=default
5046 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5047 if test x$with_mcs_docs != xyes; then
5048 DISABLE_MCS_DOCS=yes
5051 if test -n "$INSTALL_4_x_TRUE"; then :
5052 DISABLE_MCS_DOCS=yes
5054 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5055 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5058 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)],[
5059 if test x$with_lazy_gc_thread_creation != xno ; then
5060 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5062 ], [with_lazy_gc_thread_creation=no])
5064 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])
5065 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5067 if test x$enable_cooperative_suspend = xdefault -a test x$with_cooperative_gc != xdefault; then
5068 enable_cooperative_suspend=$with_cooperative_gc
5071 if test x$enable_cooperative_suspend = xdefault; then
5072 enable_cooperative_suspend=$enable_cooperative_suspend_default
5075 if test x$enable_cooperative_suspend != xno; then
5076 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5079 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5081 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])
5083 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5084 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5087 if test x$enable_hybrid_suspend != xno ; then
5088 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5091 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5093 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],[
5095 if test x$enable_checked_build != x ; then
5096 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5098 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5099 eval "mono_checked_build_test_enable_$feature='yes'"
5102 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5103 eval "mono_checked_build_test_enable_gc='yes'"
5104 eval "mono_checked_build_test_enable_metadata='yes'"
5105 eval "mono_checked_build_test_enable_thread='yes'"
5106 eval "mono_checked_build_test_enable_private_types='yes'"
5109 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5110 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5113 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5114 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5117 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5118 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5121 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5122 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5126 AC_CHECK_HEADER([malloc.h],
5127 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5128 [Define to 1 if you have /usr/include/malloc.h.])],,)
5130 if test x"$GCC" = xyes; then
5131 # Implicit function declarations are not 64 bit safe
5132 # Do this late, since this causes lots of configure tests to fail
5133 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5134 # jay has a lot of implicit declarations
5135 JAY_CFLAGS="-Wno-implicit-function-declaration"
5138 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5139 # instead of libmono-static.a
5140 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5141 LIBMONO_LA=libmini-static.la
5143 if test x$buildsgen = xyes; then
5144 LIBMONO_LA=libmonosgen-$API_VER.la
5146 LIBMONO_LA=libmonoboehm-$API_VER.la
5149 AC_SUBST(LIBMONO_LA)
5155 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5156 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5157 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5159 if test "x$enable_btls" = "xno"; then
5163 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5166 if test "x$enable_btls" = "xyes"; then
5167 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5168 if test "x$CMAKE" = "xno"; then
5169 AC_MSG_ERROR("cmake not found")
5172 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5179 case "$BTLS_PLATFORM" in
5185 btls_cflags="$btls_cflags -arch i386"
5193 btls_cflags="-DOPENSSL_NO_ASM=1"
5197 btls_cflags="-DOPENSSL_NO_ASM=1"
5201 btls_cflags="-march=armv8-a+crypto"
5210 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5211 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5215 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5218 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5221 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
5224 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
5227 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
5230 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
5233 AC_MSG_ERROR(Invalid BTLS platform)
5236 if test "x$platform_android" = "xyes"; then
5238 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5239 if test "x$with_btls_android_ndk" != "x"; then
5240 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5242 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5246 if test "x$btls_arch" != "x"; then
5247 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5250 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5252 AC_SUBST(BTLS_CFLAGS)
5253 AC_SUBST(BTLS_PLATFORM)
5254 AC_SUBST(BTLS_CMAKE_ARGS)
5256 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5261 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5263 if test x$DISABLE_MCS_DOCS = xyes; then
5270 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5271 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5272 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5274 libmono_ldflags="$libmono_ldflags $LIBS"
5276 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5277 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5278 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5279 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5280 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5281 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5282 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5283 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5284 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5285 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5286 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5287 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5288 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5289 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5290 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5291 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5292 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5293 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5295 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5305 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5306 AC_SUBST(arch_target)
5311 #This must always be defined when building the runtime
5312 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5314 mono_build_root=`pwd`
5315 AC_SUBST(mono_build_root)
5317 mono_runtime=mono/mini/mono
5318 AC_SUBST(mono_runtime)
5320 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5322 if test $csc_compiler = mcs; then
5323 CSC=$mcs_topdir/class/lib/build/mcs.exe
5328 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5330 mono_cfg_root=$mono_build_root/runtime
5331 if test x$host_win32 = xyes; then
5332 if test "x$cross_compiling" = "xno"; then
5333 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5334 CSC=`cygpath -m -a $CSC`
5335 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5337 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5340 mono_cfg_dir=$mono_cfg_root/etc
5342 AC_SUBST(mono_cfg_dir)
5346 AC_CONFIG_FILES([po/mcs/Makefile.in])
5348 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5349 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5351 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5354 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5356 *) reldir=$depth/$srcdir ;;
5358 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5359 cd runtime/etc/mono/1.0
5360 rm -f machine.config
5361 $LN_S $reldir/data/net_1_1/machine.config machine.config
5365 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5368 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5370 *) reldir=$depth/$srcdir ;;
5372 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5373 cd runtime/etc/mono/2.0
5374 rm -f machine.config
5375 $LN_S $reldir/data/net_2_0/machine.config machine.config
5379 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5382 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5384 *) reldir=$depth/$srcdir ;;
5386 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5387 cd runtime/etc/mono/2.0
5389 $LN_S $reldir/data/net_2_0/web.config web.config
5393 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5396 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5398 *) reldir=$depth/$srcdir ;;
5400 $ac_aux_dir/install-sh -d runtime/etc/mono/
5401 cd runtime/etc/mono/
5403 $LN_S $reldir/data/browscap.ini browscap.ini
5407 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5408 [ depth=../../../../..
5410 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5412 *) reldir=$depth/$srcdir ;;
5414 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5415 cd runtime/etc/mono/2.0/Browsers
5416 rm -f Compat.browser
5417 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5421 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5422 [ depth=../../../../..
5424 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5426 *) reldir=$depth/$srcdir ;;
5428 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5429 cd runtime/etc/mono/4.0/Browsers
5430 rm -f Compat.browser
5431 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5435 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5436 [ depth=../../../../..
5438 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5440 *) reldir=$depth/$srcdir ;;
5442 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5443 cd runtime/etc/mono/4.5/Browsers
5444 rm -f Compat.browser
5445 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5449 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5452 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5454 *) reldir=$depth/$srcdir ;;
5456 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5457 cd runtime/etc/mono/4.0
5458 rm -f machine.config
5459 $LN_S $reldir/data/net_4_0/machine.config machine.config
5463 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5466 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5468 *) reldir=$depth/$srcdir ;;
5470 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5471 cd runtime/etc/mono/4.0
5473 $LN_S $reldir/data/net_4_0/web.config web.config
5477 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5480 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5482 *) reldir=$depth/$srcdir ;;
5484 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5485 cd runtime/etc/mono/4.5
5486 rm -f machine.config
5487 $LN_S $reldir/data/net_4_5/machine.config machine.config
5491 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5494 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5496 *) reldir=$depth/$srcdir ;;
5498 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5499 cd runtime/etc/mono/4.5
5501 $LN_S $reldir/data/net_4_5/web.config web.config
5505 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])
5506 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])
5511 acceptance-tests/Makefile
5513 scripts/mono-find-provides
5514 scripts/mono-find-requires
5519 mono/utils/jemalloc/Makefile
5520 mono/metadata/Makefile
5524 mono/arch/x86/Makefile
5525 mono/arch/amd64/Makefile
5526 mono/arch/ppc/Makefile
5527 mono/arch/sparc/Makefile
5528 mono/arch/s390x/Makefile
5529 mono/arch/arm/Makefile
5530 mono/arch/arm64/Makefile
5531 mono/arch/mips/Makefile
5534 mono/tests/tests-config
5535 mono/tests/gc-descriptors/Makefile
5536 mono/tests/testing_gac/Makefile
5537 mono/unit-tests/Makefile
5538 mono/benchmark/Makefile
5540 mono/profiler/Makefile
5542 mono/eglib/eglib-config.h
5544 ikvm-native/Makefile
5549 data/net_2_0/Makefile
5550 data/net_4_0/Makefile
5551 data/net_4_5/Makefile
5552 data/net_2_0/Browsers/Makefile
5553 data/net_4_0/Browsers/Makefile
5554 data/net_4_5/Browsers/Makefile
5561 data/mono-options.pc
5562 data/mono-lineeditor.pc
5568 data/system.web.extensions_1.0.pc
5569 data/system.web.extensions.design_1.0.pc
5570 data/system.web.mvc.pc
5571 data/system.web.mvc2.pc
5572 data/system.web.mvc3.pc
5573 data/aspnetwebstack.pc
5579 tools/locale-builder/Makefile
5581 tools/monograph/Makefile
5582 tools/pedump/Makefile
5588 # Update all submodules recursively to ensure everything is checked out
5589 $srcdir/scripts/update_submodules.sh
5591 if test x$host_win32 = xyes; then
5592 # Get rid of 'cyg' prefixes in library names
5593 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5594 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5595 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5596 # executable doesn't work...
5597 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5600 if test x$host_darwin = xyes; then
5601 # This doesn't seem to be required and it slows down parallel builds
5602 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5607 NONE) prefix=$ac_default_prefix ;;
5609 case $exec_prefix in
5610 NONE) exec_prefix='${prefix}' ;;
5614 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
5615 # any existing config.make. This allows people to share the same source tree
5616 # with different build directories, one native and one cross
5618 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5620 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5622 echo "prefix=$prefix" > $mcs_topdir/build/config.make
5623 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5624 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5625 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5626 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5627 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5628 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5629 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5630 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5633 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5634 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5637 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5640 [myver=$($AWK 'BEGIN {
5641 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5642 if(length(vsplit [1]) > 4) {
5643 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5645 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5648 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5649 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5651 if test x$host_darwin = xyes; then
5652 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
5653 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
5654 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
5655 elif test x$host_win32 = xyes; then
5656 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5657 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5658 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
5659 elif test x$host_linux = xyes; then
5660 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5661 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5662 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5664 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
5665 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
5666 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
5669 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5670 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5673 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5674 enable_system_aot=yes
5677 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5678 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5681 if test x$DISABLE_MCS_DOCS = xyes; then
5682 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5685 if test x$has_extension_module != xno; then
5686 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5689 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5691 if test "x$test_bcl_opt" = "xyes"; then
5692 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5695 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5697 if test $csc_compiler = mcs; then
5698 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5701 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5702 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5703 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5704 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5707 if test "x$AOT_MODE" != "x" ; then
5708 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5711 if test "x$enable_btls" = "xyes"; then
5712 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5719 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5721 btls_platform_string=
5722 if test x$enable_btls = xyes; then
5723 if test x$btls_android = xyes; then
5724 btls_platform_string=" (android:$BTLS_PLATFORM)"
5726 btls_platform_string=" ($BTLS_PLATFORM)"
5732 C# Compiler: $csc_compiler
5739 SIGALTSTACK: $with_sigaltstack
5741 BigArrays: $enable_big_arrays
5742 DTrace: $enable_dtrace
5743 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5744 Spectre: $spectre_mitigation_status
5747 .NET 4.x: $with_profile4_x
5748 Xamarin.Android: $with_monodroid
5749 Xamarin.iOS: $with_monotouch
5750 Xamarin.WatchOS: $with_monotouch_watch
5751 Xamarin.TVOS: $with_monotouch_tv
5752 Xamarin.Mac: $with_xammac
5753 Windows AOT: $with_winaot
5755 Unreal: $with_unreal
5756 WebAssembly: $with_wasm
5757 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5758 JNI support: $jdk_headers_found
5759 libgdiplus: $libgdiplus_msg
5761 BTLS: $enable_btls$btls_platform_string
5762 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5765 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5766 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)