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=e686c1dd-3c2a-4dc9-b12e-ff0d524d6e6b
54 # Put a quoted #define in config.h.
55 # Substitute @MONO_CORLIB_VERSION@ unquoted.
57 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
58 AC_SUBST(MONO_CORLIB_VERSION)
62 echo "Run configure using ./configure --host=i686-w64-mingw32 or --host=x86_64-w64-mingw32"
66 # In case of cygwin, override LN_S, irrespective of what it determines.
67 # The build uses cygwin, but the actual runtime doesn't.
69 *cygwin* ) LN_S='cp -p';;
77 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
78 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
79 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
80 CFLAGS_FOR_LIBGC=$CFLAGS
81 CPPFLAGS_FOR_BTLS=$CPPFLAGS
82 CFLAGS_FOR_BTLS=$CFLAGS
84 # libgc uses some deprecated APIs
85 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
88 # These are the flags that need to be stored in the mono.pc file for
89 # compiling code that will embed Mono
93 AC_SUBST(libmono_cflags)
94 AC_SUBST(libmono_ldflags)
96 # Variable to have relocatable .pc files (lib, or lib64)
97 # realpath isn't always available, and requires that all but the tip of the provided
98 # path exists. Fall back to the old behaviour, but realpath allows depth >1
99 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
100 # too deep for the old method to work
101 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
102 AC_SUBST(reloc_libdir)
104 # Set to yes if Unix sockets cannot be created in an anonymous namespace
107 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
108 extra_runtime_ldflags=""
110 # Thread configuration inspired by sleepycat's db
111 AC_MSG_CHECKING([host platform characteristics])
129 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
130 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
132 libgc_threads=pthreads
135 *-mingw*|*-*-cygwin*)
136 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
137 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
140 if test "x$cross_compiling" = "xno"; then
141 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
145 if test "x$host" = "x$target"; then
151 # Windows 7 or later is required
152 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
153 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
154 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
155 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
156 libmono_cflags="-mms-bitfields -mwindows"
157 libmono_ldflags="-mms-bitfields -mwindows"
162 with_sgen_default_concurrent=yes
164 # This forces libgc to use the DllMain based thread registration code on win32
165 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
168 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
169 libmono_cflags="-D_REENTRANT"
170 LDFLAGS="$LDFLAGS -pthread"
171 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
172 libmono_ldflags="-pthread"
175 libgc_threads=pthreads
178 with_sgen_default_concurrent=yes
181 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
182 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
183 libmono_ldflags="-lpthread -pthread"
185 libgc_threads=pthreads
189 with_sgen_default_concurrent=yes
193 LDFLAGS="$LDFLAGS -lutil"
194 if test "x$PTHREAD_CFLAGS" = "x"; then
195 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
198 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
199 libmono_cflags="$PTHREAD_CFLAGS"
201 if test "x$PTHREAD_LIBS" = "x"; then
202 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
203 libmono_ldflags="-pthread"
205 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
206 libmono_ldflags="$PTHREAD_LIBS"
208 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
210 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
212 libgc_threads=pthreads
225 with_sgen_default_concurrent=yes
228 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
229 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
230 if test "x$disable_munmap" != "xyes"; then
231 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
233 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
234 LDFLAGS="$LDFLAGS -pthread"
236 AC_DEFINE(PTHREAD_POINTER_ID)
238 libgc_threads=pthreads
242 with_sgen_default_concurrent=yes
246 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
247 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
249 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
250 if test "x$disable_munmap" != "xyes"; then
251 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
253 libmono_cflags="-D_REENTRANT"
255 libgc_threads=pthreads
262 # Android doesn't support boehm, as it's missing <link.h>
266 # isinf(3) requires -lm
267 LDFLAGS="$LDFLAGS -lm"
269 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
270 # PAGE_SIZE; breaks mono/io-layer/collection.c
271 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
272 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
273 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
275 # to bypass the underscore linker check, can't work when cross-compiling
281 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
282 if test "x$disable_munmap" != "xyes"; then
283 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
285 libmono_cflags="-D_REENTRANT"
287 libgc_threads=pthreads
289 if test "x$cross_compiling" != "xno"; then
290 # to bypass the underscore linker check, not
291 # available during cross-compilation
305 # https://bugzilla.novell.com/show_bug.cgi?id=504411
313 with_sgen_default_concurrent=yes
316 echo "nacl no longer supported."
320 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
321 # +ESdbgasm only valid on bundled cc on RISC
322 # silently ignored for ia64
323 if test $GCC != "yes"; then
324 CFLAGS="$CFLAGS +ESdbgasm"
325 # Arrange for run-time dereferencing of null
326 # pointers to produce a SIGSEGV signal.
327 LDFLAGS="$LDFLAGS -z"
329 CFLAGS="$CFLAGS +ESdbgasm"
330 LDFLAGS="$LDFLAGS -z"
331 libmono_cflags="-D_REENTRANT"
332 libmono_ldflags="-lpthread"
333 libgc_threads=pthreads
338 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
340 libmono_cflags="-D_REENTRANT"
341 libgc_threads=pthreads
344 enable_solaris_tar_check=yes
347 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
350 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
351 libmono_cflags="-D_THREAD_SAFE"
353 AC_DEFINE(PTHREAD_POINTER_ID)
354 AC_DEFINE(USE_MACH_SEMA, 1, [...])
356 libgc_threads=pthreads
358 if test "x$cross_compiling" = "xyes"; then
359 has_broken_apple_cpp=yes
361 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
362 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
363 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
365 dnl Snow Leopard and newer config.guess reports as this
367 BROKEN_DARWIN_FLAGS="-arch i386"
368 BROKEN_DARWIN_CPPFLAGS=""
369 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
370 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
371 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
372 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
373 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
374 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
375 with_sgen_default_concurrent=yes
378 with_sgen_default_concurrent=yes
390 dnl BSD_SOURCE is for getifaddrs
391 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
392 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
394 LIBS="$LIBS -lnetwork -ltextencoding"
396 AC_DEFINE(PTHREAD_POINTER_ID)
397 dnl Haiku does not support static TLS with __thread
399 libgc_threads=pthreads
404 dnl Set up a 64-bit build
405 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
407 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
408 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
409 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
410 dnl specifiy 64-bit mode for tools.
411 AR="/usr/bin/ar -X64"
412 NM="/usr/bin/nm -X64"
413 dnl SGen is the future (changes to Boehm support code would be
414 dnl required if you wish to re-enable Boehm)
419 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
421 dnl use pthread TLS, __thread has issues with the compiler flags we use
423 dnl ppc Linux is the same? test further
427 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
434 if test x$need_link_unlink = xyes; then
435 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
438 if test x$host_win32 = xyes; then
439 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
442 if test x$target_win32 = xyes; then
443 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
446 if test x$host_darwin = xyes; then
447 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
450 # Defined for all targets/platforms using classic Windows API support.
451 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
452 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
454 AC_SUBST(extra_runtime_ldflags)
455 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
456 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
457 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
458 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
459 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
460 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
461 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
462 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
463 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
465 if test -z "$HOST_DARWIN_TRUE"; then :
466 PLATFORM_AOT_SUFFIX=.dylib
469 if test -z "$HOST_LINUX_TRUE"; then :
470 PLATFORM_AOT_SUFFIX=.so
473 if test -z "$HOST_WIN32_TRUE"; then :
474 PLATFORM_AOT_SUFFIX=.dll
477 AC_SUBST(PLATFORM_AOT_SUFFIX)
479 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
481 AC_CHECK_TOOL(CC, gcc, gcc)
483 AC_CHECK_TOOL(CXX, g++, g++)
489 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
491 # Set ASFLAGS if not already set.
492 : ${CCASFLAGS='$(CFLAGS)'}
496 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
497 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
498 if test "x$CXX" = "xg++"; then
499 if test "x$GXX" != "xyes"; then
500 # automake/libtool is so broken, it requires g++ even if the c++ sources
501 # are inside automake conditionals
502 AC_MSG_ERROR([You need to install g++])
506 dnl may require a specific autoconf version
507 dnl AC_PROG_CC_FOR_BUILD
508 dnl CC_FOR_BUILD not automatically detected
510 CFLAGS_FOR_BUILD=$CFLAGS
512 if test "x$cross_compiling" = "xyes"; then
517 AC_SUBST(CC_FOR_BUILD)
518 AC_SUBST(CFLAGS_FOR_BUILD)
520 AC_SUBST(BUILD_EXEEXT)
522 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
523 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
528 # This causes monodis to not link correctly
529 #AC_DISABLE_FAST_INSTALL
531 #lookup makedev() header
535 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
538 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
539 AC_SUBST(export_ldflags)
541 # Test whenever ld supports -version-script
545 AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h sys/prctl.h copyfile.h)
546 AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h sys/inotify.h arpa/inet.h complex.h unwind.h)
547 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
548 [], [], [#include <stddef.h>
549 #include <sys/socket.h>
550 #include <linux/socket.h>])
552 AC_CHECK_HEADERS(sys/user.h, [], [],
554 #ifdef HAVE_SYS_PARAM_H
555 # include <sys/param.h>
559 AC_CHECK_HEADERS(linux/serial.h)
561 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
562 if test x$have_zlib = xyes; then
563 AC_TRY_COMPILE([#include <zlib.h>], [
564 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
566 #error No good zlib found
569 AC_MSG_RESULT(Using system zlib)
570 zlib_msg="system zlib"
571 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
573 AC_MSG_RESULT(Using embedded zlib)
575 zlib_msg="bundled zlib"
579 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
580 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
582 # for mono/metadata/debug-symfile.c
583 AC_CHECK_HEADERS(elf.h)
586 AC_CHECK_HEADERS(poll.h)
587 AC_CHECK_HEADERS(sys/poll.h)
588 AC_CHECK_HEADERS(sys/wait.h)
589 AC_CHECK_HEADERS(grp.h)
590 AC_CHECK_HEADERS(syslog.h)
591 AC_CHECK_FUNCS(vsyslog)
594 AC_CHECK_HEADERS(wchar.h)
596 # for Linux statfs support
597 AC_CHECK_HEADERS(linux/magic.h)
599 # For Android NDK unified headers
600 if test x$platform_android = xyes; then
601 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
602 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
603 AC_CHECK_HEADERS(android/ndk-version.h)
605 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
606 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
607 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
608 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
609 # doesn't contain the required definitions (NDK 14)
610 if test x$have_android_signal_inlines = xyes; then
611 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
613 AC_LANG_PROGRAM([#include <signal.h>
614 #include <android/legacy_signal_inlines.h>],[
616 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
620 android_sigrtminmax_work=yes
623 android_sigrtminmax_work=no
627 if test x$android_sigrtminmax_work = xno; then
628 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
632 # Attempt to detect whether we're using Android NDK unified headers
633 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
634 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
636 android_unified_headers=no
637 if test x$have_android_api_level = xyes; then
638 if test x$have_android_versioning = xyes; then
639 AC_MSG_CHECKING([whether using Android NDK unified headers])
641 # Both macros are defined only in the NDK unified headers
644 #include <android/api-level.h>
645 #include <android/versioning.h>
647 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
649 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
653 android_unified_headers=yes
656 android_unified_headers=no
662 if test x$android_unified_headers = xyes; then
663 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
667 # not 64 bit clean in cross-compile
668 AC_CHECK_SIZEOF(void *)
669 AC_CHECK_SIZEOF(long)
672 AC_CHECK_SIZEOF(long long)
674 AC_CACHE_CHECK([for clang],
687 AC_ARG_ENABLE(visibility-hidden,
688 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
689 disable_visibility_hidden=yes, disable_visibility_hidden=no)
692 if test x"$GCC" = xyes; then
693 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
694 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
696 # We require C99 with some GNU extensions, e.g. `linux` macro
697 CFLAGS="$CFLAGS -std=gnu99"
699 # The runtime code does not respect ANSI C strict aliasing rules
700 CFLAGS="$CFLAGS -fno-strict-aliasing"
702 # We rely on signed overflow to behave
703 CFLAGS="$CFLAGS -fwrapv"
705 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
706 if test x"$disable_visibility_hidden" = xno; then
707 # Don't export any symbols by default
708 SHARED_CFLAGS="-fvisibility=hidden"
709 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
713 # Check for the normal version, since gcc ignores unknown -Wno options
714 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
715 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
719 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
725 if test "x$mono_cv_clang" = "xyes"; then
726 # https://bugzilla.samba.org/show_bug.cgi?id=8118
727 WARN="$WARN -Qunused-arguments"
728 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
729 # We rely on zero length arrays in structs
730 WARN="$WARN -Wno-zero-length-array"
733 # The Sun Forte compiler complains about inline functions that access static variables
734 # so disable all inlining.
737 CFLAGS="$CFLAGS -Dinline="
741 CFLAGS="$WARN $CFLAGS -g"
742 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
743 CPPFLAGS="$WARN $CPPFLAGS -g"
745 # Where's the 'mcs' source tree?
746 if test -d $srcdir/mcs; then
752 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
753 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
754 mcsdir=$with_mcs_path
758 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
760 AC_ARG_WITH(core, [ --with-core=only controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
761 if test x$with_core = xonly; then
762 AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
763 mono_feature_disable_remoting='yes'
764 mono_feature_disable_reflection_emit_save='yes'
765 mono_feature_disable_appdomains='yes'
767 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
770 # A sanity check to catch cases where the package was unpacked
771 # with an ancient tar program (Solaris)
773 AC_ARG_ENABLE(solaris-tar-check,
774 [ --disable-solaris-tar-check disable solaris tar check],
775 do_solaris_tar_check=no, do_solaris_tar_check=yes)
777 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
778 AC_MSG_CHECKING(integrity of package)
779 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
783 errorm="Your mono distribution is incomplete; if unpacking from a tar file, make sure you use GNU tar; see http://www.mono-project.com/IncompletePackage for more details"
784 AC_MSG_ERROR([$errorm])
788 if test "x$with_mcs_path" != "x"; then
789 mcs_topdir=$(cd "$mcsdir" && pwd)
790 mcs_topdir_from_srcdir=$mcs_topdir
792 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
793 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
796 # Convert mcs_topdir* paths to Windows syntax.
797 if test x$cross_compiling$host_win32 = xnoyes; then
798 mcs_topdir=$(cygpath -m $mcs_topdir)
799 case $mcs_topdir_from_srcdir in
801 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
806 AC_SUBST([mcs_topdir])
807 AC_SUBST([mcs_topdir_from_srcdir])
809 # gettext: prepare the translation directories.
810 # we do not configure the full gettext, as we consume it dynamically from C#
813 if test "x$USE_NLS" = "xyes"; then
814 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
816 if test "x$HAVE_MSGFMT" = "xno"; then
817 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
821 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
824 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
825 if test x$with_crosspkgdir = "x"; then
826 if test -s $PKG_CONFIG_PATH; then
827 pkg_config_path=$PKG_CONFIG_PATH
830 pkg_config_path=$with_crosspkgdir
831 PKG_CONFIG_PATH=$pkg_config_path
832 export PKG_CONFIG_PATH
836 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
837 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
838 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
840 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
841 if test x$werror_flag = xyes; then
842 WERROR_CFLAGS="-Werror"
844 AC_SUBST([WERROR_CFLAGS])
845 AC_SUBST([SHARED_CFLAGS])
847 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
849 AC_SUBST(GLIB_CFLAGS)
851 # Enable support for fast thread-local storage
852 # Some systems have broken support, so we allow to disable it.
853 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
855 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
856 # This does not work on some platforms (bug #55253)
857 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
859 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
860 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
861 # Same as --with-shared_mono=no
862 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
864 if test "x$enable_static" = "xno"; then
868 if test "x$enable_shared" = "xno"; then
872 if test "x$enable_libraries" = "xno"; then
876 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
878 if test "x$host_win32" = "xyes"; then
879 # Boehm GC requires the runtime to be in its own dll
883 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
884 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
885 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
886 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
888 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
889 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
890 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
892 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
893 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
897 # Pass it to libgc as well
898 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
905 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
907 if test x$enable_small_config = xyes; then
908 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
909 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
912 AC_ARG_ENABLE(system-aot, [ --enable-system-aot Enable the Ahead-Of-Time compilation of system assemblies during the build (on by default on some platforms)], enable_system_aot=$enableval, enable_system_aot=default)
914 DISABLED_FEATURES=none
917 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
918 AC_MSG_CHECKING([CSharp compiler to use])
919 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
920 if test x$withval = xmcs; then
922 elif test x$withval = xroslyn; then
924 elif test x$withval = xdefault; then
927 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
929 ],[csc_compiler=default])
931 if test $csc_compiler = default; then
932 if test $endian = big; then
934 elif test $endian = little; then
936 powerpc*) csc_compiler=mcs ;;
937 *) csc_compiler=roslyn ;;
943 AC_MSG_RESULT($csc_compiler)
945 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
946 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
947 AC_ARG_WITH(jemalloc-assert, [ --with-jemalloc_assert=yes,no If jemalloc performs runtime checks for memory correctness (defaults to no)], [], [with_jemalloc_assert=no])
950 if test x$target_win32 = xyes; then
952 with_jemalloc_assert=no
953 with_jemalloc_always=no
956 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
957 if test "x$with_jemalloc_assert" = "xyes"; then
958 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
959 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
960 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
963 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
964 if test "x$with_jemalloc_always" = "xyes"; then
966 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
967 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
968 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
971 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
972 if test "x$with_jemalloc" = "xyes"; then
973 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
974 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
975 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
977 if test "x$target_mach" = "xyes"; then
978 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
981 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
982 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
984 AC_SUBST(JEMALLOC_CFLAGS)
985 AC_SUBST(JEMALLOC_CPPFLAGS)
986 AC_SUBST(JEMALLOC_LDFLAGS)
987 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
991 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
992 # MERP - The MS telemetry profile. Not for general use.
993 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
995 # Structured crashes are not merp crashes. Structured crashes are json dumps made by mono during crashes. Merp upload is going to use the dumping code is a very specific way, and is enabled at runtime with an icall.
997 #--with-crash_privacy=yes --with-structured_crashes=no means we don't wanna dump in non-merp-enabled builds, and we want to not send symbol strings. This is going to be the default pair of settings for VS4Mac.
998 #--with-crash_privacy=yes --with-structured_crashes=yes means you want to see crashes on your console, and you want to not see unmanaged symbol names. This is an option for proprietary apps that have manual bugs filed.
999 #--with-crash_privacy=no --with-structured_crashes=no means you want to see no crash dumps on failure and you don't care about privacy. This is how you'd set a "don't want it, don't care" configuration.
1000 #--with-crash_privacy=no --with-structured_crashes=yes means you want full crashes and you want to see them in the terminal, not on telemetry. This is going to be how we build for CI.
1002 AC_ARG_WITH(crash-privacy, [ --with-crash_privacy=yes,no If you want your crashes to not include names of symbols present in the binary. ], [], [with_crash_privacy=yes])
1003 AC_ARG_WITH(structured-crashes, [ --with-structured_crashes=yes,no If you want your unmanaged crashes to result in a small crash dump file. ], [], [with_structured_crashes=yes])
1004 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1006 if test "x$with_crash_privacy" = "xyes"; then
1007 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1010 if test "x$with_structured_crashes" = "xno"; then
1011 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1015 *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1020 if test "x$crash_reporting" != "xyes"; then
1021 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1022 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1025 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1026 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1028 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1029 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1031 if test x$enable_monodroid = xyes; then
1032 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1035 if test x$enable_monotouch = xyes; then
1036 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1039 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1041 # mono/corefx/native has a lot of invalid C++98 in its headers
1042 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1043 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1044 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1045 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1047 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1048 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1049 # and add it whenever we're running clang on Darwin.
1050 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1051 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1054 AC_SUBST(CXXFLAGS_COMMON)
1056 if test "x$enable_cxx" = "xyes"; then
1058 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1060 # -std=gnu99 -xc++ is not allowed and errors.
1061 CXX_REMOVE_CFLAGS=-std=gnu99
1062 # These give warnings and should be removed. They are C-only.
1063 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1064 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1065 # Likewise with CentOS 6 gcc 4.4.
1066 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1068 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1069 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1070 # generates a warning every time we run gcc which is very unsightly.
1071 # The warning is for e.g. sprintf(foo, "") which can just be
1072 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1073 # and completely legal and valid.
1074 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1075 # Alternatively, just run $CXX -xc++ -c /dev/null.
1077 ORIG_CXXFLAGS=$CXXFLAGS
1078 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1079 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1080 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1082 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1083 CXXFLAGS=$ORIG_CXXFLAGS
1086 AC_SUBST(CXX_ADD_CFLAGS)
1087 AC_SUBST(CXX_REMOVE_CFLAGS)
1090 # Set the build profiles and options before things which use them
1093 AC_ARG_WITH(profile4_x, [ --with-profile4_x=yes,no If you want to install the 4.x FX (defaults to yes)], [], [with_profile4_x=default])
1094 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1095 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1096 AC_ARG_WITH(monotouch_watch, [ --with-monotouch_watch=yes,no If you want to build the Xamarin.WatchOS assemblies (defaults to no)], [], [with_monotouch_watch=default])
1097 AC_ARG_WITH(monotouch_tv, [ --with-monotouch_tv=yes,no If you want to build the Xamarin.TVOS assemblies (defaults to no)], [], [with_monotouch_tv=default])
1098 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1099 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1100 AC_ARG_WITH(testing_aot_full_interp, [ --with-testing_aot_full_interp=yes,no If you want to build the testing_aot_full_interp assemblies (defaults to no)], [], [with_testing_aot_full_interp=default])
1101 AC_ARG_WITH(testing_aot_hybrid, [ --with-testing_aot_hybrid=yes,no If you want to build the testing_aot_hybrid assemblies (defaults to no)], [], [with_testing_aot_hybrid=default])
1102 AC_ARG_WITH(testing_aot_full, [ --with-testing_aot_full=yes,no If you want to build the testing_aot_full assemblies (defaults to no)], [], [with_testing_aot_full=default])
1103 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1104 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1105 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1106 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1109 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,bitcode,unreal,fullaotinterp,fullaotinterp_llvm Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1110 AC_ARG_WITH(spectre-mitigation, [ --with-spectre-mitigation=yes,no If you want to build the runtime with compiler flags that enable Spectre mitigation (defaults to no)], [], [with_spectre_mitigation=default])
1111 AC_ARG_WITH(spectre-indirect-branch-choice, [ --with-spectre-indirect-branch-choice=keep,thunk,inline,extern Convert indirect branches to the specified kind of thunk (defaults to inline)], [], [with_spectre_indirect_branch_choice=inline])
1112 AC_ARG_WITH(spectre-function-return-choice, [ --with-spectre-function-return-choice=keep,thunk,inline,extern Convert function return instructions to the specified kind of thunk (defaults to inline)], [], [with_spectre_function_return_choice=inline])
1115 dnl Spectre compiler mitigation flag checks
1117 if test "x$with_spectre_mitigation" = "xyes"; then
1118 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1120 SPECTRE_INDIRECT_BRANCH_KIND=
1121 case "x$with_spectre_indirect_branch_choice" in
1122 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1123 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1124 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1125 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1126 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1129 SPECTRE_FUNCTION_RETURN_KIND=""
1130 case "x$with_spectre_function_return_choice" in
1131 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1132 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1133 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1134 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1135 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1138 AX_CHECK_COMPILE_FLAG(
1139 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1140 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1143 AX_CHECK_COMPILE_FLAG(
1144 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1145 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1148 if test "x$SPECTRE_CFLAGS" != "x" ; then
1149 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1150 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1151 spectre_mitigation_status="mitigation enabled"
1154 spectre_mitigation_status="no mitigation"
1158 dnl Profile defaults
1160 TEST_PROFILE=default
1161 enable_llvm_default=no
1163 with_profile4_x_default=no
1164 with_monodroid_default=no
1165 with_monotouch_default=no
1166 with_monotouch_watch_default=no
1167 with_monotouch_tv_default=no
1168 with_xammac_default=no
1169 with_testing_aot_full_interp_default=no
1170 with_testing_aot_hybrid_default=no
1171 with_testing_aot_full_default=no
1172 with_winaot_default=no
1173 with_orbis_default=no
1174 with_unreal_default=no
1175 with_wasm_default=no
1177 with_bitcode_default=no
1178 enable_cooperative_suspend_default=no
1179 enable_hybrid_suspend_default=no
1181 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000,nftnptr-arg-trampolines=4000
1183 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1185 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1186 DISABLE_MCS_DOCS_default=yes
1187 elif test x$with_runtime_preset = xnet_4_x; then
1188 with_profile4_x_default=yes
1189 TEST_PROFILE=net_4_x
1190 elif test x$with_runtime_preset = xall; then
1191 with_profile4_x_default=yes
1192 with_monodroid_default=yes
1193 with_monotouch_default=yes
1194 with_monotouch_watch_default=yes
1195 with_monotouch_tv_default=yes
1196 with_xammac_default=yes
1197 with_winaot_default=yes
1198 with_orbis_default=yes
1199 with_unreal_default=yes
1200 with_wasm_default=yes
1201 with_testing_aot_full_interp_default=yes
1202 with_testing_aot_hybrid_default=yes
1203 with_testing_aot_full_default=yes
1204 TEST_PROFILE=net_4_x
1205 elif test x$with_runtime_preset = xbitcode; then
1206 DISABLE_MCS_DOCS_default=yes
1207 with_testing_aot_full_default=yes
1208 with_bitcode_default=yes
1209 enable_cooperative_suspend_default=yes
1210 TEST_PROFILE=testing_aot_full
1211 enable_llvm_default=yes
1213 mono_feature_disable_com='yes'
1214 mono_feature_disable_remoting='yes'
1215 mono_feature_disable_reflection_emit_save='yes'
1216 mono_feature_disable_reflection_emit='yes'
1217 mono_feature_disable_appdomains='yes'
1219 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1220 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1222 elif test x$with_runtime_preset = xfullaot; then
1223 DISABLE_MCS_DOCS_default=yes
1224 with_testing_aot_full_default=yes
1225 TEST_PROFILE=testing_aot_full
1227 mono_feature_disable_com='yes'
1228 mono_feature_disable_remoting='yes'
1229 mono_feature_disable_reflection_emit_save='yes'
1230 mono_feature_disable_reflection_emit='yes'
1231 mono_feature_disable_appdomains='yes'
1233 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1234 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1236 elif test x$with_runtime_preset = xfullaot_llvm; then
1237 DISABLE_MCS_DOCS_default=yes
1238 with_testing_aot_full_default=yes
1239 TEST_PROFILE=testing_aot_full
1241 mono_feature_disable_com='yes'
1242 mono_feature_disable_remoting='yes'
1243 mono_feature_disable_reflection_emit_save='yes'
1244 mono_feature_disable_reflection_emit='yes'
1245 mono_feature_disable_appdomains='yes'
1247 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1248 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1250 elif test x$with_runtime_preset = xhybridaot; then
1251 DISABLE_MCS_DOCS_default=yes
1252 with_testing_aot_hybrid_default=yes
1253 TEST_PROFILE=testing_aot_hybrid
1255 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1256 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1257 elif test x$with_runtime_preset = xhybridaot_llvm; then
1258 DISABLE_MCS_DOCS_default=yes
1259 with_testing_aot_hybrid_default=yes
1260 TEST_PROFILE=testing_aot_hybrid
1262 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1263 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1264 elif test x$with_runtime_preset = xfullaotinterp; then
1265 with_testing_aot_full_interp_default=yes
1266 TEST_PROFILE=testing_aot_full_interp
1268 # mscorlib.dll aot compilation crashes
1269 mono_feature_disable_com='yes'
1271 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1272 AOT_RUN_FLAGS="--full-aot-interp"
1273 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1274 with_testing_aot_full_interp_default=yes
1275 TEST_PROFILE=testing_aot_full_interp_llvm
1277 # mscorlib.dll aot compilation crashes
1278 mono_feature_disable_com='yes'
1280 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1281 AOT_RUN_FLAGS="--full-aot-interp"
1282 elif test x$with_runtime_preset = xaot; then
1283 with_profile4_x_default=yes
1285 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1288 DISABLE_MCS_DOCS_default=yes
1289 elif test x$with_runtime_preset = xaot_llvm; then
1290 with_profile4_x_default=yes
1292 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1295 DISABLE_MCS_DOCS_default=yes
1296 elif test x$with_runtime_preset = xwinaot; then
1297 DISABLE_MCS_DOCS_default=yes
1298 with_winaot_default=yes
1301 mono_feature_disable_com='yes'
1302 mono_feature_disable_remoting='yes'
1303 mono_feature_disable_reflection_emit_save='yes'
1304 mono_feature_disable_reflection_emit='yes'
1305 mono_feature_disable_appdomains='yes'
1307 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1308 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1310 elif test x$with_runtime_preset = xorbis; then
1311 DISABLE_MCS_DOCS_default=yes
1312 with_orbis_default=yes
1315 mono_feature_disable_com='yes'
1316 mono_feature_disable_remoting='yes'
1317 mono_feature_disable_reflection_emit_save='yes'
1318 mono_feature_disable_reflection_emit='yes'
1319 mono_feature_disable_appdomains='yes'
1321 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1322 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1324 elif test x$with_runtime_preset = xunreal; then
1325 DISABLE_MCS_DOCS_default=yes
1326 with_unreal_default=yes
1329 mono_feature_disable_com='yes'
1330 mono_feature_disable_remoting='yes'
1331 mono_feature_disable_appdomains='no'
1333 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1334 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1335 elif test x$with_runtime_preset = xwasm; then
1336 DISABLE_MCS_DOCS_default=yes
1337 with_wasm_default=yes
1340 mono_feature_disable_com='yes'
1341 mono_feature_disable_remoting='yes'
1342 mono_feature_disable_reflection_emit_save='yes'
1343 mono_feature_disable_reflection_emit='yes'
1344 mono_feature_disable_appdomains='yes'
1346 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1347 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1349 TEST_PROFILE=net_4_x
1350 with_profile4_x_default=yes
1353 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1354 AC_SUBST(AOT_BUILD_FLAGS)
1355 AC_SUBST(AOT_RUN_FLAGS)
1356 # For llvmonlycheck + fullaotcheck
1357 AC_SUBST(INVARIANT_AOT_OPTIONS)
1360 AC_SUBST(TEST_PROFILE)
1362 if test "x$with_profile4_x" = "xdefault"; then
1363 with_profile4_x=$with_profile4_x_default
1365 if test "x$with_monodroid" = "xdefault"; then
1366 with_monodroid=$with_monodroid_default
1368 if test "x$with_monotouch" = "xdefault"; then
1369 with_monotouch=$with_monotouch_default
1371 if test "x$with_monotouch_watch" = "xdefault"; then
1372 with_monotouch_watch=$with_monotouch_watch_default
1374 if test "x$with_monotouch_tv" = "xdefault"; then
1375 with_monotouch_tv=$with_monotouch_tv_default
1377 if test "x$with_bitcode" = "xdefault"; then
1378 with_bitcode=$with_bitcode_default
1380 if test "x$with_xammac" = "xdefault"; then
1381 with_xammac=$with_xammac_default
1383 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1384 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1386 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1387 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1389 if test "x$with_testing_aot_full" = "xdefault"; then
1390 with_testing_aot_full=$with_testing_aot_full_default
1392 if test "x$with_winaot" = "xdefault"; then
1393 with_winaot=$with_winaot_default
1395 if test "x$with_orbis" = "xdefault"; then
1396 with_orbis=$with_orbis_default
1398 if test "x$with_unreal" = "xdefault"; then
1399 with_unreal=$with_unreal_default
1401 if test "x$with_wasm" = "xdefault"; then
1402 with_wasm=$with_wasm_default
1406 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1407 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1408 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1409 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1410 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1411 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1412 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1413 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1414 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1415 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1416 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1417 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1418 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1419 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1420 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1421 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"])
1422 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1423 AM_CONDITIONAL(AOT_FULL_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"])
1424 AM_CONDITIONAL(AOT_FULL_INTERP_LLVM_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp_llvm"])
1425 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1427 default_profile=net_4_x
1428 if test -z "$INSTALL_MONODROID_TRUE"; then :
1429 default_profile=monodroid
1431 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1432 default_profile=monotouch
1434 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1435 default_profile=xammac
1437 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1438 default_profile=testing_aot_full_interp
1440 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1441 default_profile=testing_aot_hybrid
1443 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1444 default_profile=testing_aot_full
1446 if test -z "$INSTALL_WINAOT_TRUE"; then :
1447 default_profile=winaot
1449 if test -z "$INSTALL_ORBIS_TRUE"; then :
1450 default_profile=orbis
1452 if test -z "$INSTALL_UNREAL_TRUE"; then :
1453 default_profile=unreal
1455 if test -z "$INSTALL_WASM_TRUE"; then :
1456 default_profile=wasm
1458 if test -z "$INSTALL_4_x_TRUE"; then :
1459 default_profile=net_4_x
1461 DEFAULT_PROFILE=$default_profile
1462 AC_SUBST(DEFAULT_PROFILE)
1465 # End build profile configuration
1468 if test x$USE_NLS = xprofile_default; then
1470 AC_MSG_CHECKING([NLS used])
1472 # We make the default value for USE_NLS
1473 # "no" on OSX because it isn't available on most
1474 # default OSX installs. The most common configurations will
1475 # all disable it, so this saves us typing.
1476 if test x$host_darwin = xyes; then
1483 AC_MSG_RESULT([$USE_NLS])
1486 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1487 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1488 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1489 security, lldb, mdb, assert_messages, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1491 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1492 eval "mono_feature_disable_$feature='yes'"
1494 DISABLED_FEATURES=$enable_minimal
1495 disabled="Disabled: $enable_minimal"
1498 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1500 if test "x$mono_feature_disable_aot" = "xyes"; then
1501 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1502 enable_system_aot=no
1503 AC_MSG_NOTICE([Disabled AOT compiler])
1506 if test "x$mono_feature_disable_profiler" = "xyes"; then
1507 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1508 AC_MSG_NOTICE([Disabled support for the profiler])
1510 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1512 if test "x$mono_feature_disable_decimal" = "xyes"; then
1513 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1514 AC_MSG_NOTICE([Disabled support for decimal])
1517 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1518 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1519 AC_MSG_NOTICE([Disabled support for P/Invoke])
1522 if test "x$mono_feature_disable_debug" = "xyes"; then
1523 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1524 AC_MSG_NOTICE([Disabled support for runtime debugging])
1527 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1528 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1529 mono_feature_disable_reflection_emit_save=yes
1530 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1533 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1534 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1535 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1538 if test "x$mono_feature_disable_large_code" = "xyes"; then
1539 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1540 AC_MSG_NOTICE([Disabled support for large assemblies])
1543 if test "x$mono_feature_disable_logging" = "xyes"; then
1544 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1545 AC_MSG_NOTICE([Disabled support for logging])
1548 if test "x$mono_feature_disable_com" = "xyes"; then
1549 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1550 AC_MSG_NOTICE([Disabled COM support])
1553 if test "x$mono_feature_disable_ssa" = "xyes"; then
1554 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1555 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1558 if test "x$mono_feature_disable_generics" = "xyes"; then
1559 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1560 AC_MSG_NOTICE([Disabled Generics Support])
1563 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1564 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1565 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1568 if test "x$mono_feature_disable_portability" = "xyes"; then
1569 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1570 AC_MSG_NOTICE([Disabled IO Portability layer])
1573 if test "x$mono_feature_disable_attach" = "xyes"; then
1574 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1575 AC_MSG_NOTICE([Disabled agent attach])
1578 if test "x$mono_feature_disable_verifier" = "xyes"; then
1579 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1580 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1583 if test "x$mono_feature_disable_jit" = "xyes"; then
1584 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1585 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1588 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1590 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1591 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1592 AC_MSG_NOTICE([Disabled the interpreter])
1595 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1597 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1598 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1601 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1603 if test "x$mono_feature_disable_simd" = "xyes"; then
1604 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1605 AC_MSG_NOTICE([Disabled SIMD support])
1608 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1609 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1610 AC_MSG_NOTICE([Disabled Soft Debugger.])
1613 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1615 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1616 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1617 AC_MSG_NOTICE([Disabled Performance Counters.])
1619 if test "x$mono_feature_disable_normalization" = "xyes"; then
1620 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1621 AC_MSG_NOTICE([Disabled String normalization support.])
1624 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1625 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1626 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1627 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1630 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1631 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1632 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1635 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1636 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1637 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1640 if test "x$mono_feature_disable_remoting" = "xyes"; then
1641 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1642 AC_MSG_NOTICE([Disabled remoting])
1645 if test "x$mono_feature_disable_security" = "xyes"; then
1646 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1647 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1650 if test "x$mono_feature_disable_lldb" = "xyes"; then
1651 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1652 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1655 if test "x$mono_feature_disable_mdb" = "xyes"; then
1656 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1657 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1660 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1661 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1662 AC_MSG_NOTICE([Disabled assertion messages.])
1665 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1666 AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1667 AC_MSG_NOTICE([Disabled runtime cleanup.])
1670 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1671 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1672 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1676 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1677 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1678 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1681 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1682 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1683 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1686 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1687 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1688 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1691 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1692 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1694 has_extension_module=no
1695 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1697 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1698 if test x$extension = xdefault ; then
1699 has_extension_module=yes;
1702 if test x$enable_extension_module = xyes; then
1703 has_extension_module=yes;
1707 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1709 if test x$has_extension_module != xno ; then
1710 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1711 AC_MSG_NOTICE([Enabling mono extension module.])
1715 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1717 AC_MSG_CHECKING(for visibility __attribute__)
1720 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1721 int main () { doit (); return 0; }
1724 have_visibility_hidden=yes
1727 have_visibility_hidden=no
1732 dnl Boehm GC configuration
1735 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1737 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1738 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1740 if test "x$support_boehm" = "xyes"; then
1742 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1743 if test x$enable_parallel_mark = xyes; then
1744 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1754 if test "x$support_boehm" = "xyes"; then
1758 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1759 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1760 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1762 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1764 if test x$target_win32 = xyes; then
1765 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1766 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1769 gc_msg="Included Boehm GC with typed GC"
1770 if test x$enable_parallel_mark = xyes; then
1771 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1772 gc_msg="$gc_msg and parallel mark"
1774 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1779 AC_MSG_WARN("External Boehm is no longer supported")
1783 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1787 AC_MSG_WARN("Compiling mono without GC.")
1788 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1789 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1793 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1797 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])
1798 if test "x$large_heap" = "xyes"; then
1799 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1802 AC_SUBST(LIBGC_CPPFLAGS)
1803 AC_SUBST(LIBGC_LIBS)
1804 AC_SUBST(LIBGC_STATIC_LIBS)
1806 AC_SUBST(BOEHM_DEFINES)
1809 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1812 dnl End of Boehm GC Configuration
1815 dnl *************************************
1816 dnl *** Checks for zero length arrays ***
1817 dnl *************************************
1818 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1826 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1829 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1832 dnl ***********************************
1833 dnl *** Checks for signals
1834 dnl ***********************************
1835 AC_CHECK_HEADERS(signal.h)
1836 AC_CHECK_FUNCS(sigaction)
1837 AC_CHECK_FUNCS(kill)
1838 AC_CHECK_FUNCS(signal)
1840 # signal() is declared inline in Android headers
1841 # so we need to workaround it by overriding the check.
1842 if test x$platform_android = xyes; then
1843 AC_DEFINE(HAVE_SIGNAL,1)
1846 dnl ***********************************
1847 dnl *** Checks for availability of GSS dependencies (krb5, gss.framework, etc)
1848 dnl ***********************************
1850 AC_MSG_CHECKING(for GSS/GSS.h)
1852 #include <GSS/GSS.h>
1856 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
1857 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1863 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
1865 #include <gssapi/gssapi_ext.h>
1874 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
1876 #include <gssapi/gssapi_ext.h>
1877 #include <gssapi/gssapi_krb5.h>
1878 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
1882 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1887 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
1889 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1890 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1892 if test x$host_win32 = xno; then
1893 dnl *************************************
1894 dnl *** Checks for time capabilities ***
1895 dnl *************************************
1897 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1898 AC_TRY_COMPILE([#include <time.h>], [
1899 const int foo = CLOCK_MONOTONIC;
1902 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1907 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1908 AC_TRY_COMPILE([#include <time.h>], [
1909 const int foo = CLOCK_MONOTONIC_COARSE;
1912 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1917 AC_MSG_CHECKING(for CLOCK_REALTIME)
1918 AC_TRY_COMPILE([#include <time.h>], [
1919 const int foo = CLOCK_REALTIME;
1922 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1927 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1928 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1929 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1930 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1931 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1932 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1934 dnl hires monotonic clock support
1935 AC_SEARCH_LIBS(clock_gettime, rt)
1936 AC_CHECK_FUNCS(clock_nanosleep)
1938 dnl dynamic loader support
1939 AC_CHECK_FUNC(dlopen, DL_LIB="",
1940 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1942 if test x$dl_support = xno; then
1943 AC_MSG_WARN([No dynamic loading support available])
1945 LIBS="$LIBS $DL_LIB"
1946 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1947 dnl from glib's configure.ac
1948 AC_CACHE_CHECK([for preceeding underscore in symbols],
1950 AC_TRY_RUN([#include <dlfcn.h>
1951 int mono_underscore_test (void) { return 42; }
1953 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1954 handle = dlopen ((void*)0, 0);
1956 f1 = dlsym (handle, "mono_underscore_test");
1957 f2 = dlsym (handle, "_mono_underscore_test");
1958 } return (!f2 || f1);
1960 [mono_cv_uscore=yes],
1961 [mono_cv_uscore=no],
1964 if test "x$mono_cv_uscore" = "xyes"; then
1965 MONO_DL_NEED_USCORE=1
1967 MONO_DL_NEED_USCORE=0
1969 AC_SUBST(MONO_DL_NEED_USCORE)
1970 AC_CHECK_FUNC(dlerror)
1973 dnl ******************************************************************
1974 dnl *** Checks for the IKVM JNI interface library ***
1975 dnl ******************************************************************
1976 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])
1979 if test x$with_ikvm_native = xyes; then
1980 ikvm_native_dir=ikvm-native
1981 jdk_headers_found="IKVM Native"
1984 AC_SUBST(ikvm_native_dir)
1986 AC_CHECK_HEADERS(execinfo.h)
1988 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1990 AC_CHECK_FUNCS(getgrgid_r)
1991 AC_CHECK_FUNCS(getgrnam_r)
1992 AC_CHECK_FUNCS(getresuid)
1993 AC_CHECK_FUNCS(setresuid)
1994 AC_CHECK_FUNCS(kqueue)
1995 AC_CHECK_FUNCS(backtrace_symbols)
1996 AC_CHECK_FUNCS(mkstemp)
1997 AC_CHECK_FUNCS(mmap)
1998 AC_CHECK_FUNCS(madvise)
1999 AC_CHECK_FUNCS(getrusage)
2000 AC_CHECK_FUNCS(getpriority)
2001 AC_CHECK_FUNCS(setpriority)
2002 AC_CHECK_FUNCS(dl_iterate_phdr)
2003 AC_CHECK_FUNCS(dladdr)
2004 AC_CHECK_FUNCS(sysconf)
2005 AC_CHECK_FUNCS(getrlimit)
2006 AC_CHECK_FUNCS(prctl)
2007 AC_CHECK_FUNCS(arc4random)
2008 AC_CHECK_FUNCS(nl_langinfo)
2010 AC_CHECK_FUNCS(sched_getaffinity)
2011 AC_CHECK_FUNCS(sched_setaffinity)
2012 AC_CHECK_FUNCS(sched_getcpu)
2014 if test x$platform_android != xyes; then
2015 AC_CHECK_FUNCS(getpwnam_r)
2016 AC_CHECK_FUNCS(getpwuid_r)
2019 AC_FUNC_STRERROR_R()
2021 dnl ****************************************************************
2022 dnl *** Check for sched_setaffinity from glibc versions before ***
2023 dnl *** 2.3.4. The older versions of the function only take 2 ***
2024 dnl *** parameters, not 3. ***
2026 dnl *** Because the interface change was not made in a minor ***
2027 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2028 dnl *** won't always indicate the interface sched_affinity has. ***
2029 dnl ****************************************************************
2030 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2031 AC_TRY_COMPILE([#include <sched.h>], [
2033 sched_setaffinity(0, &mask);
2035 # Yes, we have it...
2037 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2039 # We have the new, three-parameter version
2042 AC_TRY_COMPILE([#include <sched.h>], [
2043 CPU_COUNT((void *) 0);
2046 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2048 # We have the new, three-parameter version
2052 dnl ******************************************************************
2053 dnl *** Check for large file support ***
2054 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2055 dnl ******************************************************************
2057 # Check that off_t can represent 2**63 - 1 correctly, working around
2058 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2059 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2061 AC_DEFUN([LARGE_FILES], [
2062 large_CPPFLAGS=$CPPFLAGS
2063 CPPFLAGS="$CPPFLAGS $1"
2065 #include <sys/types.h>
2068 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2069 #define COMPILE_TIME_ASSERT(pred) \
2070 switch(0){case 0:case pred:;}
2071 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2074 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2075 large_CPPFLAGS="$large_CPPFLAGS $1"
2080 CPPFLAGS=$large_CPPFLAGS
2083 AC_MSG_CHECKING(if off_t is 64 bits wide)
2085 if test $large_offt = no; then
2086 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2087 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2089 if test $large_offt = no; then
2090 AC_MSG_WARN([No 64 bit file size support available])
2093 dnl *****************************
2094 dnl *** Checks for libsocket ***
2095 dnl *****************************
2096 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2100 dnl *****************************
2101 dnl *** Checks for libinotify ***
2102 dnl *****************************
2103 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2106 dnl *******************************
2107 dnl *** Checks for MSG_NOSIGNAL ***
2108 dnl *******************************
2109 AC_MSG_CHECKING(for MSG_NOSIGNAL)
2110 AC_TRY_COMPILE([#include <sys/socket.h>], [
2111 int f = MSG_NOSIGNAL;
2113 # Yes, we have it...
2115 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2117 # We'll have to use signals
2121 dnl *****************************
2122 dnl *** Checks for IPPROTO_IP ***
2123 dnl *****************************
2124 AC_MSG_CHECKING(for IPPROTO_IP)
2125 AC_TRY_COMPILE([#include <netinet/in.h>], [
2126 int level = IPPROTO_IP;
2128 # Yes, we have it...
2130 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2132 # We'll have to use getprotobyname
2136 dnl *******************************
2137 dnl *** Checks for IPPROTO_IPV6 ***
2138 dnl *******************************
2139 AC_MSG_CHECKING(for IPPROTO_IPV6)
2140 AC_TRY_COMPILE([#include <netinet/in.h>], [
2141 int level = IPPROTO_IPV6;
2143 # Yes, we have it...
2145 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2147 # We'll have to use getprotobyname
2151 dnl ******************************
2152 dnl *** Checks for IPPROTO_TCP ***
2153 dnl ******************************
2154 AC_MSG_CHECKING(for IPPROTO_TCP)
2155 AC_TRY_COMPILE([#include <netinet/in.h>], [
2156 int level = IPPROTO_TCP;
2158 # Yes, we have it...
2160 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2162 # We'll have to use getprotobyname
2166 dnl *****************************
2167 dnl *** Checks for SOL_IP ***
2168 dnl *****************************
2169 AC_MSG_CHECKING(for SOL_IP)
2170 AC_TRY_COMPILE([#include <netdb.h>], [
2173 # Yes, we have it...
2175 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2177 # We'll have to use getprotobyname
2181 dnl *****************************
2182 dnl *** Checks for SOL_IPV6 ***
2183 dnl *****************************
2184 AC_MSG_CHECKING(for SOL_IPV6)
2185 AC_TRY_COMPILE([#include <netdb.h>], [
2186 int level = SOL_IPV6;
2188 # Yes, we have it...
2190 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2192 # We'll have to use getprotobyname
2196 dnl *****************************
2197 dnl *** Checks for SOL_TCP ***
2198 dnl *****************************
2199 AC_MSG_CHECKING(for SOL_TCP)
2200 AC_TRY_COMPILE([#include <netdb.h>], [
2201 int level = SOL_TCP;
2203 # Yes, we have it...
2205 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2207 # We'll have to use getprotobyname
2211 dnl *****************************
2212 dnl *** Checks for IP_PKTINFO ***
2213 dnl *****************************
2214 AC_MSG_CHECKING(for IP_PKTINFO)
2215 AC_TRY_COMPILE([#include <linux/in.h>], [
2216 int level = IP_PKTINFO;
2218 # Yes, we have it...
2220 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2225 dnl *****************************
2226 dnl *** Checks for IPV6_PKTINFO ***
2227 dnl *****************************
2228 AC_MSG_CHECKING(for IPV6_PKTINFO)
2229 AC_TRY_COMPILE([#include <netdb.h>], [
2230 int level = IPV6_PKTINFO;
2232 # Yes, we have it...
2234 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2239 dnl **********************************
2240 dnl *** Checks for IP_DONTFRAG ***
2241 dnl **********************************
2242 AC_MSG_CHECKING(for IP_DONTFRAG)
2243 AC_TRY_COMPILE([#include <netinet/in.h>], [
2244 int level = IP_DONTFRAG;
2246 # Yes, we have it...
2248 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2253 dnl **********************************
2254 dnl *** Checks for IP_DONTFRAGMENT ***
2255 dnl **********************************
2256 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2257 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2258 int level = IP_DONTFRAGMENT;
2260 # Yes, we have it...
2262 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2267 dnl **********************************
2268 dnl *** Checks for IP_MTU_DISCOVER ***
2269 dnl **********************************
2270 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2271 AC_TRY_COMPILE([#include <linux/in.h>], [
2272 int level = IP_MTU_DISCOVER;
2274 # Yes, we have it...
2276 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2281 dnl **********************************
2282 dnl *** Checks for IP_PMTUDISC_DO ***
2283 dnl **********************************
2284 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2285 AC_TRY_COMPILE([#include <linux/in.h>], [
2286 int level = IP_PMTUDISC_DO;
2288 # Yes, we have it...
2290 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2295 dnl *********************************
2296 dnl *** Check for struct ip_mreqn ***
2297 dnl *********************************
2298 AC_MSG_CHECKING(for struct ip_mreqn)
2299 AC_TRY_COMPILE([#include <netinet/in.h>], [
2300 struct ip_mreqn mreq;
2301 mreq.imr_address.s_addr = 0;
2303 # Yes, we have it...
2305 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2307 # We'll just have to try and use struct ip_mreq
2309 AC_MSG_CHECKING(for struct ip_mreq)
2310 AC_TRY_COMPILE([#include <netinet/in.h>], [
2311 struct ip_mreq mreq;
2312 mreq.imr_interface.s_addr = 0;
2314 # Yes, we have it...
2316 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2318 # No multicast support
2323 dnl **********************************
2324 dnl *** Check for getaddrinfo ***
2325 dnl **********************************
2326 AC_MSG_CHECKING(for getaddrinfo)
2331 getaddrinfo(NULL,NULL,NULL,NULL);
2333 # Yes, we have it...
2335 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2340 dnl **********************************
2341 dnl *** Check for gethostbyname2_r ***
2342 dnl **********************************
2343 AC_MSG_CHECKING(for gethostbyname2_r)
2349 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2351 # Yes, we have it...
2353 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2358 dnl **********************************
2359 dnl *** Check for gethostbyname2 ***
2360 dnl **********************************
2361 AC_MSG_CHECKING(for gethostbyname2)
2366 gethostbyname2(NULL,0);
2368 # Yes, we have it...
2370 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2375 dnl **********************************
2376 dnl *** Check for gethostbyname ***
2377 dnl **********************************
2378 AC_MSG_CHECKING(for gethostbyname)
2383 gethostbyname(NULL);
2385 # Yes, we have it...
2387 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2392 dnl **********************************
2393 dnl *** Check for getprotobyname ***
2394 dnl **********************************
2395 AC_MSG_CHECKING(for getprotobyname)
2400 getprotobyname(NULL);
2402 # Yes, we have it...
2404 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2409 dnl **********************************
2410 dnl *** Check for getprotobyname_r ***
2411 dnl **********************************
2412 AC_MSG_CHECKING(for getprotobyname_r)
2417 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2419 # Yes, we have it...
2421 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2426 dnl **********************************
2427 dnl *** Check for getnameinfo ***
2428 dnl **********************************
2429 AC_MSG_CHECKING(for getnameinfo)
2434 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2436 # Yes, we have it...
2438 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2444 dnl **********************************
2445 dnl *** Check for inet_ntop ***
2446 dnl **********************************
2447 AC_MSG_CHECKING(for inet_ntop)
2450 #include <arpa/inet.h>
2452 inet_ntop (0, NULL, NULL, 0);
2454 # Yes, we have it...
2456 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2461 dnl *****************************
2462 dnl *** Checks for libnsl ***
2463 dnl *****************************
2464 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2466 AC_CHECK_FUNCS(inet_pton inet_aton)
2468 dnl *****************************
2469 dnl *** Checks for libxnet ***
2470 dnl *****************************
2473 AC_MSG_CHECKING(for Solaris XPG4 support)
2474 if test -f /usr/lib/libxnet.so; then
2475 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2476 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2477 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2484 if test "$GCC" = "yes"; then
2485 CFLAGS="$CFLAGS -Wno-char-subscripts"
2490 dnl *****************************
2491 dnl *** Checks for libpthread ***
2492 dnl *****************************
2493 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2494 # and libpthread does not exist
2498 dnl Haiku has pthread in libroot (libc equiv)
2499 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2502 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2505 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2508 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2511 AC_CHECK_HEADERS(pthread.h)
2512 AC_CHECK_HEADERS(pthread_np.h)
2513 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2514 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2515 AC_CHECK_FUNCS(pthread_kill)
2516 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2517 AC_TRY_COMPILE([ #include <pthread.h>], [
2518 pthread_mutexattr_t attr;
2519 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2524 AC_ERROR(Posix system lacks support for recursive mutexes)
2526 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2527 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2528 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2529 AC_CHECK_FUNCS(mincore mlock munlock)
2531 dnl ***********************************
2532 dnl *** Checks for working __thread ***
2533 dnl ***********************************
2534 AC_MSG_CHECKING(for working __thread)
2535 if test "x$with_tls" != "x__thread"; then
2536 AC_MSG_RESULT(disabled)
2537 elif test "x$cross_compiling" = "xyes"; then
2538 AC_MSG_RESULT(cross compiling, assuming yes)
2541 #if defined(__APPLE__) && defined(__clang__)
2542 #error "__thread does not currently work with clang on Mac OS X"
2545 #include <pthread.h>
2547 static int res1, res2;
2549 void thread_main (void *arg)
2564 pthread_create (&t1, NULL, thread_main, 1);
2565 pthread_create (&t2, NULL, thread_main, 2);
2567 pthread_join (t1, NULL);
2568 pthread_join (t2, NULL);
2570 return !(res1 + res2 == 2);
2580 dnl **************************************
2581 dnl *** Checks for working sigaltstack ***
2582 dnl **************************************
2583 AC_MSG_CHECKING(for working sigaltstack)
2584 if test "x$with_sigaltstack" != "xyes"; then
2585 AC_MSG_RESULT(disabled)
2586 elif test "x$cross_compiling" = "xyes"; then
2587 AC_MSG_RESULT(cross compiling, assuming yes)
2594 #include <pthread.h>
2595 #include <sys/wait.h>
2596 #if defined(__FreeBSD__) || defined(__NetBSD__)
2597 #define SA_STACK SA_ONSTACK
2600 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2605 volatile char*__ptr = NULL;
2607 loop (void *ignored)
2616 struct sigaction sa;
2619 pthread_attr_t attr;
2621 sa.sa_sigaction = sigsegv_signal_handler;
2622 sigemptyset (&sa.sa_mask);
2623 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2624 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2625 perror ("sigaction");
2629 /* x86 darwin deliver segfaults using SIGBUS */
2630 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2631 perror ("sigaction");
2634 sas.ss_sp = malloc (SIGSTKSZ);
2635 sas.ss_size = SIGSTKSZ;
2637 if (sigaltstack (&sas, NULL) == -1) {
2638 perror ("sigaltstack");
2642 pthread_attr_init (&attr);
2643 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2644 printf ("pthread_create\n");
2668 for (i = 0; i < 300; ++i) {
2669 waitpid (son, &status, WNOHANG);
2670 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2675 kill (son, SIGKILL);
2681 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2688 dnl ********************************
2689 dnl *** Checks for semaphore lib ***
2690 dnl ********************************
2691 # 'Real Time' functions on Solaris
2692 # posix4 on Solaris 2.6
2693 # pthread (first!) on Linux
2694 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2696 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2697 AC_CHECK_FUNCS(shm_open)
2699 dnl ********************************
2700 dnl *** Checks for timezone stuff **
2701 dnl ********************************
2702 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2708 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2709 if test $ac_cv_struct_tm_gmtoff = yes; then
2710 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2712 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2717 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2718 if test $ac_cv_var_timezone = yes; then
2719 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2721 AC_ERROR(unable to find a way to determine timezone)
2725 dnl *********************************
2726 dnl *** Checks for math functions ***
2727 dnl *********************************
2728 AC_SEARCH_LIBS(sqrtf, m)
2730 dnl ****************************************************************
2731 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2732 dnl *** have it in the library (duh)) ***
2733 dnl ****************************************************************
2734 AC_CHECK_FUNCS(poll)
2736 dnl **********************************
2738 dnl **********************************
2739 AC_CHECK_HEADERS(sys/epoll.h)
2741 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2742 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2743 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2748 AC_CHECK_HEADERS(sys/event.h)
2749 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2751 dnl **************************************
2752 dnl * Darwin has a race that prevents us from using reliably:
2753 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2754 dnl * Since kqueue is mostly used for scaling large web servers,
2755 dnl * and very few folks run Mono on large web servers on OSX, falling
2757 dnl **************************************
2758 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2759 if test "x$host_darwin" = "xno"; then
2760 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2764 dnl ******************************
2765 dnl *** Checks for SIOCGIFCONF ***
2766 dnl ******************************
2767 AC_CHECK_HEADERS(sys/ioctl.h)
2768 AC_CHECK_HEADERS(net/if.h, [], [],
2770 #ifdef HAVE_SYS_TYPES_H
2771 # include <sys/types.h>
2773 #ifdef HAVE_SYS_SOCKET_H
2774 # include <sys/socket.h>
2777 AC_MSG_CHECKING(for ifreq)
2780 #include <sys/ioctl.h>
2788 x = (void *) &ifr->ifr_addr;
2791 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2795 dnl **********************************
2796 dnl *** Checks for sin_len ***
2797 dnl **********************************
2798 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2800 #include <netinet/in.h>
2802 struct sockaddr_in saddr;
2803 saddr.sin_len = sizeof (saddr);
2806 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2810 dnl **********************************
2811 dnl *** Checks for sin6_len ***
2812 dnl **********************************
2813 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2815 #include <netinet/in.h>
2817 struct sockaddr_in6 saddr6;
2818 saddr6.sin6_len = sizeof (saddr6);
2821 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2825 dnl **********************************
2826 dnl *** Check for getifaddrs ***
2827 dnl **********************************
2828 AC_MSG_CHECKING(for getifaddrs)
2831 #include <sys/types.h>
2832 #include <sys/socket.h>
2833 #include <ifaddrs.h>
2837 # Yes, we have it...
2839 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2843 dnl **********************************
2844 dnl *** Check for if_nametoindex ***
2845 dnl **********************************
2846 AC_MSG_CHECKING(for if_nametoindex)
2849 #include <sys/types.h>
2850 #include <sys/socket.h>
2853 if_nametoindex(NULL);
2855 # Yes, we have it...
2857 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2861 dnl **********************************
2862 dnl *** Check for access ***
2863 dnl **********************************
2864 AC_MSG_CHECKING(for access)
2870 # Yes, we have it...
2872 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2877 dnl **********************************
2878 dnl *** Checks for proclib ***
2879 dnl **********************************
2880 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.)])
2881 dnl **********************************
2882 dnl *** Checks for MonoPosixHelper ***
2883 dnl **********************************
2884 AC_CHECK_HEADERS(checklist.h)
2885 AC_CHECK_HEADERS(pathconf.h)
2886 AC_CHECK_HEADERS(fstab.h)
2887 AC_CHECK_HEADERS(attr/xattr.h)
2888 AC_CHECK_HEADERS(sys/extattr.h)
2889 AC_CHECK_HEADERS(sys/sendfile.h)
2890 AC_CHECK_HEADERS(sys/statvfs.h)
2891 AC_CHECK_HEADERS(sys/statfs.h)
2892 AC_CHECK_HEADERS(sys/vfstab.h)
2893 AC_CHECK_HEADERS(sys/xattr.h)
2894 AC_CHECK_HEADERS(sys/mman.h)
2895 AC_CHECK_HEADERS(sys/param.h)
2896 AC_CHECK_HEADERS(sys/mount.h, [], [],
2898 #ifdef HAVE_SYS_PARAM_H
2899 # include <sys/param.h>
2902 AC_CHECK_HEADERS(sys/mount.h)
2903 AC_CHECK_FUNCS(confstr)
2904 AC_CHECK_FUNCS(seekdir telldir)
2905 AC_CHECK_FUNCS(getdomainname)
2906 AC_CHECK_FUNCS(setdomainname)
2907 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2908 AC_CHECK_FUNCS(setgroups)
2909 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2910 AC_CHECK_FUNCS(getfsstat)
2911 AC_CHECK_FUNCS(lutimes futimes)
2912 AC_CHECK_FUNCS(mremap)
2913 AC_CHECK_FUNCS(remap_file_pages)
2914 AC_CHECK_FUNCS(posix_fadvise)
2915 AC_CHECK_FUNCS(posix_fallocate)
2916 AC_CHECK_FUNCS(posix_madvise)
2917 AC_CHECK_FUNCS(vsnprintf)
2918 AC_CHECK_FUNCS(sendfile)
2919 AC_CHECK_FUNCS(gethostid sethostid)
2920 AC_CHECK_FUNCS(sethostname)
2921 AC_CHECK_FUNCS(statfs)
2922 AC_CHECK_FUNCS(fstatfs)
2923 AC_CHECK_FUNCS(statvfs)
2924 AC_CHECK_FUNCS(fstatvfs)
2925 AC_CHECK_FUNCS(stime)
2926 AC_CHECK_FUNCS(ttyname_r)
2927 AC_CHECK_FUNCS(psignal)
2928 AC_CHECK_FUNCS(getlogin_r)
2929 AC_CHECK_FUNCS(lockf)
2930 AC_CHECK_FUNCS(swab)
2931 AC_CHECK_FUNCS(setusershell endusershell)
2932 AC_CHECK_FUNCS(futimens utimensat)
2933 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2934 AC_CHECK_FUNCS(readv writev preadv pwritev)
2935 AC_CHECK_FUNCS(setpgid)
2936 AC_CHECK_FUNCS(system)
2937 AC_CHECK_FUNCS(fork execv execve)
2938 AC_CHECK_FUNCS(waitpid)
2939 AC_CHECK_FUNCS(accept4)
2940 AC_CHECK_FUNCS(localtime_r)
2941 AC_CHECK_FUNCS(mkdtemp)
2942 AC_CHECK_SIZEOF(size_t)
2943 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2944 [#include <sys/types.h>
2945 #include <sys/stat.h>
2946 #include <unistd.h>])
2947 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2948 [#include <sys/types.h>
2949 #include <sys/stat.h>
2950 #include <unistd.h>])
2951 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2952 [#include <sys/time.h>])
2953 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2954 [#include <sys/socket.h>])
2955 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2956 [#include <unistd.h>
2957 #include <fcntl.h>])
2958 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2959 [#include <sys/uio.h>])
2960 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2961 [#include <sys/socket.h>])
2962 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2963 [#include <sys/poll.h>])
2964 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2965 [#include <sys/socket.h>])
2966 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2967 [#include <sys/socket.h>])
2968 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2969 [#include <netinet/in.h>])
2970 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2971 [#include <netinet/in.h>])
2972 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2973 [#include <sys/un.h>])
2974 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2975 [#include <sys/types.h>
2976 #include <sys/stat.h>
2977 #include <unistd.h>])
2978 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2979 [#include <time.h>])
2980 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2981 [#include <sys/time.h>
2982 #include <sys/types.h>
2983 #include <utime.h>])
2984 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2985 [#include <sys/time.h>])
2986 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2987 [#include <sys/types.h>
2988 #include <utime.h>])
2990 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2991 [#include <sys/types.h>
2992 #include <dirent.h>])
2994 [struct passwd.pw_gecos],,,
2995 [#include <sys/types.h>
2998 [struct statfs.f_flags],,,
2999 [#include <sys/types.h>
3000 #include <sys/vfs.h>])
3002 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
3003 [#include <sys/types.h>
3004 #include <sys/stat.h>
3005 #include <unistd.h>])
3007 dnl Favour xattr through glibc, but use libattr if we have to
3008 AC_CHECK_FUNC(lsetxattr, ,
3009 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3013 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3015 [struct kinfo_proc.kp_proc],,,
3016 [#include <sys/types.h>
3017 #include <sys/param.h>
3018 #include <sys/sysctl.h>
3019 #include <sys/proc.h>
3022 dnl *********************************
3023 dnl *** Checks for Windows compilation ***
3024 dnl *********************************
3025 AC_CHECK_HEADERS(sys/time.h)
3026 AC_CHECK_HEADERS(sys/param.h)
3027 AC_CHECK_HEADERS(dirent.h)
3029 dnl ******************************************
3030 dnl *** Checks for OSX and iOS compilation ***
3031 dnl ******************************************
3032 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3034 dnl *********************************
3035 dnl *** Check for Console 2.0 I/O ***
3036 dnl *********************************
3037 AC_CHECK_HEADERS([curses.h])
3038 AC_CHECK_HEADERS([term.h], [], [],
3043 AC_CHECK_HEADERS([termios.h])
3045 dnl *********************************
3046 dnl *** Checks for random ***
3047 dnl *********************************
3048 if test x$host_darwin = xno; then
3049 AC_CHECK_HEADERS(sys/random.h)
3050 AC_CHECK_FUNCS(getrandom getentropy)
3053 dnl *********************************
3054 dnl *** Checks for Mono.Native ***
3055 dnl *********************************
3057 AC_MSG_CHECKING(for linux/in.h)
3059 #include <sys/socket.h>
3060 #include <linux/in.h>
3064 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3069 AC_CHECK_HEADERS([linux/if_packet.h])
3071 AC_MSG_CHECKING(for struct in_pktinfo)
3073 #ifdef HAVE_LINUX_IN_H
3074 #include <sys/socket.h>
3075 #include <linux/in.h>
3077 #include <netinet/in.h>
3080 struct in_pktinfo pktinfo;
3083 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3088 AC_MSG_CHECKING(for struct ip_mreqn)
3091 #include <sys/socket.h>
3092 #include <linux/in.h>
3094 #include <netinet/in.h>
3097 struct ip_mreqn mreqn;
3100 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3105 if test x$host_darwin = xno; then
3106 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3109 if test x$mono_native_platform_ios = xno; then
3110 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3111 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3112 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3115 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3116 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3117 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3118 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3119 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3120 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3121 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3122 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3123 AC_CHECK_FUNC(posix_fadvise, [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
3124 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3125 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3126 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3127 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3128 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3129 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3130 AC_CHECK_FUNC(arc4random_buf, [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3131 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3132 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3133 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3135 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3136 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3138 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>]])
3139 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>]])
3140 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>]])
3141 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>]])
3142 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3143 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3144 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3146 AC_MSG_CHECKING(for struct statfs)
3148 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3149 #include <sys/mount.h>
3151 #include <sys/statfs.h>
3157 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3162 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3163 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3166 AC_MSG_CHECKING(for readdir_r)
3171 struct dirent* entry;
3172 struct dirent* result;
3173 readdir_r(dir, entry, &result);
3176 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3181 AC_MSG_CHECKING(for kevent with void *data)
3183 #include <sys/types.h>
3184 #include <sys/event.h>
3186 struct kevent event;
3188 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3191 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3196 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3197 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3199 AC_MSG_CHECKING(for sendfile with 4 arguments)
3201 #include <sys/sendfile.h>
3203 int result = sendfile(0, 0, 0, 0);
3206 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3211 AC_MSG_CHECKING(for sendfile with 6 arguments)
3214 #include <sys/types.h>
3215 #include <sys/socket.h>
3216 #include <sys/uio.h>
3218 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3221 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3226 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3227 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3228 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3229 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3231 ORIG_CFLAGS="$CFLAGS"
3232 CFLAGS="-Werror -Wsign-conversion"
3234 AC_MSG_CHECKING(for getnameinfo with signed flags)
3236 #include <sys/types.h>
3239 const struct sockaddr *addr;
3246 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3249 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3254 CFLAGS="$ORIG_CFLAGS"
3256 if test "x$host_linux" = "xyes"; then
3257 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3259 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3262 ORIG_CFLAGS="$CFLAGS"
3263 CFLAGS="-Werror -Wsign-conversion"
3265 AC_MSG_CHECKING(for bind with unsigned addrlen)
3267 #include <sys/socket.h>
3270 struct sockaddr* addr;
3272 bind(fd, addr, addrLen);
3275 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3280 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3282 #include <netinet/in.h>
3283 #include <netinet/tcp.h>
3285 struct ipv6_mreq opt;
3286 unsigned int index = 0;
3287 opt.ipv6mr_interface = index;
3290 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3295 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3297 #include <sys/inotify.h>
3301 int result = inotify_rm_watch(fd, wd);
3304 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3309 CFLAGS="$ORIG_CFLAGS"
3311 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3312 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3314 elif test "x$cross_compiling" = "xyes"; then
3315 AC_MSG_RESULT(cross compiling, assuming yes)
3316 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3319 #include <sys/mman.h>
3325 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3329 shm_unlink("/mono_configure_shm_open");
3331 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3332 // on at least the current version of Mac OS X
3334 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3341 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3347 AC_MSG_CHECKING(for getpriority with int who)
3349 #include <sys/resource.h>
3353 int result = getpriority(which, who);
3356 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3361 AC_MSG_CHECKING(for kevent with int parameters)
3363 #include <sys/types.h>
3364 #include <sys/event.h>
3367 const struct kevent* chagelist;
3369 struct kevent* eventlist;
3371 const struct timespec* timeout;
3372 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3375 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3380 ORIG_CFLAGS="$CFLAGS"
3381 CFLAGS="-Werror -Wimplicit-function-declaration"
3383 AC_MSG_CHECKING(for mkstemps)
3391 int result = mkstemps(template, suffixlen);
3394 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3400 CFLAGS="$ORIG_CFLAGS"
3402 if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3403 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3406 AC_MSG_CHECKING(for tcp/var.h)
3408 #include <sys/types.h>
3409 #include <sys/socketvar.h>
3410 #include <netinet/ip.h>
3411 #include <netinet/tcp.h>
3412 #include <netinet/tcp_var.h>
3416 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3421 AC_CHECK_HEADERS([sys/cdefs.h])
3423 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3425 #ifdef HAVE_SYS_CDEFS_H
3426 #include <sys/cdefs.h>
3428 #include <netinet/tcp.h>
3430 int result = TCP_ESTABLISHED;
3433 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3438 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3440 AC_MSG_CHECKING(for struct rt_msghdr)
3442 #include <sys/types.h>
3443 #include <net/route.h>
3448 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3453 AC_CHECK_HEADERS([sys/sysctl.h])
3454 AC_CHECK_HEADERS([linux/rtnetlink.h])
3456 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3457 AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3458 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3460 ORIG_CFLAGS="$CFLAGS"
3461 CFLAGS="-Werror -Weverything"
3463 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3467 size_t namelen = 20;
3469 int result = getdomainname(name, namelen);
3472 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3477 CFLAGS="$ORIG_CFLAGS"
3479 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3480 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3481 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3483 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
3484 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3485 elif test "x$host_linux" = "xyes"; then
3486 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3489 AC_CHECK_HEADERS([crt_externs.h])
3491 AC_MSG_CHECKING(for _NSGetEnviron)
3493 #include <crt_externs.h>
3495 char **result = *(_NSGetEnviron());
3498 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3503 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3506 dnl *********************************
3507 dnl *** Checks for Windows compilation ***
3508 dnl *********************************
3509 AC_CHECK_HEADERS(winternl.h)
3511 jdk_headers_found=no
3512 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3513 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3514 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3515 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3516 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3517 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3518 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3520 dnl *********************************
3521 dnl *** Check for struct ip_mreqn ***
3522 dnl *********************************
3523 AC_MSG_CHECKING(for struct ip_mreqn)
3524 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3525 struct ip_mreqn mreq;
3526 mreq.imr_address.s_addr = 0;
3528 # Yes, we have it...
3530 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3532 # We'll just have to try and use struct ip_mreq
3534 AC_MSG_CHECKING(for struct ip_mreq)
3535 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3536 struct ip_mreq mreq;
3537 mreq.imr_interface.s_addr = 0;
3539 # Yes, we have it...
3541 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3543 # No multicast support
3548 dnl **********************************
3549 dnl *** Check for getaddrinfo ***
3550 dnl **********************************
3551 AC_MSG_CHECKING(for getaddrinfo)
3554 #include <winsock2.h>
3555 #include <ws2tcpip.h>
3557 getaddrinfo(NULL,NULL,NULL,NULL);
3559 # Yes, we have it...
3561 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3566 dnl **********************************
3567 dnl *** Check for gethostbyname ***
3568 dnl **********************************
3569 AC_MSG_CHECKING(for gethostbyname)
3572 #include <winsock2.h>
3573 #include <ws2tcpip.h>
3575 gethostbyname(NULL);
3577 # Yes, we have it...
3579 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3584 dnl **********************************
3585 dnl *** Check for getprotobyname ***
3586 dnl **********************************
3587 AC_MSG_CHECKING(for getprotobyname)
3590 #include <winsock2.h>
3591 #include <ws2tcpip.h>
3593 getprotobyname(NULL);
3595 # Yes, we have it...
3597 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3602 dnl **********************************
3603 dnl *** Check for getnameinfo ***
3604 dnl **********************************
3605 AC_MSG_CHECKING(for getnameinfo)
3608 #include <winsock2.h>
3609 #include <ws2tcpip.h>
3611 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3613 # Yes, we have it...
3615 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3620 dnl **********************************
3621 dnl *** Check for inet_ntop ***
3622 dnl **********************************
3623 AC_MSG_CHECKING(for inet_ntop)
3626 #include <winsock2.h>
3627 #include <ws2tcpip.h>
3629 inet_ntop (0, NULL, NULL, 0);
3631 # Yes, we have it...
3633 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3638 dnl **********************************
3639 dnl *** Check for inet_pton ***
3640 dnl **********************************
3641 AC_MSG_CHECKING(for inet_pton)
3644 #include <winsock2.h>
3645 #include <ws2tcpip.h>
3650 inet_pton (0, NULL, NULL);
3652 # Yes, we have it...
3654 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3659 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3660 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3661 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3662 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3663 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3664 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3665 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3669 AC_MSG_CHECKING(for socklen_t)
3671 #include <sys/types.h>
3672 #include <sys/socket.h>
3676 ac_cv_c_socklen_t=yes
3677 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3683 AC_CHECK_FUNCS(execvp)
3685 dnl ****************************
3686 dnl *** Look for /dev/random ***
3687 dnl ****************************
3689 AC_MSG_CHECKING([if usage of random device is requested])
3690 AC_ARG_ENABLE(dev-random,
3691 [ --disable-dev-random disable the use of the random device (enabled by default)],
3692 try_dev_random=$enableval, try_dev_random=yes)
3694 AC_MSG_RESULT($try_dev_random)
3698 dnl IBM i does not have /dev/random, use unblocking only
3701 NAME_DEV_RANDOM="/dev/urandom"
3704 dnl Win32 does not have /dev/random, they have their own method...
3706 *-mingw*|*-*-cygwin*)
3707 ac_cv_have_dev_random=no
3710 dnl Everywhere else, it's /dev/random
3713 NAME_DEV_RANDOM="/dev/random"
3717 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3719 dnl Now check if the device actually exists
3721 if test "x$try_dev_random" = "xyes"; then
3722 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3723 [if test -r "$NAME_DEV_RANDOM" ; then
3724 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3725 if test "x$ac_cv_have_dev_random" = "xyes"; then
3726 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3729 AC_MSG_CHECKING(for random device)
3730 ac_cv_have_dev_random=no
3731 AC_MSG_RESULT(has been disabled)
3734 if test "x$host_win32" = "xyes"; then
3735 AC_DEFINE(HAVE_CRYPT_RNG)
3738 if test "x$ac_cv_have_dev_random" = "xno" \
3739 && test "x$host_win32" = "xno"; then
3742 *** A system-provided entropy source was not found on this system.
3743 *** Because of this, the System.Security.Cryptography random number generator
3744 *** will throw a NotImplemented exception.
3746 *** If you are seeing this message, and you know your system DOES have an
3747 *** entropy collection in place, please report an issue on GitHub and
3748 *** provide information about the system and how to access the random device.
3750 *** Otherwise you can install either egd or prngd and set the environment
3751 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3755 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)
3757 AC_MSG_CHECKING([if big-arrays are to be enabled])
3758 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)
3759 if test "x$enable_big_arrays" = "xyes" ; then
3760 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3761 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3763 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3766 AC_MSG_RESULT($enable_big_arrays)
3772 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3774 if test "x$enable_dtrace" = "xyes"; then
3775 if test "x$has_dtrace" = "xno"; then
3776 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3778 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3779 if test "x$DTRACE" = "xno"; then
3780 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3782 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3783 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3789 if test "x$enable_dtrace" = "xyes"; then
3790 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3792 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3795 DTRACEFLAGS="-arch ppc64"
3798 DTRACEFLAGS="-arch x86_64"
3807 DTRACEFLAGS="-arch ppc"
3810 DTRACEFLAGS="-arch i386"
3817 AC_SUBST(DTRACEFLAGS)
3823 AC_CHECK_HEADERS([sys/sdt.h])
3825 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3826 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3828 dnl **************************
3829 dnl *** AOT cross offsets ***
3830 dnl **************************
3832 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3833 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3839 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3840 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3841 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)
3842 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3843 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3845 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3847 if test "x$enable_llvm" = "xdefault"; then
3848 enable_llvm=$enable_llvm_default
3851 enable_llvm_msvc_only="no"
3852 if test "x$enable_llvm" = "xyes"; then
3853 if test "x$host_win32" = "xyes"; then
3854 if test "x$cross_compiling" = "xno"; then
3857 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
3858 enable_llvm_msvc_only="yes"
3861 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
3865 if test "x$enable_loadedllvm" = "xyes"; then
3866 AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
3867 enable_loadedllvm=no
3873 if test "x$enable_llvm" = "xyes"; then
3874 if test "x$with_llvm" != "x"; then
3875 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3876 if test x$host_win32 = xyes; then
3877 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
3879 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3880 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3883 if test x$host_win32 = xyes; then
3884 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
3886 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3888 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3893 LLVM_CODEGEN_LIBS="x86codegen"
3896 LLVM_CODEGEN_LIBS="armcodegen"
3899 LLVM_CODEGEN_LIBS="aarch64codegen"
3902 LLVM_CODEGEN_LIBS="powerpccodegen"
3905 if test "x$host" != "x$target"; then
3906 # No need for jit libs
3910 AC_SUBST(LLVM_CODEGEN_LIBS)
3911 AC_SUBST(EXTERNAL_LLVM_CONFIG)
3913 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
3914 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
3915 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
3917 if test "x$enable_llvm_msvc_only" != "xyes"; then
3918 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3920 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
3924 # AC_DEFINE necessary for correct restore behavior on Linux
3925 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3926 if test "x$internal_llvm" != "xno"; then
3927 if test "x$enable_llvm_msvc_only" != "xyes"; then
3928 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
3930 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
3934 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3935 if test "x$enable_llvm_asserts" != "xno"; then
3936 if test "x$enable_llvm_msvc_only" != "xyes"; then
3937 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
3939 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
3943 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
3945 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
3946 if test "x$enable_loadedllvm" = "xyes"; then
3947 if test "x$enable_llvm_msvc_only" != "xyes"; then
3948 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3952 if test "x$enable_llvm" = "xyes"; then
3953 enable_llvm_runtime=yes
3956 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
3957 if test "x$enable_llvm_runtime" = "xyes"; then
3958 if test "x$enable_llvm_msvc_only" != "xyes"; then
3959 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3961 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
3966 ACCESS_UNALIGNED="yes"
3970 SQLITE="libsqlite.so.0"
3971 SQLITE3="libsqlite3.so.0"
3973 GDKX11="libgdk-x11-2.0.so.0"
3974 GTKX11="libgtk-x11-2.0.so.0"
3975 XINERAMA="libXinerama.so.1"
3977 sizeof_register="SIZEOF_VOID_P"
3980 boehm_supported=true
3989 ACCESS_UNALIGNED="no"
3997 ACCESS_UNALIGNED="no"
3999 AC_MSG_CHECKING(for mips n32)
4001 #if _MIPS_SIM != _ABIN32
4018 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4023 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4024 # int astruct __attribute__ ((visibility ("hidden")));
4027 # void *p = &astruct;
4029 # gcc -fPIC --shared -o libfoo.so foo.c
4031 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4032 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4033 have_visibility_hidden=no
4036 have_visibility_hidden=no
4047 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4054 openbsd*|freebsd*|kfreebsd-gnu*)
4061 x86_64-*-* | amd64-*-*)
4064 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4065 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4072 BTLS_PLATFORM=x86_64
4073 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4078 BTLS_PLATFORM=x86_64
4079 boehm_supported=false
4081 openbsd*|freebsd*|kfreebsd-gnu*)
4084 BTLS_PLATFORM=x86_64
4088 BTLS_PLATFORM=x86_64
4093 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4099 ACCESS_UNALIGNED="no"
4106 if test x"$GCC" = xyes; then
4107 # We don't support v8 cpus
4108 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4110 if test x"$AR" = xfalse; then
4111 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4114 *-mingw*|*-*-cygwin*)
4115 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4116 have_visibility_hidden=no
4119 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4120 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4121 powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4122 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4124 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4125 if ! (echo $CC | grep -q -- 'clang'); then
4126 CFLAGS="$CFLAGS -mminimal-toc"
4130 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4136 BTLS_PLATFORM=powerpc
4137 dnl on AIX/PASE, shared libraries can be inside archives
4138 dnl if they are, we specify them by lib.a(lib.so)
4139 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4140 LIBC="libc.a(shr_64.o)"
4141 INTL="libintl.a(libintl.so.8)"
4145 BTLS_PLATFORM=powerpc
4154 ACCESS_UNALIGNED="no"
4155 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4161 ACCESS_UNALIGNED="no"
4162 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4167 ACCESS_UNALIGNED="no"
4169 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4172 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4174 arm*-linux*-gnueabi)
4175 BTLS_PLATFORM=armsoft
4182 ACCESS_UNALIGNED="no"
4183 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4185 aarch64-*darwin*ilp32)
4188 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4190 # assuming no other target other than watchOS is using aarch64*darwin triple
4194 # https://lkml.org/lkml/2012/7/15/133
4197 boehm_supported=false
4200 BTLS_PLATFORM=aarch64
4201 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4206 ACCESS_UNALIGNED="yes"
4209 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4216 BTLS_PLATFORM=riscv32
4218 boehm_supported=false
4225 BTLS_PLATFORM=riscv64
4227 boehm_supported=false
4233 if test "x$host" != "x$target"; then
4234 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4236 enable_support_build=no
4238 # Can't use tls, since it depends on the runtime detection of tls offsets
4239 # in mono-compiler.h
4246 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4250 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4254 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4258 powerpc64-ps3-linux-gnu)
4260 arch_target=powerpc64
4261 AC_DEFINE(TARGET_PS3, 1, [...])
4262 # It would be better to just use TARGET_POWERPC64, but lots of code already
4264 AC_DEFINE(__mono_ppc64__, 1, [...])
4265 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4267 target_byte_order=G_BIG_ENDIAN
4269 powerpc64-xbox360-linux-gnu)
4271 arch_target=powerpc64
4272 AC_DEFINE(TARGET_XBOX360, 1, [...])
4273 # It would be better to just use TARGET_POWERPC64, but lots of code already
4276 target_byte_order=G_BIG_ENDIAN
4280 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4284 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4297 AC_DEFINE(TARGET_PS4, 1, [...])
4298 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4299 CPPFLAGS="$CPPFLAGS"
4310 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4311 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4318 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4319 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4325 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4333 AC_DEFINE(TARGET_ANDROID, 1, [...])
4340 AC_DEFINE(TARGET_WASM, 1, [...])
4344 AC_DEFINE(TARGET_X86, 1, [...])
4348 AC_DEFINE(TARGET_AMD64, 1, [...])
4352 AC_DEFINE(TARGET_ARM, 1, [...])
4354 ACCESS_UNALIGNED="no"
4357 AC_DEFINE(TARGET_ARM64, 1, [...])
4361 AC_DEFINE(TARGET_POWERPC, 1, [...])
4364 AC_DEFINE(TARGET_POWERPC, 1, [...])
4365 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4368 AC_DEFINE(TARGET_S390X, 1, [...])
4371 AC_DEFINE(TARGET_MIPS, 1, [...])
4374 AC_DEFINE(TARGET_SPARC, 1, [...])
4377 AC_DEFINE(TARGET_SPARC64, 1, [...])
4380 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4381 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4384 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4385 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4390 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4391 target_sizeof_void_p=4
4394 target_sizeof_void_p=8
4397 AC_MSG_ERROR([unknown target])
4403 AC_DEFINE(HOST_WASM, 1, [...])
4406 AC_DEFINE(HOST_X86, 1, [...])
4409 AC_DEFINE(HOST_AMD64, 1, [...])
4412 AC_DEFINE(HOST_ARM, 1, [...])
4415 AC_DEFINE(HOST_ARM64, 1, [...])
4418 AC_DEFINE(HOST_POWERPC, 1, [...])
4421 AC_DEFINE(HOST_POWERPC, 1, [...])
4422 AC_DEFINE(HOST_POWERPC64, 1, [...])
4425 AC_DEFINE(HOST_S390X, 1, [...])
4428 AC_DEFINE(HOST_MIPS, 1, [...])
4431 AC_DEFINE(HOST_SPARC, 1, [...])
4434 AC_DEFINE(HOST_SPARC64, 1, [...])
4437 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4438 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4441 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4442 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4446 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4448 X86 | AMD64 | ARM | ARM64)
4449 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4453 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4454 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4460 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4461 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4463 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4465 if test "x$enable_vtune" = "xyes"; then
4466 if test "x$with_vtune" = "x"; then
4467 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4469 VTUNE_PATH=$with_vtune
4471 VTUNE_INCLUDE=$VTUNE_PATH/include
4474 VTUNE_LIB=$VTUNE_PATH/lib32
4477 VTUNE_LIB=$VTUNE_PATH/lib64
4480 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4483 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4484 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4486 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4487 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4490 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4491 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4493 AC_SUBST(VTUNE_LIBS)
4494 AC_SUBST(VTUNE_CFLAGS)
4496 dnl Use GCC atomic ops if they work on the target.
4497 if test x$GCC = "xyes"; then
4499 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4500 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4505 if test "x$target_mach" = "xyes"; then
4507 if test "x$TARGET_SYS" = "xWATCHOS"; then
4508 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4509 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4510 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4512 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4513 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4514 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4515 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4519 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4520 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4521 #error fail this for ios
4524 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4525 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4526 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4529 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4530 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4531 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4536 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4539 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4541 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4543 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4544 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4545 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4546 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4548 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4551 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4553 if test "x$sizeof_register" = "x4"; then
4554 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4555 elif test "x$sizeof_register" = "x8"; then
4556 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4558 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4561 if test "x$have_visibility_hidden" = "xyes"; then
4562 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4565 if test "x$have_deprecated" = "xyes"; then
4566 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4570 dnl Simple Generational checks (sgen)
4573 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4574 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4575 if test x$buildsgen = xyes; then
4576 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4577 SGEN_DEFINES="-DHAVE_SGEN_GC"
4580 if test x$with_sgen_default_concurrent != xno; then
4581 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4582 conc_gc_msg=" (concurrent by default)"
4585 if test "x$gc_msg" = "x"; then
4586 gc_msg="sgen$conc_gc_msg"
4588 gc_msg="sgen$conc_gc_msg and $gc_msg"
4591 AC_SUBST(SGEN_DEFINES)
4592 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4594 jit_status="Building and using the JIT"
4602 INTL="libintl.dylib"
4603 SQLITE="libsqlite.0.dylib"
4604 SQLITE3="libsqlite3.0.dylib"
4606 GDKX11="libgdk-x11-2.0.dylib"
4607 GTKX11="libgtk-x11-2.0.dylib"
4612 SQLITE="libsqlite.so"
4613 SQLITE3="libsqlite3.so"
4623 SQLITE="libsqlite.so"
4624 SQLITE3="libsqlite3.so"
4629 SQLITE="libsqlite.so"
4630 SQLITE3="libsqlite3.so"
4634 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4635 AC_MSG_CHECKING(for the soname of libX11.so)
4636 for i in $x_libraries $dlsearch_path; do
4638 if test -f $i/libX11.so.$r; then
4645 if test "x$X11" = "xlibX11.so"; then
4646 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4654 ######################################
4656 ######################################
4660 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4661 if test x$GCC = xyes; then
4662 GNUC_UNUSED='__attribute__((__unused__))'
4663 GNUC_NORETURN='__attribute__((__noreturn__))'
4665 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4668 AC_SUBST(GNUC_PRETTY)
4669 AC_SUBST(GNUC_UNUSED)
4670 AC_SUBST(GNUC_NORETURN)
4671 AC_SUBST(BREAKPOINT)
4673 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4676 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4692 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4697 arm*-darwin*|aarch64*-*|riscv*)
4698 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4701 ORDER=G_LITTLE_ENDIAN
4704 LDFLAGS="$LDFLAGS -ltextencoding"
4707 CFLAGS="$CFLAGS -pthread"
4708 LDFLAGS="$LDFLAGS -pthread"
4719 # Defined for all targets/platforms using classic Windows API support.
4720 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4721 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4723 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4724 AC_CHECK_FUNCS(getrlimit)
4725 AC_CHECK_FUNCS(fork execv execve)
4726 AC_CHECK_FUNCS(waitpid)
4728 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4730 if test x$with_overridable_allocators = xyes; then
4731 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4732 AC_MSG_NOTICE([Overridable allocator support enabled])
4734 AC_MSG_NOTICE([Overridable allocator support disabled])
4738 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4739 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4740 # removed once support for 10.6 is dropped.
4742 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4744 if test x$target_osx = xyes; then
4745 AC_CHECK_FUNCS(getpwuid_r)
4746 elif test x$target_ios = xno; then
4747 AC_CHECK_FUNCS(strndup getpwuid_r)
4750 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4752 AC_SEARCH_LIBS(sqrtf, m)
4754 # nanosleep may not be part of libc, also search it in other libraries
4755 AC_SEARCH_LIBS(nanosleep, rt)
4757 AC_SEARCH_LIBS(dlopen, dl)
4758 old_ldflags="${LDFLAGS}"
4759 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4760 if test $lt_cv_prog_gnu_ld = yes; then
4761 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4764 *-*-aix*|*-*-os400*)
4767 dnl Try to use export-dynamic anyways
4768 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4772 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4773 if test $found_export_dynamic = no; then
4774 LDFLAGS="${old_ldflags}"
4777 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4778 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4779 AC_CHECK_LIB(iconv, iconv_open)
4780 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4781 AC_SUBST(HAVE_ALLOCA_H)
4783 # Get the exact type of size_t, not just its size.
4784 # This is so we can find an exact printf format among u, lu, llu, I64u.
4785 # To avoid warnings about slight mismatches.
4786 # C99 runtime "zu" dependency is being avoided here.
4788 # We have to compile as C++ because C is too lenient
4789 # and lets the wrong thing compile, with warnings.
4791 # Note: "zu" or ifdef <something> have the advantage
4792 # of producing installable "biarch" headers. i.e. one Mac header
4793 # for Mac/x86 and Mac/amd64.
4797 # Check long before int because it is the overwhelming Unix answer,
4798 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4800 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4802 AC_MSG_CHECKING(if size_t is unsigned long)
4803 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4805 unsigned long *a = (size_t*)0;
4808 AC_SUBST(GSIZE_FORMAT, '"lu"')
4811 AC_MSG_CHECKING(if size_t is unsigned int)
4812 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4814 unsigned *a = (size_t*)0;
4817 AC_SUBST(GSIZE_FORMAT, '"u"')
4819 # At this point the majority of systems have their answer,
4820 # and we descend into non-standard or new-standard territory.
4822 # Check __int64 first because I64 on some systems predates ll, enabling
4823 # new compiler/old runtime interop, and the types always have the same size.
4825 AC_MSG_CHECKING(if size_t is unsigned __int64)
4826 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4828 unsigned __int64 *a = (size_t*)0;
4831 AC_SUBST(GSIZE_FORMAT, '"I64u"')
4834 AC_MSG_CHECKING(if size_t is unsigned long long)
4835 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4837 unsigned long long *a = (size_t*)0;
4840 AC_SUBST(GSIZE_FORMAT, '"llu"')
4843 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4851 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4852 # This provides for an exact match with functions that
4853 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4854 # uintptr_t is not necessarily the same.
4856 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4857 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4859 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4869 AC_SUBST(GSIZE_FORMAT)
4872 # END OF EGLIB CHECKS
4875 AC_ARG_WITH([libgdiplus],
4876 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4877 [], [with_libgdiplus=installed])
4879 # default install location
4880 libgdiplus_install_loc=libgdiplus${libsuffix}
4883 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4887 case $with_libgdiplus in
4894 if test x$cross_compiling = xno; then
4895 if test x$host_darwin = xyes; then
4896 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4898 libgdiplus_install_loc=$a
4906 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4909 /*) # absolute path, assume it is an install location
4910 libgdiplus_loc=$with_libgdiplus
4911 libgdiplus_install_loc=$with_libgdiplus
4915 libgdiplus_loc=`pwd`/$with_libgdiplus
4918 AC_SUBST(libgdiplus_loc)
4919 AC_SUBST(libgdiplus_install_loc)
4921 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)
4922 if test "x$icall_symbol_map" = "xyes"; then
4923 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4926 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4927 if test "x$icall_export" = "xyes"; then
4928 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4931 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4932 if test "x$icall_tables" = "xno"; then
4933 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4936 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4938 if test "x$with_tls" = "x__thread"; then
4939 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
4940 # Pass the information to libgc
4941 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4942 AC_MSG_CHECKING(if the tls_model attribute is supported)
4943 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4946 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4952 if test ${TARGET} = ARM; then
4953 dnl ******************************************
4954 dnl *** Check to see what FPU is available ***
4955 dnl ******************************************
4956 AC_MSG_CHECKING(which FPU to use)
4959 # This is a bit tricky:
4961 # if (__ARM_PCS_VFP) {
4962 # /* mfloat-abi=hard == VFP with hard ABI */
4963 # } elif (!__SOFTFP__) {
4964 # /* mfloat-abi=softfp == VFP with soft ABI */
4966 # /* mfloat-abi=soft == no VFP */
4969 # The exception is iOS (w/ GCC) where none of the above
4970 # are defined (but iOS always uses the 'softfp' ABI).
4972 # No support for FPA.
4977 # iOS GCC always uses the 'softfp' ABI.
4978 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4982 # Are we using the 'hard' ABI?
4983 if test x$fpu = xNONE; then
4984 AC_TRY_COMPILE([], [
4985 #ifndef __ARM_PCS_VFP
4986 #error "Float ABI is not 'hard'"
4995 # No 'hard' ABI. 'soft' or 'softfp'?
4996 if test x$fpu = xNONE; then
4997 AC_TRY_COMPILE([], [
4999 #error "Float ABI is not 'softfp'"
5008 if test x$arm_fpu != x; then
5013 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5016 dnl *********************************************
5017 dnl *** Check which ARM version(s) we can use ***
5018 dnl *********************************************
5019 AC_MSG_CHECKING(which ARM version to use)
5021 AC_TRY_COMPILE([], [
5022 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5023 #error Not on ARM v5.
5031 AC_TRY_COMPILE([], [
5032 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5033 #error Not on ARM v6.
5042 AC_TRY_COMPILE([], [
5043 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5044 #error Not on ARM v7.
5054 AC_MSG_RESULT($arm_ver)
5056 if test x$arm_v5 = xyes; then
5057 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5058 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5061 if test x$arm_v6 = xyes; then
5062 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5063 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5066 if test x$arm_v7 = xyes; then
5067 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5068 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5072 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5073 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5075 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5077 if test x$fpabi = xauto; then
5078 AC_TRY_COMPILE([], [
5079 #ifdef __riscv_float_abi_double
5089 if test x$fpabi = xauto; then
5090 AC_TRY_COMPILE([], [
5091 #ifdef __riscv_float_abi_single
5101 if test x$fpabi = xauto; then
5102 AC_TRY_COMPILE([], [
5103 #ifdef __riscv_float_abi_soft
5115 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5116 AC_MSG_RESULT([double-precision])
5119 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5120 AC_MSG_ERROR([single-precision, not supported])
5123 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5124 AC_MSG_RESULT([soft float])
5127 AC_MSG_ERROR([unknown])
5130 AC_MSG_ERROR([invalid option: $fpabi])
5135 if test ${TARGET} = unknown; then
5136 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5137 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5140 if test "x$platform_android" = "xyes"; then
5141 case "x${TARGET}" in
5146 BTLS_PLATFORM=android-armv5
5150 BTLS_PLATFORM=android-armv6
5154 BTLS_PLATFORM=android-armv7
5163 BTLS_PLATFORM=android-v8a
5167 BTLS_PLATFORM=android-x86
5171 BTLS_PLATFORM=android-x64
5179 if test ${ACCESS_UNALIGNED} = no; then
5180 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5183 if test x$host_darwin = xyes; then
5184 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5186 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5187 [AC_MSG_RESULT([no])],
5189 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5191 RANLIB="$RANLIB -no_warning_for_no_symbols"
5192 AC_MSG_RESULT([yes])
5199 # Pass CPPFLAGS to libgc configure
5200 # We should use a separate variable for this to avoid passing useless and
5201 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5202 # This should be executed late so we pick up the final version of CPPFLAGS
5203 # The problem with this approach, is that during a reconfigure, the main
5204 # configure scripts gets invoked with these arguments, so we use separate
5205 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5206 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5207 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5208 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5210 # Don't pass -finstrument-for-thread-suspension in,
5211 # if these are instrumented it will be very bad news
5212 # (infinite recursion, undefined parking behavior, etc)
5213 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5214 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\""
5215 if test "x$support_boehm" = "xyes"; then
5216 AC_CONFIG_SUBDIRS(libgc)
5222 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5223 if test x$with_malloc_mempools = xyes; then
5225 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5230 DISABLE_MCS_DOCS=default
5231 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5232 if test x$with_mcs_docs != xyes; then
5233 DISABLE_MCS_DOCS=yes
5236 if test -n "$INSTALL_4_x_TRUE"; then :
5237 DISABLE_MCS_DOCS=yes
5239 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5240 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5243 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)],[
5244 if test x$with_lazy_gc_thread_creation != xno ; then
5245 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5247 ], [with_lazy_gc_thread_creation=no])
5249 dnl *****************************
5250 dnl *** Thread suspend policy ***
5251 dnl *****************************
5253 dnl Set a default hybrid or cooperative suspend on some platforms
5255 dnl Coop default is set by the bitcode preset.
5257 dnl If coop isn't on by default, maybe hybrid should be?
5258 if test x$enable_cooperative_suspend_default != xyes; then
5261 dnl Some host/target confusion, there's no host_osx (and
5262 dnl host_darwin would be true on iOS not just macOS).
5263 if test x$target_osx = xyes; then
5264 enable_hybrid_suspend_default=yes
5265 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5266 enable_hybrid_suspend_default=yes
5272 dnl Now check if there were flags overriding the defaults
5274 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])
5275 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5277 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5278 enable_cooperative_suspend=$with_cooperative_gc
5281 if test x$enable_cooperative_suspend = xdefault; then
5282 enable_cooperative_suspend=$enable_cooperative_suspend_default
5285 if test x$enable_cooperative_suspend != xno; then
5286 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5289 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5291 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])
5293 if test x$enable_hybrid_suspend = xdefault; then
5294 enable_hybrid_suspend=$enable_hybrid_suspend_default
5297 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5298 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5301 if test x$enable_hybrid_suspend != xno ; then
5302 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5305 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5307 dnl End of thread suspend policy
5309 dnl ***************************
5310 dnl *** feature experiments ***
5311 dnl ***************************
5313 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5314 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null],[
5316 if test x$enable_experiment != x ; then
5317 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5319 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5320 eval "mono_experiment_test_enable_$feature='yes'"
5323 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5324 eval "mono_experiment_test_enable_null='yes'"
5328 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5329 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5333 dnl **********************
5334 dnl *** checked builds ***
5335 dnl **********************
5337 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],[
5339 if test x$enable_checked_build != x ; then
5340 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5342 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5343 eval "mono_checked_build_test_enable_$feature='yes'"
5346 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5347 eval "mono_checked_build_test_enable_gc='yes'"
5348 eval "mono_checked_build_test_enable_metadata='yes'"
5349 eval "mono_checked_build_test_enable_thread='yes'"
5350 eval "mono_checked_build_test_enable_private_types='yes'"
5353 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5354 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5357 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5358 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5361 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5362 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5365 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5366 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5370 dnl End of checked builds
5372 AC_CHECK_HEADER([malloc.h],
5373 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5374 [Define to 1 if you have /usr/include/malloc.h.])],,)
5376 if test x"$GCC" = xyes; then
5377 # Implicit function declarations are not 64 bit safe
5378 # Do this late, since this causes lots of configure tests to fail
5379 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5380 # jay has a lot of implicit declarations
5381 JAY_CFLAGS="-Wno-implicit-function-declaration"
5384 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5385 # instead of libmono-static.a
5386 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5387 LIBMONO_LA=libmini-static.la
5389 if test x$buildsgen = xyes; then
5390 LIBMONO_LA=libmonosgen-$API_VER.la
5392 LIBMONO_LA=libmonoboehm-$API_VER.la
5395 AC_SUBST(LIBMONO_LA)
5401 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5402 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5403 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5404 AC_ARG_WITH(btls_android_api, [ --with-btls-android-api Android NDK API level for BTLS build])
5405 AC_ARG_WITH(btls_android_cmake_toolchain, [ --with-btls-android-cmake-toolchain Path to the cmake toolchain file for Android])
5406 AC_ARG_WITH(btls_android_ndk_asm_workaround, [ --with-btls-android-ndk-asm-workaround Work around a problem with NDK r18+ clang compiler when compiling some AES assembly for ARM])
5408 if test "x$with_btls_android_api" = "x" ; then
5409 case "$BTLS_PLATFORM" in
5411 with_btls_android_api=16" ;;
5413 with_btls_android_api=16" ;;
5415 with_btls_android_api=16 ;;
5417 with_btls_android_api=21 ;;
5419 with_btls_android_api=16 ;;
5421 with_btls_android_api=21 ;;
5425 if test "x$enable_btls" = "xno"; then
5429 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5432 if test "x$enable_btls" = "xyes"; then
5433 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5434 if test "x$CMAKE" = "xno"; then
5435 AC_MSG_ERROR("cmake not found")
5438 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5445 if test "x$host_win32" = "xyes"; then
5446 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5449 case "$BTLS_PLATFORM" in
5455 btls_cflags="$btls_cflags -arch i386"
5458 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5459 if test "x$HAVE_YASM" != "xyes"; then
5460 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5469 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5470 if test "x$HAVE_YASM" != "xyes"; then
5471 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5478 btls_cflags="-DOPENSSL_NO_ASM=1"
5482 btls_cflags="-DOPENSSL_NO_ASM=1"
5486 btls_cflags="-march=armv8-a+crypto"
5495 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5496 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5500 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5503 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5506 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5509 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5512 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5515 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5524 AC_MSG_ERROR(Invalid BTLS platform)
5527 if test "x$platform_android" = "xyes"; then
5528 if test "x$with_btls_android_cmake_toolchain" = "x"; then
5529 with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5532 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
5533 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
5537 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
5538 if test "x$with_btls_android_ndk" != "x"; then
5539 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5541 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5545 if test "x$btls_arch" != "x"; then
5546 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5549 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5551 AC_SUBST(BTLS_CFLAGS)
5552 AC_SUBST(BTLS_PLATFORM)
5553 AC_SUBST(BTLS_CMAKE_ARGS)
5555 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5560 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5562 if test x$DISABLE_MCS_DOCS = xyes; then
5569 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5570 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5571 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5573 libmono_ldflags="$libmono_ldflags $LIBS"
5575 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5576 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5577 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5578 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5579 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5580 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5581 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5582 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5583 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5584 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5585 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5586 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5587 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5588 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5589 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5590 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5591 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5592 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5593 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5594 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5595 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5596 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5597 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5598 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5600 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5610 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5611 AC_SUBST(arch_target)
5616 #This must always be defined when building the runtime
5617 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5619 mono_build_root=`pwd`
5620 AC_SUBST(mono_build_root)
5622 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5623 if test x$host_win32 = xno; then
5624 if test x$enable_msvc = xyes; then
5625 echo "Error, --enable-msvc only supported for Windows builds."
5629 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5631 if test "x$enable_msvc" = "xyes"; then
5632 if test "x$support_boehm" = "xyes"; then
5633 echo "Error, Boehm GC is not supported when using --enable-msvc."
5636 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5637 if test "x$host_cpu" = "xi686"; then
5638 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5639 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5640 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5642 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5643 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5644 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5646 AC_SUBST(mono_msvc_build_dir)
5647 AC_SUBST(mono_msvc_build_lib_dir)
5648 AC_SUBST(mono_msvc_build_bin_dir)
5650 mono_runtime=mono/mini/mono
5653 AC_SUBST(mono_runtime)
5655 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5657 if test $csc_compiler = mcs; then
5658 CSC=$mcs_topdir/class/lib/build/mcs.exe
5663 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5665 mono_cfg_root=$mono_build_root/runtime
5666 if test x$host_win32 = xyes; then
5667 if test "x$cross_compiling" = "xno"; then
5668 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5669 CSC=`cygpath -m -a $CSC`
5670 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5672 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5675 mono_cfg_dir=$mono_cfg_root/etc
5678 if test "x$platform_android" = "xyes"; then
5682 AC_SUBST(mono_cfg_dir)
5686 AC_CONFIG_FILES([po/mcs/Makefile.in])
5688 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5689 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5690 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5692 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5695 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5697 *) reldir=$depth/$srcdir ;;
5699 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5700 cd runtime/etc/mono/1.0
5701 rm -f machine.config
5702 $LN_S $reldir/data/net_1_1/machine.config machine.config
5706 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5709 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5711 *) reldir=$depth/$srcdir ;;
5713 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5714 cd runtime/etc/mono/2.0
5715 rm -f machine.config
5716 $LN_S $reldir/data/net_2_0/machine.config machine.config
5720 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5723 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5725 *) reldir=$depth/$srcdir ;;
5727 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5728 cd runtime/etc/mono/2.0
5730 $LN_S $reldir/data/net_2_0/web.config web.config
5734 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5737 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5739 *) reldir=$depth/$srcdir ;;
5741 $ac_aux_dir/install-sh -d runtime/etc/mono/
5742 cd runtime/etc/mono/
5744 $LN_S $reldir/data/browscap.ini browscap.ini
5748 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5749 [ depth=../../../../..
5751 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5753 *) reldir=$depth/$srcdir ;;
5755 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5756 cd runtime/etc/mono/2.0/Browsers
5757 rm -f Compat.browser
5758 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5762 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5763 [ depth=../../../../..
5765 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5767 *) reldir=$depth/$srcdir ;;
5769 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5770 cd runtime/etc/mono/4.0/Browsers
5771 rm -f Compat.browser
5772 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5776 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5777 [ depth=../../../../..
5779 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5781 *) reldir=$depth/$srcdir ;;
5783 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5784 cd runtime/etc/mono/4.5/Browsers
5785 rm -f Compat.browser
5786 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5790 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5793 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5795 *) reldir=$depth/$srcdir ;;
5797 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5798 cd runtime/etc/mono/4.0
5799 rm -f machine.config
5800 $LN_S $reldir/data/net_4_0/machine.config machine.config
5804 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5807 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5809 *) reldir=$depth/$srcdir ;;
5811 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5812 cd runtime/etc/mono/4.0
5814 $LN_S $reldir/data/net_4_0/web.config web.config
5818 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5821 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5823 *) reldir=$depth/$srcdir ;;
5825 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5826 cd runtime/etc/mono/4.5
5827 rm -f machine.config
5828 $LN_S $reldir/data/net_4_5/machine.config machine.config
5832 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5835 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5837 *) reldir=$depth/$srcdir ;;
5839 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5840 cd runtime/etc/mono/4.5
5842 $LN_S $reldir/data/net_4_5/web.config web.config
5846 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])
5847 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])
5848 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
5850 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
5851 if test x"$GCC" = xyes && "x$with_jemalloc" != "xyes"; then
5853 # incompatible-pointer-types requires gcc circa 5.x
5856 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
5857 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
5861 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
5869 # Mono.Native Support
5870 # -------------------
5871 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
5872 # It is built as a stand-alone shared library and not bundled with the runtime because we
5873 # may need to build two different versions of it.
5875 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
5876 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
5878 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
5879 # implementation accordingly. We build a single `libmono_native` shared library.
5881 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
5883 # During the mobile build, we are called with `CC` containing an explicit minium version flag,
5884 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
5885 # depending on platform.
5887 # We build two versions of the shared library:
5888 # - `libmono_native_compat` is built with whichever minimum version is passed to us via `CC`.
5889 # - `libmono_native_unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
5891 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
5892 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
5893 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/System/Mono/MonoNativePlatform.cs).
5895 # This can be called by automated tests both to ensure that the library has been correctly installed and also
5896 # to verify that it's the correct version of it.
5899 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
5900 if test x$target_osx = xyes; then
5901 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
5902 grep_find_mac_version_pattern="-mmacosx-version-min=$sed_version_pattern"
5903 mono_native_compat_version=`echo $CC | grep -o -e $grep_find_mac_version_pattern`
5904 MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_mac_version_pattern`
5905 MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_mac_version_pattern`
5906 MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern`
5907 MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern`
5908 MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern`
5909 MONO_NATIVE_LDFLAGS=`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern`
5912 MONO_NATIVE_PLATFORM=macos
5913 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
5914 AC_MSG_CHECKING([Mono.Native support])
5915 AC_MSG_RESULT(macos)
5917 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
5918 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
5920 if test x$mono_native_compat = xyes; then
5921 mono_native_compat=yes
5922 mono_native_text="Mac OSX (compat+unified)"
5923 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
5924 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
5925 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -mmacosx-version-min=10.12"
5926 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -mmacosx-version-min=10.12"
5928 mono_native_compat=no
5929 mono_native_text="Mac OSX"
5931 elif test x$mono_native_platform_ios = xyes; then
5932 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
5934 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
5935 if test x$mono_native_ios_sim = xyes; then
5936 mono_native_ios_target=ios-simulator
5937 mono_native_text="iOS Simulator"
5938 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5940 mono_native_ios_target=iphoneos
5941 mono_native_text="iOS Device"
5942 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5944 mono_native_unified_version="10.0"
5945 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
5947 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
5948 if test x$mono_native_ios_sim = xyes; then
5949 mono_native_ios_target=tvos-simulator
5950 mono_native_text="AppleTV Simulator"
5951 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5953 mono_native_ios_target=tvos
5954 mono_native_text="AppleTV Device"
5955 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5957 mono_native_unified_version="10.0"
5958 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
5960 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
5961 if test x$mono_native_ios_sim = xyes; then
5962 mono_native_ios_target=watchos-simulator
5963 mono_native_text="Apple Watch Simulator"
5964 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5966 mono_native_ios_target=watchos
5967 mono_native_text="Apple Watch Device"
5968 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5970 mono_native_unified_version="5.0"
5971 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
5973 AC_MSG_ERROR([Unknown iOS Target])
5978 AC_MSG_CHECKING([Mono.Native support])
5979 AC_MSG_RESULT([$mono_native_ios_target])
5981 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
5983 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
5984 grep_find_ios_version_pattern="-m$mono_native_ios_target-version-min=$sed_version_pattern"
5986 mono_native_compat_version=`echo $CC | grep -o -e $grep_find_ios_version_pattern`
5988 if test x$with_bitcode = xyes; then
5989 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
5990 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
5992 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
5995 if test x$enable_gss = xyes; then
5996 mono_native_ldflags="$mono_native_ldflags -framework GSS"
5999 MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_ios_version_pattern`
6000 MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_ios_version_pattern`
6001 MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern`
6002 MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern`
6003 MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern`
6004 MONO_NATIVE_LDFLAGS=`echo $LDFLAGS $mono_native_ldflags | sed -e $sed_remove_ios_version_pattern`
6006 if test x$mono_native_compat = xyes; then
6007 mono_native_text="$mono_native_text (compat+unified)"
6008 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
6009 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
6010 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6011 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6015 MONO_NATIVE_PLATFORM=ios
6016 elif test x$host_linux = xyes; then
6017 mono_native_text="Linux"
6019 MONO_NATIVE_CXX=$CXX
6020 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6021 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6022 MONO_NATIVE_CFLAGS=$CFLAGS
6023 MONO_NATIVE_LDFLAGS=$LDFLAGS
6026 mono_native_compat=no
6027 MONO_NATIVE_PLATFORM=linux
6028 AC_MSG_CHECKING([Mono.Native support])
6029 AC_MSG_RESULT(linux)
6031 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6032 elif test x$target_wasm = xyes; then
6033 mono_native_text="wasm"
6035 MONO_NATIVE_CXX=$CXX
6036 # The system.native code uses _WASM_ to check for wasm
6037 MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6038 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6039 MONO_NATIVE_CFLAGS=$CFLAGS
6040 MONO_NATIVE_LDFLAGS=$LDFLAGS
6043 mono_native_compat=no
6044 MONO_NATIVE_PLATFORM=linux
6045 AC_MSG_CHECKING([Mono.Native support])
6048 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6049 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6050 mono_native_text="AIX"
6052 MONO_NATIVE_CXX=$CXX
6053 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6054 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6055 MONO_NATIVE_CFLAGS=$CFLAGS
6056 MONO_NATIVE_LDFLAGS=$LDFLAGS
6059 mono_native_compat=no
6060 MONO_NATIVE_PLATFORM=aix
6061 AC_MSG_CHECKING([Mono.Native support])
6064 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6065 elif test x$platform_android = xyes; then
6066 mono_native_text="Android"
6068 MONO_NATIVE_CXX=$CXX
6069 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6070 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6071 MONO_NATIVE_CFLAGS=$CFLAGS
6072 MONO_NATIVE_LDFLAGS=$LDFLAGS
6075 mono_native_compat=no
6076 MONO_NATIVE_PLATFORM=android
6077 AC_MSG_CHECKING([Mono.Native support])
6078 AC_MSG_RESULT(Android)
6080 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6083 mono_native_text="no"
6084 AC_MSG_CHECKING([Mono.Native support])
6088 if test x$mono_native_compat = xyes; then
6089 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6091 MONO_NATIVE_LIBRARY_NAME=libmono-native
6094 AC_SUBST(MONO_NATIVE_PLATFORM)
6095 AC_SUBST(MONO_NATIVE_CC)
6096 AC_SUBST(MONO_NATIVE_CXX)
6097 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6098 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6099 AC_SUBST(MONO_NATIVE_CFLAGS)
6100 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6101 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6102 AC_SUBST(MONO_NATIVE_LDFLAGS)
6103 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6104 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6105 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6106 AC_SUBST(MONO_NATIVE_LIBADD)
6108 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6109 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6110 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6111 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6112 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6113 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6114 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6116 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6117 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6118 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6119 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6120 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6122 # Update all submodules recursively to ensure everything is checked out
6123 (cd $srcdir && scripts/update_submodules.sh)
6128 acceptance-tests/Makefile
6130 scripts/mono-find-provides
6131 scripts/mono-find-requires
6135 mono/native/Makefile
6137 mono/utils/jemalloc/Makefile
6138 mono/metadata/Makefile
6142 mono/arch/x86/Makefile
6143 mono/arch/amd64/Makefile
6144 mono/arch/ppc/Makefile
6145 mono/arch/sparc/Makefile
6146 mono/arch/s390x/Makefile
6147 mono/arch/arm/Makefile
6148 mono/arch/arm64/Makefile
6149 mono/arch/mips/Makefile
6150 mono/arch/riscv/Makefile
6152 mono/native/platform-type.c
6153 mono/native/platform-type-compat.c
6154 mono/native/platform-type-unified.c
6156 mono/tests/assembly-load-reference/Makefile
6157 mono/tests/tests-config
6158 mono/tests/gc-descriptors/Makefile
6159 mono/tests/testing_gac/Makefile
6160 mono/tests/llvmonly-mixed/Makefile
6161 mono/unit-tests/Makefile
6162 mono/benchmark/Makefile
6164 mono/profiler/Makefile
6166 mono/eglib/eglib-config.h
6167 mono/eglib/test/Makefile
6169 ikvm-native/Makefile
6174 data/net_2_0/Makefile
6175 data/net_4_0/Makefile
6176 data/net_4_5/Makefile
6177 data/net_2_0/Browsers/Makefile
6178 data/net_4_0/Browsers/Makefile
6179 data/net_4_5/Browsers/Makefile
6186 data/mono-options.pc
6187 data/mono-lineeditor.pc
6193 data/system.web.extensions_1.0.pc
6194 data/system.web.extensions.design_1.0.pc
6195 data/system.web.mvc.pc
6196 data/system.web.mvc2.pc
6197 data/system.web.mvc3.pc
6198 data/aspnetwebstack.pc
6204 tools/locale-builder/Makefile
6206 tools/monograph/Makefile
6207 tools/pedump/Makefile
6213 if test x$host_win32 = xyes; then
6214 # Get rid of 'cyg' prefixes in library names
6215 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6216 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6217 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6218 # executable doesn't work...
6219 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6222 if test x$host_darwin = xyes; then
6223 # This doesn't seem to be required and it slows down parallel builds
6224 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6229 NONE) prefix=$ac_default_prefix ;;
6231 case $exec_prefix in
6232 NONE) exec_prefix='${prefix}' ;;
6236 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6237 # any existing config.make. This allows people to share the same source tree
6238 # with different build directories, one native and one cross
6240 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6242 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6244 echo "prefix=$prefix" > $mcs_topdir/build/config.make
6245 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6246 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6247 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6248 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6249 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6250 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6251 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6252 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6255 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6256 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6259 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6262 [myver=$($AWK 'BEGIN {
6263 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6264 if(length(vsplit [1]) > 4) {
6265 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6267 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6270 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6271 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6273 if test x$host_darwin = xyes; then
6274 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6275 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6276 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6277 elif test x$host_win32 = xyes; then
6278 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6279 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6280 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6281 elif test x$host_linux = xyes; then
6282 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6283 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6284 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6286 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6287 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6288 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6291 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6292 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6295 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6296 enable_system_aot=yes
6299 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6300 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6303 if test x$DISABLE_MCS_DOCS = xyes; then
6304 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6307 if test x$has_extension_module != xno; then
6308 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6311 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6313 if test "x$test_bcl_opt" = "xyes"; then
6314 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6317 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6319 if test $csc_compiler = mcs; then
6320 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6323 if test "x$AOT_BUILD_FLAGS" != "x" ; then
6324 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6325 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6326 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6329 if test "x$AOT_MODE" != "x" ; then
6330 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6333 if test "x$enable_btls" = "xyes"; then
6334 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6337 if test "x$mono_native" = "xyes"; then
6338 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6340 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6343 if test x$mono_native_compat = xyes; then
6344 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6346 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6349 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6350 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6356 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6358 btls_platform_string=
6359 if test x$enable_btls = xyes; then
6360 if test x$btls_android = xyes; then
6361 btls_platform_string=" (android:$BTLS_PLATFORM)"
6363 btls_platform_string=" ($BTLS_PLATFORM)"
6368 if test x$buildsgen = xyes; then
6369 if test x$enable_cooperative_suspend != xno; then
6370 thread_suspend_msg="Suspend: Cooperative"
6371 elif test x$enable_hybrid_suspend != xno; then
6372 thread_suspend_msg="Suspend: Hybrid"
6374 thread_suspend_msg="Suspend: Preemptive"
6380 C# Compiler: $csc_compiler
6388 SIGALTSTACK: $with_sigaltstack
6390 BigArrays: $enable_big_arrays
6391 DTrace: $enable_dtrace
6392 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6393 Spectre: $spectre_mitigation_status
6394 Mono.Native: $mono_native_text
6397 .NET 4.x: $with_profile4_x
6398 Xamarin.Android: $with_monodroid
6399 Xamarin.iOS: $with_monotouch
6400 Xamarin.WatchOS: $with_monotouch_watch
6401 Xamarin.TVOS: $with_monotouch_tv
6402 Xamarin.Mac: $with_xammac
6403 Windows AOT: $with_winaot
6405 Unreal: $with_unreal
6406 WebAssembly: $with_wasm
6407 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6408 JNI support: $jdk_headers_found
6409 libgdiplus: $libgdiplus_msg
6411 BTLS: $enable_btls$btls_platform_string
6412 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
6413 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6414 .NET Core: $with_core
6417 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6418 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)