1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.23.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])
23 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test]))
24 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test-bundle]))
31 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
33 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
34 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
35 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
38 # This is the version of the corlib-runtime interface. When
39 # making changes to this interface (by changing the layout
40 # of classes the runtime knows about, changing icall signature or
41 # semantics etc), change this variable.
43 # This must be unique relative to corlib interface/semantics.
45 # Generate it with uuidgen. For example:
46 # perl -pi.bak -e "s/^MONO_CORLIB_VERSION=\S+/MONO_CORLIB_VERSION=`uuidgen`/" configure.ac
48 # There is no ordering of corlib versions, no old or new,
49 # the runtime expects an exact match.
51 MONO_CORLIB_VERSION=F65F48BE-A122-484D-8666-78FFEBD693FE
54 # Put a quoted #define in config.h.
55 # Substitute @MONO_CORLIB_VERSION@ unquoted.
57 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
58 AC_SUBST(MONO_CORLIB_VERSION)
62 echo "Run configure using ./configure --host=i686-w64-mingw32 or --host=x86_64-w64-mingw32"
66 # In case of cygwin, override LN_S, irrespective of what it determines.
67 # The build uses cygwin, but the actual runtime doesn't.
69 *cygwin* ) LN_S='cp -p';;
77 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
78 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
79 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
80 CFLAGS_FOR_LIBGC=$CFLAGS
81 CPPFLAGS_FOR_BTLS=$CPPFLAGS
82 CFLAGS_FOR_BTLS=$CFLAGS
84 # libgc uses some deprecated APIs
85 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
88 # These are the flags that need to be stored in the mono.pc file for
89 # compiling code that will embed Mono
93 AC_SUBST(libmono_cflags)
94 AC_SUBST(libmono_ldflags)
96 # Variable to have relocatable .pc files (lib, or lib64)
97 # realpath isn't always available, and requires that all but the tip of the provided
98 # path exists. Fall back to the old behaviour, but realpath allows depth >1
99 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
100 # too deep for the old method to work
101 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
102 AC_SUBST(reloc_libdir)
104 # Set to yes if Unix sockets cannot be created in an anonymous namespace
107 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
108 extra_runtime_ldflags=""
110 # Thread configuration inspired by sleepycat's db
111 AC_MSG_CHECKING([host platform characteristics])
129 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
130 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
132 libgc_threads=pthreads
135 *-mingw*|*-*-cygwin*)
136 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
137 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
140 if test "x$cross_compiling" = "xno"; then
141 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
145 if test "x$host" = "x$target"; then
151 # Windows 7 or later is required
152 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
153 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
154 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
155 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
156 libmono_cflags="-mms-bitfields -mwindows"
157 libmono_ldflags="-mms-bitfields -mwindows"
162 with_sgen_default_concurrent=yes
164 # This forces libgc to use the DllMain based thread registration code on win32
165 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
168 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
169 libmono_cflags="-D_REENTRANT"
170 LDFLAGS="$LDFLAGS -pthread"
171 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
172 libmono_ldflags="-pthread"
175 libgc_threads=pthreads
178 with_sgen_default_concurrent=yes
181 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
182 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
183 libmono_ldflags="-lpthread -pthread"
185 libgc_threads=pthreads
189 with_sgen_default_concurrent=yes
193 LDFLAGS="$LDFLAGS -lutil"
194 if test "x$PTHREAD_CFLAGS" = "x"; then
195 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
198 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
199 libmono_cflags="$PTHREAD_CFLAGS"
201 if test "x$PTHREAD_LIBS" = "x"; then
202 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
203 libmono_ldflags="-pthread"
205 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
206 libmono_ldflags="$PTHREAD_LIBS"
208 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
210 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
212 libgc_threads=pthreads
225 with_sgen_default_concurrent=yes
228 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
229 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
230 if test "x$disable_munmap" != "xyes"; then
231 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
233 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
234 LDFLAGS="$LDFLAGS -pthread"
236 AC_DEFINE(PTHREAD_POINTER_ID)
238 libgc_threads=pthreads
242 with_sgen_default_concurrent=yes
246 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
247 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
249 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
250 if test "x$disable_munmap" != "xyes"; then
251 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
253 libmono_cflags="-D_REENTRANT"
255 libgc_threads=pthreads
262 # Android doesn't support boehm, as it's missing <link.h>
266 # isinf(3) requires -lm
267 LDFLAGS="$LDFLAGS -lm"
269 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
270 # PAGE_SIZE; breaks mono/io-layer/collection.c
271 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
272 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
273 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
275 # to bypass the underscore linker check, can't work when cross-compiling
281 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
282 if test "x$disable_munmap" != "xyes"; then
283 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
285 libmono_cflags="-D_REENTRANT"
287 libgc_threads=pthreads
289 if test "x$cross_compiling" != "xno"; then
290 # to bypass the underscore linker check, not
291 # available during cross-compilation
305 # https://bugzilla.novell.com/show_bug.cgi?id=504411
313 with_sgen_default_concurrent=yes
316 echo "nacl no longer supported."
320 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
321 # +ESdbgasm only valid on bundled cc on RISC
322 # silently ignored for ia64
323 if test $GCC != "yes"; then
324 CFLAGS="$CFLAGS +ESdbgasm"
325 # Arrange for run-time dereferencing of null
326 # pointers to produce a SIGSEGV signal.
327 LDFLAGS="$LDFLAGS -z"
329 CFLAGS="$CFLAGS +ESdbgasm"
330 LDFLAGS="$LDFLAGS -z"
331 libmono_cflags="-D_REENTRANT"
332 libmono_ldflags="-lpthread"
333 libgc_threads=pthreads
338 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
340 libmono_cflags="-D_REENTRANT"
341 libgc_threads=pthreads
344 enable_solaris_tar_check=yes
347 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
350 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
351 libmono_cflags="-D_THREAD_SAFE"
353 AC_DEFINE(PTHREAD_POINTER_ID)
354 AC_DEFINE(USE_MACH_SEMA, 1, [...])
356 libgc_threads=pthreads
358 if test "x$cross_compiling" = "xyes"; then
359 has_broken_apple_cpp=yes
361 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
362 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
363 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
365 dnl Snow Leopard and newer config.guess reports as this
367 BROKEN_DARWIN_FLAGS="-arch i386"
368 BROKEN_DARWIN_CPPFLAGS=""
369 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
370 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
371 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
372 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
373 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
374 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
375 with_sgen_default_concurrent=yes
378 with_sgen_default_concurrent=yes
390 dnl BSD_SOURCE is for getifaddrs
391 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
392 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
394 LIBS="$LIBS -lnetwork -ltextencoding"
396 AC_DEFINE(PTHREAD_POINTER_ID)
397 dnl Haiku does not support static TLS with __thread
399 libgc_threads=pthreads
404 dnl Set up a 64-bit build
405 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
407 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
408 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
409 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
410 dnl specifiy 64-bit mode for tools.
411 AR="/usr/bin/ar -X64"
412 NM="/usr/bin/nm -X64"
413 dnl SGen is the future (changes to Boehm support code would be
414 dnl required if you wish to re-enable Boehm)
419 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
421 dnl use pthread TLS, __thread has issues with the compiler flags we use
423 dnl ppc Linux is the same? test further
427 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
434 if test x$need_link_unlink = xyes; then
435 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
438 if test x$host_win32 = xyes; then
439 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
442 if test x$target_win32 = xyes; then
443 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
446 if test x$host_darwin = xyes; then
447 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
450 # Defined for all targets/platforms using classic Windows API support.
451 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
452 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
454 AC_SUBST(extra_runtime_ldflags)
455 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
456 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
457 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
458 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
459 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
460 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
461 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
462 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
463 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
465 if test -z "$HOST_DARWIN_TRUE"; then :
466 PLATFORM_AOT_SUFFIX=.dylib
469 if test -z "$HOST_LINUX_TRUE"; then :
470 PLATFORM_AOT_SUFFIX=.so
473 if test -z "$HOST_WIN32_TRUE"; then :
474 PLATFORM_AOT_SUFFIX=.dll
477 AC_SUBST(PLATFORM_AOT_SUFFIX)
479 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
481 AC_CHECK_TOOL(CC, gcc, gcc)
483 AC_CHECK_TOOL(CXX, g++, g++)
489 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
491 # Set ASFLAGS if not already set.
492 : ${CCASFLAGS='$(CFLAGS)'}
496 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
497 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
498 if test "x$CXX" = "xg++"; then
499 if test "x$GXX" != "xyes"; then
500 # automake/libtool is so broken, it requires g++ even if the c++ sources
501 # are inside automake conditionals
502 AC_MSG_ERROR([You need to install g++])
506 dnl may require a specific autoconf version
507 dnl AC_PROG_CC_FOR_BUILD
508 dnl CC_FOR_BUILD not automatically detected
510 CFLAGS_FOR_BUILD=$CFLAGS
512 if test "x$cross_compiling" = "xyes"; then
517 AC_SUBST(CC_FOR_BUILD)
518 AC_SUBST(CFLAGS_FOR_BUILD)
520 AC_SUBST(BUILD_EXEEXT)
522 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
523 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
528 # This causes monodis to not link correctly
529 #AC_DISABLE_FAST_INSTALL
531 #lookup makedev() header
535 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
538 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
539 AC_SUBST(export_ldflags)
541 # Test whenever ld supports -version-script
545 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 copyfile.h)
546 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)
547 AC_CHECK_HEADER(unistd.h, [HAVE_UNISTD_H=1], [HAVE_UNISTD_H=0])
548 AC_SUBST(HAVE_UNISTD_H)
549 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
550 [], [], [#include <stddef.h>
551 #include <sys/socket.h>
552 #include <linux/socket.h>])
554 AC_CHECK_HEADERS(sys/user.h, [], [],
556 #ifdef HAVE_SYS_PARAM_H
557 # include <sys/param.h>
561 AC_CHECK_HEADERS(linux/serial.h)
563 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
564 if test x$have_zlib = xyes; then
565 AC_TRY_COMPILE([#include <zlib.h>], [
566 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
568 #error No good zlib found
571 AC_MSG_RESULT(Using system zlib)
572 zlib_msg="system zlib"
573 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
575 AC_MSG_RESULT(Using embedded zlib)
577 zlib_msg="bundled zlib"
581 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
582 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
584 # for mono/metadata/debug-symfile.c
585 AC_CHECK_HEADERS(elf.h)
588 AC_CHECK_HEADERS(poll.h)
589 AC_CHECK_HEADERS(sys/poll.h)
590 AC_CHECK_HEADERS(sys/wait.h)
591 AC_CHECK_HEADERS(grp.h)
592 AC_CHECK_HEADERS(syslog.h)
593 AC_CHECK_FUNCS(vsyslog)
596 AC_CHECK_HEADERS(wchar.h)
598 # for Linux statfs support
599 AC_CHECK_HEADERS(linux/magic.h)
601 # For Android NDK unified headers
602 if test x$platform_android = xyes; then
603 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
604 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
605 AC_CHECK_HEADERS(android/ndk-version.h)
607 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
608 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
609 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
610 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
611 # doesn't contain the required definitions (NDK 14)
612 if test x$have_android_signal_inlines = xyes; then
613 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
615 AC_LANG_PROGRAM([#include <signal.h>
616 #include <android/legacy_signal_inlines.h>],[
618 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
622 android_sigrtminmax_work=yes
625 android_sigrtminmax_work=no
629 if test x$android_sigrtminmax_work = xno; then
630 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
634 # Attempt to detect whether we're using Android NDK unified headers
635 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
636 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
638 android_unified_headers=no
639 if test x$have_android_api_level = xyes; then
640 if test x$have_android_versioning = xyes; then
641 AC_MSG_CHECKING([whether using Android NDK unified headers])
643 # Both macros are defined only in the NDK unified headers
646 #include <android/api-level.h>
647 #include <android/versioning.h>
649 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
651 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
655 android_unified_headers=yes
658 android_unified_headers=no
664 if test x$android_unified_headers = xyes; then
665 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
669 # not 64 bit clean in cross-compile
670 AC_CHECK_SIZEOF(void *)
671 AC_CHECK_SIZEOF(long)
674 AC_CHECK_SIZEOF(long long)
676 AC_CACHE_CHECK([for clang],
689 AC_ARG_ENABLE(visibility-hidden,
690 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
691 disable_visibility_hidden=yes, disable_visibility_hidden=no)
694 if test x"$GCC" = xyes; then
695 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
696 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
698 # We require C99 with some GNU extensions, e.g. `linux` macro
699 CFLAGS="$CFLAGS -std=gnu99"
701 # The runtime code does not respect ANSI C strict aliasing rules
702 CFLAGS="$CFLAGS -fno-strict-aliasing"
704 # We rely on signed overflow to behave
705 CFLAGS="$CFLAGS -fwrapv"
707 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
708 if test x"$disable_visibility_hidden" = xno; then
709 # Don't export any symbols by default
710 SHARED_CFLAGS="-fvisibility=hidden"
711 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
715 # Check for the normal version, since gcc ignores unknown -Wno options
716 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
717 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
721 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
727 if test "x$mono_cv_clang" = "xyes"; then
728 # https://bugzilla.samba.org/show_bug.cgi?id=8118
729 WARN="$WARN -Qunused-arguments"
730 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
731 # We rely on zero length arrays in structs
732 WARN="$WARN -Wno-zero-length-array"
735 # The Sun Forte compiler complains about inline functions that access static variables
736 # so disable all inlining.
739 CFLAGS="$CFLAGS -Dinline="
743 CFLAGS="$WARN $CFLAGS -g"
744 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
745 CPPFLAGS="$WARN $CPPFLAGS -g"
747 # Where's the 'mcs' source tree?
748 if test -d $srcdir/mcs; then
754 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
755 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
756 mcsdir=$with_mcs_path
760 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
762 AC_ARG_WITH(core, [ --with-core=only controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
763 if test x$with_core = xonly; then
764 AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
765 with_runtime_preset=netcore
767 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
770 # A sanity check to catch cases where the package was unpacked
771 # with an ancient tar program (Solaris)
773 AC_ARG_ENABLE(solaris-tar-check,
774 [ --disable-solaris-tar-check disable solaris tar check],
775 do_solaris_tar_check=no, do_solaris_tar_check=yes)
777 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
778 AC_MSG_CHECKING(integrity of package)
779 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
783 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"
784 AC_MSG_ERROR([$errorm])
788 if test "x$with_mcs_path" != "x"; then
789 mcs_topdir=$(cd "$mcsdir" && pwd)
790 mcs_topdir_from_srcdir=$mcs_topdir
792 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
793 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
796 # Convert mcs_topdir* paths to Windows syntax.
797 if test x$cross_compiling$host_win32 = xnoyes; then
798 mcs_topdir=$(cygpath -m $mcs_topdir)
799 case $mcs_topdir_from_srcdir in
801 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
806 AC_SUBST([mcs_topdir])
807 AC_SUBST([mcs_topdir_from_srcdir])
809 # gettext: prepare the translation directories.
810 # we do not configure the full gettext, as we consume it dynamically from C#
813 if test "x$USE_NLS" = "xyes"; then
814 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
816 if test "x$HAVE_MSGFMT" = "xno"; then
817 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
821 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
824 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
825 if test x$with_crosspkgdir = "x"; then
826 if test -s $PKG_CONFIG_PATH; then
827 pkg_config_path=$PKG_CONFIG_PATH
830 pkg_config_path=$with_crosspkgdir
831 PKG_CONFIG_PATH=$pkg_config_path
832 export PKG_CONFIG_PATH
836 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
837 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
838 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
840 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
841 if test x$werror_flag = xyes; then
842 WERROR_CFLAGS="-Werror"
844 AC_SUBST([WERROR_CFLAGS])
845 AC_SUBST([SHARED_CFLAGS])
847 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
849 AC_SUBST(GLIB_CFLAGS)
851 # Enable support for fast thread-local storage
852 # Some systems have broken support, so we allow to disable it.
853 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
855 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
856 # This does not work on some platforms (bug #55253)
857 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
859 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
860 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
861 # Same as --with-shared_mono=no
862 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
864 if test "x$enable_static" = "xno"; then
868 if test "x$enable_shared" = "xno"; then
872 if test "x$enable_libraries" = "xno"; then
876 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
878 if test "x$host_win32" = "xyes"; then
879 # Boehm GC requires the runtime to be in its own dll
883 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
884 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
885 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
886 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
888 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
889 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
890 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
892 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
893 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
897 # Pass it to libgc as well
898 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
905 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
907 if test x$enable_small_config = xyes; then
908 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
909 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
912 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)
914 DISABLED_FEATURES=none
917 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
918 AC_MSG_CHECKING([CSharp compiler to use])
919 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
920 if test x$withval = xmcs; then
922 elif test x$withval = xroslyn; then
924 elif test x$withval = xdefault; then
927 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
929 ],[csc_compiler=default])
931 if test $csc_compiler = default; then
932 if test $endian = big; then
934 elif test $endian = little; then
936 powerpc*) csc_compiler=mcs ;;
937 *) csc_compiler=roslyn ;;
943 AC_MSG_RESULT($csc_compiler)
945 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
946 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
947 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])
950 if test x$target_win32 = xyes; then
952 with_jemalloc_assert=no
953 with_jemalloc_always=no
956 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
957 if test "x$with_jemalloc_assert" = "xyes"; then
958 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
959 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
960 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
963 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
964 if test "x$with_jemalloc_always" = "xyes"; then
966 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
967 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
968 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
971 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
972 if test "x$with_jemalloc" = "xyes"; then
973 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
974 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
975 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
977 if test "x$target_mach" = "xyes"; then
978 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
981 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
982 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
984 AC_SUBST(JEMALLOC_CFLAGS)
985 AC_SUBST(JEMALLOC_CPPFLAGS)
986 AC_SUBST(JEMALLOC_LDFLAGS)
987 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
991 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
992 # MERP - The MS telemetry profile. Not for general use.
993 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
995 # 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.
997 #--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.
998 #--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.
999 #--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.
1000 #--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.
1002 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=yes])
1003 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])
1004 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1006 if test "x$with_crash_privacy" = "xyes"; then
1007 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1010 if test "x$with_structured_crashes" = "xno"; then
1011 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1015 *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1020 if test "x$crash_reporting" != "xyes"; then
1021 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1022 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1025 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1026 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1028 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1029 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1031 if test x$enable_monodroid = xyes; then
1032 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1035 if test x$enable_monotouch = xyes; then
1036 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1039 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1041 # mono/corefx/native has a lot of invalid C++98 in its headers
1042 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1043 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1044 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1045 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1047 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1048 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1049 # and add it whenever we're running clang on Darwin.
1050 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1051 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1054 AC_SUBST(CXXFLAGS_COMMON)
1056 if test "x$enable_cxx" = "xyes"; then
1058 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1060 # -std=gnu99 -xc++ is not allowed and errors.
1061 CXX_REMOVE_CFLAGS=-std=gnu99
1062 # These give warnings and should be removed. They are C-only.
1063 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1064 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1065 # Likewise with CentOS 6 gcc 4.4.
1066 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1068 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1069 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1070 # generates a warning every time we run gcc which is very unsightly.
1071 # The warning is for e.g. sprintf(foo, "") which can just be
1072 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1073 # and completely legal and valid.
1074 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1075 # Alternatively, just run $CXX -xc++ -c /dev/null.
1077 ORIG_CXXFLAGS=$CXXFLAGS
1078 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1079 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1080 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1082 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1083 CXXFLAGS=$ORIG_CXXFLAGS
1086 AC_SUBST(CXX_ADD_CFLAGS)
1087 AC_SUBST(CXX_REMOVE_CFLAGS)
1090 # Set the build profiles and options before things which use them
1093 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])
1094 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1095 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1096 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])
1097 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])
1098 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1099 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1100 AC_ARG_WITH(testing_aot_full_interp, [ --with-testing_aot_full_interp=yes,no If you want to build the testing_aot_full_interp assemblies (defaults to no)], [], [with_testing_aot_full_interp=default])
1101 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])
1102 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])
1103 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1104 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1105 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1106 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1109 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,bitcode,unreal,fullaotinterp,fullaotinterp_llvm Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1110 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])
1111 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])
1112 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])
1115 dnl Spectre compiler mitigation flag checks
1117 if test "x$with_spectre_mitigation" = "xyes"; then
1118 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1120 SPECTRE_INDIRECT_BRANCH_KIND=
1121 case "x$with_spectre_indirect_branch_choice" in
1122 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1123 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1124 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1125 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1126 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1129 SPECTRE_FUNCTION_RETURN_KIND=""
1130 case "x$with_spectre_function_return_choice" in
1131 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1132 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1133 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1134 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1135 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1138 AX_CHECK_COMPILE_FLAG(
1139 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1140 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1143 AX_CHECK_COMPILE_FLAG(
1144 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1145 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1148 if test "x$SPECTRE_CFLAGS" != "x" ; then
1149 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1150 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1151 spectre_mitigation_status="mitigation enabled"
1154 spectre_mitigation_status="no mitigation"
1158 dnl Profile defaults
1160 TEST_PROFILE=default
1161 enable_llvm_default=no
1163 with_profile4_x_default=no
1164 with_monodroid_default=no
1165 with_monotouch_default=no
1166 with_monotouch_watch_default=no
1167 with_monotouch_tv_default=no
1168 with_xammac_default=no
1169 with_testing_aot_full_interp_default=no
1170 with_testing_aot_hybrid_default=no
1171 with_testing_aot_full_default=no
1172 with_winaot_default=no
1173 with_orbis_default=no
1174 with_unreal_default=no
1175 with_wasm_default=no
1177 with_bitcode_default=no
1178 enable_cooperative_suspend_default=no
1179 enable_hybrid_suspend_default=no
1181 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000,nftnptr-arg-trampolines=4000
1183 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1185 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1186 DISABLE_MCS_DOCS_default=yes
1187 elif test x$with_runtime_preset = xnetcore; then
1188 DISABLE_MCS_DOCS_default=yes
1190 mono_feature_disable_remoting='yes'
1191 mono_feature_disable_reflection_emit_save='yes'
1192 mono_feature_disable_appdomains='yes'
1193 elif test x$with_runtime_preset = xnet_4_x; then
1194 with_profile4_x_default=yes
1195 TEST_PROFILE=net_4_x
1196 elif test x$with_runtime_preset = xall; then
1197 with_profile4_x_default=yes
1198 with_monodroid_default=yes
1199 with_monotouch_default=yes
1200 with_monotouch_watch_default=yes
1201 with_monotouch_tv_default=yes
1202 with_xammac_default=yes
1203 with_winaot_default=yes
1204 with_orbis_default=yes
1205 with_unreal_default=yes
1206 with_wasm_default=yes
1207 with_testing_aot_full_interp_default=yes
1208 with_testing_aot_hybrid_default=yes
1209 with_testing_aot_full_default=yes
1210 TEST_PROFILE=net_4_x
1211 elif test x$with_runtime_preset = xbitcode; then
1212 DISABLE_MCS_DOCS_default=yes
1213 with_testing_aot_full_default=yes
1214 with_bitcode_default=yes
1215 enable_cooperative_suspend_default=yes
1216 TEST_PROFILE=testing_aot_full
1217 enable_llvm_default=yes
1219 mono_feature_disable_com='yes'
1220 mono_feature_disable_remoting='yes'
1221 mono_feature_disable_reflection_emit_save='yes'
1222 mono_feature_disable_reflection_emit='yes'
1223 mono_feature_disable_appdomains='yes'
1225 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1226 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1228 elif test x$with_runtime_preset = xfullaot; then
1229 DISABLE_MCS_DOCS_default=yes
1230 with_testing_aot_full_default=yes
1231 TEST_PROFILE=testing_aot_full
1233 mono_feature_disable_com='yes'
1234 mono_feature_disable_remoting='yes'
1235 mono_feature_disable_reflection_emit_save='yes'
1236 mono_feature_disable_reflection_emit='yes'
1237 mono_feature_disable_appdomains='yes'
1239 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1240 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1242 elif test x$with_runtime_preset = xfullaot_llvm; then
1243 DISABLE_MCS_DOCS_default=yes
1244 with_testing_aot_full_default=yes
1245 TEST_PROFILE=testing_aot_full
1247 mono_feature_disable_com='yes'
1248 mono_feature_disable_remoting='yes'
1249 mono_feature_disable_reflection_emit_save='yes'
1250 mono_feature_disable_reflection_emit='yes'
1251 mono_feature_disable_appdomains='yes'
1253 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1254 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1256 elif test x$with_runtime_preset = xhybridaot; then
1257 DISABLE_MCS_DOCS_default=yes
1258 with_testing_aot_hybrid_default=yes
1259 TEST_PROFILE=testing_aot_hybrid
1261 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1262 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1263 elif test x$with_runtime_preset = xhybridaot_llvm; then
1264 DISABLE_MCS_DOCS_default=yes
1265 with_testing_aot_hybrid_default=yes
1266 TEST_PROFILE=testing_aot_hybrid
1268 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1269 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1270 elif test x$with_runtime_preset = xfullaotinterp; then
1271 with_testing_aot_full_interp_default=yes
1272 TEST_PROFILE=testing_aot_full_interp
1274 # mscorlib.dll aot compilation crashes
1275 mono_feature_disable_com='yes'
1277 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1278 AOT_RUN_FLAGS="--full-aot-interp"
1279 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1280 with_testing_aot_full_interp_default=yes
1281 TEST_PROFILE=testing_aot_full_interp_llvm
1283 # mscorlib.dll aot compilation crashes
1284 mono_feature_disable_com='yes'
1286 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1287 AOT_RUN_FLAGS="--full-aot-interp"
1288 elif test x$with_runtime_preset = xaot; then
1289 with_profile4_x_default=yes
1291 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1294 DISABLE_MCS_DOCS_default=yes
1295 elif test x$with_runtime_preset = xaot_llvm; then
1296 with_profile4_x_default=yes
1298 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1301 DISABLE_MCS_DOCS_default=yes
1302 elif test x$with_runtime_preset = xwinaot; then
1303 DISABLE_MCS_DOCS_default=yes
1304 with_winaot_default=yes
1307 mono_feature_disable_com='yes'
1308 mono_feature_disable_remoting='yes'
1309 mono_feature_disable_reflection_emit_save='yes'
1310 mono_feature_disable_reflection_emit='yes'
1311 mono_feature_disable_appdomains='yes'
1313 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1314 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1316 elif test x$with_runtime_preset = xorbis; then
1317 DISABLE_MCS_DOCS_default=yes
1318 with_orbis_default=yes
1321 mono_feature_disable_com='yes'
1322 mono_feature_disable_remoting='yes'
1323 mono_feature_disable_reflection_emit_save='yes'
1324 mono_feature_disable_reflection_emit='yes'
1325 mono_feature_disable_appdomains='yes'
1327 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1328 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1330 elif test x$with_runtime_preset = xunreal; then
1331 DISABLE_MCS_DOCS_default=yes
1332 with_unreal_default=yes
1335 mono_feature_disable_com='yes'
1336 mono_feature_disable_remoting='yes'
1337 mono_feature_disable_appdomains='no'
1339 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1340 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1341 elif test x$with_runtime_preset = xwasm; then
1342 DISABLE_MCS_DOCS_default=yes
1343 with_wasm_default=yes
1346 mono_feature_disable_com='yes'
1347 mono_feature_disable_remoting='yes'
1348 mono_feature_disable_reflection_emit_save='yes'
1349 mono_feature_disable_reflection_emit='yes'
1350 mono_feature_disable_appdomains='yes'
1352 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1353 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1355 TEST_PROFILE=net_4_x
1356 with_profile4_x_default=yes
1359 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1360 AC_SUBST(AOT_BUILD_FLAGS)
1361 AC_SUBST(AOT_RUN_FLAGS)
1362 # For llvmonlycheck + fullaotcheck
1363 AC_SUBST(INVARIANT_AOT_OPTIONS)
1366 AC_SUBST(TEST_PROFILE)
1368 if test "x$with_profile4_x" = "xdefault"; then
1369 with_profile4_x=$with_profile4_x_default
1371 if test "x$with_monodroid" = "xdefault"; then
1372 with_monodroid=$with_monodroid_default
1374 if test "x$with_monotouch" = "xdefault"; then
1375 with_monotouch=$with_monotouch_default
1377 if test "x$with_monotouch_watch" = "xdefault"; then
1378 with_monotouch_watch=$with_monotouch_watch_default
1380 if test "x$with_monotouch_tv" = "xdefault"; then
1381 with_monotouch_tv=$with_monotouch_tv_default
1383 if test "x$with_bitcode" = "xdefault"; then
1384 with_bitcode=$with_bitcode_default
1386 if test "x$with_xammac" = "xdefault"; then
1387 with_xammac=$with_xammac_default
1389 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1390 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1392 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1393 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1395 if test "x$with_testing_aot_full" = "xdefault"; then
1396 with_testing_aot_full=$with_testing_aot_full_default
1398 if test "x$with_winaot" = "xdefault"; then
1399 with_winaot=$with_winaot_default
1401 if test "x$with_orbis" = "xdefault"; then
1402 with_orbis=$with_orbis_default
1404 if test "x$with_unreal" = "xdefault"; then
1405 with_unreal=$with_unreal_default
1407 if test "x$with_wasm" = "xdefault"; then
1408 with_wasm=$with_wasm_default
1412 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1413 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1414 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1415 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1416 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1417 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1418 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1419 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1420 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1421 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1422 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1423 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1424 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1425 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1426 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1427 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"])
1428 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1429 AM_CONDITIONAL(AOT_FULL_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"])
1430 AM_CONDITIONAL(AOT_FULL_INTERP_LLVM_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp_llvm"])
1431 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1433 default_profile=net_4_x
1434 if test -z "$INSTALL_MONODROID_TRUE"; then :
1435 default_profile=monodroid
1437 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1438 default_profile=monotouch
1440 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1441 default_profile=xammac
1443 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1444 default_profile=testing_aot_full_interp
1446 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1447 default_profile=testing_aot_hybrid
1449 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1450 default_profile=testing_aot_full
1452 if test -z "$INSTALL_WINAOT_TRUE"; then :
1453 default_profile=winaot
1455 if test -z "$INSTALL_ORBIS_TRUE"; then :
1456 default_profile=orbis
1458 if test -z "$INSTALL_UNREAL_TRUE"; then :
1459 default_profile=unreal
1461 if test -z "$INSTALL_WASM_TRUE"; then :
1462 default_profile=wasm
1464 if test -z "$INSTALL_4_x_TRUE"; then :
1465 default_profile=net_4_x
1467 DEFAULT_PROFILE=$default_profile
1468 AC_SUBST(DEFAULT_PROFILE)
1471 # End build profile configuration
1474 if test x$USE_NLS = xprofile_default; then
1476 AC_MSG_CHECKING([NLS used])
1478 # We make the default value for USE_NLS
1479 # "no" on OSX because it isn't available on most
1480 # default OSX installs. The most common configurations will
1481 # all disable it, so this saves us typing.
1482 if test x$host_darwin = xyes; then
1489 AC_MSG_RESULT([$USE_NLS])
1492 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1493 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1494 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1495 security, lldb, mdb, assert_messages, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1497 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1498 eval "mono_feature_disable_$feature='yes'"
1500 DISABLED_FEATURES=$enable_minimal
1501 disabled="Disabled: $enable_minimal"
1504 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1506 if test "x$mono_feature_disable_aot" = "xyes"; then
1507 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1508 enable_system_aot=no
1509 AC_MSG_NOTICE([Disabled AOT compiler])
1512 if test "x$mono_feature_disable_profiler" = "xyes"; then
1513 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1514 AC_MSG_NOTICE([Disabled support for the profiler])
1516 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1518 if test "x$mono_feature_disable_decimal" = "xyes"; then
1519 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1520 AC_MSG_NOTICE([Disabled support for decimal])
1523 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1524 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1525 AC_MSG_NOTICE([Disabled support for P/Invoke])
1528 if test "x$mono_feature_disable_debug" = "xyes"; then
1529 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1530 AC_MSG_NOTICE([Disabled support for runtime debugging])
1533 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1534 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1535 mono_feature_disable_reflection_emit_save=yes
1536 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1539 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1540 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1541 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1544 if test "x$mono_feature_disable_large_code" = "xyes"; then
1545 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1546 AC_MSG_NOTICE([Disabled support for large assemblies])
1549 if test "x$mono_feature_disable_logging" = "xyes"; then
1550 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1551 AC_MSG_NOTICE([Disabled support for logging])
1554 if test "x$mono_feature_disable_com" = "xyes"; then
1555 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1556 AC_MSG_NOTICE([Disabled COM support])
1559 if test "x$mono_feature_disable_ssa" = "xyes"; then
1560 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1561 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1564 if test "x$mono_feature_disable_generics" = "xyes"; then
1565 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1566 AC_MSG_NOTICE([Disabled Generics Support])
1569 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1570 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1571 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1574 if test "x$mono_feature_disable_portability" = "xyes"; then
1575 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1576 AC_MSG_NOTICE([Disabled IO Portability layer])
1579 if test "x$mono_feature_disable_attach" = "xyes"; then
1580 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1581 AC_MSG_NOTICE([Disabled agent attach])
1584 if test "x$mono_feature_disable_verifier" = "xyes"; then
1585 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1586 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1589 if test "x$mono_feature_disable_jit" = "xyes"; then
1590 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1591 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1594 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1596 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1597 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1598 AC_MSG_NOTICE([Disabled the interpreter])
1601 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1603 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1604 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1607 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1609 if test "x$mono_feature_disable_simd" = "xyes"; then
1610 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1611 AC_MSG_NOTICE([Disabled SIMD support])
1614 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1615 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1616 AC_MSG_NOTICE([Disabled Soft Debugger.])
1619 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1621 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1622 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1623 AC_MSG_NOTICE([Disabled Performance Counters.])
1625 if test "x$mono_feature_disable_normalization" = "xyes"; then
1626 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1627 AC_MSG_NOTICE([Disabled String normalization support.])
1630 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1631 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1632 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1633 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1636 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1637 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1638 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1641 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1642 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1643 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1646 if test "x$mono_feature_disable_remoting" = "xyes"; then
1647 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1648 AC_MSG_NOTICE([Disabled remoting])
1651 if test "x$mono_feature_disable_security" = "xyes"; then
1652 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1653 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1656 if test "x$mono_feature_disable_lldb" = "xyes"; then
1657 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1658 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1661 if test "x$mono_feature_disable_mdb" = "xyes"; then
1662 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1663 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1666 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1667 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1668 AC_MSG_NOTICE([Disabled assertion messages.])
1671 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1672 AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1673 AC_MSG_NOTICE([Disabled runtime cleanup.])
1676 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1677 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1678 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1682 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1683 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1684 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1687 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1688 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1689 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1692 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1693 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1694 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1697 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1698 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1700 has_extension_module=no
1701 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1703 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1704 if test x$extension = xdefault ; then
1705 has_extension_module=yes;
1708 if test x$enable_extension_module = xyes; then
1709 has_extension_module=yes;
1713 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1715 if test x$has_extension_module != xno ; then
1716 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1717 AC_MSG_NOTICE([Enabling mono extension module.])
1721 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1723 AC_MSG_CHECKING(for visibility __attribute__)
1726 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1727 int main () { doit (); return 0; }
1730 have_visibility_hidden=yes
1733 have_visibility_hidden=no
1738 dnl Boehm GC configuration
1741 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1743 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1744 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1746 if test "x$support_boehm" = "xyes"; then
1748 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1749 if test x$enable_parallel_mark = xyes; then
1750 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1760 if test "x$support_boehm" = "xyes"; then
1764 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1765 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1766 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1768 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1770 if test x$target_win32 = xyes; then
1771 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1772 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1775 gc_msg="Included Boehm GC with typed GC"
1776 if test x$enable_parallel_mark = xyes; then
1777 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1778 gc_msg="$gc_msg and parallel mark"
1780 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1785 AC_MSG_WARN("External Boehm is no longer supported")
1789 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1793 AC_MSG_WARN("Compiling mono without GC.")
1794 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1795 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1799 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1803 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])
1804 if test "x$large_heap" = "xyes"; then
1805 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1808 AC_SUBST(LIBGC_CPPFLAGS)
1809 AC_SUBST(LIBGC_LIBS)
1810 AC_SUBST(LIBGC_STATIC_LIBS)
1812 AC_SUBST(BOEHM_DEFINES)
1815 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1818 dnl End of Boehm GC Configuration
1821 dnl *************************************
1822 dnl *** Checks for zero length arrays ***
1823 dnl *************************************
1824 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1832 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1835 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1838 dnl ***********************************
1839 dnl *** Checks for signals
1840 dnl ***********************************
1841 AC_CHECK_HEADERS(signal.h)
1842 AC_CHECK_FUNCS(sigaction)
1843 AC_CHECK_FUNCS(kill)
1844 AC_CHECK_FUNCS(signal)
1846 # signal() is declared inline in Android headers
1847 # so we need to workaround it by overriding the check.
1848 if test x$platform_android = xyes; then
1849 AC_DEFINE(HAVE_SIGNAL,1)
1852 dnl ***********************************
1853 dnl *** Checks for availability of GSS dependencies (krb5, gss.framework, etc)
1854 dnl ***********************************
1856 AC_MSG_CHECKING(for GSS/GSS.h)
1858 #include <GSS/GSS.h>
1862 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
1863 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1869 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
1871 #include <gssapi/gssapi_ext.h>
1880 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
1882 #include <gssapi/gssapi_ext.h>
1883 #include <gssapi/gssapi_krb5.h>
1884 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
1888 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1893 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
1895 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1896 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1898 if test x$host_win32 = xno; then
1899 dnl *************************************
1900 dnl *** Checks for time capabilities ***
1901 dnl *************************************
1903 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1904 AC_TRY_COMPILE([#include <time.h>], [
1905 const int foo = CLOCK_MONOTONIC;
1908 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1913 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1914 AC_TRY_COMPILE([#include <time.h>], [
1915 const int foo = CLOCK_MONOTONIC_COARSE;
1918 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1923 AC_MSG_CHECKING(for CLOCK_REALTIME)
1924 AC_TRY_COMPILE([#include <time.h>], [
1925 const int foo = CLOCK_REALTIME;
1928 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1933 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1934 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1935 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1936 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1937 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1938 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1940 dnl hires monotonic clock support
1941 AC_SEARCH_LIBS(clock_gettime, rt)
1942 AC_CHECK_FUNCS(clock_nanosleep)
1944 dnl dynamic loader support
1945 AC_CHECK_FUNC(dlopen, DL_LIB="",
1946 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1948 if test x$dl_support = xno; then
1949 AC_MSG_WARN([No dynamic loading support available])
1951 LIBS="$LIBS $DL_LIB"
1952 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1953 dnl from glib's configure.ac
1954 AC_CACHE_CHECK([for preceeding underscore in symbols],
1956 AC_TRY_RUN([#include <dlfcn.h>
1957 int mono_underscore_test (void) { return 42; }
1959 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1960 handle = dlopen ((void*)0, 0);
1962 f1 = dlsym (handle, "mono_underscore_test");
1963 f2 = dlsym (handle, "_mono_underscore_test");
1964 } return (!f2 || f1);
1966 [mono_cv_uscore=yes],
1967 [mono_cv_uscore=no],
1970 if test "x$mono_cv_uscore" = "xyes"; then
1971 MONO_DL_NEED_USCORE=1
1973 MONO_DL_NEED_USCORE=0
1975 AC_SUBST(MONO_DL_NEED_USCORE)
1976 AC_CHECK_FUNC(dlerror)
1979 dnl ******************************************************************
1980 dnl *** Checks for the IKVM JNI interface library ***
1981 dnl ******************************************************************
1982 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])
1985 if test x$with_ikvm_native = xyes; then
1986 ikvm_native_dir=ikvm-native
1987 jdk_headers_found="IKVM Native"
1990 AC_SUBST(ikvm_native_dir)
1992 AC_CHECK_HEADERS(execinfo.h)
1994 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1996 AC_CHECK_FUNCS(getgrgid_r)
1997 AC_CHECK_FUNCS(getgrnam_r)
1998 AC_CHECK_FUNCS(getresuid)
1999 AC_CHECK_FUNCS(setresuid)
2000 AC_CHECK_FUNCS(kqueue)
2001 AC_CHECK_FUNCS(backtrace_symbols)
2002 AC_CHECK_FUNCS(mkstemp)
2003 AC_CHECK_FUNCS(mmap)
2004 AC_CHECK_FUNCS(madvise)
2005 AC_CHECK_FUNCS(getrusage)
2006 AC_CHECK_FUNCS(getpriority)
2007 AC_CHECK_FUNCS(setpriority)
2008 AC_CHECK_FUNCS(dl_iterate_phdr)
2009 AC_CHECK_FUNCS(dladdr)
2010 AC_CHECK_FUNCS(sysconf)
2011 AC_CHECK_FUNCS(getrlimit)
2012 AC_CHECK_FUNCS(prctl)
2013 AC_CHECK_FUNCS(arc4random)
2014 AC_CHECK_FUNCS(nl_langinfo)
2016 AC_CHECK_FUNCS(sched_getaffinity)
2017 AC_CHECK_FUNCS(sched_setaffinity)
2018 AC_CHECK_FUNCS(sched_getcpu)
2020 if test x$platform_android != xyes; then
2021 AC_CHECK_FUNCS(getpwnam_r)
2022 AC_CHECK_FUNCS(getpwuid_r)
2025 AC_FUNC_STRERROR_R()
2027 dnl ****************************************************************
2028 dnl *** Check for sched_setaffinity from glibc versions before ***
2029 dnl *** 2.3.4. The older versions of the function only take 2 ***
2030 dnl *** parameters, not 3. ***
2032 dnl *** Because the interface change was not made in a minor ***
2033 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2034 dnl *** won't always indicate the interface sched_affinity has. ***
2035 dnl ****************************************************************
2036 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2037 AC_TRY_COMPILE([#include <sched.h>], [
2039 sched_setaffinity(0, &mask);
2041 # Yes, we have it...
2043 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2045 # We have the new, three-parameter version
2048 AC_TRY_COMPILE([#include <sched.h>], [
2049 CPU_COUNT((void *) 0);
2052 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2054 # We have the new, three-parameter version
2058 dnl ******************************************************************
2059 dnl *** Check for large file support ***
2060 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2061 dnl ******************************************************************
2063 # Check that off_t can represent 2**63 - 1 correctly, working around
2064 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2065 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2067 AC_DEFUN([LARGE_FILES], [
2068 large_CPPFLAGS=$CPPFLAGS
2069 CPPFLAGS="$CPPFLAGS $1"
2071 #include <sys/types.h>
2074 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2075 #define COMPILE_TIME_ASSERT(pred) \
2076 switch(0){case 0:case pred:;}
2077 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2080 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2081 large_CPPFLAGS="$large_CPPFLAGS $1"
2086 CPPFLAGS=$large_CPPFLAGS
2089 AC_MSG_CHECKING(if off_t is 64 bits wide)
2091 if test $large_offt = no; then
2092 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2093 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2095 if test $large_offt = no; then
2096 AC_MSG_WARN([No 64 bit file size support available])
2099 dnl *****************************
2100 dnl *** Checks for libsocket ***
2101 dnl *****************************
2102 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2106 dnl *****************************
2107 dnl *** Checks for libinotify ***
2108 dnl *****************************
2109 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2112 dnl *******************************
2113 dnl *** Checks for MSG_NOSIGNAL ***
2114 dnl *******************************
2115 AC_MSG_CHECKING(for MSG_NOSIGNAL)
2116 AC_TRY_COMPILE([#include <sys/socket.h>], [
2117 int f = MSG_NOSIGNAL;
2119 # Yes, we have it...
2121 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2123 # We'll have to use signals
2127 dnl *****************************
2128 dnl *** Checks for IPPROTO_IP ***
2129 dnl *****************************
2130 AC_MSG_CHECKING(for IPPROTO_IP)
2131 AC_TRY_COMPILE([#include <netinet/in.h>], [
2132 int level = IPPROTO_IP;
2134 # Yes, we have it...
2136 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2138 # We'll have to use getprotobyname
2142 dnl *******************************
2143 dnl *** Checks for IPPROTO_IPV6 ***
2144 dnl *******************************
2145 AC_MSG_CHECKING(for IPPROTO_IPV6)
2146 AC_TRY_COMPILE([#include <netinet/in.h>], [
2147 int level = IPPROTO_IPV6;
2149 # Yes, we have it...
2151 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2153 # We'll have to use getprotobyname
2157 dnl ******************************
2158 dnl *** Checks for IPPROTO_TCP ***
2159 dnl ******************************
2160 AC_MSG_CHECKING(for IPPROTO_TCP)
2161 AC_TRY_COMPILE([#include <netinet/in.h>], [
2162 int level = IPPROTO_TCP;
2164 # Yes, we have it...
2166 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2168 # We'll have to use getprotobyname
2172 dnl *****************************
2173 dnl *** Checks for SOL_IP ***
2174 dnl *****************************
2175 AC_MSG_CHECKING(for SOL_IP)
2176 AC_TRY_COMPILE([#include <netdb.h>], [
2179 # Yes, we have it...
2181 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2183 # We'll have to use getprotobyname
2187 dnl *****************************
2188 dnl *** Checks for SOL_IPV6 ***
2189 dnl *****************************
2190 AC_MSG_CHECKING(for SOL_IPV6)
2191 AC_TRY_COMPILE([#include <netdb.h>], [
2192 int level = SOL_IPV6;
2194 # Yes, we have it...
2196 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2198 # We'll have to use getprotobyname
2202 dnl *****************************
2203 dnl *** Checks for SOL_TCP ***
2204 dnl *****************************
2205 AC_MSG_CHECKING(for SOL_TCP)
2206 AC_TRY_COMPILE([#include <netdb.h>], [
2207 int level = SOL_TCP;
2209 # Yes, we have it...
2211 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2213 # We'll have to use getprotobyname
2217 dnl *****************************
2218 dnl *** Checks for IP_PKTINFO ***
2219 dnl *****************************
2220 AC_MSG_CHECKING(for IP_PKTINFO)
2221 AC_TRY_COMPILE([#include <linux/in.h>], [
2222 int level = IP_PKTINFO;
2224 # Yes, we have it...
2226 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2231 dnl *****************************
2232 dnl *** Checks for IPV6_PKTINFO ***
2233 dnl *****************************
2234 AC_MSG_CHECKING(for IPV6_PKTINFO)
2235 AC_TRY_COMPILE([#include <netdb.h>], [
2236 int level = IPV6_PKTINFO;
2238 # Yes, we have it...
2240 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2245 dnl **********************************
2246 dnl *** Checks for IP_DONTFRAG ***
2247 dnl **********************************
2248 AC_MSG_CHECKING(for IP_DONTFRAG)
2249 AC_TRY_COMPILE([#include <netinet/in.h>], [
2250 int level = IP_DONTFRAG;
2252 # Yes, we have it...
2254 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2259 dnl **********************************
2260 dnl *** Checks for IP_DONTFRAGMENT ***
2261 dnl **********************************
2262 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2263 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2264 int level = IP_DONTFRAGMENT;
2266 # Yes, we have it...
2268 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2273 dnl **********************************
2274 dnl *** Checks for IP_MTU_DISCOVER ***
2275 dnl **********************************
2276 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2277 AC_TRY_COMPILE([#include <linux/in.h>], [
2278 int level = IP_MTU_DISCOVER;
2280 # Yes, we have it...
2282 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2287 dnl **********************************
2288 dnl *** Checks for IP_PMTUDISC_DO ***
2289 dnl **********************************
2290 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2291 AC_TRY_COMPILE([#include <linux/in.h>], [
2292 int level = IP_PMTUDISC_DO;
2294 # Yes, we have it...
2296 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2301 dnl *********************************
2302 dnl *** Check for struct ip_mreqn ***
2303 dnl *********************************
2304 AC_MSG_CHECKING(for struct ip_mreqn)
2305 AC_TRY_COMPILE([#include <netinet/in.h>], [
2306 struct ip_mreqn mreq;
2307 mreq.imr_address.s_addr = 0;
2309 # Yes, we have it...
2311 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2313 # We'll just have to try and use struct ip_mreq
2315 AC_MSG_CHECKING(for struct ip_mreq)
2316 AC_TRY_COMPILE([#include <netinet/in.h>], [
2317 struct ip_mreq mreq;
2318 mreq.imr_interface.s_addr = 0;
2320 # Yes, we have it...
2322 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2324 # No multicast support
2329 dnl **********************************
2330 dnl *** Check for getaddrinfo ***
2331 dnl **********************************
2332 AC_MSG_CHECKING(for getaddrinfo)
2337 getaddrinfo(NULL,NULL,NULL,NULL);
2339 # Yes, we have it...
2341 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2346 dnl **********************************
2347 dnl *** Check for gethostbyname2_r ***
2348 dnl **********************************
2349 AC_MSG_CHECKING(for gethostbyname2_r)
2355 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2357 # Yes, we have it...
2359 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2364 dnl **********************************
2365 dnl *** Check for gethostbyname2 ***
2366 dnl **********************************
2367 AC_MSG_CHECKING(for gethostbyname2)
2372 gethostbyname2(NULL,0);
2374 # Yes, we have it...
2376 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2381 dnl **********************************
2382 dnl *** Check for gethostbyname ***
2383 dnl **********************************
2384 AC_MSG_CHECKING(for gethostbyname)
2389 gethostbyname(NULL);
2391 # Yes, we have it...
2393 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2398 dnl **********************************
2399 dnl *** Check for getprotobyname ***
2400 dnl **********************************
2401 AC_MSG_CHECKING(for getprotobyname)
2406 getprotobyname(NULL);
2408 # Yes, we have it...
2410 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2415 dnl **********************************
2416 dnl *** Check for getprotobyname_r ***
2417 dnl **********************************
2418 AC_MSG_CHECKING(for getprotobyname_r)
2423 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2425 # Yes, we have it...
2427 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2432 dnl **********************************
2433 dnl *** Check for getnameinfo ***
2434 dnl **********************************
2435 AC_MSG_CHECKING(for getnameinfo)
2440 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2442 # Yes, we have it...
2444 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2450 dnl **********************************
2451 dnl *** Check for inet_ntop ***
2452 dnl **********************************
2453 AC_MSG_CHECKING(for inet_ntop)
2456 #include <arpa/inet.h>
2458 inet_ntop (0, NULL, NULL, 0);
2460 # Yes, we have it...
2462 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2467 dnl *****************************
2468 dnl *** Checks for libnsl ***
2469 dnl *****************************
2470 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2472 AC_CHECK_FUNCS(inet_pton inet_aton)
2474 dnl *****************************
2475 dnl *** Checks for libxnet ***
2476 dnl *****************************
2479 AC_MSG_CHECKING(for Solaris XPG4 support)
2480 if test -f /usr/lib/libxnet.so; then
2481 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2482 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2483 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2490 if test "$GCC" = "yes"; then
2491 CFLAGS="$CFLAGS -Wno-char-subscripts"
2496 dnl *****************************
2497 dnl *** Checks for libpthread ***
2498 dnl *****************************
2499 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2500 # and libpthread does not exist
2504 dnl Haiku has pthread in libroot (libc equiv)
2505 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2508 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2511 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2514 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2517 AC_CHECK_HEADERS(pthread.h)
2518 AC_CHECK_HEADERS(pthread_np.h)
2519 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2520 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2521 AC_CHECK_FUNCS(pthread_kill)
2522 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2523 AC_TRY_COMPILE([ #include <pthread.h>], [
2524 pthread_mutexattr_t attr;
2525 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2530 AC_ERROR(Posix system lacks support for recursive mutexes)
2532 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2533 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2534 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2535 AC_CHECK_FUNCS(mincore mlock munlock)
2537 dnl ***********************************
2538 dnl *** Checks for working __thread ***
2539 dnl ***********************************
2540 AC_MSG_CHECKING(for working __thread)
2541 if test "x$with_tls" != "x__thread"; then
2542 AC_MSG_RESULT(disabled)
2543 elif test "x$cross_compiling" = "xyes"; then
2544 AC_MSG_RESULT(cross compiling, assuming yes)
2547 #if defined(__APPLE__) && defined(__clang__)
2548 #error "__thread does not currently work with clang on Mac OS X"
2551 #include <pthread.h>
2553 static int res1, res2;
2555 void thread_main (void *arg)
2570 pthread_create (&t1, NULL, thread_main, 1);
2571 pthread_create (&t2, NULL, thread_main, 2);
2573 pthread_join (t1, NULL);
2574 pthread_join (t2, NULL);
2576 return !(res1 + res2 == 2);
2586 dnl **************************************
2587 dnl *** Checks for working sigaltstack ***
2588 dnl **************************************
2589 AC_MSG_CHECKING(for working sigaltstack)
2590 if test "x$with_sigaltstack" != "xyes"; then
2591 AC_MSG_RESULT(disabled)
2592 elif test "x$cross_compiling" = "xyes"; then
2593 AC_MSG_RESULT(cross compiling, assuming no)
2601 #include <pthread.h>
2602 #include <sys/wait.h>
2603 #if defined(__FreeBSD__) || defined(__NetBSD__)
2604 #define SA_STACK SA_ONSTACK
2607 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2612 volatile char*__ptr = NULL;
2614 loop (void *ignored)
2623 struct sigaction sa;
2626 pthread_attr_t attr;
2628 sa.sa_sigaction = sigsegv_signal_handler;
2629 sigemptyset (&sa.sa_mask);
2630 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2631 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2632 perror ("sigaction");
2636 /* x86 darwin deliver segfaults using SIGBUS */
2637 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2638 perror ("sigaction");
2641 sas.ss_sp = malloc (SIGSTKSZ);
2642 sas.ss_size = SIGSTKSZ;
2644 if (sigaltstack (&sas, NULL) == -1) {
2645 perror ("sigaltstack");
2649 pthread_attr_init (&attr);
2650 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2651 printf ("pthread_create\n");
2675 for (i = 0; i < 300; ++i) {
2676 waitpid (son, &status, WNOHANG);
2677 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2682 kill (son, SIGKILL);
2688 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2695 dnl ********************************
2696 dnl *** Checks for semaphore lib ***
2697 dnl ********************************
2698 # 'Real Time' functions on Solaris
2699 # posix4 on Solaris 2.6
2700 # pthread (first!) on Linux
2701 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2703 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2704 AC_CHECK_FUNCS(shm_open)
2706 dnl ********************************
2707 dnl *** Checks for timezone stuff **
2708 dnl ********************************
2709 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2715 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2716 if test $ac_cv_struct_tm_gmtoff = yes; then
2717 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2719 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2724 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2725 if test $ac_cv_var_timezone = yes; then
2726 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2728 AC_ERROR(unable to find a way to determine timezone)
2732 dnl *********************************
2733 dnl *** Checks for math functions ***
2734 dnl *********************************
2735 AC_SEARCH_LIBS(sqrtf, m)
2737 dnl ****************************************************************
2738 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2739 dnl *** have it in the library (duh)) ***
2740 dnl ****************************************************************
2741 AC_CHECK_FUNCS(poll)
2743 dnl **********************************
2745 dnl **********************************
2746 AC_CHECK_HEADERS(sys/epoll.h)
2748 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2749 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2750 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2755 AC_CHECK_HEADERS(sys/event.h)
2756 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2758 dnl **************************************
2759 dnl * Darwin has a race that prevents us from using reliably:
2760 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2761 dnl * Since kqueue is mostly used for scaling large web servers,
2762 dnl * and very few folks run Mono on large web servers on OSX, falling
2764 dnl **************************************
2765 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2766 if test "x$host_darwin" = "xno"; then
2767 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2771 dnl ******************************
2772 dnl *** Checks for SIOCGIFCONF ***
2773 dnl ******************************
2774 AC_CHECK_HEADERS(sys/ioctl.h)
2775 AC_CHECK_HEADERS(net/if.h, [], [],
2777 #ifdef HAVE_SYS_TYPES_H
2778 # include <sys/types.h>
2780 #ifdef HAVE_SYS_SOCKET_H
2781 # include <sys/socket.h>
2784 AC_MSG_CHECKING(for ifreq)
2787 #include <sys/ioctl.h>
2795 x = (void *) &ifr->ifr_addr;
2798 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2802 dnl **********************************
2803 dnl *** Checks for sin_len ***
2804 dnl **********************************
2805 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2807 #include <netinet/in.h>
2809 struct sockaddr_in saddr;
2810 saddr.sin_len = sizeof (saddr);
2813 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2817 dnl **********************************
2818 dnl *** Checks for sin6_len ***
2819 dnl **********************************
2820 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2822 #include <netinet/in.h>
2824 struct sockaddr_in6 saddr6;
2825 saddr6.sin6_len = sizeof (saddr6);
2828 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2832 dnl **********************************
2833 dnl *** Check for getifaddrs ***
2834 dnl **********************************
2835 AC_MSG_CHECKING(for getifaddrs)
2838 #include <sys/types.h>
2839 #include <sys/socket.h>
2840 #include <ifaddrs.h>
2844 # Yes, we have it...
2846 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2850 dnl **********************************
2851 dnl *** Check for if_nametoindex ***
2852 dnl **********************************
2853 AC_MSG_CHECKING(for if_nametoindex)
2856 #include <sys/types.h>
2857 #include <sys/socket.h>
2860 if_nametoindex(NULL);
2862 # Yes, we have it...
2864 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2868 dnl **********************************
2869 dnl *** Check for access ***
2870 dnl **********************************
2871 AC_MSG_CHECKING(for access)
2877 # Yes, we have it...
2879 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2884 dnl **********************************
2885 dnl *** Checks for proclib ***
2886 dnl **********************************
2887 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.)])
2888 dnl **********************************
2889 dnl *** Checks for MonoPosixHelper ***
2890 dnl **********************************
2891 AC_CHECK_HEADERS(checklist.h)
2892 AC_CHECK_HEADERS(pathconf.h)
2893 AC_CHECK_HEADERS(fstab.h)
2894 AC_CHECK_HEADERS(attr/xattr.h)
2895 AC_CHECK_HEADERS(sys/extattr.h)
2896 AC_CHECK_HEADERS(sys/sendfile.h)
2897 AC_CHECK_HEADERS(sys/statvfs.h)
2898 AC_CHECK_HEADERS(sys/statfs.h)
2899 AC_CHECK_HEADERS(sys/vfstab.h)
2900 AC_CHECK_HEADERS(sys/xattr.h)
2901 AC_CHECK_HEADERS(sys/mman.h)
2902 AC_CHECK_HEADERS(sys/param.h)
2903 AC_CHECK_HEADERS(sys/mount.h, [], [],
2905 #ifdef HAVE_SYS_PARAM_H
2906 # include <sys/param.h>
2909 AC_CHECK_HEADERS(sys/mount.h)
2910 AC_CHECK_FUNCS(confstr)
2911 AC_CHECK_FUNCS(seekdir telldir)
2912 AC_CHECK_FUNCS(getdomainname)
2913 AC_CHECK_FUNCS(setdomainname)
2914 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2915 AC_CHECK_FUNCS(setgroups)
2916 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2917 AC_CHECK_FUNCS(getfsstat)
2918 AC_CHECK_FUNCS(lutimes futimes)
2919 AC_CHECK_FUNCS(mremap)
2920 AC_CHECK_FUNCS(remap_file_pages)
2921 AC_CHECK_FUNCS(posix_fadvise)
2922 AC_CHECK_FUNCS(posix_fallocate)
2923 AC_CHECK_FUNCS(posix_madvise)
2924 AC_CHECK_FUNCS(vsnprintf)
2925 AC_CHECK_FUNCS(sendfile)
2926 AC_CHECK_FUNCS(gethostid sethostid)
2927 AC_CHECK_FUNCS(sethostname)
2928 AC_CHECK_FUNCS(statfs)
2929 AC_CHECK_FUNCS(fstatfs)
2930 AC_CHECK_FUNCS(statvfs)
2931 AC_CHECK_FUNCS(fstatvfs)
2932 AC_CHECK_FUNCS(stime)
2933 AC_CHECK_FUNCS(ttyname_r)
2934 AC_CHECK_FUNCS(psignal)
2935 AC_CHECK_FUNCS(getlogin_r)
2936 AC_CHECK_FUNCS(lockf)
2937 AC_CHECK_FUNCS(swab)
2938 AC_CHECK_FUNCS(setusershell endusershell)
2939 AC_CHECK_FUNCS(futimens utimensat)
2940 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2941 AC_CHECK_FUNCS(readv writev preadv pwritev)
2942 AC_CHECK_FUNCS(setpgid)
2943 AC_CHECK_FUNCS(system)
2944 AC_CHECK_FUNCS(fork execv execve)
2945 AC_CHECK_FUNCS(waitpid)
2946 AC_CHECK_FUNCS(accept4)
2947 AC_CHECK_FUNCS(localtime_r)
2948 AC_CHECK_FUNCS(mkdtemp)
2949 AC_CHECK_SIZEOF(size_t)
2950 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2951 [#include <sys/types.h>
2952 #include <sys/stat.h>
2953 #include <unistd.h>])
2954 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2955 [#include <sys/types.h>
2956 #include <sys/stat.h>
2957 #include <unistd.h>])
2958 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2959 [#include <sys/time.h>])
2960 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2961 [#include <sys/socket.h>])
2962 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2963 [#include <unistd.h>
2964 #include <fcntl.h>])
2965 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2966 [#include <sys/uio.h>])
2967 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2968 [#include <sys/socket.h>])
2969 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2970 [#include <sys/poll.h>])
2971 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2972 [#include <sys/socket.h>])
2973 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2974 [#include <sys/socket.h>])
2975 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2976 [#include <netinet/in.h>])
2977 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2978 [#include <netinet/in.h>])
2979 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2980 [#include <sys/un.h>])
2981 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2982 [#include <sys/types.h>
2983 #include <sys/stat.h>
2984 #include <unistd.h>])
2985 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2986 [#include <time.h>])
2987 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2988 [#include <sys/time.h>
2989 #include <sys/types.h>
2990 #include <utime.h>])
2991 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2992 [#include <sys/time.h>])
2993 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2994 [#include <sys/types.h>
2995 #include <utime.h>])
2997 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2998 [#include <sys/types.h>
2999 #include <dirent.h>])
3001 [struct passwd.pw_gecos],,,
3002 [#include <sys/types.h>
3005 [struct statfs.f_flags],,,
3006 [#include <sys/types.h>
3007 #include <sys/vfs.h>])
3009 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
3010 [#include <sys/types.h>
3011 #include <sys/stat.h>
3012 #include <unistd.h>])
3014 dnl Favour xattr through glibc, but use libattr if we have to
3015 AC_CHECK_FUNC(lsetxattr, ,
3016 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3020 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3022 [struct kinfo_proc.kp_proc],,,
3023 [#include <sys/types.h>
3024 #include <sys/param.h>
3025 #include <sys/sysctl.h>
3026 #include <sys/proc.h>
3029 dnl *********************************
3030 dnl *** Checks for Windows compilation ***
3031 dnl *********************************
3032 AC_CHECK_HEADERS(sys/time.h)
3033 AC_CHECK_HEADERS(sys/param.h)
3034 AC_CHECK_HEADERS(dirent.h)
3036 dnl ******************************************
3037 dnl *** Checks for OSX and iOS compilation ***
3038 dnl ******************************************
3039 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3041 dnl *********************************
3042 dnl *** Check for Console 2.0 I/O ***
3043 dnl *********************************
3044 AC_CHECK_HEADERS([curses.h])
3045 AC_CHECK_HEADERS([term.h], [], [],
3050 AC_CHECK_HEADERS([termios.h])
3052 dnl *********************************
3053 dnl *** Checks for random ***
3054 dnl *********************************
3055 if test x$host_darwin = xno; then
3056 AC_CHECK_HEADERS(sys/random.h)
3057 AC_CHECK_FUNCS(getrandom getentropy)
3060 dnl *********************************
3061 dnl *** Checks for Mono.Native ***
3062 dnl *********************************
3064 AC_MSG_CHECKING(for linux/in.h)
3066 #include <sys/socket.h>
3067 #include <linux/in.h>
3071 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3076 AC_CHECK_HEADERS([linux/if_packet.h])
3078 AC_MSG_CHECKING(for struct in_pktinfo)
3080 #ifdef HAVE_LINUX_IN_H
3081 #include <sys/socket.h>
3082 #include <linux/in.h>
3084 #include <netinet/in.h>
3087 struct in_pktinfo pktinfo;
3090 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3095 AC_MSG_CHECKING(for struct ip_mreqn)
3098 #include <sys/socket.h>
3099 #include <linux/in.h>
3101 #include <netinet/in.h>
3104 struct ip_mreqn mreqn;
3107 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3112 if test x$host_darwin = xno; then
3113 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3116 if test x$mono_native_platform_ios = xno; then
3117 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3118 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3119 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3122 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3123 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3124 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3125 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3126 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3127 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3128 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3129 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3130 AC_CHECK_FUNC(posix_fadvise, [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
3131 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3132 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3133 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3134 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3135 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3136 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3137 AC_CHECK_FUNC(arc4random_buf, [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3138 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3139 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3140 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3142 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3143 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3145 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>]])
3146 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>]])
3147 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>]])
3148 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>]])
3149 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3150 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3151 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3153 AC_MSG_CHECKING(for struct statfs)
3155 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3156 #include <sys/mount.h>
3158 #include <sys/statfs.h>
3164 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3169 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3170 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3173 AC_MSG_CHECKING(for readdir_r)
3178 struct dirent* entry;
3179 struct dirent* result;
3180 readdir_r(dir, entry, &result);
3183 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3188 AC_MSG_CHECKING(for kevent with void *data)
3190 #include <sys/types.h>
3191 #include <sys/event.h>
3193 struct kevent event;
3195 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3198 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3203 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3204 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3206 AC_MSG_CHECKING(for sendfile with 4 arguments)
3208 #include <sys/sendfile.h>
3210 int result = sendfile(0, 0, 0, 0);
3213 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3218 AC_MSG_CHECKING(for sendfile with 6 arguments)
3221 #include <sys/types.h>
3222 #include <sys/socket.h>
3223 #include <sys/uio.h>
3225 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3228 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3233 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3234 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3235 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3236 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3238 ORIG_CFLAGS="$CFLAGS"
3239 CFLAGS="-Werror -Wsign-conversion"
3241 AC_MSG_CHECKING(for getnameinfo with signed flags)
3243 #include <sys/types.h>
3246 const struct sockaddr *addr;
3253 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3256 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3261 CFLAGS="$ORIG_CFLAGS"
3263 if test "x$host_linux" = "xyes"; then
3264 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3266 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3269 ORIG_CFLAGS="$CFLAGS"
3270 CFLAGS="-Werror -Wsign-conversion"
3272 AC_MSG_CHECKING(for bind with unsigned addrlen)
3274 #include <sys/socket.h>
3277 struct sockaddr* addr;
3279 bind(fd, addr, addrLen);
3282 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3287 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3289 #include <netinet/in.h>
3290 #include <netinet/tcp.h>
3292 struct ipv6_mreq opt;
3293 unsigned int index = 0;
3294 opt.ipv6mr_interface = index;
3297 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3302 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3304 #include <sys/inotify.h>
3308 int result = inotify_rm_watch(fd, wd);
3311 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3316 CFLAGS="$ORIG_CFLAGS"
3318 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3319 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3321 elif test "x$cross_compiling" = "xyes"; then
3322 AC_MSG_RESULT(cross compiling, assuming yes)
3323 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3326 #include <sys/mman.h>
3332 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3336 shm_unlink("/mono_configure_shm_open");
3338 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3339 // on at least the current version of Mac OS X
3341 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3348 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3354 AC_MSG_CHECKING(for getpriority with int who)
3356 #include <sys/resource.h>
3360 int result = getpriority(which, who);
3363 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3368 AC_MSG_CHECKING(for kevent with int parameters)
3370 #include <sys/types.h>
3371 #include <sys/event.h>
3374 const struct kevent* chagelist;
3376 struct kevent* eventlist;
3378 const struct timespec* timeout;
3379 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3382 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3387 ORIG_CFLAGS="$CFLAGS"
3388 CFLAGS="-Werror -Wimplicit-function-declaration"
3390 AC_MSG_CHECKING(for mkstemps)
3398 int result = mkstemps(template, suffixlen);
3401 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3407 CFLAGS="$ORIG_CFLAGS"
3409 if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3410 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3413 AC_MSG_CHECKING(for tcp/var.h)
3415 #include <sys/types.h>
3416 #include <sys/socketvar.h>
3417 #include <netinet/ip.h>
3418 #include <netinet/tcp.h>
3419 #include <netinet/tcp_var.h>
3423 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3428 AC_CHECK_HEADERS([sys/cdefs.h])
3430 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3432 #ifdef HAVE_SYS_CDEFS_H
3433 #include <sys/cdefs.h>
3435 #include <netinet/tcp.h>
3437 int result = TCP_ESTABLISHED;
3440 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3445 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3447 AC_MSG_CHECKING(for struct rt_msghdr)
3449 #include <sys/types.h>
3450 #include <net/route.h>
3455 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3460 AC_CHECK_HEADERS([sys/sysctl.h])
3461 AC_CHECK_HEADERS([linux/rtnetlink.h])
3463 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3464 AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3465 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3467 ORIG_CFLAGS="$CFLAGS"
3468 CFLAGS="-Werror -Weverything"
3470 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3474 size_t namelen = 20;
3476 int result = getdomainname(name, namelen);
3479 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3484 CFLAGS="$ORIG_CFLAGS"
3486 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3487 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3488 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3490 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
3491 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3492 elif test "x$host_linux" = "xyes"; then
3493 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3496 AC_CHECK_HEADERS([crt_externs.h])
3498 AC_MSG_CHECKING(for _NSGetEnviron)
3500 #include <crt_externs.h>
3502 char **result = *(_NSGetEnviron());
3505 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3510 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3513 dnl *********************************
3514 dnl *** Checks for Windows compilation ***
3515 dnl *********************************
3516 AC_CHECK_HEADERS(winternl.h)
3518 jdk_headers_found=no
3519 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3520 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3521 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3522 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3523 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3524 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3525 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3527 dnl *********************************
3528 dnl *** Check for struct ip_mreqn ***
3529 dnl *********************************
3530 AC_MSG_CHECKING(for struct ip_mreqn)
3531 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3532 struct ip_mreqn mreq;
3533 mreq.imr_address.s_addr = 0;
3535 # Yes, we have it...
3537 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3539 # We'll just have to try and use struct ip_mreq
3541 AC_MSG_CHECKING(for struct ip_mreq)
3542 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3543 struct ip_mreq mreq;
3544 mreq.imr_interface.s_addr = 0;
3546 # Yes, we have it...
3548 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3550 # No multicast support
3555 dnl **********************************
3556 dnl *** Check for getaddrinfo ***
3557 dnl **********************************
3558 AC_MSG_CHECKING(for getaddrinfo)
3561 #include <winsock2.h>
3562 #include <ws2tcpip.h>
3564 getaddrinfo(NULL,NULL,NULL,NULL);
3566 # Yes, we have it...
3568 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3573 dnl **********************************
3574 dnl *** Check for gethostbyname ***
3575 dnl **********************************
3576 AC_MSG_CHECKING(for gethostbyname)
3579 #include <winsock2.h>
3580 #include <ws2tcpip.h>
3582 gethostbyname(NULL);
3584 # Yes, we have it...
3586 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3591 dnl **********************************
3592 dnl *** Check for getprotobyname ***
3593 dnl **********************************
3594 AC_MSG_CHECKING(for getprotobyname)
3597 #include <winsock2.h>
3598 #include <ws2tcpip.h>
3600 getprotobyname(NULL);
3602 # Yes, we have it...
3604 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3609 dnl **********************************
3610 dnl *** Check for getnameinfo ***
3611 dnl **********************************
3612 AC_MSG_CHECKING(for getnameinfo)
3615 #include <winsock2.h>
3616 #include <ws2tcpip.h>
3618 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3620 # Yes, we have it...
3622 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3627 dnl **********************************
3628 dnl *** Check for inet_ntop ***
3629 dnl **********************************
3630 AC_MSG_CHECKING(for inet_ntop)
3633 #include <winsock2.h>
3634 #include <ws2tcpip.h>
3636 inet_ntop (0, NULL, NULL, 0);
3638 # Yes, we have it...
3640 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3645 dnl **********************************
3646 dnl *** Check for inet_pton ***
3647 dnl **********************************
3648 AC_MSG_CHECKING(for inet_pton)
3651 #include <winsock2.h>
3652 #include <ws2tcpip.h>
3657 inet_pton (0, NULL, NULL);
3659 # Yes, we have it...
3661 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3666 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3667 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3668 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3669 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3670 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3671 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3672 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3676 AC_MSG_CHECKING(for socklen_t)
3678 #include <sys/types.h>
3679 #include <sys/socket.h>
3683 ac_cv_c_socklen_t=yes
3684 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3690 AC_CHECK_FUNCS(execvp)
3692 dnl ****************************
3693 dnl *** Look for /dev/random ***
3694 dnl ****************************
3696 AC_MSG_CHECKING([if usage of random device is requested])
3697 AC_ARG_ENABLE(dev-random,
3698 [ --disable-dev-random disable the use of the random device (enabled by default)],
3699 try_dev_random=$enableval, try_dev_random=yes)
3701 AC_MSG_RESULT($try_dev_random)
3705 dnl IBM i does not have /dev/random, use unblocking only
3708 NAME_DEV_RANDOM="/dev/urandom"
3711 dnl Win32 does not have /dev/random, they have their own method...
3713 *-mingw*|*-*-cygwin*)
3714 ac_cv_have_dev_random=no
3717 dnl Everywhere else, it's /dev/random
3720 NAME_DEV_RANDOM="/dev/random"
3724 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3726 dnl Now check if the device actually exists
3728 if test "x$try_dev_random" = "xyes"; then
3729 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3730 [if test -r "$NAME_DEV_RANDOM" ; then
3731 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3732 if test "x$ac_cv_have_dev_random" = "xyes"; then
3733 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3736 AC_MSG_CHECKING(for random device)
3737 ac_cv_have_dev_random=no
3738 AC_MSG_RESULT(has been disabled)
3741 if test "x$host_win32" = "xyes"; then
3742 AC_DEFINE(HAVE_CRYPT_RNG)
3745 if test "x$ac_cv_have_dev_random" = "xno" \
3746 && test "x$host_win32" = "xno"; then
3749 *** A system-provided entropy source was not found on this system.
3750 *** Because of this, the System.Security.Cryptography random number generator
3751 *** will throw a NotImplemented exception.
3753 *** If you are seeing this message, and you know your system DOES have an
3754 *** entropy collection in place, please report an issue on GitHub and
3755 *** provide information about the system and how to access the random device.
3757 *** Otherwise you can install either egd or prngd and set the environment
3758 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3762 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)
3764 AC_MSG_CHECKING([if big-arrays are to be enabled])
3765 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)
3766 if test "x$enable_big_arrays" = "xyes" ; then
3767 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3768 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3770 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3773 AC_MSG_RESULT($enable_big_arrays)
3779 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3781 if test "x$enable_dtrace" = "xyes"; then
3782 if test "x$has_dtrace" = "xno"; then
3783 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3785 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3786 if test "x$DTRACE" = "xno"; then
3787 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3789 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3790 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3796 if test "x$enable_dtrace" = "xyes"; then
3797 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3799 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3802 DTRACEFLAGS="-arch ppc64"
3805 DTRACEFLAGS="-arch x86_64"
3814 DTRACEFLAGS="-arch ppc"
3817 DTRACEFLAGS="-arch i386"
3824 AC_SUBST(DTRACEFLAGS)
3830 AC_CHECK_HEADERS([sys/sdt.h])
3832 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3833 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3835 dnl **************************
3836 dnl *** AOT cross offsets ***
3837 dnl **************************
3839 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3840 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3846 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3847 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3848 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)
3849 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3850 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3852 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3854 if test "x$enable_llvm" = "xdefault"; then
3855 enable_llvm=$enable_llvm_default
3858 enable_llvm_msvc_only="no"
3859 if test "x$enable_llvm" = "xyes"; then
3860 if test "x$host_win32" = "xyes"; then
3861 if test "x$cross_compiling" = "xno"; then
3864 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
3865 enable_llvm_msvc_only="yes"
3868 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
3872 if test "x$enable_loadedllvm" = "xyes"; then
3873 AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
3874 enable_loadedllvm=no
3880 if test "x$enable_llvm" = "xyes"; then
3881 if test "x$with_llvm" != "x"; then
3882 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3883 if test x$host_win32 = xyes; then
3884 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
3886 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3887 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3890 if test x$host_win32 = xyes; then
3891 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
3893 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3895 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3900 LLVM_CODEGEN_LIBS="x86codegen"
3903 LLVM_CODEGEN_LIBS="armcodegen"
3906 LLVM_CODEGEN_LIBS="aarch64codegen"
3909 LLVM_CODEGEN_LIBS="powerpccodegen"
3912 if test "x$host" != "x$target"; then
3913 # No need for jit libs
3917 AC_SUBST(LLVM_CODEGEN_LIBS)
3918 AC_SUBST(EXTERNAL_LLVM_CONFIG)
3920 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
3921 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
3922 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
3924 if test "x$enable_llvm_msvc_only" != "xyes"; then
3925 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3927 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
3931 # AC_DEFINE necessary for correct restore behavior on Linux
3932 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3933 if test "x$internal_llvm" != "xno"; then
3934 if test "x$enable_llvm_msvc_only" != "xyes"; then
3935 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
3937 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
3941 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3942 if test "x$enable_llvm_asserts" != "xno"; then
3943 if test "x$enable_llvm_msvc_only" != "xyes"; then
3944 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
3946 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
3950 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
3952 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
3953 if test "x$enable_loadedllvm" = "xyes"; then
3954 if test "x$enable_llvm_msvc_only" != "xyes"; then
3955 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3959 if test "x$enable_llvm" = "xyes"; then
3960 enable_llvm_runtime=yes
3963 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
3964 if test "x$enable_llvm_runtime" = "xyes"; then
3965 if test "x$enable_llvm_msvc_only" != "xyes"; then
3966 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3968 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
3973 ACCESS_UNALIGNED="yes"
3977 SQLITE="libsqlite.so.0"
3978 SQLITE3="libsqlite3.so.0"
3980 GDKX11="libgdk-x11-2.0.so.0"
3981 GTKX11="libgtk-x11-2.0.so.0"
3982 XINERAMA="libXinerama.so.1"
3984 sizeof_register="SIZEOF_VOID_P"
3987 boehm_supported=true
3996 ACCESS_UNALIGNED="no"
4004 ACCESS_UNALIGNED="no"
4006 AC_MSG_CHECKING(for mips n32)
4008 #if _MIPS_SIM != _ABIN32
4025 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4030 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4031 # int astruct __attribute__ ((visibility ("hidden")));
4034 # void *p = &astruct;
4036 # gcc -fPIC --shared -o libfoo.so foo.c
4038 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4039 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4040 have_visibility_hidden=no
4043 have_visibility_hidden=no
4054 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4061 openbsd*|freebsd*|kfreebsd-gnu*)
4068 x86_64-*-* | amd64-*-*)
4071 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4072 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4079 BTLS_PLATFORM=x86_64
4080 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4085 BTLS_PLATFORM=x86_64
4086 boehm_supported=false
4088 openbsd*|freebsd*|kfreebsd-gnu*)
4091 BTLS_PLATFORM=x86_64
4095 BTLS_PLATFORM=x86_64
4100 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4106 ACCESS_UNALIGNED="no"
4113 if test x"$GCC" = xyes; then
4114 # We don't support v8 cpus
4115 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4117 if test x"$AR" = xfalse; then
4118 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4121 *-mingw*|*-*-cygwin*)
4122 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4123 have_visibility_hidden=no
4127 # Old Boehm fails to compile for x86_64-mingw.
4128 # It is trivial to fix, but just silently drop it.
4129 boehm_supported=false
4133 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4134 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4135 powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4136 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4138 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4139 if ! (echo $CC | grep -q -- 'clang'); then
4140 CFLAGS="$CFLAGS -mminimal-toc"
4144 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4150 BTLS_PLATFORM=powerpc
4151 dnl on AIX/PASE, shared libraries can be inside archives
4152 dnl if they are, we specify them by lib.a(lib.so)
4153 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4154 LIBC="libc.a(shr_64.o)"
4155 INTL="libintl.a(libintl.so.8)"
4159 BTLS_PLATFORM=powerpc
4168 ACCESS_UNALIGNED="no"
4169 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4175 ACCESS_UNALIGNED="no"
4176 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4181 ACCESS_UNALIGNED="no"
4183 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4186 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4188 arm*-linux*-gnueabi)
4189 BTLS_PLATFORM=armsoft
4196 ACCESS_UNALIGNED="no"
4197 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4199 aarch64-*darwin*ilp32)
4202 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4204 # assuming no other target other than watchOS is using aarch64*darwin triple
4208 # https://lkml.org/lkml/2012/7/15/133
4211 boehm_supported=false
4214 BTLS_PLATFORM=aarch64
4215 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4220 ACCESS_UNALIGNED="yes"
4223 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4230 BTLS_PLATFORM=riscv32
4232 boehm_supported=false
4239 BTLS_PLATFORM=riscv64
4241 boehm_supported=false
4247 if test "x$host" != "x$target"; then
4248 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4250 enable_support_build=no
4252 # Can't use tls, since it depends on the runtime detection of tls offsets
4253 # in mono-compiler.h
4260 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4264 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4268 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4272 powerpc64-ps3-linux-gnu)
4274 arch_target=powerpc64
4275 AC_DEFINE(TARGET_PS3, 1, [...])
4276 # It would be better to just use TARGET_POWERPC64, but lots of code already
4278 AC_DEFINE(__mono_ppc64__, 1, [...])
4279 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4281 target_byte_order=G_BIG_ENDIAN
4283 powerpc64-xbox360-linux-gnu)
4285 arch_target=powerpc64
4286 AC_DEFINE(TARGET_XBOX360, 1, [...])
4287 # It would be better to just use TARGET_POWERPC64, but lots of code already
4290 target_byte_order=G_BIG_ENDIAN
4294 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4298 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4311 AC_DEFINE(TARGET_PS4, 1, [...])
4312 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4313 CPPFLAGS="$CPPFLAGS"
4324 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4325 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4332 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4333 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4339 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4347 AC_DEFINE(TARGET_ANDROID, 1, [...])
4354 AC_DEFINE(TARGET_WASM, 1, [...])
4358 AC_DEFINE(TARGET_X86, 1, [...])
4362 AC_DEFINE(TARGET_AMD64, 1, [...])
4366 AC_DEFINE(TARGET_ARM, 1, [...])
4368 ACCESS_UNALIGNED="no"
4371 AC_DEFINE(TARGET_ARM64, 1, [...])
4375 AC_DEFINE(TARGET_POWERPC, 1, [...])
4378 AC_DEFINE(TARGET_POWERPC, 1, [...])
4379 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4382 AC_DEFINE(TARGET_S390X, 1, [...])
4385 AC_DEFINE(TARGET_MIPS, 1, [...])
4388 AC_DEFINE(TARGET_SPARC, 1, [...])
4391 AC_DEFINE(TARGET_SPARC64, 1, [...])
4394 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4395 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4398 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4399 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4404 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4405 target_sizeof_void_p=4
4408 target_sizeof_void_p=8
4411 AC_MSG_ERROR([unknown target])
4417 AC_DEFINE(HOST_WASM, 1, [...])
4420 AC_DEFINE(HOST_X86, 1, [...])
4423 AC_DEFINE(HOST_AMD64, 1, [...])
4426 AC_DEFINE(HOST_ARM, 1, [...])
4429 AC_DEFINE(HOST_ARM64, 1, [...])
4432 AC_DEFINE(HOST_POWERPC, 1, [...])
4435 AC_DEFINE(HOST_POWERPC, 1, [...])
4436 AC_DEFINE(HOST_POWERPC64, 1, [...])
4439 AC_DEFINE(HOST_S390X, 1, [...])
4442 AC_DEFINE(HOST_MIPS, 1, [...])
4445 AC_DEFINE(HOST_SPARC, 1, [...])
4448 AC_DEFINE(HOST_SPARC64, 1, [...])
4451 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4452 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4455 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4456 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4460 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4462 X86 | AMD64 | ARM | ARM64)
4463 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4467 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4468 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4474 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4475 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4477 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4479 if test "x$enable_vtune" = "xyes"; then
4480 if test "x$with_vtune" = "x"; then
4481 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4483 VTUNE_PATH=$with_vtune
4485 VTUNE_INCLUDE=$VTUNE_PATH/include
4488 VTUNE_LIB=$VTUNE_PATH/lib32
4491 VTUNE_LIB=$VTUNE_PATH/lib64
4494 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4497 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4498 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4500 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4501 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4504 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4505 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4507 AC_SUBST(VTUNE_LIBS)
4508 AC_SUBST(VTUNE_CFLAGS)
4510 dnl Use GCC atomic ops if they work on the target.
4511 if test x$GCC = "xyes"; then
4513 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4514 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4519 if test "x$target_mach" = "xyes"; then
4521 if test "x$TARGET_SYS" = "xWATCHOS"; then
4522 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4523 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4524 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4526 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4527 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4528 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4529 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4533 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4534 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4535 #error fail this for ios
4538 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4539 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4540 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4543 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4544 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4545 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4550 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4553 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4555 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4557 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4558 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4559 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4560 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4562 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4565 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4567 if test "x$sizeof_register" = "x4"; then
4568 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4569 elif test "x$sizeof_register" = "x8"; then
4570 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4572 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4575 if test "x$have_visibility_hidden" = "xyes"; then
4576 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4579 if test "x$have_deprecated" = "xyes"; then
4580 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4584 dnl Simple Generational checks (sgen)
4587 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4588 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4589 if test x$buildsgen = xyes; then
4590 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4591 SGEN_DEFINES="-DHAVE_SGEN_GC"
4594 if test x$with_sgen_default_concurrent != xno; then
4595 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4596 conc_gc_msg=" (concurrent by default)"
4599 if test "x$gc_msg" = "x"; then
4600 gc_msg="sgen$conc_gc_msg"
4602 gc_msg="sgen$conc_gc_msg and $gc_msg"
4605 AC_SUBST(SGEN_DEFINES)
4606 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4608 jit_status="Building and using the JIT"
4616 INTL="libintl.dylib"
4617 SQLITE="libsqlite.0.dylib"
4618 SQLITE3="libsqlite3.0.dylib"
4620 GDKX11="libgdk-x11-2.0.dylib"
4621 GTKX11="libgtk-x11-2.0.dylib"
4626 SQLITE="libsqlite.so"
4627 SQLITE3="libsqlite3.so"
4637 SQLITE="libsqlite.so"
4638 SQLITE3="libsqlite3.so"
4643 SQLITE="libsqlite.so"
4644 SQLITE3="libsqlite3.so"
4648 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4649 AC_MSG_CHECKING(for the soname of libX11.so)
4650 for i in $x_libraries $dlsearch_path; do
4652 if test -f $i/libX11.so.$r; then
4659 if test "x$X11" = "xlibX11.so"; then
4660 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4668 ######################################
4670 ######################################
4674 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4675 if test x$GCC = xyes; then
4676 GNUC_UNUSED='__attribute__((__unused__))'
4677 GNUC_NORETURN='__attribute__((__noreturn__))'
4679 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4682 AC_SUBST(GNUC_PRETTY)
4683 AC_SUBST(GNUC_UNUSED)
4684 AC_SUBST(GNUC_NORETURN)
4685 AC_SUBST(BREAKPOINT)
4687 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4690 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4706 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4711 arm*-darwin*|aarch64*-*|riscv*)
4712 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4715 ORDER=G_LITTLE_ENDIAN
4718 LDFLAGS="$LDFLAGS -ltextencoding"
4721 CFLAGS="$CFLAGS -pthread"
4722 LDFLAGS="$LDFLAGS -pthread"
4733 # Defined for all targets/platforms using classic Windows API support.
4734 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4735 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4737 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4738 AC_CHECK_FUNCS(getrlimit)
4739 AC_CHECK_FUNCS(fork execv execve)
4740 AC_CHECK_FUNCS(waitpid)
4742 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4744 if test x$with_overridable_allocators = xyes; then
4745 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4746 AC_MSG_NOTICE([Overridable allocator support enabled])
4748 AC_MSG_NOTICE([Overridable allocator support disabled])
4752 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4753 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4754 # removed once support for 10.6 is dropped.
4756 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4758 if test x$target_osx = xyes; then
4759 AC_CHECK_FUNCS(getpwuid_r)
4760 elif test x$target_ios = xno; then
4761 AC_CHECK_FUNCS(strndup getpwuid_r)
4764 AC_SEARCH_LIBS(sqrtf, m)
4766 # nanosleep may not be part of libc, also search it in other libraries
4767 AC_SEARCH_LIBS(nanosleep, rt)
4769 AC_SEARCH_LIBS(dlopen, dl)
4770 old_ldflags="${LDFLAGS}"
4771 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4772 if test $lt_cv_prog_gnu_ld = yes; then
4773 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4776 *-*-aix*|*-*-os400*)
4779 dnl Try to use export-dynamic anyways
4780 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4784 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4785 if test $found_export_dynamic = no; then
4786 LDFLAGS="${old_ldflags}"
4789 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4790 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4791 AC_CHECK_LIB(iconv, iconv_open)
4792 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4793 AC_SUBST(HAVE_ALLOCA_H)
4795 # Get the exact type of size_t, not just its size.
4796 # This is so we can find an exact printf format among u, lu, llu, I64u.
4797 # To avoid warnings about slight mismatches.
4798 # C99 runtime "zu" dependency is being avoided here.
4800 # We have to compile as C++ because C is too lenient
4801 # and lets the wrong thing compile, with warnings.
4803 # Note: "zu" or ifdef <something> have the advantage
4804 # of producing installable "biarch" headers. i.e. one Mac header
4805 # for Mac/x86 and Mac/amd64.
4809 # Check long before int because it is the overwhelming Unix answer,
4810 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4812 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4814 AC_MSG_CHECKING(if size_t is unsigned long)
4815 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4817 unsigned long *a = (size_t*)0;
4820 AC_SUBST(GSIZE_FORMAT, '"lu"')
4823 AC_MSG_CHECKING(if size_t is unsigned int)
4824 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4826 unsigned *a = (size_t*)0;
4829 AC_SUBST(GSIZE_FORMAT, '"u"')
4831 # At this point the majority of systems have their answer,
4832 # and we descend into non-standard or new-standard territory.
4834 # Check __int64 first because I64 on some systems predates ll, enabling
4835 # new compiler/old runtime interop, and the types always have the same size.
4837 AC_MSG_CHECKING(if size_t is unsigned __int64)
4838 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4840 unsigned __int64 *a = (size_t*)0;
4843 AC_SUBST(GSIZE_FORMAT, '"I64u"')
4846 AC_MSG_CHECKING(if size_t is unsigned long long)
4847 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4849 unsigned long long *a = (size_t*)0;
4852 AC_SUBST(GSIZE_FORMAT, '"llu"')
4855 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4863 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4864 # This provides for an exact match with functions that
4865 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4866 # uintptr_t is not necessarily the same.
4868 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4869 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4871 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4881 AC_SUBST(GSIZE_FORMAT)
4884 # END OF EGLIB CHECKS
4887 AC_ARG_WITH([libgdiplus],
4888 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4889 [], [with_libgdiplus=installed])
4891 # default install location
4892 libgdiplus_install_loc=libgdiplus${libsuffix}
4895 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4899 case $with_libgdiplus in
4906 if test x$cross_compiling = xno; then
4907 if test x$host_darwin = xyes; then
4908 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4910 libgdiplus_install_loc=$a
4918 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4921 /*) # absolute path, assume it is an install location
4922 libgdiplus_loc=$with_libgdiplus
4923 libgdiplus_install_loc=$with_libgdiplus
4927 libgdiplus_loc=`pwd`/$with_libgdiplus
4930 AC_SUBST(libgdiplus_loc)
4931 AC_SUBST(libgdiplus_install_loc)
4933 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)
4934 if test "x$icall_symbol_map" = "xyes"; then
4935 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4938 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4939 if test "x$icall_export" = "xyes"; then
4940 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4943 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4944 if test "x$icall_tables" = "xno"; then
4945 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4948 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4950 if test "x$with_tls" = "x__thread"; then
4951 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
4952 # Pass the information to libgc
4953 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4954 AC_MSG_CHECKING(if the tls_model attribute is supported)
4955 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4958 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4964 if test ${TARGET} = ARM; then
4965 dnl ******************************************
4966 dnl *** Check to see what FPU is available ***
4967 dnl ******************************************
4968 AC_MSG_CHECKING(which FPU to use)
4971 # This is a bit tricky:
4973 # if (__ARM_PCS_VFP) {
4974 # /* mfloat-abi=hard == VFP with hard ABI */
4975 # } elif (!__SOFTFP__) {
4976 # /* mfloat-abi=softfp == VFP with soft ABI */
4978 # /* mfloat-abi=soft == no VFP */
4981 # The exception is iOS (w/ GCC) where none of the above
4982 # are defined (but iOS always uses the 'softfp' ABI).
4984 # No support for FPA.
4989 # iOS GCC always uses the 'softfp' ABI.
4990 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4994 # Are we using the 'hard' ABI?
4995 if test x$fpu = xNONE; then
4996 AC_TRY_COMPILE([], [
4997 #ifndef __ARM_PCS_VFP
4998 #error "Float ABI is not 'hard'"
5007 # No 'hard' ABI. 'soft' or 'softfp'?
5008 if test x$fpu = xNONE; then
5009 AC_TRY_COMPILE([], [
5011 #error "Float ABI is not 'softfp'"
5020 if test x$arm_fpu != x; then
5025 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5028 dnl *********************************************
5029 dnl *** Check which ARM version(s) we can use ***
5030 dnl *********************************************
5031 AC_MSG_CHECKING(which ARM version to use)
5033 AC_TRY_COMPILE([], [
5034 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5035 #error Not on ARM v5.
5043 AC_TRY_COMPILE([], [
5044 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5045 #error Not on ARM v6.
5054 AC_TRY_COMPILE([], [
5055 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5056 #error Not on ARM v7.
5066 AC_MSG_RESULT($arm_ver)
5068 if test x$arm_v5 = xyes; then
5069 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5070 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5073 if test x$arm_v6 = xyes; then
5074 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5075 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5078 if test x$arm_v7 = xyes; then
5079 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5080 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5084 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5085 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5087 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5089 if test x$fpabi = xauto; then
5090 AC_TRY_COMPILE([], [
5091 #ifdef __riscv_float_abi_double
5101 if test x$fpabi = xauto; then
5102 AC_TRY_COMPILE([], [
5103 #ifdef __riscv_float_abi_single
5113 if test x$fpabi = xauto; then
5114 AC_TRY_COMPILE([], [
5115 #ifdef __riscv_float_abi_soft
5127 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5128 AC_MSG_RESULT([double-precision])
5131 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5132 AC_MSG_ERROR([single-precision, not supported])
5135 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5136 AC_MSG_RESULT([soft float])
5139 AC_MSG_ERROR([unknown])
5142 AC_MSG_ERROR([invalid option: $fpabi])
5147 if test ${TARGET} = unknown; then
5148 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5149 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5152 if test "x$platform_android" = "xyes"; then
5153 case "x${TARGET}" in
5158 BTLS_PLATFORM=android-armv5
5162 BTLS_PLATFORM=android-armv6
5166 BTLS_PLATFORM=android-armv7
5175 BTLS_PLATFORM=android-v8a
5179 BTLS_PLATFORM=android-x86
5183 BTLS_PLATFORM=android-x64
5191 if test ${ACCESS_UNALIGNED} = no; then
5192 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5195 if test x$host_darwin = xyes; then
5196 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5198 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5199 [AC_MSG_RESULT([no])],
5201 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5203 RANLIB="$RANLIB -no_warning_for_no_symbols"
5204 AC_MSG_RESULT([yes])
5211 # Pass CPPFLAGS to libgc configure
5212 # We should use a separate variable for this to avoid passing useless and
5213 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5214 # This should be executed late so we pick up the final version of CPPFLAGS
5215 # The problem with this approach, is that during a reconfigure, the main
5216 # configure scripts gets invoked with these arguments, so we use separate
5217 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5218 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5219 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5220 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5222 # Don't pass -finstrument-for-thread-suspension in,
5223 # if these are instrumented it will be very bad news
5224 # (infinite recursion, undefined parking behavior, etc)
5225 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5226 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\""
5227 if test "x$support_boehm" = "xyes"; then
5228 AC_CONFIG_SUBDIRS(libgc)
5234 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5235 if test x$with_malloc_mempools = xyes; then
5237 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5242 DISABLE_MCS_DOCS=default
5243 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5244 if test x$with_mcs_docs != xyes; then
5245 DISABLE_MCS_DOCS=yes
5248 if test -n "$INSTALL_4_x_TRUE"; then :
5249 DISABLE_MCS_DOCS=yes
5251 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5252 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5255 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)],[
5256 if test x$with_lazy_gc_thread_creation != xno ; then
5257 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5259 ], [with_lazy_gc_thread_creation=no])
5261 dnl *****************************
5262 dnl *** Thread suspend policy ***
5263 dnl *****************************
5265 dnl Set a default hybrid or cooperative suspend on some platforms
5267 dnl Coop default is set by the bitcode preset.
5269 dnl If coop isn't on by default, maybe hybrid should be?
5270 if test x$enable_cooperative_suspend_default != xyes; then
5273 dnl Some host/target confusion, there's no host_osx (and
5274 dnl host_darwin would be true on iOS not just macOS).
5275 if test x$target_osx = xyes; then
5276 enable_hybrid_suspend_default=yes
5277 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5278 enable_hybrid_suspend_default=yes
5284 dnl Now check if there were flags overriding the defaults
5286 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])
5287 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5289 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5290 enable_cooperative_suspend=$with_cooperative_gc
5293 if test x$enable_cooperative_suspend = xdefault; then
5294 enable_cooperative_suspend=$enable_cooperative_suspend_default
5297 if test x$enable_cooperative_suspend != xno; then
5298 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5301 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5303 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=default])
5305 if test x$enable_hybrid_suspend = xdefault; then
5306 enable_hybrid_suspend=$enable_hybrid_suspend_default
5309 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5310 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5313 if test x$enable_hybrid_suspend != xno ; then
5314 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5317 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5319 dnl End of thread suspend policy
5321 dnl ***************************
5322 dnl *** feature experiments ***
5323 dnl ***************************
5325 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5326 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null],[
5328 if test x$enable_experiment != x ; then
5329 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5331 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5332 eval "mono_experiment_test_enable_$feature='yes'"
5335 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5336 eval "mono_experiment_test_enable_null='yes'"
5340 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5341 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5345 dnl **********************
5346 dnl *** checked builds ***
5347 dnl **********************
5349 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, crash_reporting],[
5351 if test x$enable_checked_build != x ; then
5352 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5354 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5355 eval "mono_checked_build_test_enable_$feature='yes'"
5358 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5359 eval "mono_checked_build_test_enable_gc='yes'"
5360 eval "mono_checked_build_test_enable_metadata='yes'"
5361 eval "mono_checked_build_test_enable_thread='yes'"
5362 eval "mono_checked_build_test_enable_private_types='yes'"
5363 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5366 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5367 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5370 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5371 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5374 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5375 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5378 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5379 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5382 if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5384 with_overridable_allocators=yes
5385 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5387 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5391 dnl End of checked builds
5393 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5395 AC_CHECK_HEADER([malloc.h],
5396 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5397 [Define to 1 if you have /usr/include/malloc.h.])],,)
5399 if test x"$GCC" = xyes; then
5400 # Implicit function declarations are not 64 bit safe
5401 # Do this late, since this causes lots of configure tests to fail
5402 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5403 # jay has a lot of implicit declarations
5404 JAY_CFLAGS="-Wno-implicit-function-declaration"
5407 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5408 # instead of libmono-static.a
5409 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5410 LIBMONO_LA=libmini-static.la
5412 if test x$buildsgen = xyes; then
5413 LIBMONO_LA=libmonosgen-$API_VER.la
5415 LIBMONO_LA=libmonoboehm-$API_VER.la
5418 AC_SUBST(LIBMONO_LA)
5424 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5425 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5426 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5427 AC_ARG_WITH(btls_android_api, [ --with-btls-android-api Android NDK API level for BTLS build])
5428 AC_ARG_WITH(btls_android_cmake_toolchain, [ --with-btls-android-cmake-toolchain Path to the cmake toolchain file for Android])
5429 AC_ARG_WITH(btls_android_ndk_asm_workaround, [ --with-btls-android-ndk-asm-workaround Work around a problem with NDK r18+ clang compiler when compiling some AES assembly for ARM])
5431 if test "x$with_btls_android_api" = "x" ; then
5432 case "$BTLS_PLATFORM" in
5434 with_btls_android_api=16" ;;
5436 with_btls_android_api=16" ;;
5438 with_btls_android_api=16 ;;
5440 with_btls_android_api=21 ;;
5442 with_btls_android_api=16 ;;
5444 with_btls_android_api=21 ;;
5448 if test "x$enable_btls" = "xno"; then
5452 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5455 if test "x$enable_btls" = "xyes"; then
5456 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5457 if test "x$CMAKE" = "xno"; then
5458 AC_MSG_ERROR("cmake not found")
5461 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5468 if test "x$host_win32" = "xyes"; then
5469 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5472 case "$BTLS_PLATFORM" in
5478 btls_cflags="$btls_cflags -arch i386"
5481 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5482 if test "x$HAVE_YASM" != "xyes"; then
5483 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5492 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5493 if test "x$HAVE_YASM" != "xyes"; then
5494 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5501 btls_cflags="-DOPENSSL_NO_ASM=1"
5505 btls_cflags="-DOPENSSL_NO_ASM=1"
5509 btls_cflags="-march=armv8-a+crypto"
5518 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5519 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5523 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5526 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5529 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5532 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5535 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5538 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5547 AC_MSG_ERROR(Invalid BTLS platform)
5550 if test "x$platform_android" = "xyes"; then
5551 if test "x$with_btls_android_cmake_toolchain" = "x"; then
5552 with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5555 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
5556 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
5560 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
5561 if test "x$with_btls_android_ndk" != "x"; then
5562 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5564 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5568 if test "x$btls_arch" != "x"; then
5569 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5572 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5574 AC_SUBST(BTLS_CFLAGS)
5575 AC_SUBST(BTLS_PLATFORM)
5576 AC_SUBST(BTLS_CMAKE_ARGS)
5578 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5583 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5585 if test x$DISABLE_MCS_DOCS = xyes; then
5592 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5593 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5594 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5596 libmono_ldflags="$libmono_ldflags $LIBS"
5598 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5599 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5600 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5601 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5602 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5603 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5604 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5605 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5606 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5607 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5608 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5609 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5610 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5611 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5612 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5613 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5614 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5615 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5616 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5617 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5618 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5619 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5620 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5621 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5623 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5633 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5634 AC_SUBST(arch_target)
5639 #This must always be defined when building the runtime
5640 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5642 mono_build_root=`pwd`
5643 AC_SUBST(mono_build_root)
5645 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5646 if test x$host_win32 = xno; then
5647 if test x$enable_msvc = xyes; then
5648 echo "Error, --enable-msvc only supported for Windows builds."
5652 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5654 if test "x$enable_msvc" = "xyes"; then
5655 if test "x$support_boehm" = "xyes"; then
5656 echo "Error, Boehm GC is not supported when using --enable-msvc."
5659 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5660 if test "x$host_cpu" = "xi686"; then
5661 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5662 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5663 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5665 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5666 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5667 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5669 AC_SUBST(mono_msvc_build_dir)
5670 AC_SUBST(mono_msvc_build_lib_dir)
5671 AC_SUBST(mono_msvc_build_bin_dir)
5673 mono_runtime=mono/mini/mono
5676 AC_SUBST(mono_runtime)
5678 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5680 if test $csc_compiler = mcs; then
5681 CSC=$mcs_topdir/class/lib/build/mcs.exe
5686 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5688 mono_cfg_root=$mono_build_root/runtime
5689 if test x$host_win32 = xyes; then
5690 if test "x$cross_compiling" = "xno"; then
5691 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5692 CSC=`cygpath -m -a $CSC`
5693 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5695 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5698 mono_cfg_dir=$mono_cfg_root/etc
5701 if test "x$platform_android" = "xyes"; then
5705 AC_SUBST(mono_cfg_dir)
5709 AC_CONFIG_FILES([po/mcs/Makefile.in])
5711 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5712 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5713 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5715 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5718 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5720 *) reldir=$depth/$srcdir ;;
5722 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5723 cd runtime/etc/mono/1.0
5724 rm -f machine.config
5725 $LN_S $reldir/data/net_1_1/machine.config machine.config
5729 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5732 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5734 *) reldir=$depth/$srcdir ;;
5736 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5737 cd runtime/etc/mono/2.0
5738 rm -f machine.config
5739 $LN_S $reldir/data/net_2_0/machine.config machine.config
5743 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5746 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5748 *) reldir=$depth/$srcdir ;;
5750 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5751 cd runtime/etc/mono/2.0
5753 $LN_S $reldir/data/net_2_0/web.config web.config
5757 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5760 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5762 *) reldir=$depth/$srcdir ;;
5764 $ac_aux_dir/install-sh -d runtime/etc/mono/
5765 cd runtime/etc/mono/
5767 $LN_S $reldir/data/browscap.ini browscap.ini
5771 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5772 [ depth=../../../../..
5774 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5776 *) reldir=$depth/$srcdir ;;
5778 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5779 cd runtime/etc/mono/2.0/Browsers
5780 rm -f Compat.browser
5781 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5785 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5786 [ depth=../../../../..
5788 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5790 *) reldir=$depth/$srcdir ;;
5792 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5793 cd runtime/etc/mono/4.0/Browsers
5794 rm -f Compat.browser
5795 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5799 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5800 [ depth=../../../../..
5802 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5804 *) reldir=$depth/$srcdir ;;
5806 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5807 cd runtime/etc/mono/4.5/Browsers
5808 rm -f Compat.browser
5809 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5813 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5816 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5818 *) reldir=$depth/$srcdir ;;
5820 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5821 cd runtime/etc/mono/4.0
5822 rm -f machine.config
5823 $LN_S $reldir/data/net_4_0/machine.config machine.config
5827 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5830 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5832 *) reldir=$depth/$srcdir ;;
5834 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5835 cd runtime/etc/mono/4.0
5837 $LN_S $reldir/data/net_4_0/web.config web.config
5841 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5844 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5846 *) reldir=$depth/$srcdir ;;
5848 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5849 cd runtime/etc/mono/4.5
5850 rm -f machine.config
5851 $LN_S $reldir/data/net_4_5/machine.config machine.config
5855 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5858 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5860 *) reldir=$depth/$srcdir ;;
5862 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5863 cd runtime/etc/mono/4.5
5865 $LN_S $reldir/data/net_4_5/web.config web.config
5869 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])
5870 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])
5871 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
5873 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
5874 if test x"$GCC" = xyes -a "x$with_jemalloc" != "xyes"; then
5876 # incompatible-pointer-types requires gcc circa 5.x
5879 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
5880 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
5884 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
5890 CFLAGS="$CFLAGS -Werror=return-type"
5894 # Mono.Native Support
5895 # -------------------
5896 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
5897 # It is built as a stand-alone shared library and not bundled with the runtime because we
5898 # may need to build two different versions of it.
5900 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
5901 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
5903 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
5904 # implementation accordingly. We build a single `libmono_native` shared library.
5906 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
5908 # During the mobile build, we are called with `CC` containing an explicit minium version flag,
5909 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
5910 # depending on platform.
5912 # We build two versions of the shared library:
5913 # - `libmono_native_compat` is built with whichever minimum version is passed to us via `CC`.
5914 # - `libmono_native_unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
5916 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
5917 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
5918 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/System/Mono/MonoNativePlatform.cs).
5920 # This can be called by automated tests both to ensure that the library has been correctly installed and also
5921 # to verify that it's the correct version of it.
5924 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
5925 if test x$target_osx = xyes; then
5926 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
5927 grep_find_mac_version_pattern="-mmacosx-version-min=$sed_version_pattern"
5928 mono_native_compat_version=`echo $CC | grep -o -e $grep_find_mac_version_pattern`
5929 MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_mac_version_pattern`
5930 MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_mac_version_pattern`
5931 MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern`
5932 MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern`
5933 MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern`
5934 MONO_NATIVE_LDFLAGS=`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern`
5937 MONO_NATIVE_PLATFORM=macos
5938 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
5939 AC_MSG_CHECKING([Mono.Native support])
5940 AC_MSG_RESULT(macos)
5942 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
5943 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
5945 if test x$mono_native_compat = xyes; then
5946 mono_native_compat=yes
5947 mono_native_text="Mac OSX (compat+unified)"
5948 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
5949 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
5950 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -mmacosx-version-min=10.12"
5951 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -mmacosx-version-min=10.12"
5953 mono_native_compat=no
5954 mono_native_text="Mac OSX"
5956 elif test x$mono_native_platform_ios = xyes; then
5957 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
5959 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
5960 if test x$mono_native_ios_sim = xyes; then
5961 mono_native_ios_target=ios-simulator
5962 mono_native_text="iOS Simulator"
5963 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5965 mono_native_ios_target=iphoneos
5966 mono_native_text="iOS Device"
5967 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5969 mono_native_unified_version="10.0"
5970 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
5972 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
5973 if test x$mono_native_ios_sim = xyes; then
5974 mono_native_ios_target=tvos-simulator
5975 mono_native_text="AppleTV Simulator"
5976 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5978 mono_native_ios_target=tvos
5979 mono_native_text="AppleTV Device"
5980 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5982 mono_native_unified_version="10.0"
5983 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
5985 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
5986 if test x$mono_native_ios_sim = xyes; then
5987 mono_native_ios_target=watchos-simulator
5988 mono_native_text="Apple Watch Simulator"
5989 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5991 mono_native_ios_target=watchos
5992 mono_native_text="Apple Watch Device"
5993 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5995 mono_native_unified_version="5.0"
5996 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
5998 AC_MSG_ERROR([Unknown iOS Target])
6003 AC_MSG_CHECKING([Mono.Native support])
6004 AC_MSG_RESULT([$mono_native_ios_target])
6006 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6008 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6009 grep_find_ios_version_pattern="-m$mono_native_ios_target-version-min=$sed_version_pattern"
6011 mono_native_compat_version=`echo $CC | grep -o -e $grep_find_ios_version_pattern`
6013 if test x$with_bitcode = xyes; then
6014 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6015 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6017 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6020 if test x$enable_gss = xyes; then
6021 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6024 MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_ios_version_pattern`
6025 MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_ios_version_pattern`
6026 MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern`
6027 MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern`
6028 MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern`
6029 MONO_NATIVE_LDFLAGS=`echo $LDFLAGS $mono_native_ldflags | sed -e $sed_remove_ios_version_pattern`
6031 if test x$mono_native_compat = xyes; then
6032 mono_native_text="$mono_native_text (compat+unified)"
6033 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
6034 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
6035 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6036 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6040 MONO_NATIVE_PLATFORM=ios
6041 elif test x$host_linux = xyes; then
6042 mono_native_text="Linux"
6044 MONO_NATIVE_CXX=$CXX
6045 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6046 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6047 MONO_NATIVE_CFLAGS=$CFLAGS
6048 MONO_NATIVE_LDFLAGS=$LDFLAGS
6051 mono_native_compat=no
6052 MONO_NATIVE_PLATFORM=linux
6053 AC_MSG_CHECKING([Mono.Native support])
6054 AC_MSG_RESULT(linux)
6056 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6057 elif test x$target_wasm = xyes; then
6058 mono_native_text="wasm"
6060 MONO_NATIVE_CXX=$CXX
6061 # The system.native code uses _WASM_ to check for wasm
6062 MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6063 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6064 MONO_NATIVE_CFLAGS=$CFLAGS
6065 MONO_NATIVE_LDFLAGS=$LDFLAGS
6068 mono_native_compat=no
6069 MONO_NATIVE_PLATFORM=linux
6070 AC_MSG_CHECKING([Mono.Native support])
6073 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6074 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6075 mono_native_text="AIX"
6077 MONO_NATIVE_CXX=$CXX
6078 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6079 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6080 MONO_NATIVE_CFLAGS=$CFLAGS
6081 MONO_NATIVE_LDFLAGS=$LDFLAGS
6084 mono_native_compat=no
6085 MONO_NATIVE_PLATFORM=aix
6086 AC_MSG_CHECKING([Mono.Native support])
6089 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6090 elif test x$platform_android = xyes; then
6091 mono_native_text="Android"
6093 MONO_NATIVE_CXX=$CXX
6094 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6095 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6096 MONO_NATIVE_CFLAGS=$CFLAGS
6097 MONO_NATIVE_LDFLAGS=$LDFLAGS
6100 mono_native_compat=no
6101 MONO_NATIVE_PLATFORM=android
6102 AC_MSG_CHECKING([Mono.Native support])
6103 AC_MSG_RESULT(Android)
6105 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6108 mono_native_text="no"
6109 AC_MSG_CHECKING([Mono.Native support])
6113 if test x$mono_native_compat = xyes; then
6114 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6116 MONO_NATIVE_LIBRARY_NAME=libmono-native
6119 AC_SUBST(MONO_NATIVE_PLATFORM)
6120 AC_SUBST(MONO_NATIVE_CC)
6121 AC_SUBST(MONO_NATIVE_CXX)
6122 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6123 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6124 AC_SUBST(MONO_NATIVE_CFLAGS)
6125 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6126 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6127 AC_SUBST(MONO_NATIVE_LDFLAGS)
6128 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6129 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6130 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6131 AC_SUBST(MONO_NATIVE_LIBADD)
6133 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6134 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6135 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6136 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6137 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6138 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6139 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6141 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6142 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6143 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6144 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6145 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6147 # Update all submodules recursively to ensure everything is checked out
6148 (cd $srcdir && scripts/update_submodules.sh)
6153 acceptance-tests/Makefile
6155 scripts/mono-find-provides
6156 scripts/mono-find-requires
6160 mono/native/Makefile
6162 mono/utils/jemalloc/Makefile
6163 mono/metadata/Makefile
6167 mono/arch/x86/Makefile
6168 mono/arch/amd64/Makefile
6169 mono/arch/ppc/Makefile
6170 mono/arch/sparc/Makefile
6171 mono/arch/s390x/Makefile
6172 mono/arch/arm/Makefile
6173 mono/arch/arm64/Makefile
6174 mono/arch/mips/Makefile
6175 mono/arch/riscv/Makefile
6177 mono/native/platform-type.c
6178 mono/native/platform-type-compat.c
6179 mono/native/platform-type-unified.c
6181 mono/tests/assembly-load-reference/Makefile
6182 mono/tests/tests-config
6183 mono/tests/gc-descriptors/Makefile
6184 mono/tests/testing_gac/Makefile
6185 mono/tests/llvmonly-mixed/Makefile
6186 mono/unit-tests/Makefile
6187 mono/benchmark/Makefile
6189 mono/profiler/Makefile
6191 mono/eglib/eglib-config.h
6192 mono/eglib/test/Makefile
6194 ikvm-native/Makefile
6199 data/net_2_0/Makefile
6200 data/net_4_0/Makefile
6201 data/net_4_5/Makefile
6202 data/net_2_0/Browsers/Makefile
6203 data/net_4_0/Browsers/Makefile
6204 data/net_4_5/Browsers/Makefile
6211 data/mono-options.pc
6212 data/mono-lineeditor.pc
6218 data/system.web.extensions_1.0.pc
6219 data/system.web.extensions.design_1.0.pc
6220 data/system.web.mvc.pc
6221 data/system.web.mvc2.pc
6222 data/system.web.mvc3.pc
6223 data/aspnetwebstack.pc
6229 tools/locale-builder/Makefile
6231 tools/monograph/Makefile
6232 tools/pedump/Makefile
6238 if test x$host_win32 = xyes; then
6239 # Get rid of 'cyg' prefixes in library names
6240 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6241 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6242 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6243 # executable doesn't work...
6244 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6247 if test x$host_darwin = xyes; then
6248 # This doesn't seem to be required and it slows down parallel builds
6249 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6254 NONE) prefix=$ac_default_prefix ;;
6256 case $exec_prefix in
6257 NONE) exec_prefix='${prefix}' ;;
6261 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6262 # any existing config.make. This allows people to share the same source tree
6263 # with different build directories, one native and one cross
6265 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6267 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6269 echo "prefix=$prefix" > $mcs_topdir/build/config.make
6270 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6271 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6272 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6273 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6274 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6275 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6276 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6277 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6280 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6281 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6284 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6287 [myver=$($AWK 'BEGIN {
6288 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6289 if(length(vsplit [1]) > 4) {
6290 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6292 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6295 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6296 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6298 if test x$host_darwin = xyes; then
6299 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6300 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6301 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6302 elif test x$host_win32 = xyes; then
6303 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6304 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6305 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6306 elif test x$host_linux = xyes; then
6307 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6308 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6309 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6311 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6312 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6313 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6316 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6317 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6320 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6321 enable_system_aot=yes
6324 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6325 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6328 if test x$DISABLE_MCS_DOCS = xyes; then
6329 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6332 if test x$has_extension_module != xno; then
6333 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6336 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6338 if test "x$test_bcl_opt" = "xyes"; then
6339 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6342 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6344 if test $csc_compiler = mcs; then
6345 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6348 if test "x$AOT_BUILD_FLAGS" != "x" ; then
6349 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6350 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6351 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6354 if test "x$AOT_MODE" != "x" ; then
6355 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6358 if test "x$enable_btls" = "xyes"; then
6359 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6362 if test "x$mono_native" = "xyes"; then
6363 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6365 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6368 if test x$mono_native_compat = xyes; then
6369 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6371 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6374 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6375 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6381 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6383 btls_platform_string=
6384 if test x$enable_btls = xyes; then
6385 if test x$btls_android = xyes; then
6386 btls_platform_string=" (android:$BTLS_PLATFORM)"
6388 btls_platform_string=" ($BTLS_PLATFORM)"
6393 if test x$buildsgen = xyes; then
6394 if test x$enable_cooperative_suspend != xno; then
6395 thread_suspend_msg="Suspend: Cooperative"
6396 elif test x$enable_hybrid_suspend != xno; then
6397 thread_suspend_msg="Suspend: Hybrid"
6399 thread_suspend_msg="Suspend: Preemptive"
6405 C# Compiler: $csc_compiler
6413 SIGALTSTACK: $with_sigaltstack
6415 BigArrays: $enable_big_arrays
6416 DTrace: $enable_dtrace
6417 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6418 Spectre: $spectre_mitigation_status
6419 Mono.Native: $mono_native_text
6422 .NET 4.x: $with_profile4_x
6423 Xamarin.Android: $with_monodroid
6424 Xamarin.iOS: $with_monotouch
6425 Xamarin.WatchOS: $with_monotouch_watch
6426 Xamarin.TVOS: $with_monotouch_tv
6427 Xamarin.Mac: $with_xammac
6428 Windows AOT: $with_winaot
6430 Unreal: $with_unreal
6431 WebAssembly: $with_wasm
6432 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6433 JNI support: $jdk_headers_found
6434 libgdiplus: $libgdiplus_msg
6436 BTLS: $enable_btls$btls_platform_string
6437 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
6438 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6439 .NET Core: $with_core
6442 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6443 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)