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=28B18F53-22DE-423B-B0A8-8ED64B1B5F00
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])
128 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
129 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
131 libgc_threads=pthreads
134 *-mingw*|*-*-cygwin*)
135 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
136 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
139 if test "x$cross_compiling" = "xno"; then
140 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
144 if test "x$host" = "x$target"; then
150 # Windows 7 or later is required
151 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
152 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
153 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
154 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
155 libmono_cflags="-mms-bitfields -mwindows"
156 libmono_ldflags="-mms-bitfields -mwindows"
161 with_sgen_default_concurrent=yes
163 # This forces libgc to use the DllMain based thread registration code on win32
164 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
167 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
168 libmono_cflags="-D_REENTRANT"
169 LDFLAGS="$LDFLAGS -pthread"
170 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
171 libmono_ldflags="-pthread"
174 libgc_threads=pthreads
177 with_sgen_default_concurrent=yes
180 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
181 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
182 libmono_ldflags="-lpthread -pthread"
184 libgc_threads=pthreads
188 with_sgen_default_concurrent=yes
192 LDFLAGS="$LDFLAGS -lutil"
193 if test "x$PTHREAD_CFLAGS" = "x"; then
194 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
197 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
198 libmono_cflags="$PTHREAD_CFLAGS"
200 if test "x$PTHREAD_LIBS" = "x"; then
201 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
202 libmono_ldflags="-pthread"
204 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
205 libmono_ldflags="$PTHREAD_LIBS"
207 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
209 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
211 libgc_threads=pthreads
224 with_sgen_default_concurrent=yes
227 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
228 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
229 if test "x$disable_munmap" != "xyes"; then
230 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
232 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
233 LDFLAGS="$LDFLAGS -pthread"
235 AC_DEFINE(PTHREAD_POINTER_ID)
237 libgc_threads=pthreads
241 with_sgen_default_concurrent=yes
245 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
246 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
248 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
249 if test "x$disable_munmap" != "xyes"; then
250 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
252 libmono_cflags="-D_REENTRANT"
254 libgc_threads=pthreads
261 # Android doesn't support boehm, as it's missing <link.h>
265 # isinf(3) requires -lm
266 LDFLAGS="$LDFLAGS -lm"
268 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
269 # PAGE_SIZE; breaks mono/io-layer/collection.c
270 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
271 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
272 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
274 # to bypass the underscore linker check, can't work when cross-compiling
280 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
281 if test "x$disable_munmap" != "xyes"; then
282 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
284 libmono_cflags="-D_REENTRANT"
286 libgc_threads=pthreads
288 if test "x$cross_compiling" != "xno"; then
289 # to bypass the underscore linker check, not
290 # available during cross-compilation
304 # https://bugzilla.novell.com/show_bug.cgi?id=504411
312 with_sgen_default_concurrent=yes
315 echo "nacl no longer supported."
319 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
320 # +ESdbgasm only valid on bundled cc on RISC
321 # silently ignored for ia64
322 if test $GCC != "yes"; then
323 CFLAGS="$CFLAGS +ESdbgasm"
324 # Arrange for run-time dereferencing of null
325 # pointers to produce a SIGSEGV signal.
326 LDFLAGS="$LDFLAGS -z"
328 CFLAGS="$CFLAGS +ESdbgasm"
329 LDFLAGS="$LDFLAGS -z"
330 libmono_cflags="-D_REENTRANT"
331 libmono_ldflags="-lpthread"
332 libgc_threads=pthreads
337 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
339 libmono_cflags="-D_REENTRANT"
340 libgc_threads=pthreads
343 enable_solaris_tar_check=yes
346 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
349 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
350 libmono_cflags="-D_THREAD_SAFE"
352 AC_DEFINE(PTHREAD_POINTER_ID)
353 AC_DEFINE(USE_MACH_SEMA, 1, [...])
355 libgc_threads=pthreads
357 if test "x$cross_compiling" = "xyes"; then
358 has_broken_apple_cpp=yes
360 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
361 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
362 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
364 dnl Snow Leopard and newer config.guess reports as this
366 BROKEN_DARWIN_FLAGS="-arch i386"
367 BROKEN_DARWIN_CPPFLAGS=""
368 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
369 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
370 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
371 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
372 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
373 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
374 with_sgen_default_concurrent=yes
377 with_sgen_default_concurrent=yes
389 dnl BSD_SOURCE is for getifaddrs
390 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
391 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
393 LIBS="$LIBS -lnetwork -ltextencoding"
395 AC_DEFINE(PTHREAD_POINTER_ID)
396 dnl Haiku does not support static TLS with __thread
398 libgc_threads=pthreads
403 dnl Set up a 64-bit build
404 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
406 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
407 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
408 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
409 dnl specifiy 64-bit mode for tools.
410 AR="/usr/bin/ar -X64"
411 NM="/usr/bin/nm -X64"
412 dnl SGen is the future (changes to Boehm support code would be
413 dnl required if you wish to re-enable Boehm)
418 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
420 dnl use pthread TLS, __thread has issues with the compiler flags we use
422 dnl ppc Linux is the same? test further
426 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
433 if test x$need_link_unlink = xyes; then
434 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
437 if test x$host_win32 = xyes; then
438 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
441 if test x$target_win32 = xyes; then
442 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
445 if test x$host_darwin = xyes; then
446 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
449 # Defined for all targets/platforms using classic Windows API support.
450 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
451 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
453 AC_SUBST(extra_runtime_ldflags)
454 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
455 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
456 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
457 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
458 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
459 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
460 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
461 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
462 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
464 if test -z "$HOST_DARWIN_TRUE"; then :
465 PLATFORM_AOT_SUFFIX=.dylib
468 if test -z "$HOST_LINUX_TRUE"; then :
469 PLATFORM_AOT_SUFFIX=.so
472 if test -z "$HOST_WIN32_TRUE"; then :
473 PLATFORM_AOT_SUFFIX=.dll
476 AC_SUBST(PLATFORM_AOT_SUFFIX)
478 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
480 AC_CHECK_TOOL(CC, gcc, gcc)
482 AC_CHECK_TOOL(CXX, g++, g++)
488 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
490 # Set ASFLAGS if not already set.
491 : ${CCASFLAGS='$(CFLAGS)'}
495 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
496 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
497 if test "x$CXX" = "xg++"; then
498 if test "x$GXX" != "xyes"; then
499 # automake/libtool is so broken, it requires g++ even if the c++ sources
500 # are inside automake conditionals
501 AC_MSG_ERROR([You need to install g++])
505 dnl may require a specific autoconf version
506 dnl AC_PROG_CC_FOR_BUILD
507 dnl CC_FOR_BUILD not automatically detected
509 CFLAGS_FOR_BUILD=$CFLAGS
511 if test "x$cross_compiling" = "xyes"; then
516 AC_SUBST(CC_FOR_BUILD)
517 AC_SUBST(CFLAGS_FOR_BUILD)
519 AC_SUBST(BUILD_EXEEXT)
521 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
522 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
527 # This causes monodis to not link correctly
528 #AC_DISABLE_FAST_INSTALL
530 #lookup makedev() header
534 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
537 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
538 AC_SUBST(export_ldflags)
540 # Test whenever ld supports -version-script
544 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)
545 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)
546 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
547 [], [], [#include <stddef.h>
548 #include <sys/socket.h>
549 #include <linux/socket.h>])
551 AC_CHECK_HEADERS(sys/user.h, [], [],
553 #ifdef HAVE_SYS_PARAM_H
554 # include <sys/param.h>
558 AC_CHECK_HEADERS(linux/serial.h)
560 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
561 if test x$have_zlib = xyes; then
562 AC_TRY_COMPILE([#include <zlib.h>], [
563 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
565 #error No good zlib found
568 AC_MSG_RESULT(Using system zlib)
569 zlib_msg="system zlib"
570 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
572 AC_MSG_RESULT(Using embedded zlib)
574 zlib_msg="bundled zlib"
578 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
579 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
581 # for mono/metadata/debug-symfile.c
582 AC_CHECK_HEADERS(elf.h)
585 AC_CHECK_HEADERS(poll.h)
586 AC_CHECK_HEADERS(sys/poll.h)
587 AC_CHECK_HEADERS(sys/wait.h)
588 AC_CHECK_HEADERS(grp.h)
589 AC_CHECK_HEADERS(syslog.h)
590 AC_CHECK_FUNCS(vsyslog)
593 AC_CHECK_HEADERS(wchar.h)
595 # for Linux statfs support
596 AC_CHECK_HEADERS(linux/magic.h)
598 # For Android NDK unified headers
599 if test x$platform_android = xyes; then
600 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
601 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
603 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
604 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
605 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
606 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
607 # doesn't contain the required definitions (NDK 14)
608 if test x$have_android_signal_inlines = xyes; then
609 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
611 AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
613 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
617 android_sigrtminmax_work=yes
620 android_sigrtminmax_work=no
624 if test x$android_sigrtminmax_work = xno; then
625 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
629 # Attempt to detect whether we're using Android NDK unified headers
630 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
631 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
633 android_unified_headers=no
634 if test x$have_android_api_level = xyes; then
635 if test x$have_android_versioning = xyes; then
636 AC_MSG_CHECKING([whether using Android NDK unified headers])
638 # Both macros are defined only in the NDK unified headers
641 #include <android/api-level.h>
642 #include <android/versioning.h>
644 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
646 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
650 android_unified_headers=yes
653 android_unified_headers=no
659 if test x$android_unified_headers = xyes; then
660 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
664 # not 64 bit clean in cross-compile
665 AC_CHECK_SIZEOF(void *)
666 AC_CHECK_SIZEOF(long)
669 AC_CHECK_SIZEOF(long long)
671 AC_CACHE_CHECK([for clang],
684 AC_ARG_ENABLE(visibility-hidden,
685 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
686 disable_visibility_hidden=yes, disable_visibility_hidden=no)
689 if test x"$GCC" = xyes; then
690 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
691 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
693 # We require C99 with some GNU extensions, e.g. `linux` macro
694 CFLAGS="$CFLAGS -std=gnu99"
696 # The runtime code does not respect ANSI C strict aliasing rules
697 CFLAGS="$CFLAGS -fno-strict-aliasing"
699 # We rely on signed overflow to behave
700 CFLAGS="$CFLAGS -fwrapv"
702 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
703 if test x"$disable_visibility_hidden" = xno; then
704 # Don't export any symbols by default
705 SHARED_CFLAGS="-fvisibility=hidden"
706 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
710 # Check for the normal version, since gcc ignores unknown -Wno options
711 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
712 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
716 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
722 if test "x$mono_cv_clang" = "xyes"; then
723 # https://bugzilla.samba.org/show_bug.cgi?id=8118
724 WARN="$WARN -Qunused-arguments"
725 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
726 # We rely on zero length arrays in structs
727 WARN="$WARN -Wno-zero-length-array"
730 # The Sun Forte compiler complains about inline functions that access static variables
731 # so disable all inlining.
734 CFLAGS="$CFLAGS -Dinline="
738 CFLAGS="$WARN $CFLAGS -g"
739 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
740 CPPFLAGS="$WARN $CPPFLAGS -g"
742 # Where's the 'mcs' source tree?
743 if test -d $srcdir/mcs; then
749 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
750 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
751 mcsdir=$with_mcs_path
755 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
757 AC_ARG_WITH(core, [ --with-core=yes,no,only controls whether to build Mono as a .NET Core runtime, not build it, or just build core (defaults to no)],[],[with_core=no])
758 if test x$with_core = xyes; then
759 AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
761 AM_CONDITIONAL(ENABLE_CORE, test x$with_core = xyes)
762 AM_CONDITIONAL(ONLY_CORE, test x$with_core = xonly)
765 # A sanity check to catch cases where the package was unpacked
766 # with an ancient tar program (Solaris)
768 AC_ARG_ENABLE(solaris-tar-check,
769 [ --disable-solaris-tar-check disable solaris tar check],
770 do_solaris_tar_check=no, do_solaris_tar_check=yes)
772 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
773 AC_MSG_CHECKING(integrity of package)
774 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
778 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"
779 AC_MSG_ERROR([$errorm])
783 if test "x$with_mcs_path" != "x"; then
784 mcs_topdir=$(cd "$mcsdir" && pwd)
785 mcs_topdir_from_srcdir=$mcs_topdir
787 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
788 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
791 # Convert mcs_topdir* paths to Windows syntax.
792 if test x$cross_compiling$host_win32 = xnoyes; then
793 mcs_topdir=$(cygpath -m $mcs_topdir)
794 case $mcs_topdir_from_srcdir in
796 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
801 AC_SUBST([mcs_topdir])
802 AC_SUBST([mcs_topdir_from_srcdir])
804 # gettext: prepare the translation directories.
805 # we do not configure the full gettext, as we consume it dynamically from C#
808 if test "x$USE_NLS" = "xyes"; then
809 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
811 if test "x$HAVE_MSGFMT" = "xno"; then
812 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
816 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
819 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
820 if test x$with_crosspkgdir = "x"; then
821 if test -s $PKG_CONFIG_PATH; then
822 pkg_config_path=$PKG_CONFIG_PATH
825 pkg_config_path=$with_crosspkgdir
826 PKG_CONFIG_PATH=$pkg_config_path
827 export PKG_CONFIG_PATH
831 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
832 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
833 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
835 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
836 if test x$werror_flag = xyes; then
837 WERROR_CFLAGS="-Werror"
839 AC_SUBST([WERROR_CFLAGS])
840 AC_SUBST([SHARED_CFLAGS])
842 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
844 AC_SUBST(GLIB_CFLAGS)
846 # Enable support for fast thread-local storage
847 # Some systems have broken support, so we allow to disable it.
848 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
850 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
851 # This does not work on some platforms (bug #55253)
852 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
854 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
855 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
856 # Same as --with-shared_mono=no
857 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
859 if test "x$enable_static" = "xno"; then
863 if test "x$enable_shared" = "xno"; then
867 if test "x$enable_libraries" = "xno"; then
871 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
873 if test "x$host_win32" = "xyes"; then
874 # Boehm GC requires the runtime to be in its own dll
878 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
879 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
880 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
881 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
883 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
884 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
885 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
887 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
888 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
892 # Pass it to libgc as well
893 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
900 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
902 if test x$enable_small_config = xyes; then
903 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
904 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
907 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)
909 DISABLED_FEATURES=none
912 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
913 AC_MSG_CHECKING([CSharp compiler to use])
914 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
915 if test x$withval = xmcs; then
917 elif test x$withval = xroslyn; then
919 elif test x$withval = xdefault; then
922 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
924 ],[csc_compiler=default])
926 if test $csc_compiler = default; then
927 if test $endian = big; then
929 elif test $endian = little; then
931 powerpc*) csc_compiler=mcs ;;
932 *) csc_compiler=roslyn ;;
938 AC_MSG_RESULT($csc_compiler)
940 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
941 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
942 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])
945 if test x$target_win32 = xyes; then
947 with_jemalloc_assert=no
948 with_jemalloc_always=no
951 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
952 if test "x$with_jemalloc_assert" = "xyes"; then
953 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
954 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
955 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
958 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
959 if test "x$with_jemalloc_always" = "xyes"; then
961 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
962 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
963 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
966 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
967 if test "x$with_jemalloc" = "xyes"; then
968 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
969 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
970 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
972 if test "x$target_mach" = "xyes"; then
973 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
976 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
977 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
979 AC_SUBST(JEMALLOC_CFLAGS)
980 AC_SUBST(JEMALLOC_CPPFLAGS)
981 AC_SUBST(JEMALLOC_LDFLAGS)
982 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
986 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
987 # MERP - The MS telemetry profile. Not for general use.
988 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
990 # 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.
992 #--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.
993 #--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.
994 #--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.
995 #--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.
997 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])
998 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])
999 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1001 if test "x$with_crash_privacy" = "xyes"; then
1002 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1005 if test "x$with_structured_crashes" = "xno"; then
1006 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1010 *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1015 if test "x$crash_reporting" != "xyes"; then
1016 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1017 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1020 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1021 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1023 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1024 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1026 if test x$enable_monodroid = xyes; then
1027 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1030 if test x$enable_monotouch = xyes; then
1031 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1034 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1036 # mono/corefx/native has a lot of invalid C++98 in its headers
1037 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1038 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1039 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1040 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1042 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1043 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1044 # and add it whenever we're running clang on Darwin.
1045 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1046 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1049 AC_SUBST(CXXFLAGS_COMMON)
1051 if test "x$enable_cxx" = "xyes"; then
1053 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1055 # -std=gnu99 -xc++ is not allowed and errors.
1056 CXX_REMOVE_CFLAGS=-std=gnu99
1057 # These give warnings and should be removed. They are C-only.
1058 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1059 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1060 # Likewise with CentOS 6 gcc 4.4.
1061 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1063 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1064 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1065 # generates a warning every time we run gcc which is very unsightly.
1066 # The warning is for e.g. sprintf(foo, "") which can just be
1067 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1068 # and completely legal and valid.
1069 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1070 # Alternatively, just run $CXX -xc++ -c /dev/null.
1072 ORIG_CXXFLAGS=$CXXFLAGS
1073 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1074 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1075 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1077 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1078 CXXFLAGS=$ORIG_CXXFLAGS
1081 AC_SUBST(CXX_ADD_CFLAGS)
1082 AC_SUBST(CXX_REMOVE_CFLAGS)
1085 # Set the build profiles and options before things which use them
1088 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])
1089 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1090 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1091 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])
1092 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])
1093 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1094 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1095 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])
1096 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])
1097 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])
1098 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1099 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1100 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1101 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1104 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])
1105 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])
1106 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])
1107 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])
1110 dnl Spectre compiler mitigation flag checks
1112 if test "x$with_spectre_mitigation" = "xyes"; then
1113 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1115 SPECTRE_INDIRECT_BRANCH_KIND=
1116 case "x$with_spectre_indirect_branch_choice" in
1117 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1118 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1119 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1120 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1121 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1124 SPECTRE_FUNCTION_RETURN_KIND=""
1125 case "x$with_spectre_function_return_choice" in
1126 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1127 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1128 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1129 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1130 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1133 AX_CHECK_COMPILE_FLAG(
1134 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1135 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1138 AX_CHECK_COMPILE_FLAG(
1139 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1140 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1143 if test "x$SPECTRE_CFLAGS" != "x" ; then
1144 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1145 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1146 spectre_mitigation_status="mitigation enabled"
1149 spectre_mitigation_status="no mitigation"
1153 dnl Profile defaults
1155 TEST_PROFILE=default
1156 enable_llvm_default=no
1158 with_profile4_x_default=no
1159 with_monodroid_default=no
1160 with_monotouch_default=no
1161 with_monotouch_watch_default=no
1162 with_monotouch_tv_default=no
1163 with_xammac_default=no
1164 with_testing_aot_full_interp_default=no
1165 with_testing_aot_hybrid_default=no
1166 with_testing_aot_full_default=no
1167 with_winaot_default=no
1168 with_orbis_default=no
1169 with_unreal_default=no
1170 with_wasm_default=no
1172 with_bitcode_default=no
1173 enable_cooperative_suspend_default=no
1174 enable_hybrid_suspend_default=no
1176 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000,nftnptr-arg-trampolines=4000
1178 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1180 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1181 DISABLE_MCS_DOCS_default=yes
1182 elif test x$with_runtime_preset = xnet_4_x; then
1183 with_profile4_x_default=yes
1184 TEST_PROFILE=net_4_x
1185 elif test x$with_runtime_preset = xall; then
1186 with_profile4_x_default=yes
1187 with_monodroid_default=yes
1188 with_monotouch_default=yes
1189 with_monotouch_watch_default=yes
1190 with_monotouch_tv_default=yes
1191 with_xammac_default=yes
1192 with_winaot_default=yes
1193 with_orbis_default=yes
1194 with_unreal_default=yes
1195 with_wasm_default=yes
1196 with_testing_aot_full_interp_default=yes
1197 with_testing_aot_hybrid_default=yes
1198 with_testing_aot_full_default=yes
1199 TEST_PROFILE=net_4_x
1200 elif test x$with_runtime_preset = xbitcode; then
1201 DISABLE_MCS_DOCS_default=yes
1202 with_testing_aot_full_default=yes
1203 with_bitcode_default=yes
1204 enable_cooperative_suspend_default=yes
1205 TEST_PROFILE=testing_aot_full
1206 enable_llvm_default=yes
1208 mono_feature_disable_com='yes'
1209 mono_feature_disable_remoting='yes'
1210 mono_feature_disable_reflection_emit_save='yes'
1211 mono_feature_disable_reflection_emit='yes'
1212 mono_feature_disable_appdomains='yes'
1214 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1215 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1217 elif test x$with_runtime_preset = xfullaot; then
1218 DISABLE_MCS_DOCS_default=yes
1219 with_testing_aot_full_default=yes
1220 TEST_PROFILE=testing_aot_full
1222 mono_feature_disable_com='yes'
1223 mono_feature_disable_remoting='yes'
1224 mono_feature_disable_reflection_emit_save='yes'
1225 mono_feature_disable_reflection_emit='yes'
1226 mono_feature_disable_appdomains='yes'
1228 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1229 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1231 elif test x$with_runtime_preset = xfullaot_llvm; then
1232 DISABLE_MCS_DOCS_default=yes
1233 with_testing_aot_full_default=yes
1234 TEST_PROFILE=testing_aot_full
1236 mono_feature_disable_com='yes'
1237 mono_feature_disable_remoting='yes'
1238 mono_feature_disable_reflection_emit_save='yes'
1239 mono_feature_disable_reflection_emit='yes'
1240 mono_feature_disable_appdomains='yes'
1242 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1243 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1245 elif test x$with_runtime_preset = xhybridaot; then
1246 DISABLE_MCS_DOCS_default=yes
1247 with_testing_aot_hybrid_default=yes
1248 TEST_PROFILE=testing_aot_hybrid
1250 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1251 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1252 elif test x$with_runtime_preset = xhybridaot_llvm; then
1253 DISABLE_MCS_DOCS_default=yes
1254 with_testing_aot_hybrid_default=yes
1255 TEST_PROFILE=testing_aot_hybrid
1257 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1258 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1259 elif test x$with_runtime_preset = xfullaotinterp; then
1260 with_testing_aot_full_interp_default=yes
1261 TEST_PROFILE=testing_aot_full_interp
1263 # mscorlib.dll aot compilation crashes
1264 mono_feature_disable_com='yes'
1266 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1267 AOT_RUN_FLAGS="--full-aot-interp"
1268 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1269 with_testing_aot_full_interp_default=yes
1270 TEST_PROFILE=testing_aot_full_interp_llvm
1272 # mscorlib.dll aot compilation crashes
1273 mono_feature_disable_com='yes'
1275 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1276 AOT_RUN_FLAGS="--full-aot-interp"
1277 elif test x$with_runtime_preset = xaot; then
1278 with_profile4_x_default=yes
1280 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1283 DISABLE_MCS_DOCS_default=yes
1284 elif test x$with_runtime_preset = xaot_llvm; then
1285 with_profile4_x_default=yes
1287 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1290 DISABLE_MCS_DOCS_default=yes
1291 elif test x$with_runtime_preset = xwinaot; then
1292 DISABLE_MCS_DOCS_default=yes
1293 with_winaot_default=yes
1296 mono_feature_disable_com='yes'
1297 mono_feature_disable_remoting='yes'
1298 mono_feature_disable_reflection_emit_save='yes'
1299 mono_feature_disable_reflection_emit='yes'
1300 mono_feature_disable_appdomains='yes'
1302 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1303 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1305 elif test x$with_runtime_preset = xorbis; then
1306 DISABLE_MCS_DOCS_default=yes
1307 with_orbis_default=yes
1310 mono_feature_disable_com='yes'
1311 mono_feature_disable_remoting='yes'
1312 mono_feature_disable_reflection_emit_save='yes'
1313 mono_feature_disable_reflection_emit='yes'
1314 mono_feature_disable_appdomains='yes'
1316 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1317 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1319 elif test x$with_runtime_preset = xunreal; then
1320 DISABLE_MCS_DOCS_default=yes
1321 with_unreal_default=yes
1324 mono_feature_disable_com='yes'
1325 mono_feature_disable_remoting='yes'
1326 mono_feature_disable_appdomains='no'
1328 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1329 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1330 elif test x$with_runtime_preset = xwasm; then
1331 DISABLE_MCS_DOCS_default=yes
1332 with_wasm_default=yes
1335 mono_feature_disable_com='yes'
1336 mono_feature_disable_remoting='yes'
1337 mono_feature_disable_reflection_emit_save='yes'
1338 mono_feature_disable_reflection_emit='yes'
1339 mono_feature_disable_appdomains='yes'
1341 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1342 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1344 TEST_PROFILE=net_4_x
1345 with_profile4_x_default=yes
1348 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1349 AC_SUBST(AOT_BUILD_FLAGS)
1350 AC_SUBST(AOT_RUN_FLAGS)
1351 # For llvmonlycheck + fullaotcheck
1352 AC_SUBST(INVARIANT_AOT_OPTIONS)
1355 AC_SUBST(TEST_PROFILE)
1357 if test "x$with_profile4_x" = "xdefault"; then
1358 with_profile4_x=$with_profile4_x_default
1360 if test "x$with_monodroid" = "xdefault"; then
1361 with_monodroid=$with_monodroid_default
1363 if test "x$with_monotouch" = "xdefault"; then
1364 with_monotouch=$with_monotouch_default
1366 if test "x$with_monotouch_watch" = "xdefault"; then
1367 with_monotouch_watch=$with_monotouch_watch_default
1369 if test "x$with_monotouch_tv" = "xdefault"; then
1370 with_monotouch_tv=$with_monotouch_tv_default
1372 if test "x$with_bitcode" = "xdefault"; then
1373 with_bitcode=$with_bitcode_default
1375 if test "x$with_xammac" = "xdefault"; then
1376 with_xammac=$with_xammac_default
1378 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1379 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1381 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1382 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1384 if test "x$with_testing_aot_full" = "xdefault"; then
1385 with_testing_aot_full=$with_testing_aot_full_default
1387 if test "x$with_winaot" = "xdefault"; then
1388 with_winaot=$with_winaot_default
1390 if test "x$with_orbis" = "xdefault"; then
1391 with_orbis=$with_orbis_default
1393 if test "x$with_unreal" = "xdefault"; then
1394 with_unreal=$with_unreal_default
1396 if test "x$with_wasm" = "xdefault"; then
1397 with_wasm=$with_wasm_default
1401 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1402 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1403 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1404 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1405 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1406 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1407 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1408 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1409 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1410 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1411 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1412 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1413 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1414 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1415 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1416 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"])
1417 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1418 AM_CONDITIONAL(AOT_FULL_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"])
1419 AM_CONDITIONAL(AOT_FULL_INTERP_LLVM_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp_llvm"])
1420 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1422 default_profile=net_4_x
1423 if test -z "$INSTALL_MONODROID_TRUE"; then :
1424 default_profile=monodroid
1426 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1427 default_profile=monotouch
1429 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1430 default_profile=xammac
1432 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1433 default_profile=testing_aot_full_interp
1435 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1436 default_profile=testing_aot_hybrid
1438 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1439 default_profile=testing_aot_full
1441 if test -z "$INSTALL_WINAOT_TRUE"; then :
1442 default_profile=winaot
1444 if test -z "$INSTALL_ORBIS_TRUE"; then :
1445 default_profile=orbis
1447 if test -z "$INSTALL_UNREAL_TRUE"; then :
1448 default_profile=unreal
1450 if test -z "$INSTALL_WASM_TRUE"; then :
1451 default_profile=wasm
1453 if test -z "$INSTALL_4_x_TRUE"; then :
1454 default_profile=net_4_x
1456 DEFAULT_PROFILE=$default_profile
1457 AC_SUBST(DEFAULT_PROFILE)
1460 # End build profile configuration
1463 if test x$USE_NLS = xprofile_default; then
1465 AC_MSG_CHECKING([NLS used])
1467 # We make the default value for USE_NLS
1468 # "no" on OSX because it isn't available on most
1469 # default OSX installs. The most common configurations will
1470 # all disable it, so this saves us typing.
1471 if test x$host_darwin = xyes; then
1478 AC_MSG_RESULT([$USE_NLS])
1481 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1482 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1483 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1484 security, lldb, mdb, assert_messages, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1486 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1487 eval "mono_feature_disable_$feature='yes'"
1489 DISABLED_FEATURES=$enable_minimal
1490 disabled="Disabled: $enable_minimal"
1493 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1495 if test "x$mono_feature_disable_aot" = "xyes"; then
1496 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1497 enable_system_aot=no
1498 AC_MSG_NOTICE([Disabled AOT compiler])
1501 if test "x$mono_feature_disable_profiler" = "xyes"; then
1502 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1503 AC_MSG_NOTICE([Disabled support for the profiler])
1505 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1507 if test "x$mono_feature_disable_decimal" = "xyes"; then
1508 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1509 AC_MSG_NOTICE([Disabled support for decimal])
1512 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1513 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1514 AC_MSG_NOTICE([Disabled support for P/Invoke])
1517 if test "x$mono_feature_disable_debug" = "xyes"; then
1518 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1519 AC_MSG_NOTICE([Disabled support for runtime debugging])
1522 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1523 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1524 mono_feature_disable_reflection_emit_save=yes
1525 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1528 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1529 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1530 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1533 if test "x$mono_feature_disable_large_code" = "xyes"; then
1534 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1535 AC_MSG_NOTICE([Disabled support for large assemblies])
1538 if test "x$mono_feature_disable_logging" = "xyes"; then
1539 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1540 AC_MSG_NOTICE([Disabled support for logging])
1543 if test "x$mono_feature_disable_com" = "xyes"; then
1544 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1545 AC_MSG_NOTICE([Disabled COM support])
1548 if test "x$mono_feature_disable_ssa" = "xyes"; then
1549 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1550 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1553 if test "x$mono_feature_disable_generics" = "xyes"; then
1554 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1555 AC_MSG_NOTICE([Disabled Generics Support])
1558 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1559 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1560 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1563 if test "x$mono_feature_disable_portability" = "xyes"; then
1564 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1565 AC_MSG_NOTICE([Disabled IO Portability layer])
1568 if test "x$mono_feature_disable_attach" = "xyes"; then
1569 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1570 AC_MSG_NOTICE([Disabled agent attach])
1573 if test "x$mono_feature_disable_verifier" = "xyes"; then
1574 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1575 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1578 if test "x$mono_feature_disable_jit" = "xyes"; then
1579 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1580 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1583 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1585 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1586 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1587 AC_MSG_NOTICE([Disabled the interpreter])
1590 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1592 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1593 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1596 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1598 if test "x$mono_feature_disable_simd" = "xyes"; then
1599 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1600 AC_MSG_NOTICE([Disabled SIMD support])
1603 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1604 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1605 AC_MSG_NOTICE([Disabled Soft Debugger.])
1608 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1610 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1611 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1612 AC_MSG_NOTICE([Disabled Performance Counters.])
1614 if test "x$mono_feature_disable_normalization" = "xyes"; then
1615 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1616 AC_MSG_NOTICE([Disabled String normalization support.])
1619 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1620 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1621 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1622 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1625 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1626 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1627 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1630 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1631 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1632 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1635 if test "x$mono_feature_disable_remoting" = "xyes"; then
1636 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1637 AC_MSG_NOTICE([Disabled remoting])
1640 if test "x$mono_feature_disable_security" = "xyes"; then
1641 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1642 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1645 if test "x$mono_feature_disable_lldb" = "xyes"; then
1646 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1647 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1650 if test "x$mono_feature_disable_mdb" = "xyes"; then
1651 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1652 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1655 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1656 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1657 AC_MSG_NOTICE([Disabled assertion messages.])
1660 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1661 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1662 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1666 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1667 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1668 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1671 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1672 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1673 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1676 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1677 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1678 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1681 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1682 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1684 has_extension_module=no
1685 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1687 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1688 if test x$extension = xdefault ; then
1689 has_extension_module=yes;
1692 if test x$enable_extension_module = xyes; then
1693 has_extension_module=yes;
1697 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1699 if test x$has_extension_module != xno ; then
1700 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1701 AC_MSG_NOTICE([Enabling mono extension module.])
1705 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1707 AC_MSG_CHECKING(for visibility __attribute__)
1710 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1711 int main () { doit (); return 0; }
1714 have_visibility_hidden=yes
1717 have_visibility_hidden=no
1722 dnl Boehm GC configuration
1725 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1727 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1728 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1730 if test "x$support_boehm" = "xyes"; then
1732 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1733 if test x$enable_parallel_mark = xyes; then
1734 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1744 if test "x$support_boehm" = "xyes"; then
1748 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1749 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1750 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1752 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1754 if test x$target_win32 = xyes; then
1755 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1756 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1759 gc_msg="Included Boehm GC with typed GC"
1760 if test x$enable_parallel_mark = xyes; then
1761 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1762 gc_msg="$gc_msg and parallel mark"
1764 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1769 AC_MSG_WARN("External Boehm is no longer supported")
1773 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1777 AC_MSG_WARN("Compiling mono without GC.")
1778 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1779 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1783 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1787 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])
1788 if test "x$large_heap" = "xyes"; then
1789 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1792 AC_SUBST(LIBGC_CPPFLAGS)
1793 AC_SUBST(LIBGC_LIBS)
1794 AC_SUBST(LIBGC_STATIC_LIBS)
1796 AC_SUBST(BOEHM_DEFINES)
1799 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1802 dnl End of Boehm GC Configuration
1805 dnl *************************************
1806 dnl *** Checks for zero length arrays ***
1807 dnl *************************************
1808 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1816 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1819 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1822 dnl ***********************************
1823 dnl *** Checks for signals
1824 dnl ***********************************
1825 AC_CHECK_HEADERS(signal.h)
1826 AC_CHECK_FUNCS(sigaction)
1827 AC_CHECK_FUNCS(kill)
1828 AC_CHECK_FUNCS(signal)
1830 # signal() is declared inline in Android headers
1831 # so we need to workaround it by overriding the check.
1832 if test x$platform_android = xyes; then
1833 AC_DEFINE(HAVE_SIGNAL,1)
1836 dnl ***********************************
1837 dnl *** Checks for availability of GSS dependencies (krb5, gss.framework, etc)
1838 dnl ***********************************
1840 AC_MSG_CHECKING(for GSS/GSS.h)
1842 #include <GSS/GSS.h>
1846 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
1847 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1853 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
1855 #include <gssapi/gssapi_ext.h>
1864 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
1866 #include <gssapi/gssapi_ext.h>
1867 #include <gssapi/gssapi_krb5.h>
1868 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
1872 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1877 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
1879 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1880 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1882 if test x$host_win32 = xno; then
1883 dnl *************************************
1884 dnl *** Checks for time capabilities ***
1885 dnl *************************************
1887 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1888 AC_TRY_COMPILE([#include <time.h>], [
1889 const int foo = CLOCK_MONOTONIC;
1892 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1897 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1898 AC_TRY_COMPILE([#include <time.h>], [
1899 const int foo = CLOCK_MONOTONIC_COARSE;
1902 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1907 AC_MSG_CHECKING(for CLOCK_REALTIME)
1908 AC_TRY_COMPILE([#include <time.h>], [
1909 const int foo = CLOCK_REALTIME;
1912 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1917 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1918 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1919 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1920 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1921 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1922 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1924 dnl hires monotonic clock support
1925 AC_SEARCH_LIBS(clock_gettime, rt)
1926 AC_CHECK_FUNCS(clock_nanosleep)
1928 dnl dynamic loader support
1929 AC_CHECK_FUNC(dlopen, DL_LIB="",
1930 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1932 if test x$dl_support = xno; then
1933 AC_MSG_WARN([No dynamic loading support available])
1935 LIBS="$LIBS $DL_LIB"
1936 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1937 dnl from glib's configure.ac
1938 AC_CACHE_CHECK([for preceeding underscore in symbols],
1940 AC_TRY_RUN([#include <dlfcn.h>
1941 int mono_underscore_test (void) { return 42; }
1943 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1944 handle = dlopen ((void*)0, 0);
1946 f1 = dlsym (handle, "mono_underscore_test");
1947 f2 = dlsym (handle, "_mono_underscore_test");
1948 } return (!f2 || f1);
1950 [mono_cv_uscore=yes],
1951 [mono_cv_uscore=no],
1954 if test "x$mono_cv_uscore" = "xyes"; then
1955 MONO_DL_NEED_USCORE=1
1957 MONO_DL_NEED_USCORE=0
1959 AC_SUBST(MONO_DL_NEED_USCORE)
1960 AC_CHECK_FUNC(dlerror)
1963 dnl ******************************************************************
1964 dnl *** Checks for the IKVM JNI interface library ***
1965 dnl ******************************************************************
1966 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])
1969 if test x$with_ikvm_native = xyes; then
1970 ikvm_native_dir=ikvm-native
1971 jdk_headers_found="IKVM Native"
1974 AC_SUBST(ikvm_native_dir)
1976 AC_CHECK_HEADERS(execinfo.h)
1978 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1980 AC_CHECK_FUNCS(getgrgid_r)
1981 AC_CHECK_FUNCS(getgrnam_r)
1982 AC_CHECK_FUNCS(getresuid)
1983 AC_CHECK_FUNCS(setresuid)
1984 AC_CHECK_FUNCS(kqueue)
1985 AC_CHECK_FUNCS(backtrace_symbols)
1986 AC_CHECK_FUNCS(mkstemp)
1987 AC_CHECK_FUNCS(mmap)
1988 AC_CHECK_FUNCS(madvise)
1989 AC_CHECK_FUNCS(getrusage)
1990 AC_CHECK_FUNCS(getpriority)
1991 AC_CHECK_FUNCS(setpriority)
1992 AC_CHECK_FUNCS(dl_iterate_phdr)
1993 AC_CHECK_FUNCS(dladdr)
1994 AC_CHECK_FUNCS(sysconf)
1995 AC_CHECK_FUNCS(getrlimit)
1996 AC_CHECK_FUNCS(prctl)
1997 AC_CHECK_FUNCS(arc4random)
1998 AC_CHECK_FUNCS(nl_langinfo)
2000 AC_CHECK_FUNCS(sched_getaffinity)
2001 AC_CHECK_FUNCS(sched_setaffinity)
2002 AC_CHECK_FUNCS(sched_getcpu)
2004 if test x$platform_android != xyes; then
2005 AC_CHECK_FUNCS(getpwnam_r)
2006 AC_CHECK_FUNCS(getpwuid_r)
2009 AC_FUNC_STRERROR_R()
2011 dnl ****************************************************************
2012 dnl *** Check for sched_setaffinity from glibc versions before ***
2013 dnl *** 2.3.4. The older versions of the function only take 2 ***
2014 dnl *** parameters, not 3. ***
2016 dnl *** Because the interface change was not made in a minor ***
2017 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2018 dnl *** won't always indicate the interface sched_affinity has. ***
2019 dnl ****************************************************************
2020 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2021 AC_TRY_COMPILE([#include <sched.h>], [
2023 sched_setaffinity(0, &mask);
2025 # Yes, we have it...
2027 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2029 # We have the new, three-parameter version
2032 AC_TRY_COMPILE([#include <sched.h>], [
2033 CPU_COUNT((void *) 0);
2036 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2038 # We have the new, three-parameter version
2042 dnl ******************************************************************
2043 dnl *** Check for large file support ***
2044 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2045 dnl ******************************************************************
2047 # Check that off_t can represent 2**63 - 1 correctly, working around
2048 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2049 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2051 AC_DEFUN([LARGE_FILES], [
2052 large_CPPFLAGS=$CPPFLAGS
2053 CPPFLAGS="$CPPFLAGS $1"
2055 #include <sys/types.h>
2058 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2059 #define COMPILE_TIME_ASSERT(pred) \
2060 switch(0){case 0:case pred:;}
2061 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2064 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2065 large_CPPFLAGS="$large_CPPFLAGS $1"
2070 CPPFLAGS=$large_CPPFLAGS
2073 AC_MSG_CHECKING(if off_t is 64 bits wide)
2075 if test $large_offt = no; then
2076 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2077 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2079 if test $large_offt = no; then
2080 AC_MSG_WARN([No 64 bit file size support available])
2083 dnl *****************************
2084 dnl *** Checks for libsocket ***
2085 dnl *****************************
2086 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2090 dnl *****************************
2091 dnl *** Checks for libinotify ***
2092 dnl *****************************
2093 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2096 dnl *******************************
2097 dnl *** Checks for MSG_NOSIGNAL ***
2098 dnl *******************************
2099 AC_MSG_CHECKING(for MSG_NOSIGNAL)
2100 AC_TRY_COMPILE([#include <sys/socket.h>], [
2101 int f = MSG_NOSIGNAL;
2103 # Yes, we have it...
2105 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2107 # We'll have to use signals
2111 dnl *****************************
2112 dnl *** Checks for IPPROTO_IP ***
2113 dnl *****************************
2114 AC_MSG_CHECKING(for IPPROTO_IP)
2115 AC_TRY_COMPILE([#include <netinet/in.h>], [
2116 int level = IPPROTO_IP;
2118 # Yes, we have it...
2120 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2122 # We'll have to use getprotobyname
2126 dnl *******************************
2127 dnl *** Checks for IPPROTO_IPV6 ***
2128 dnl *******************************
2129 AC_MSG_CHECKING(for IPPROTO_IPV6)
2130 AC_TRY_COMPILE([#include <netinet/in.h>], [
2131 int level = IPPROTO_IPV6;
2133 # Yes, we have it...
2135 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2137 # We'll have to use getprotobyname
2141 dnl ******************************
2142 dnl *** Checks for IPPROTO_TCP ***
2143 dnl ******************************
2144 AC_MSG_CHECKING(for IPPROTO_TCP)
2145 AC_TRY_COMPILE([#include <netinet/in.h>], [
2146 int level = IPPROTO_TCP;
2148 # Yes, we have it...
2150 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2152 # We'll have to use getprotobyname
2156 dnl *****************************
2157 dnl *** Checks for SOL_IP ***
2158 dnl *****************************
2159 AC_MSG_CHECKING(for SOL_IP)
2160 AC_TRY_COMPILE([#include <netdb.h>], [
2163 # Yes, we have it...
2165 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2167 # We'll have to use getprotobyname
2171 dnl *****************************
2172 dnl *** Checks for SOL_IPV6 ***
2173 dnl *****************************
2174 AC_MSG_CHECKING(for SOL_IPV6)
2175 AC_TRY_COMPILE([#include <netdb.h>], [
2176 int level = SOL_IPV6;
2178 # Yes, we have it...
2180 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2182 # We'll have to use getprotobyname
2186 dnl *****************************
2187 dnl *** Checks for SOL_TCP ***
2188 dnl *****************************
2189 AC_MSG_CHECKING(for SOL_TCP)
2190 AC_TRY_COMPILE([#include <netdb.h>], [
2191 int level = SOL_TCP;
2193 # Yes, we have it...
2195 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2197 # We'll have to use getprotobyname
2201 dnl *****************************
2202 dnl *** Checks for IP_PKTINFO ***
2203 dnl *****************************
2204 AC_MSG_CHECKING(for IP_PKTINFO)
2205 AC_TRY_COMPILE([#include <linux/in.h>], [
2206 int level = IP_PKTINFO;
2208 # Yes, we have it...
2210 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2215 dnl *****************************
2216 dnl *** Checks for IPV6_PKTINFO ***
2217 dnl *****************************
2218 AC_MSG_CHECKING(for IPV6_PKTINFO)
2219 AC_TRY_COMPILE([#include <netdb.h>], [
2220 int level = IPV6_PKTINFO;
2222 # Yes, we have it...
2224 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2229 dnl **********************************
2230 dnl *** Checks for IP_DONTFRAG ***
2231 dnl **********************************
2232 AC_MSG_CHECKING(for IP_DONTFRAG)
2233 AC_TRY_COMPILE([#include <netinet/in.h>], [
2234 int level = IP_DONTFRAG;
2236 # Yes, we have it...
2238 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2243 dnl **********************************
2244 dnl *** Checks for IP_DONTFRAGMENT ***
2245 dnl **********************************
2246 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2247 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2248 int level = IP_DONTFRAGMENT;
2250 # Yes, we have it...
2252 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2257 dnl **********************************
2258 dnl *** Checks for IP_MTU_DISCOVER ***
2259 dnl **********************************
2260 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2261 AC_TRY_COMPILE([#include <linux/in.h>], [
2262 int level = IP_MTU_DISCOVER;
2264 # Yes, we have it...
2266 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2271 dnl **********************************
2272 dnl *** Checks for IP_PMTUDISC_DO ***
2273 dnl **********************************
2274 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2275 AC_TRY_COMPILE([#include <linux/in.h>], [
2276 int level = IP_PMTUDISC_DO;
2278 # Yes, we have it...
2280 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2285 dnl *********************************
2286 dnl *** Check for struct ip_mreqn ***
2287 dnl *********************************
2288 AC_MSG_CHECKING(for struct ip_mreqn)
2289 AC_TRY_COMPILE([#include <netinet/in.h>], [
2290 struct ip_mreqn mreq;
2291 mreq.imr_address.s_addr = 0;
2293 # Yes, we have it...
2295 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2297 # We'll just have to try and use struct ip_mreq
2299 AC_MSG_CHECKING(for struct ip_mreq)
2300 AC_TRY_COMPILE([#include <netinet/in.h>], [
2301 struct ip_mreq mreq;
2302 mreq.imr_interface.s_addr = 0;
2304 # Yes, we have it...
2306 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2308 # No multicast support
2313 dnl **********************************
2314 dnl *** Check for getaddrinfo ***
2315 dnl **********************************
2316 AC_MSG_CHECKING(for getaddrinfo)
2321 getaddrinfo(NULL,NULL,NULL,NULL);
2323 # Yes, we have it...
2325 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2330 dnl **********************************
2331 dnl *** Check for gethostbyname2_r ***
2332 dnl **********************************
2333 AC_MSG_CHECKING(for gethostbyname2_r)
2339 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2341 # Yes, we have it...
2343 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2348 dnl **********************************
2349 dnl *** Check for gethostbyname2 ***
2350 dnl **********************************
2351 AC_MSG_CHECKING(for gethostbyname2)
2356 gethostbyname2(NULL,0);
2358 # Yes, we have it...
2360 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2365 dnl **********************************
2366 dnl *** Check for gethostbyname ***
2367 dnl **********************************
2368 AC_MSG_CHECKING(for gethostbyname)
2373 gethostbyname(NULL);
2375 # Yes, we have it...
2377 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2382 dnl **********************************
2383 dnl *** Check for getprotobyname ***
2384 dnl **********************************
2385 AC_MSG_CHECKING(for getprotobyname)
2390 getprotobyname(NULL);
2392 # Yes, we have it...
2394 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2399 dnl **********************************
2400 dnl *** Check for getprotobyname_r ***
2401 dnl **********************************
2402 AC_MSG_CHECKING(for getprotobyname_r)
2407 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2409 # Yes, we have it...
2411 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2416 dnl **********************************
2417 dnl *** Check for getnameinfo ***
2418 dnl **********************************
2419 AC_MSG_CHECKING(for getnameinfo)
2424 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2426 # Yes, we have it...
2428 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2434 dnl **********************************
2435 dnl *** Check for inet_ntop ***
2436 dnl **********************************
2437 AC_MSG_CHECKING(for inet_ntop)
2440 #include <arpa/inet.h>
2442 inet_ntop (0, NULL, NULL, 0);
2444 # Yes, we have it...
2446 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2451 dnl *****************************
2452 dnl *** Checks for libnsl ***
2453 dnl *****************************
2454 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2456 AC_CHECK_FUNCS(inet_pton inet_aton)
2458 dnl *****************************
2459 dnl *** Checks for libxnet ***
2460 dnl *****************************
2463 AC_MSG_CHECKING(for Solaris XPG4 support)
2464 if test -f /usr/lib/libxnet.so; then
2465 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2466 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2467 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2474 if test "$GCC" = "yes"; then
2475 CFLAGS="$CFLAGS -Wno-char-subscripts"
2480 dnl *****************************
2481 dnl *** Checks for libpthread ***
2482 dnl *****************************
2483 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2484 # and libpthread does not exist
2488 dnl Haiku has pthread in libroot (libc equiv)
2489 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2492 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2495 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2498 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2501 AC_CHECK_HEADERS(pthread.h)
2502 AC_CHECK_HEADERS(pthread_np.h)
2503 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2504 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2505 AC_CHECK_FUNCS(pthread_kill)
2506 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2507 AC_TRY_COMPILE([ #include <pthread.h>], [
2508 pthread_mutexattr_t attr;
2509 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2514 AC_ERROR(Posix system lacks support for recursive mutexes)
2516 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2517 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2518 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2519 AC_CHECK_FUNCS(mincore mlock munlock)
2521 dnl ***********************************
2522 dnl *** Checks for working __thread ***
2523 dnl ***********************************
2524 AC_MSG_CHECKING(for working __thread)
2525 if test "x$with_tls" != "x__thread"; then
2526 AC_MSG_RESULT(disabled)
2527 elif test "x$cross_compiling" = "xyes"; then
2528 AC_MSG_RESULT(cross compiling, assuming yes)
2531 #if defined(__APPLE__) && defined(__clang__)
2532 #error "__thread does not currently work with clang on Mac OS X"
2535 #include <pthread.h>
2537 static int res1, res2;
2539 void thread_main (void *arg)
2554 pthread_create (&t1, NULL, thread_main, 1);
2555 pthread_create (&t2, NULL, thread_main, 2);
2557 pthread_join (t1, NULL);
2558 pthread_join (t2, NULL);
2560 return !(res1 + res2 == 2);
2570 dnl **************************************
2571 dnl *** Checks for working sigaltstack ***
2572 dnl **************************************
2573 AC_MSG_CHECKING(for working sigaltstack)
2574 if test "x$with_sigaltstack" != "xyes"; then
2575 AC_MSG_RESULT(disabled)
2576 elif test "x$cross_compiling" = "xyes"; then
2577 AC_MSG_RESULT(cross compiling, assuming yes)
2584 #include <pthread.h>
2585 #include <sys/wait.h>
2586 #if defined(__FreeBSD__) || defined(__NetBSD__)
2587 #define SA_STACK SA_ONSTACK
2590 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2595 volatile char*__ptr = NULL;
2597 loop (void *ignored)
2606 struct sigaction sa;
2609 pthread_attr_t attr;
2611 sa.sa_sigaction = sigsegv_signal_handler;
2612 sigemptyset (&sa.sa_mask);
2613 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2614 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2615 perror ("sigaction");
2619 /* x86 darwin deliver segfaults using SIGBUS */
2620 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2621 perror ("sigaction");
2624 sas.ss_sp = malloc (SIGSTKSZ);
2625 sas.ss_size = SIGSTKSZ;
2627 if (sigaltstack (&sas, NULL) == -1) {
2628 perror ("sigaltstack");
2632 pthread_attr_init (&attr);
2633 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2634 printf ("pthread_create\n");
2658 for (i = 0; i < 300; ++i) {
2659 waitpid (son, &status, WNOHANG);
2660 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2665 kill (son, SIGKILL);
2671 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2678 dnl ********************************
2679 dnl *** Checks for semaphore lib ***
2680 dnl ********************************
2681 # 'Real Time' functions on Solaris
2682 # posix4 on Solaris 2.6
2683 # pthread (first!) on Linux
2684 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2686 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2687 AC_CHECK_FUNCS(shm_open)
2689 dnl ********************************
2690 dnl *** Checks for timezone stuff **
2691 dnl ********************************
2692 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2698 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2699 if test $ac_cv_struct_tm_gmtoff = yes; then
2700 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2702 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2707 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2708 if test $ac_cv_var_timezone = yes; then
2709 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2711 AC_ERROR(unable to find a way to determine timezone)
2715 dnl *********************************
2716 dnl *** Checks for math functions ***
2717 dnl *********************************
2718 AC_SEARCH_LIBS(sqrtf, m)
2720 dnl ****************************************************************
2721 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2722 dnl *** have it in the library (duh)) ***
2723 dnl ****************************************************************
2724 AC_CHECK_FUNCS(poll)
2726 dnl **********************************
2728 dnl **********************************
2729 AC_CHECK_HEADERS(sys/epoll.h)
2731 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2732 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2733 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2738 AC_CHECK_HEADERS(sys/event.h)
2739 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2741 dnl **************************************
2742 dnl * Darwin has a race that prevents us from using reliably:
2743 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2744 dnl * Since kqueue is mostly used for scaling large web servers,
2745 dnl * and very few folks run Mono on large web servers on OSX, falling
2747 dnl **************************************
2748 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2749 if test "x$host_darwin" = "xno"; then
2750 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2754 dnl ******************************
2755 dnl *** Checks for SIOCGIFCONF ***
2756 dnl ******************************
2757 AC_CHECK_HEADERS(sys/ioctl.h)
2758 AC_CHECK_HEADERS(net/if.h, [], [],
2760 #ifdef HAVE_SYS_TYPES_H
2761 # include <sys/types.h>
2763 #ifdef HAVE_SYS_SOCKET_H
2764 # include <sys/socket.h>
2767 AC_MSG_CHECKING(for ifreq)
2770 #include <sys/ioctl.h>
2778 x = (void *) &ifr->ifr_addr;
2781 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2785 dnl **********************************
2786 dnl *** Checks for sin_len ***
2787 dnl **********************************
2788 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2790 #include <netinet/in.h>
2792 struct sockaddr_in saddr;
2793 saddr.sin_len = sizeof (saddr);
2796 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2800 dnl **********************************
2801 dnl *** Checks for sin6_len ***
2802 dnl **********************************
2803 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2805 #include <netinet/in.h>
2807 struct sockaddr_in6 saddr6;
2808 saddr6.sin6_len = sizeof (saddr6);
2811 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2815 dnl **********************************
2816 dnl *** Check for getifaddrs ***
2817 dnl **********************************
2818 AC_MSG_CHECKING(for getifaddrs)
2821 #include <sys/types.h>
2822 #include <sys/socket.h>
2823 #include <ifaddrs.h>
2827 # Yes, we have it...
2829 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2833 dnl **********************************
2834 dnl *** Check for if_nametoindex ***
2835 dnl **********************************
2836 AC_MSG_CHECKING(for if_nametoindex)
2839 #include <sys/types.h>
2840 #include <sys/socket.h>
2843 if_nametoindex(NULL);
2845 # Yes, we have it...
2847 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2851 dnl **********************************
2852 dnl *** Check for access ***
2853 dnl **********************************
2854 AC_MSG_CHECKING(for access)
2860 # Yes, we have it...
2862 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2867 dnl **********************************
2868 dnl *** Checks for proclib ***
2869 dnl **********************************
2870 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.)])
2871 dnl **********************************
2872 dnl *** Checks for MonoPosixHelper ***
2873 dnl **********************************
2874 AC_CHECK_HEADERS(checklist.h)
2875 AC_CHECK_HEADERS(pathconf.h)
2876 AC_CHECK_HEADERS(fstab.h)
2877 AC_CHECK_HEADERS(attr/xattr.h)
2878 AC_CHECK_HEADERS(sys/extattr.h)
2879 AC_CHECK_HEADERS(sys/sendfile.h)
2880 AC_CHECK_HEADERS(sys/statvfs.h)
2881 AC_CHECK_HEADERS(sys/statfs.h)
2882 AC_CHECK_HEADERS(sys/vfstab.h)
2883 AC_CHECK_HEADERS(sys/xattr.h)
2884 AC_CHECK_HEADERS(sys/mman.h)
2885 AC_CHECK_HEADERS(sys/param.h)
2886 AC_CHECK_HEADERS(sys/mount.h, [], [],
2888 #ifdef HAVE_SYS_PARAM_H
2889 # include <sys/param.h>
2892 AC_CHECK_HEADERS(sys/mount.h)
2893 AC_CHECK_FUNCS(confstr)
2894 AC_CHECK_FUNCS(seekdir telldir)
2895 AC_CHECK_FUNCS(getdomainname)
2896 AC_CHECK_FUNCS(setdomainname)
2897 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2898 AC_CHECK_FUNCS(setgroups)
2899 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2900 AC_CHECK_FUNCS(getfsstat)
2901 AC_CHECK_FUNCS(lutimes futimes)
2902 AC_CHECK_FUNCS(mremap)
2903 AC_CHECK_FUNCS(remap_file_pages)
2904 AC_CHECK_FUNCS(posix_fadvise)
2905 AC_CHECK_FUNCS(posix_fallocate)
2906 AC_CHECK_FUNCS(posix_madvise)
2907 AC_CHECK_FUNCS(vsnprintf)
2908 AC_CHECK_FUNCS(sendfile)
2909 AC_CHECK_FUNCS(gethostid sethostid)
2910 AC_CHECK_FUNCS(sethostname)
2911 AC_CHECK_FUNCS(statfs)
2912 AC_CHECK_FUNCS(fstatfs)
2913 AC_CHECK_FUNCS(statvfs)
2914 AC_CHECK_FUNCS(fstatvfs)
2915 AC_CHECK_FUNCS(stime)
2916 AC_CHECK_FUNCS(ttyname_r)
2917 AC_CHECK_FUNCS(psignal)
2918 AC_CHECK_FUNCS(getlogin_r)
2919 AC_CHECK_FUNCS(lockf)
2920 AC_CHECK_FUNCS(swab)
2921 AC_CHECK_FUNCS(setusershell endusershell)
2922 AC_CHECK_FUNCS(futimens utimensat)
2923 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2924 AC_CHECK_FUNCS(readv writev preadv pwritev)
2925 AC_CHECK_FUNCS(setpgid)
2926 AC_CHECK_FUNCS(system)
2927 AC_CHECK_FUNCS(fork execv execve)
2928 AC_CHECK_FUNCS(waitpid)
2929 AC_CHECK_FUNCS(accept4)
2930 AC_CHECK_FUNCS(localtime_r)
2931 AC_CHECK_FUNCS(mkdtemp)
2932 AC_CHECK_SIZEOF(size_t)
2933 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2934 [#include <sys/types.h>
2935 #include <sys/stat.h>
2936 #include <unistd.h>])
2937 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2938 [#include <sys/types.h>
2939 #include <sys/stat.h>
2940 #include <unistd.h>])
2941 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2942 [#include <sys/time.h>])
2943 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2944 [#include <sys/socket.h>])
2945 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2946 [#include <unistd.h>
2947 #include <fcntl.h>])
2948 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2949 [#include <sys/uio.h>])
2950 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2951 [#include <sys/socket.h>])
2952 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2953 [#include <sys/poll.h>])
2954 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2955 [#include <sys/socket.h>])
2956 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2957 [#include <sys/socket.h>])
2958 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2959 [#include <netinet/in.h>])
2960 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2961 [#include <netinet/in.h>])
2962 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2963 [#include <sys/un.h>])
2964 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2965 [#include <sys/types.h>
2966 #include <sys/stat.h>
2967 #include <unistd.h>])
2968 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2969 [#include <time.h>])
2970 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2971 [#include <sys/time.h>
2972 #include <sys/types.h>
2973 #include <utime.h>])
2974 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2975 [#include <sys/time.h>])
2976 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2977 [#include <sys/types.h>
2978 #include <utime.h>])
2980 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2981 [#include <sys/types.h>
2982 #include <dirent.h>])
2984 [struct passwd.pw_gecos],,,
2985 [#include <sys/types.h>
2988 [struct statfs.f_flags],,,
2989 [#include <sys/types.h>
2990 #include <sys/vfs.h>])
2992 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2993 [#include <sys/types.h>
2994 #include <sys/stat.h>
2995 #include <unistd.h>])
2997 dnl Favour xattr through glibc, but use libattr if we have to
2998 AC_CHECK_FUNC(lsetxattr, ,
2999 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3003 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3005 [struct kinfo_proc.kp_proc],,,
3006 [#include <sys/types.h>
3007 #include <sys/param.h>
3008 #include <sys/sysctl.h>
3009 #include <sys/proc.h>
3012 dnl *********************************
3013 dnl *** Checks for Windows compilation ***
3014 dnl *********************************
3015 AC_CHECK_HEADERS(sys/time.h)
3016 AC_CHECK_HEADERS(sys/param.h)
3017 AC_CHECK_HEADERS(dirent.h)
3019 dnl ******************************************
3020 dnl *** Checks for OSX and iOS compilation ***
3021 dnl ******************************************
3022 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3024 dnl *********************************
3025 dnl *** Check for Console 2.0 I/O ***
3026 dnl *********************************
3027 AC_CHECK_HEADERS([curses.h])
3028 AC_CHECK_HEADERS([term.h], [], [],
3033 AC_CHECK_HEADERS([termios.h])
3035 dnl *********************************
3036 dnl *** Checks for random ***
3037 dnl *********************************
3038 if test x$host_darwin = xno; then
3039 AC_CHECK_HEADERS(sys/random.h)
3040 AC_CHECK_FUNCS(getrandom getentropy)
3043 dnl *********************************
3044 dnl *** Checks for Mono.Native ***
3045 dnl *********************************
3047 AC_MSG_CHECKING(for linux/in.h)
3049 #include <sys/socket.h>
3050 #include <linux/in.h>
3054 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3059 AC_MSG_CHECKING(for struct in_pktinfo)
3061 #ifdef HAVE_LINUX_IN_H
3062 #include <sys/socket.h>
3063 #include <linux/in.h>
3065 #include <netinet/in.h>
3068 struct in_pktinfo pktinfo;
3071 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3076 AC_MSG_CHECKING(for struct ip_mreqn)
3079 #include <sys/socket.h>
3080 #include <linux/in.h>
3082 #include <netinet/in.h>
3085 struct ip_mreqn mreqn;
3088 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3093 if test x$host_darwin = xno; then
3094 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3097 if test x$mono_native_platform_ios = xno; then
3098 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3099 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3100 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3103 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3104 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3105 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3106 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3107 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3108 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3109 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3110 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3111 AC_CHECK_FUNC(posix_fadvise, [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
3112 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3113 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3114 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3115 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3116 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3117 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3118 AC_CHECK_FUNC(arc4random, [AC_DEFINE(HAVE_ARC4RANDOM, 1, [arc4random])])
3119 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3120 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3121 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3123 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3124 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3126 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>]])
3127 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>]])
3128 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>]])
3129 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>]])
3130 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3131 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3132 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3134 AC_MSG_CHECKING(for struct statfs)
3136 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3137 #include <sys/mount.h>
3139 #include <sys/statfs.h>
3145 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3150 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3151 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3154 AC_MSG_CHECKING(for readdir_r)
3159 struct dirent* entry;
3160 struct dirent* result;
3161 readdir_r(dir, entry, &result);
3164 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3169 AC_MSG_CHECKING(for kevent with void *data)
3171 #include <sys/types.h>
3172 #include <sys/event.h>
3174 struct kevent event;
3176 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3179 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3184 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3185 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3187 AC_MSG_CHECKING(for sendfile with 4 arguments)
3189 #include <sys/sendfile.h>
3191 int result = sendfile(0, 0, 0, 0);
3194 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3199 AC_MSG_CHECKING(for sendfile with 6 arguments)
3202 #include <sys/types.h>
3203 #include <sys/socket.h>
3204 #include <sys/uio.h>
3206 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3209 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3214 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3215 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3216 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3217 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3219 ORIG_CFLAGS="$CFLAGS"
3220 CFLAGS="-Werror -Wsign-conversion"
3222 AC_MSG_CHECKING(for getnameinfo with signed flags)
3224 #include <sys/types.h>
3227 const struct sockaddr *addr;
3234 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3237 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3242 CFLAGS="$ORIG_CFLAGS"
3244 if test "x$host_linux" = "xyes"; then
3245 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3247 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3250 ORIG_CFLAGS="$CFLAGS"
3251 CFLAGS="-Werror -Wsign-conversion"
3253 AC_MSG_CHECKING(for bind with unsigned addrlen)
3255 #include <sys/socket.h>
3258 struct sockaddr* addr;
3260 bind(fd, addr, addrLen);
3263 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3268 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3270 #include <netinet/in.h>
3271 #include <netinet/tcp.h>
3273 struct ipv6_mreq opt;
3274 unsigned int index = 0;
3275 opt.ipv6mr_interface = index;
3278 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3283 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3285 #include <sys/inotify.h>
3289 int result = inotify_rm_watch(fd, wd);
3292 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3297 CFLAGS="$ORIG_CFLAGS"
3299 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3300 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3304 #include <sys/mman.h>
3310 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3314 shm_unlink("/mono_configure_shm_open");
3316 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3317 // on at least the current version of Mac OS X
3319 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3326 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3332 AC_MSG_CHECKING(for getpriority with int who)
3334 #include <sys/resource.h>
3338 int result = getpriority(which, who);
3341 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3346 AC_MSG_CHECKING(for kevent with int parameters)
3348 #include <sys/types.h>
3349 #include <sys/event.h>
3352 const struct kevent* chagelist;
3354 struct kevent* eventlist;
3356 const struct timespec* timeout;
3357 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3360 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3365 ORIG_CFLAGS="$CFLAGS"
3366 CFLAGS="-Werror -Wimplicit-function-declaration"
3368 AC_MSG_CHECKING(for mkstemps)
3376 int result = mkstemps(template, suffixlen);
3379 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3385 CFLAGS="$ORIG_CFLAGS"
3387 if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3388 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3391 AC_MSG_CHECKING(for tcp/var.h)
3393 #include <sys/types.h>
3394 #include <sys/socketvar.h>
3395 #include <netinet/ip.h>
3396 #include <netinet/tcp.h>
3397 #include <netinet/tcp_var.h>
3401 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3406 AC_CHECK_HEADERS([sys/cdefs.h])
3408 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3410 #ifdef HAVE_SYS_CDEFS_H
3411 #include <sys/cdefs.h>
3413 #include <netinet/tcp.h>
3415 int result = TCP_ESTABLISHED;
3418 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3423 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3425 AC_MSG_CHECKING(for struct rt_msghdr)
3427 #include <sys/types.h>
3428 #include <net/route.h>
3433 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3438 AC_CHECK_HEADERS([sys/sysctl.h])
3439 AC_CHECK_HEADERS([linux/rtnetlink.h])
3441 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3442 AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3443 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3445 ORIG_CFLAGS="$CFLAGS"
3446 CFLAGS="-Werror -Weverything"
3448 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3452 size_t namelen = 20;
3454 int result = getdomainname(name, namelen);
3457 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3462 CFLAGS="$ORIG_CFLAGS"
3464 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3465 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3466 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3468 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
3469 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3470 elif test "x$host_linux" = "xyes"; then
3471 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3474 AC_CHECK_HEADERS([crt_externs.h])
3476 AC_MSG_CHECKING(for _NSGetEnviron)
3478 #include <crt_externs.h>
3480 char **result = *(_NSGetEnviron());
3483 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3488 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3491 dnl *********************************
3492 dnl *** Checks for Windows compilation ***
3493 dnl *********************************
3494 AC_CHECK_HEADERS(winternl.h)
3496 jdk_headers_found=no
3497 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3498 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3499 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3500 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3501 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3502 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3503 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3505 dnl *********************************
3506 dnl *** Check for struct ip_mreqn ***
3507 dnl *********************************
3508 AC_MSG_CHECKING(for struct ip_mreqn)
3509 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3510 struct ip_mreqn mreq;
3511 mreq.imr_address.s_addr = 0;
3513 # Yes, we have it...
3515 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3517 # We'll just have to try and use struct ip_mreq
3519 AC_MSG_CHECKING(for struct ip_mreq)
3520 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3521 struct ip_mreq mreq;
3522 mreq.imr_interface.s_addr = 0;
3524 # Yes, we have it...
3526 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3528 # No multicast support
3533 dnl **********************************
3534 dnl *** Check for getaddrinfo ***
3535 dnl **********************************
3536 AC_MSG_CHECKING(for getaddrinfo)
3539 #include <winsock2.h>
3540 #include <ws2tcpip.h>
3542 getaddrinfo(NULL,NULL,NULL,NULL);
3544 # Yes, we have it...
3546 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3551 dnl **********************************
3552 dnl *** Check for gethostbyname ***
3553 dnl **********************************
3554 AC_MSG_CHECKING(for gethostbyname)
3557 #include <winsock2.h>
3558 #include <ws2tcpip.h>
3560 gethostbyname(NULL);
3562 # Yes, we have it...
3564 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3569 dnl **********************************
3570 dnl *** Check for getprotobyname ***
3571 dnl **********************************
3572 AC_MSG_CHECKING(for getprotobyname)
3575 #include <winsock2.h>
3576 #include <ws2tcpip.h>
3578 getprotobyname(NULL);
3580 # Yes, we have it...
3582 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3587 dnl **********************************
3588 dnl *** Check for getnameinfo ***
3589 dnl **********************************
3590 AC_MSG_CHECKING(for getnameinfo)
3593 #include <winsock2.h>
3594 #include <ws2tcpip.h>
3596 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3598 # Yes, we have it...
3600 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3605 dnl **********************************
3606 dnl *** Check for inet_ntop ***
3607 dnl **********************************
3608 AC_MSG_CHECKING(for inet_ntop)
3611 #include <winsock2.h>
3612 #include <ws2tcpip.h>
3614 inet_ntop (0, NULL, NULL, 0);
3616 # Yes, we have it...
3618 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3623 dnl **********************************
3624 dnl *** Check for inet_pton ***
3625 dnl **********************************
3626 AC_MSG_CHECKING(for inet_pton)
3629 #include <winsock2.h>
3630 #include <ws2tcpip.h>
3635 inet_pton (0, NULL, NULL);
3637 # Yes, we have it...
3639 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3644 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3645 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3646 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3647 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3648 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3649 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3650 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3654 AC_MSG_CHECKING(for socklen_t)
3656 #include <sys/types.h>
3657 #include <sys/socket.h>
3661 ac_cv_c_socklen_t=yes
3662 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3668 AC_CHECK_FUNCS(execvp)
3670 dnl ****************************
3671 dnl *** Look for /dev/random ***
3672 dnl ****************************
3674 AC_MSG_CHECKING([if usage of random device is requested])
3675 AC_ARG_ENABLE(dev-random,
3676 [ --disable-dev-random disable the use of the random device (enabled by default)],
3677 try_dev_random=$enableval, try_dev_random=yes)
3679 AC_MSG_RESULT($try_dev_random)
3683 dnl IBM i does not have /dev/random, use unblocking only
3686 NAME_DEV_RANDOM="/dev/urandom"
3689 dnl Win32 does not have /dev/random, they have their own method...
3691 *-mingw*|*-*-cygwin*)
3692 ac_cv_have_dev_random=no
3695 dnl Everywhere else, it's /dev/random
3698 NAME_DEV_RANDOM="/dev/random"
3702 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3704 dnl Now check if the device actually exists
3706 if test "x$try_dev_random" = "xyes"; then
3707 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3708 [if test -r "$NAME_DEV_RANDOM" ; then
3709 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3710 if test "x$ac_cv_have_dev_random" = "xyes"; then
3711 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3714 AC_MSG_CHECKING(for random device)
3715 ac_cv_have_dev_random=no
3716 AC_MSG_RESULT(has been disabled)
3719 if test "x$host_win32" = "xyes"; then
3720 AC_DEFINE(HAVE_CRYPT_RNG)
3723 if test "x$ac_cv_have_dev_random" = "xno" \
3724 && test "x$host_win32" = "xno"; then
3727 *** A system-provided entropy source was not found on this system.
3728 *** Because of this, the System.Security.Cryptography random number generator
3729 *** will throw a NotImplemented exception.
3731 *** If you are seeing this message, and you know your system DOES have an
3732 *** entropy collection in place, please report an issue on GitHub and
3733 *** provide information about the system and how to access the random device.
3735 *** Otherwise you can install either egd or prngd and set the environment
3736 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3740 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)
3742 AC_MSG_CHECKING([if big-arrays are to be enabled])
3743 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)
3744 if test "x$enable_big_arrays" = "xyes" ; then
3745 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3746 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3748 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3751 AC_MSG_RESULT($enable_big_arrays)
3757 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3759 if test "x$enable_dtrace" = "xyes"; then
3760 if test "x$has_dtrace" = "xno"; then
3761 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3763 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3764 if test "x$DTRACE" = "xno"; then
3765 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3767 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3768 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3774 if test "x$enable_dtrace" = "xyes"; then
3775 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3777 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3780 DTRACEFLAGS="-arch ppc64"
3783 DTRACEFLAGS="-arch x86_64"
3792 DTRACEFLAGS="-arch ppc"
3795 DTRACEFLAGS="-arch i386"
3802 AC_SUBST(DTRACEFLAGS)
3808 AC_CHECK_HEADERS([sys/sdt.h])
3810 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3811 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3813 dnl **************************
3814 dnl *** AOT cross offsets ***
3815 dnl **************************
3817 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3818 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3824 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3825 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3826 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)
3827 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3828 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3830 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3832 if test "x$enable_llvm" = "xdefault"; then
3833 enable_llvm=$enable_llvm_default
3836 enable_llvm_msvc_only="no"
3837 if test "x$enable_llvm" = "xyes"; then
3838 if test "x$host_win32" = "xyes"; then
3839 if test "x$cross_compiling" = "xno"; then
3842 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
3843 enable_llvm_msvc_only="yes"
3846 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
3850 if test "x$enable_loadedllvm" = "xyes"; then
3851 AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
3852 enable_loadedllvm=no
3858 if test "x$enable_llvm" = "xyes"; then
3859 if test "x$with_llvm" != "x"; then
3860 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3861 if test x$host_win32 = xyes; then
3862 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
3864 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3865 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3868 if test x$host_win32 = xyes; then
3869 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
3871 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3873 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3878 LLVM_CODEGEN_LIBS="x86codegen"
3881 LLVM_CODEGEN_LIBS="armcodegen"
3884 LLVM_CODEGEN_LIBS="aarch64codegen"
3887 LLVM_CODEGEN_LIBS="powerpccodegen"
3890 if test "x$host" != "x$target"; then
3891 # No need for jit libs
3895 AC_SUBST(LLVM_CODEGEN_LIBS)
3896 AC_SUBST(EXTERNAL_LLVM_CONFIG)
3898 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
3899 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
3900 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
3902 if test "x$enable_llvm_msvc_only" != "xyes"; then
3903 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3905 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
3909 # AC_DEFINE necessary for correct restore behavior on Linux
3910 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3911 if test "x$internal_llvm" != "xno"; then
3912 if test "x$enable_llvm_msvc_only" != "xyes"; then
3913 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
3915 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
3919 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3920 if test "x$enable_llvm_asserts" != "xno"; then
3921 if test "x$enable_llvm_msvc_only" != "xyes"; then
3922 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
3924 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
3928 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
3930 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
3931 if test "x$enable_loadedllvm" = "xyes"; then
3932 if test "x$enable_llvm_msvc_only" != "xyes"; then
3933 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3937 if test "x$enable_llvm" = "xyes"; then
3938 enable_llvm_runtime=yes
3941 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
3942 if test "x$enable_llvm_runtime" = "xyes"; then
3943 if test "x$enable_llvm_msvc_only" != "xyes"; then
3944 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3946 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
3951 ACCESS_UNALIGNED="yes"
3955 SQLITE="libsqlite.so.0"
3956 SQLITE3="libsqlite3.so.0"
3958 GDKX11="libgdk-x11-2.0.so.0"
3959 GTKX11="libgtk-x11-2.0.so.0"
3960 XINERAMA="libXinerama.so.1"
3962 sizeof_register="SIZEOF_VOID_P"
3965 boehm_supported=true
3974 ACCESS_UNALIGNED="no"
3981 ACCESS_UNALIGNED="no"
3983 AC_MSG_CHECKING(for mips n32)
3985 #if _MIPS_SIM != _ABIN32
4002 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4007 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4008 # int astruct __attribute__ ((visibility ("hidden")));
4011 # void *p = &astruct;
4013 # gcc -fPIC --shared -o libfoo.so foo.c
4015 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4016 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4017 have_visibility_hidden=no
4020 have_visibility_hidden=no
4031 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4038 openbsd*|freebsd*|kfreebsd-gnu*)
4045 x86_64-*-* | amd64-*-*)
4048 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4049 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4056 BTLS_PLATFORM=x86_64
4057 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4062 BTLS_PLATFORM=x86_64
4063 boehm_supported=false
4065 openbsd*|freebsd*|kfreebsd-gnu*)
4068 BTLS_PLATFORM=x86_64
4072 BTLS_PLATFORM=x86_64
4077 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4083 ACCESS_UNALIGNED="no"
4090 if test x"$GCC" = xyes; then
4091 # We don't support v8 cpus
4092 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4094 if test x"$AR" = xfalse; then
4095 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4098 *-mingw*|*-*-cygwin*)
4099 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4100 have_visibility_hidden=no
4103 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4104 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4105 powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4106 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4108 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4109 if ! (echo $CC | grep -q -- 'clang'); then
4110 CFLAGS="$CFLAGS -mminimal-toc"
4114 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4120 BTLS_PLATFORM=powerpc
4121 dnl on AIX/PASE, shared libraries can be inside archives
4122 dnl if they are, we specify them by lib.a(lib.so)
4123 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4124 LIBC="libc.a(shr_64.o)"
4125 INTL="libintl.a(libintl.so.8)"
4129 BTLS_PLATFORM=powerpc
4138 ACCESS_UNALIGNED="no"
4139 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4145 ACCESS_UNALIGNED="no"
4146 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4151 ACCESS_UNALIGNED="no"
4153 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4156 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4158 arm*-linux*-gnueabi)
4159 BTLS_PLATFORM=armsoft
4166 ACCESS_UNALIGNED="no"
4167 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4170 # https://lkml.org/lkml/2012/7/15/133
4173 boehm_supported=false
4176 BTLS_PLATFORM=aarch64
4177 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4182 ACCESS_UNALIGNED="yes"
4185 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4192 BTLS_PLATFORM=riscv32
4194 boehm_supported=false
4201 BTLS_PLATFORM=riscv64
4203 boehm_supported=false
4209 if test "x$host" != "x$target"; then
4210 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4212 enable_support_build=no
4214 # Can't use tls, since it depends on the runtime detection of tls offsets
4215 # in mono-compiler.h
4222 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4226 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4230 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4234 powerpc64-ps3-linux-gnu)
4236 arch_target=powerpc64
4237 AC_DEFINE(TARGET_PS3, 1, [...])
4238 # It would be better to just use TARGET_POWERPC64, but lots of code already
4240 AC_DEFINE(__mono_ppc64__, 1, [...])
4241 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4243 target_byte_order=G_BIG_ENDIAN
4245 powerpc64-xbox360-linux-gnu)
4247 arch_target=powerpc64
4248 AC_DEFINE(TARGET_XBOX360, 1, [...])
4249 # It would be better to just use TARGET_POWERPC64, but lots of code already
4252 target_byte_order=G_BIG_ENDIAN
4256 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4260 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4273 AC_DEFINE(TARGET_PS4, 1, [...])
4274 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4275 CPPFLAGS="$CPPFLAGS"
4286 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4287 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4294 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4295 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4301 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4309 AC_DEFINE(TARGET_ANDROID, 1, [...])
4316 AC_DEFINE(TARGET_WASM, 1, [...])
4320 AC_DEFINE(TARGET_X86, 1, [...])
4324 AC_DEFINE(TARGET_AMD64, 1, [...])
4328 AC_DEFINE(TARGET_ARM, 1, [...])
4330 ACCESS_UNALIGNED="no"
4333 AC_DEFINE(TARGET_ARM64, 1, [...])
4337 AC_DEFINE(TARGET_POWERPC, 1, [...])
4340 AC_DEFINE(TARGET_POWERPC, 1, [...])
4341 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4344 AC_DEFINE(TARGET_S390X, 1, [...])
4347 AC_DEFINE(TARGET_MIPS, 1, [...])
4350 AC_DEFINE(TARGET_SPARC, 1, [...])
4353 AC_DEFINE(TARGET_SPARC64, 1, [...])
4356 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4357 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4360 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4361 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4366 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4367 target_sizeof_void_p=4
4370 target_sizeof_void_p=8
4373 AC_MSG_ERROR([unknown target])
4379 AC_DEFINE(HOST_WASM, 1, [...])
4382 AC_DEFINE(HOST_X86, 1, [...])
4385 AC_DEFINE(HOST_AMD64, 1, [...])
4388 AC_DEFINE(HOST_ARM, 1, [...])
4391 AC_DEFINE(HOST_ARM64, 1, [...])
4394 AC_DEFINE(HOST_POWERPC, 1, [...])
4397 AC_DEFINE(HOST_POWERPC, 1, [...])
4398 AC_DEFINE(HOST_POWERPC64, 1, [...])
4401 AC_DEFINE(HOST_S390X, 1, [...])
4404 AC_DEFINE(HOST_MIPS, 1, [...])
4407 AC_DEFINE(HOST_SPARC, 1, [...])
4410 AC_DEFINE(HOST_SPARC64, 1, [...])
4413 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4414 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4417 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4418 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4422 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4424 X86 | AMD64 | ARM | ARM64)
4425 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4429 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4430 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4436 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4437 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4439 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4441 if test "x$enable_vtune" = "xyes"; then
4442 if test "x$with_vtune" = "x"; then
4443 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4445 VTUNE_PATH=$with_vtune
4447 VTUNE_INCLUDE=$VTUNE_PATH/include
4450 VTUNE_LIB=$VTUNE_PATH/lib32
4453 VTUNE_LIB=$VTUNE_PATH/lib64
4456 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4459 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4460 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4462 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4463 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4466 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4467 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4469 AC_SUBST(VTUNE_LIBS)
4470 AC_SUBST(VTUNE_CFLAGS)
4472 dnl Use GCC atomic ops if they work on the target.
4473 if test x$GCC = "xyes"; then
4475 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4476 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4481 if test "x$target_mach" = "xyes"; then
4483 if test "x$TARGET_SYS" = "xWATCHOS"; then
4484 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4485 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4486 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4488 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4489 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4490 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4491 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4495 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4496 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4497 #error fail this for ios
4500 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4501 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4502 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4505 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4506 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4507 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4512 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4515 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4517 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4519 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4520 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4521 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4522 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4524 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4527 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4529 if test "x$sizeof_register" = "x4"; then
4530 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4531 elif test "x$sizeof_register" = "x8"; then
4532 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4534 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4537 if test "x$have_visibility_hidden" = "xyes"; then
4538 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4541 if test "x$have_deprecated" = "xyes"; then
4542 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4546 dnl Simple Generational checks (sgen)
4549 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4550 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4551 if test x$buildsgen = xyes; then
4552 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4553 SGEN_DEFINES="-DHAVE_SGEN_GC"
4556 if test x$with_sgen_default_concurrent != xno; then
4557 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4558 conc_gc_msg=" (concurrent by default)"
4561 if test "x$gc_msg" = "x"; then
4562 gc_msg="sgen$conc_gc_msg"
4564 gc_msg="sgen$conc_gc_msg and $gc_msg"
4567 AC_SUBST(SGEN_DEFINES)
4568 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4570 jit_status="Building and using the JIT"
4578 INTL="libintl.dylib"
4579 SQLITE="libsqlite.0.dylib"
4580 SQLITE3="libsqlite3.0.dylib"
4582 GDKX11="libgdk-x11-2.0.dylib"
4583 GTKX11="libgtk-x11-2.0.dylib"
4588 SQLITE="libsqlite.so"
4589 SQLITE3="libsqlite3.so"
4599 SQLITE="libsqlite.so"
4600 SQLITE3="libsqlite3.so"
4605 SQLITE="libsqlite.so"
4606 SQLITE3="libsqlite3.so"
4610 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4611 AC_MSG_CHECKING(for the soname of libX11.so)
4612 for i in $x_libraries $dlsearch_path; do
4614 if test -f $i/libX11.so.$r; then
4621 if test "x$X11" = "xlibX11.so"; then
4622 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4630 ######################################
4632 ######################################
4636 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4637 if test x$GCC = xyes; then
4638 GNUC_UNUSED='__attribute__((__unused__))'
4639 GNUC_NORETURN='__attribute__((__noreturn__))'
4641 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4644 AC_SUBST(GNUC_PRETTY)
4645 AC_SUBST(GNUC_UNUSED)
4646 AC_SUBST(GNUC_NORETURN)
4647 AC_SUBST(BREAKPOINT)
4649 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4652 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4668 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4673 arm*-darwin*|aarch64*-*|riscv*)
4674 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4677 ORDER=G_LITTLE_ENDIAN
4680 LDFLAGS="$LDFLAGS -ltextencoding"
4683 CFLAGS="$CFLAGS -pthread"
4684 LDFLAGS="$LDFLAGS -pthread"
4695 # Defined for all targets/platforms using classic Windows API support.
4696 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4697 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4699 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4700 AC_CHECK_FUNCS(getrlimit)
4701 AC_CHECK_FUNCS(fork execv execve)
4702 AC_CHECK_FUNCS(waitpid)
4704 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4706 if test x$with_overridable_allocators = xyes; then
4707 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4708 AC_MSG_NOTICE([Overridable allocator support enabled])
4710 AC_MSG_NOTICE([Overridable allocator support disabled])
4714 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4715 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4716 # removed once support for 10.6 is dropped.
4718 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4720 if test x$target_osx = xyes; then
4721 AC_CHECK_FUNCS(getpwuid_r)
4722 elif test x$target_ios = xno; then
4723 AC_CHECK_FUNCS(strndup getpwuid_r)
4726 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4728 AC_SEARCH_LIBS(sqrtf, m)
4730 # nanosleep may not be part of libc, also search it in other libraries
4731 AC_SEARCH_LIBS(nanosleep, rt)
4733 AC_SEARCH_LIBS(dlopen, dl)
4734 old_ldflags="${LDFLAGS}"
4735 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4736 if test $lt_cv_prog_gnu_ld = yes; then
4737 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4740 *-*-aix*|*-*-os400*)
4743 dnl Try to use export-dynamic anyways
4744 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4748 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4749 if test $found_export_dynamic = no; then
4750 LDFLAGS="${old_ldflags}"
4753 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4754 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4755 AC_CHECK_LIB(iconv, iconv_open)
4756 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4757 AC_SUBST(HAVE_ALLOCA_H)
4759 # Get the exact type of size_t, not just its size.
4760 # This is so we can find an exact printf format among u, lu, llu, I64u.
4761 # To avoid warnings about slight mismatches.
4762 # C99 runtime "zu" dependency is being avoided here.
4764 # We have to compile as C++ because C is too lenient
4765 # and lets the wrong thing compile, with warnings.
4767 # Note: "zu" or ifdef <something> have the advantage
4768 # of producing installable "biarch" headers. i.e. one Mac header
4769 # for Mac/x86 and Mac/amd64.
4773 # Check long before int because it is the overwhelming Unix answer,
4774 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4776 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4778 AC_MSG_CHECKING(if size_t is unsigned long)
4779 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4781 unsigned long *a = (size_t*)0;
4784 AC_SUBST(GSIZE_FORMAT, '"lu"')
4787 AC_MSG_CHECKING(if size_t is unsigned int)
4788 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4790 unsigned *a = (size_t*)0;
4793 AC_SUBST(GSIZE_FORMAT, '"u"')
4795 # At this point the majority of systems have their answer,
4796 # and we descend into non-standard or new-standard territory.
4798 # Check __int64 first because I64 on some systems predates ll, enabling
4799 # new compiler/old runtime interop, and the types always have the same size.
4801 AC_MSG_CHECKING(if size_t is unsigned __int64)
4802 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4804 unsigned __int64 *a = (size_t*)0;
4807 AC_SUBST(GSIZE_FORMAT, '"I64u"')
4810 AC_MSG_CHECKING(if size_t is unsigned long long)
4811 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4813 unsigned long long *a = (size_t*)0;
4816 AC_SUBST(GSIZE_FORMAT, '"llu"')
4819 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4827 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4828 # This provides for an exact match with functions that
4829 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4830 # uintptr_t is not necessarily the same.
4832 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4833 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4835 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4845 AC_SUBST(GSIZE_FORMAT)
4848 # END OF EGLIB CHECKS
4851 AC_ARG_WITH([libgdiplus],
4852 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4853 [], [with_libgdiplus=installed])
4855 # default install location
4856 libgdiplus_install_loc=libgdiplus${libsuffix}
4859 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4863 case $with_libgdiplus in
4870 if test x$cross_compiling = xno; then
4871 if test x$host_darwin = xyes; then
4872 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4874 libgdiplus_install_loc=$a
4882 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4885 /*) # absolute path, assume it is an install location
4886 libgdiplus_loc=$with_libgdiplus
4887 libgdiplus_install_loc=$with_libgdiplus
4891 libgdiplus_loc=`pwd`/$with_libgdiplus
4894 AC_SUBST(libgdiplus_loc)
4895 AC_SUBST(libgdiplus_install_loc)
4897 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)
4898 if test "x$icall_symbol_map" = "xyes"; then
4899 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4902 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4903 if test "x$icall_export" = "xyes"; then
4904 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4907 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4908 if test "x$icall_tables" = "xno"; then
4909 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4912 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4914 if test "x$with_tls" = "x__thread"; then
4915 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
4916 # Pass the information to libgc
4917 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4918 AC_MSG_CHECKING(if the tls_model attribute is supported)
4919 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4922 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4928 if test ${TARGET} = ARM; then
4929 dnl ******************************************
4930 dnl *** Check to see what FPU is available ***
4931 dnl ******************************************
4932 AC_MSG_CHECKING(which FPU to use)
4935 # This is a bit tricky:
4937 # if (__ARM_PCS_VFP) {
4938 # /* mfloat-abi=hard == VFP with hard ABI */
4939 # } elif (!__SOFTFP__) {
4940 # /* mfloat-abi=softfp == VFP with soft ABI */
4942 # /* mfloat-abi=soft == no VFP */
4945 # The exception is iOS (w/ GCC) where none of the above
4946 # are defined (but iOS always uses the 'softfp' ABI).
4948 # No support for FPA.
4953 # iOS GCC always uses the 'softfp' ABI.
4954 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4958 # Are we using the 'hard' ABI?
4959 if test x$fpu = xNONE; then
4960 AC_TRY_COMPILE([], [
4961 #ifndef __ARM_PCS_VFP
4962 #error "Float ABI is not 'hard'"
4971 # No 'hard' ABI. 'soft' or 'softfp'?
4972 if test x$fpu = xNONE; then
4973 AC_TRY_COMPILE([], [
4975 #error "Float ABI is not 'softfp'"
4984 if test x$arm_fpu != x; then
4989 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4992 dnl *********************************************
4993 dnl *** Check which ARM version(s) we can use ***
4994 dnl *********************************************
4995 AC_MSG_CHECKING(which ARM version to use)
4997 AC_TRY_COMPILE([], [
4998 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4999 #error Not on ARM v5.
5007 AC_TRY_COMPILE([], [
5008 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5009 #error Not on ARM v6.
5018 AC_TRY_COMPILE([], [
5019 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5020 #error Not on ARM v7.
5030 AC_MSG_RESULT($arm_ver)
5032 if test x$arm_v5 = xyes; then
5033 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5034 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5037 if test x$arm_v6 = xyes; then
5038 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5039 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5042 if test x$arm_v7 = xyes; then
5043 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5044 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5048 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5049 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5051 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5053 if test x$fpabi = xauto; then
5054 AC_TRY_COMPILE([], [
5055 #ifdef __riscv_float_abi_double
5064 if test x$fpabi = xauto; then
5065 AC_TRY_COMPILE([], [
5066 #ifdef __riscv_float_abi_single
5075 if test x$fpabi = xauto; then
5076 AC_TRY_COMPILE([], [
5077 #ifdef __riscv_float_abi_soft
5088 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5089 AC_MSG_RESULT([double-precision])
5092 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5093 AC_MSG_ERROR([single-precision, not supported])
5096 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5097 AC_MSG_RESULT([soft float])
5100 AC_MSG_ERROR([unknown])
5103 AC_MSG_ERROR([invalid option: $fpabi])
5108 if test ${TARGET} = unknown; then
5109 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5110 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5113 if test "x$platform_android" = "xyes"; then
5114 case "x${TARGET}" in
5119 BTLS_PLATFORM=android-armv5
5123 BTLS_PLATFORM=android-armv6
5127 BTLS_PLATFORM=android-armv7
5136 BTLS_PLATFORM=android-v8a
5140 BTLS_PLATFORM=android-x86
5144 BTLS_PLATFORM=android-x64
5152 if test ${ACCESS_UNALIGNED} = no; then
5153 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5156 if test x$host_darwin = xyes; then
5157 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5159 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5160 [AC_MSG_RESULT([no])],
5162 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5164 RANLIB="$RANLIB -no_warning_for_no_symbols"
5165 AC_MSG_RESULT([yes])
5172 # Pass CPPFLAGS to libgc configure
5173 # We should use a separate variable for this to avoid passing useless and
5174 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5175 # This should be executed late so we pick up the final version of CPPFLAGS
5176 # The problem with this approach, is that during a reconfigure, the main
5177 # configure scripts gets invoked with these arguments, so we use separate
5178 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5179 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5180 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5181 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5183 # Don't pass -finstrument-for-thread-suspension in,
5184 # if these are instrumented it will be very bad news
5185 # (infinite recursion, undefined parking behavior, etc)
5186 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5187 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\""
5188 if test "x$support_boehm" = "xyes"; then
5189 AC_CONFIG_SUBDIRS(libgc)
5195 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5196 if test x$with_malloc_mempools = xyes; then
5198 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5203 DISABLE_MCS_DOCS=default
5204 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5205 if test x$with_mcs_docs != xyes; then
5206 DISABLE_MCS_DOCS=yes
5209 if test -n "$INSTALL_4_x_TRUE"; then :
5210 DISABLE_MCS_DOCS=yes
5212 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5213 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5216 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)],[
5217 if test x$with_lazy_gc_thread_creation != xno ; then
5218 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5220 ], [with_lazy_gc_thread_creation=no])
5222 dnl *****************************
5223 dnl *** Thread suspend policy ***
5224 dnl *****************************
5226 dnl Set a default hybrid or cooperative suspend on some platforms
5228 dnl Coop default is set by the bitcode preset.
5230 dnl If coop isn't on by default, maybe hybrid should be?
5231 if test x$enable_cooperative_suspend_default != xyes; then
5234 dnl Some host/target confusion, there's no host_osx (and
5235 dnl host_darwin would be true on iOS not just macOS).
5236 if test x$target_osx = xyes; then
5237 enable_hybrid_suspend_default=yes
5238 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5239 enable_hybrid_suspend_default=yes
5245 dnl Now check if there were flags overriding the defaults
5247 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])
5248 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5250 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5251 enable_cooperative_suspend=$with_cooperative_gc
5254 if test x$enable_cooperative_suspend = xdefault; then
5255 enable_cooperative_suspend=$enable_cooperative_suspend_default
5258 if test x$enable_cooperative_suspend != xno; then
5259 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5262 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5264 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])
5266 if test x$enable_hybrid_suspend = xdefault; then
5267 enable_hybrid_suspend=$enable_hybrid_suspend_default
5270 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5271 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5274 if test x$enable_hybrid_suspend != xno ; then
5275 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5278 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5280 dnl End of thread suspend policy
5282 dnl ***************************
5283 dnl *** feature experiments ***
5284 dnl ***************************
5286 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5287 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null],[
5289 if test x$enable_experiment != x ; then
5290 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5292 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5293 eval "mono_experiment_test_enable_$feature='yes'"
5296 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5297 eval "mono_experiment_test_enable_null='yes'"
5301 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5302 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5306 dnl **********************
5307 dnl *** checked builds ***
5308 dnl **********************
5310 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],[
5312 if test x$enable_checked_build != x ; then
5313 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5315 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5316 eval "mono_checked_build_test_enable_$feature='yes'"
5319 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5320 eval "mono_checked_build_test_enable_gc='yes'"
5321 eval "mono_checked_build_test_enable_metadata='yes'"
5322 eval "mono_checked_build_test_enable_thread='yes'"
5323 eval "mono_checked_build_test_enable_private_types='yes'"
5326 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5327 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5330 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5331 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5334 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5335 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5338 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5339 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5343 dnl End of checked builds
5345 AC_CHECK_HEADER([malloc.h],
5346 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5347 [Define to 1 if you have /usr/include/malloc.h.])],,)
5349 if test x"$GCC" = xyes; then
5350 # Implicit function declarations are not 64 bit safe
5351 # Do this late, since this causes lots of configure tests to fail
5352 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5353 # jay has a lot of implicit declarations
5354 JAY_CFLAGS="-Wno-implicit-function-declaration"
5357 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5358 # instead of libmono-static.a
5359 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5360 LIBMONO_LA=libmini-static.la
5362 if test x$buildsgen = xyes; then
5363 LIBMONO_LA=libmonosgen-$API_VER.la
5365 LIBMONO_LA=libmonoboehm-$API_VER.la
5368 AC_SUBST(LIBMONO_LA)
5374 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5375 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5376 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5378 if test "x$enable_btls" = "xno"; then
5382 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5385 if test "x$enable_btls" = "xyes"; then
5386 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5387 if test "x$CMAKE" = "xno"; then
5388 AC_MSG_ERROR("cmake not found")
5391 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5398 if test "x$host_win32" = "xyes"; then
5399 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5402 case "$BTLS_PLATFORM" in
5408 btls_cflags="$btls_cflags -arch i386"
5411 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5412 if test "x$HAVE_YASM" != "xyes"; then
5413 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5422 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5423 if test "x$HAVE_YASM" != "xyes"; then
5424 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5431 btls_cflags="-DOPENSSL_NO_ASM=1"
5435 btls_cflags="-DOPENSSL_NO_ASM=1"
5439 btls_cflags="-march=armv8-a+crypto"
5448 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5449 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5453 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5456 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5459 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
5462 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
5465 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
5468 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
5477 AC_MSG_ERROR(Invalid BTLS platform)
5480 if test "x$platform_android" = "xyes"; then
5482 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5483 if test "x$with_btls_android_ndk" != "x"; then
5484 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5486 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5490 if test "x$btls_arch" != "x"; then
5491 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5494 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5496 AC_SUBST(BTLS_CFLAGS)
5497 AC_SUBST(BTLS_PLATFORM)
5498 AC_SUBST(BTLS_CMAKE_ARGS)
5500 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5505 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5507 if test x$DISABLE_MCS_DOCS = xyes; then
5514 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5515 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5516 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5518 libmono_ldflags="$libmono_ldflags $LIBS"
5520 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5521 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5522 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5523 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5524 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5525 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5526 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5527 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5528 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5529 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5530 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5531 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5532 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5533 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5534 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5535 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5536 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5537 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5538 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5539 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5540 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5541 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5542 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5543 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5545 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5555 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5556 AC_SUBST(arch_target)
5561 #This must always be defined when building the runtime
5562 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5564 mono_build_root=`pwd`
5565 AC_SUBST(mono_build_root)
5567 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5568 if test x$host_win32 = xno; then
5569 if test x$enable_msvc = xyes; then
5570 echo "Error, --enable-msvc only supported for Windows builds."
5574 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5576 if test "x$enable_msvc" = "xyes"; then
5577 if test "x$support_boehm" = "xyes"; then
5578 echo "Error, Boehm GC is not supported when using --enable-msvc."
5581 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5582 if test "x$host_cpu" = "xi686"; then
5583 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5584 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5585 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5587 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5588 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5589 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5591 AC_SUBST(mono_msvc_build_dir)
5592 AC_SUBST(mono_msvc_build_lib_dir)
5593 AC_SUBST(mono_msvc_build_bin_dir)
5595 mono_runtime=mono/mini/mono
5598 AC_SUBST(mono_runtime)
5600 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5602 if test $csc_compiler = mcs; then
5603 CSC=$mcs_topdir/class/lib/build/mcs.exe
5608 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5610 mono_cfg_root=$mono_build_root/runtime
5611 if test x$host_win32 = xyes; then
5612 if test "x$cross_compiling" = "xno"; then
5613 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5614 CSC=`cygpath -m -a $CSC`
5615 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5617 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5620 mono_cfg_dir=$mono_cfg_root/etc
5622 AC_SUBST(mono_cfg_dir)
5626 AC_CONFIG_FILES([po/mcs/Makefile.in])
5628 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5629 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5630 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5632 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5635 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5637 *) reldir=$depth/$srcdir ;;
5639 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5640 cd runtime/etc/mono/1.0
5641 rm -f machine.config
5642 $LN_S $reldir/data/net_1_1/machine.config machine.config
5646 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5649 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5651 *) reldir=$depth/$srcdir ;;
5653 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5654 cd runtime/etc/mono/2.0
5655 rm -f machine.config
5656 $LN_S $reldir/data/net_2_0/machine.config machine.config
5660 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5663 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5665 *) reldir=$depth/$srcdir ;;
5667 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5668 cd runtime/etc/mono/2.0
5670 $LN_S $reldir/data/net_2_0/web.config web.config
5674 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5677 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5679 *) reldir=$depth/$srcdir ;;
5681 $ac_aux_dir/install-sh -d runtime/etc/mono/
5682 cd runtime/etc/mono/
5684 $LN_S $reldir/data/browscap.ini browscap.ini
5688 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5689 [ depth=../../../../..
5691 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5693 *) reldir=$depth/$srcdir ;;
5695 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5696 cd runtime/etc/mono/2.0/Browsers
5697 rm -f Compat.browser
5698 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5702 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5703 [ depth=../../../../..
5705 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5707 *) reldir=$depth/$srcdir ;;
5709 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5710 cd runtime/etc/mono/4.0/Browsers
5711 rm -f Compat.browser
5712 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5716 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5717 [ depth=../../../../..
5719 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5721 *) reldir=$depth/$srcdir ;;
5723 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5724 cd runtime/etc/mono/4.5/Browsers
5725 rm -f Compat.browser
5726 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5730 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5733 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5735 *) reldir=$depth/$srcdir ;;
5737 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5738 cd runtime/etc/mono/4.0
5739 rm -f machine.config
5740 $LN_S $reldir/data/net_4_0/machine.config machine.config
5744 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5747 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5749 *) reldir=$depth/$srcdir ;;
5751 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5752 cd runtime/etc/mono/4.0
5754 $LN_S $reldir/data/net_4_0/web.config web.config
5758 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5761 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5763 *) reldir=$depth/$srcdir ;;
5765 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5766 cd runtime/etc/mono/4.5
5767 rm -f machine.config
5768 $LN_S $reldir/data/net_4_5/machine.config machine.config
5772 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5775 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5777 *) reldir=$depth/$srcdir ;;
5779 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5780 cd runtime/etc/mono/4.5
5782 $LN_S $reldir/data/net_4_5/web.config web.config
5786 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])
5787 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])
5788 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
5790 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
5791 if test x"$GCC" = xyes; then
5793 # incompatible-pointer-types requires gcc circa 5.x
5796 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
5797 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
5801 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
5809 # Mono.Native Support
5810 # -------------------
5811 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
5812 # It is built as a stand-alone shared library and not bundled with the runtime because we
5813 # may need to build two different versions of it.
5815 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
5816 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
5818 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
5819 # implementation accordingly. We build a single `libmono_native` shared library.
5821 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
5823 # During the mobile build, we are called with `CC` containing an explicit minium version flag,
5824 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
5825 # depending on platform.
5827 # We build two versions of the shared library:
5828 # - `libmono_native_compat` is built with whichever minimum version is passed to us via `CC`.
5829 # - `libmono_native_unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
5831 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
5832 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
5833 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/System/Mono/MonoNativePlatform.cs).
5835 # This can be called by automated tests both to ensure that the library has been correctly installed and also
5836 # to verify that it's the correct version of it.
5839 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
5840 if test x$target_osx = xyes; then
5841 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
5842 grep_find_mac_version_pattern="-mmacosx-version-min=$sed_version_pattern"
5843 mono_native_compat_version=`echo $CC | grep -o -e $grep_find_mac_version_pattern`
5844 MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_mac_version_pattern`
5845 MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_mac_version_pattern`
5846 MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern`
5847 MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern`
5848 MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern`
5849 MONO_NATIVE_LDFLAGS=`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern`
5852 MONO_NATIVE_PLATFORM=macos
5853 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
5854 AC_MSG_CHECKING([Mono.Native support])
5855 AC_MSG_RESULT(macos)
5857 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
5858 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
5860 if test x$mono_native_compat = xyes; then
5861 mono_native_compat=yes
5862 mono_native_text="Mac OSX (compat+unified)"
5863 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
5864 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
5865 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -mmacosx-version-min=10.12"
5866 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -mmacosx-version-min=10.12"
5868 mono_native_compat=no
5869 mono_native_text="Mac OSX"
5871 elif test x$mono_native_platform_ios = xyes; then
5872 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
5874 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
5875 if test x$mono_native_ios_sim = xyes; then
5876 mono_native_ios_target=ios-simulator
5877 mono_native_text="iOS Simulator"
5878 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5880 mono_native_ios_target=iphoneos
5881 mono_native_text="iOS Device"
5882 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5884 mono_native_unified_version="10.0"
5885 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
5887 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
5888 if test x$mono_native_ios_sim = xyes; then
5889 mono_native_ios_target=tvos-simulator
5890 mono_native_text="AppleTV Simulator"
5891 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5893 mono_native_ios_target=tvos
5894 mono_native_text="AppleTV Device"
5895 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5897 mono_native_unified_version="10.0"
5898 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
5900 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
5901 if test x$mono_native_ios_sim = xyes; then
5902 mono_native_ios_target=watchos-simulator
5903 mono_native_text="Apple Watch Simulator"
5904 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5906 mono_native_ios_target=watchos
5907 mono_native_text="Apple Watch Device"
5908 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5910 mono_native_unified_version="5.0"
5911 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
5913 AC_MSG_ERROR([Unknown iOS Target])
5918 AC_MSG_CHECKING([Mono.Native support])
5919 AC_MSG_RESULT([$mono_native_ios_target])
5921 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
5923 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
5924 grep_find_ios_version_pattern="-m$mono_native_ios_target-version-min=$sed_version_pattern"
5926 mono_native_compat_version=`echo $CC | grep -o -e $grep_find_ios_version_pattern`
5928 if test x$with_bitcode = xyes; then
5929 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
5930 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
5932 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
5935 if test x$enable_gss = xyes; then
5936 mono_native_ldflags="$mono_native_ldflags -framework GSS"
5939 MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_ios_version_pattern`
5940 MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_ios_version_pattern`
5941 MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern`
5942 MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern`
5943 MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern`
5944 MONO_NATIVE_LDFLAGS=`echo $LDFLAGS $mono_native_ldflags | sed -e $sed_remove_ios_version_pattern`
5946 if test x$mono_native_compat = xyes; then
5947 mono_native_text="$mono_native_text (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 -m$mono_native_ios_target-version-min=$mono_native_unified_version"
5951 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
5955 MONO_NATIVE_PLATFORM=ios
5956 elif test x$host_linux = xyes; then
5957 mono_native_text="Linux"
5959 MONO_NATIVE_CXX=$CXX
5960 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
5961 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
5962 MONO_NATIVE_CFLAGS=$CFLAGS
5963 MONO_NATIVE_LDFLAGS=$LDFLAGS
5966 mono_native_compat=no
5967 MONO_NATIVE_PLATFORM=linux
5968 AC_MSG_CHECKING([Mono.Native support])
5969 AC_MSG_RESULT(linux)
5971 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
5972 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
5973 mono_native_text="AIX"
5975 MONO_NATIVE_CXX=$CXX
5976 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
5977 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
5978 MONO_NATIVE_CFLAGS=$CFLAGS
5979 MONO_NATIVE_LDFLAGS=$LDFLAGS
5982 mono_native_compat=no
5983 MONO_NATIVE_PLATFORM=aix
5984 AC_MSG_CHECKING([Mono.Native support])
5987 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
5990 mono_native_text="no"
5991 AC_MSG_CHECKING([Mono.Native support])
5995 if test x$mono_native_compat = xyes; then
5996 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
5998 MONO_NATIVE_LIBRARY_NAME=libmono-native
6001 AC_SUBST(MONO_NATIVE_PLATFORM)
6002 AC_SUBST(MONO_NATIVE_CC)
6003 AC_SUBST(MONO_NATIVE_CXX)
6004 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6005 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6006 AC_SUBST(MONO_NATIVE_CFLAGS)
6007 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6008 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6009 AC_SUBST(MONO_NATIVE_LDFLAGS)
6010 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6011 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6012 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6013 AC_SUBST(MONO_NATIVE_LIBADD)
6015 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6016 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6017 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6018 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6019 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6020 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6022 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6023 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6024 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6025 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6026 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6028 # Update all submodules recursively to ensure everything is checked out
6029 (cd $srcdir && scripts/update_submodules.sh)
6034 acceptance-tests/Makefile
6036 scripts/mono-find-provides
6037 scripts/mono-find-requires
6041 mono/native/Makefile
6043 mono/utils/jemalloc/Makefile
6044 mono/metadata/Makefile
6048 mono/arch/x86/Makefile
6049 mono/arch/amd64/Makefile
6050 mono/arch/ppc/Makefile
6051 mono/arch/sparc/Makefile
6052 mono/arch/s390x/Makefile
6053 mono/arch/arm/Makefile
6054 mono/arch/arm64/Makefile
6055 mono/arch/mips/Makefile
6056 mono/arch/riscv/Makefile
6058 mono/native/platform-type.c
6059 mono/native/platform-type-compat.c
6060 mono/native/platform-type-unified.c
6062 mono/tests/assembly-load-reference/Makefile
6063 mono/tests/tests-config
6064 mono/tests/gc-descriptors/Makefile
6065 mono/tests/testing_gac/Makefile
6066 mono/unit-tests/Makefile
6067 mono/benchmark/Makefile
6069 mono/profiler/Makefile
6071 mono/eglib/eglib-config.h
6072 mono/eglib/test/Makefile
6074 ikvm-native/Makefile
6079 data/net_2_0/Makefile
6080 data/net_4_0/Makefile
6081 data/net_4_5/Makefile
6082 data/net_2_0/Browsers/Makefile
6083 data/net_4_0/Browsers/Makefile
6084 data/net_4_5/Browsers/Makefile
6091 data/mono-options.pc
6092 data/mono-lineeditor.pc
6098 data/system.web.extensions_1.0.pc
6099 data/system.web.extensions.design_1.0.pc
6100 data/system.web.mvc.pc
6101 data/system.web.mvc2.pc
6102 data/system.web.mvc3.pc
6103 data/aspnetwebstack.pc
6109 tools/locale-builder/Makefile
6111 tools/monograph/Makefile
6112 tools/pedump/Makefile
6118 if test x$host_win32 = xyes; then
6119 # Get rid of 'cyg' prefixes in library names
6120 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6121 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6122 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6123 # executable doesn't work...
6124 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6127 if test x$host_darwin = xyes; then
6128 # This doesn't seem to be required and it slows down parallel builds
6129 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6134 NONE) prefix=$ac_default_prefix ;;
6136 case $exec_prefix in
6137 NONE) exec_prefix='${prefix}' ;;
6141 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6142 # any existing config.make. This allows people to share the same source tree
6143 # with different build directories, one native and one cross
6145 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6147 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6149 echo "prefix=$prefix" > $mcs_topdir/build/config.make
6150 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6151 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6152 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6153 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6154 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6155 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6156 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6157 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6160 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6161 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6164 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6167 [myver=$($AWK 'BEGIN {
6168 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6169 if(length(vsplit [1]) > 4) {
6170 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6172 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6175 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6176 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6178 if test x$host_darwin = xyes; then
6179 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6180 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6181 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6182 elif test x$host_win32 = xyes; then
6183 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6184 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6185 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6186 elif test x$host_linux = xyes; then
6187 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6188 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6189 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6191 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6192 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6193 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6196 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6197 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6200 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6201 enable_system_aot=yes
6204 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6205 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6208 if test x$DISABLE_MCS_DOCS = xyes; then
6209 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6212 if test x$has_extension_module != xno; then
6213 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6216 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6218 if test "x$test_bcl_opt" = "xyes"; then
6219 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6222 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6224 if test $csc_compiler = mcs; then
6225 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6228 if test "x$AOT_BUILD_FLAGS" != "x" ; then
6229 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6230 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6231 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6234 if test "x$AOT_MODE" != "x" ; then
6235 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6238 if test "x$enable_btls" = "xyes"; then
6239 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6242 if test "x$mono_native" = "xyes"; then
6243 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6245 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6248 if test x$mono_native_compat = xyes; then
6249 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6251 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6254 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6255 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6261 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6263 btls_platform_string=
6264 if test x$enable_btls = xyes; then
6265 if test x$btls_android = xyes; then
6266 btls_platform_string=" (android:$BTLS_PLATFORM)"
6268 btls_platform_string=" ($BTLS_PLATFORM)"
6273 if test x$buildsgen = xyes; then
6274 if test x$enable_cooperative_suspend != xno; then
6275 thread_suspend_msg="Suspend: Cooperative"
6276 elif test x$enable_hybrid_suspend != xno; then
6277 thread_suspend_msg="Suspend: Hybrid"
6279 thread_suspend_msg="Suspend: Preemptive"
6285 C# Compiler: $csc_compiler
6293 SIGALTSTACK: $with_sigaltstack
6295 BigArrays: $enable_big_arrays
6296 DTrace: $enable_dtrace
6297 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6298 Spectre: $spectre_mitigation_status
6299 Mono.Native: $mono_native_text
6302 .NET 4.x: $with_profile4_x
6303 Xamarin.Android: $with_monodroid
6304 Xamarin.iOS: $with_monotouch
6305 Xamarin.WatchOS: $with_monotouch_watch
6306 Xamarin.TVOS: $with_monotouch_tv
6307 Xamarin.Mac: $with_xammac
6308 Windows AOT: $with_winaot
6310 Unreal: $with_unreal
6311 WebAssembly: $with_wasm
6312 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6313 JNI support: $jdk_headers_found
6314 libgdiplus: $libgdiplus_msg
6316 BTLS: $enable_btls$btls_platform_string
6317 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
6318 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6319 .NET Core: $with_core
6322 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6323 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)