1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.14.0],
5 [https://github.com/mono/mono/issues/new])
7 AC_CONFIG_SRCDIR([README.md])
8 AC_CONFIG_MACRO_DIR([m4])
12 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
13 # The extra brackets are to foil regex-based scans.
14 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
16 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign subdir-objects]
17 m4_esyscmd([case `automake --version | head -n 1` in # parallel-tests is default in automake 1.13+, we need to explicitly enable it
18 *1.11*|*1.12*) echo parallel-tests;; # for 1.11 and 1.12 but not below as those versions don't recognize the flag
19 esac])) # TODO: remove this hack once we require automake 1.11+
21 AC_CONFIG_HEADERS([config.h])
29 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
31 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
32 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
33 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
35 # This is the version number of the corlib-runtime interface. When
36 # making changes to this interface (by changing the layout
37 # of classes the runtime knows about, changing icall signature or
38 # semantics etc), increment this variable.
40 # This can be reset to 0 when Mono's version number is bumped
41 # since it's part of the corlib version (the prefix '1' in the full
42 # version number is to ensure the number isn't treated as octal in C)
44 MONO_CORLIB_VERSION=`printf "1%02d%02d%02d%03d" $MONO_VERSION_MAJOR $MONO_VERSION_MINOR 0 $MONO_CORLIB_COUNTER`
46 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,$MONO_CORLIB_VERSION,[Version of the corlib-runtime interface])
47 AC_SUBST(MONO_CORLIB_VERSION)
51 echo "Run configure using ./configure --host=i686-pc-mingw32"
55 # In case of cygwin, override LN_S, irrespective of what it determines.
56 # The build uses cygwin, but the actual runtime doesn't.
58 *cygwin* ) LN_S='cp -p';;
66 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
67 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
68 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
69 CFLAGS_FOR_LIBGC=$CFLAGS
70 CPPFLAGS_FOR_BTLS=$CPPFLAGS
71 CFLAGS_FOR_BTLS=$CFLAGS
73 # libgc uses some deprecated APIs
74 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
77 # These are the flags that need to be stored in the mono.pc file for
78 # compiling code that will embed Mono
82 AC_SUBST(libmono_cflags)
83 AC_SUBST(libmono_ldflags)
85 # Variable to have relocatable .pc files (lib, or lib64)
86 # realpath isn't always available, and requires that all but the tip of the provided
87 # path exists. Fall back to the old behaviour, but realpath allows depth >1
88 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
89 # too deep for the old method to work
90 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
91 AC_SUBST(reloc_libdir)
93 # Set to yes if Unix sockets cannot be created in an anonymous namespace
96 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
97 extra_runtime_ldflags=""
101 # Current autotools (v1.15) doesn't have a triplet we can use for wasm so the kludge we do is to
102 # work around it by using a feature flag instead
103 AC_ARG_ENABLE(wasm,[ --enable-wasm Hack to set the current runtime to target wasm], enable_wasm=$enableval)
105 # Thread configuration inspired by sleepycat's db
106 AC_MSG_CHECKING([host platform characteristics])
121 if test "x$enable_wasm" = "xyes"; then
122 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
123 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
125 libgc_threads=pthreads
131 *-mingw*|*-*-cygwin*)
132 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
133 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
136 if test "x$cross_compiling" = "xno"; then
137 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
141 if test "x$host" = "x$target"; then
146 # Windows Vista or later is required
147 CPPFLAGS="$CPPFLAGS -DWINVER=0x0600 -D_WIN32_WINNT=0x0600 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
148 LDFLAGS="$LDFLAGS -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
149 libmono_cflags="-mms-bitfields -mwindows"
150 libmono_ldflags="-mms-bitfields -mwindows"
155 with_sgen_default_concurrent=yes
157 # This forces libgc to use the DllMain based thread registration code on win32
158 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
161 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
162 libmono_cflags="-D_REENTRANT"
163 LDFLAGS="$LDFLAGS -pthread"
164 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
165 libmono_ldflags="-pthread"
168 libgc_threads=pthreads
171 with_sgen_default_concurrent=yes
174 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
175 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
176 libmono_ldflags="-lpthread -pthread"
178 libgc_threads=pthreads
182 with_sgen_default_concurrent=yes
185 if test "x$PTHREAD_CFLAGS" = "x"; then
186 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
189 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
190 libmono_cflags="$PTHREAD_CFLAGS"
192 if test "x$PTHREAD_LIBS" = "x"; then
193 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
194 libmono_ldflags="-pthread"
196 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
197 libmono_ldflags="$PTHREAD_LIBS"
199 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
201 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
203 libgc_threads=pthreads
206 with_sgen_default_concurrent=yes
209 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
210 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
211 if test "x$disable_munmap" != "xyes"; then
212 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
214 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
215 LDFLAGS="$LDFLAGS -pthread"
217 AC_DEFINE(PTHREAD_POINTER_ID)
219 libgc_threads=pthreads
223 with_sgen_default_concurrent=yes
227 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
228 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
230 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
231 if test "x$disable_munmap" != "xyes"; then
232 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
234 libmono_cflags="-D_REENTRANT"
236 libgc_threads=pthreads
243 # Android doesn't support boehm, as it's missing <link.h>
247 # isinf(3) requires -lm; see isinf check below
248 LDFLAGS="$LDFLAGS -lm"
250 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
251 # PAGE_SIZE; breaks mono/io-layer/collection.c
252 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
253 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
254 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
256 # to bypass the underscore linker check, can't work when cross-compiling
261 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
262 if test "x$disable_munmap" != "xyes"; then
263 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
265 libmono_cflags="-D_REENTRANT"
267 libgc_threads=pthreads
269 if test "x$cross_compiling" != "xno"; then
270 # to bypass the underscore linker check, not
271 # available during cross-compilation
285 # https://bugzilla.novell.com/show_bug.cgi?id=504411
289 with_sgen_default_concurrent=yes
292 echo "nacl no longer supported."
296 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
297 # +ESdbgasm only valid on bundled cc on RISC
298 # silently ignored for ia64
299 if test $GCC != "yes"; then
300 CFLAGS="$CFLAGS +ESdbgasm"
301 # Arrange for run-time dereferencing of null
302 # pointers to produce a SIGSEGV signal.
303 LDFLAGS="$LDFLAGS -z"
305 CFLAGS="$CFLAGS +ESdbgasm"
306 LDFLAGS="$LDFLAGS -z"
307 libmono_cflags="-D_REENTRANT"
308 libmono_ldflags="-lpthread"
309 libgc_threads=pthreads
314 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
316 libmono_cflags="-D_REENTRANT"
317 libgc_threads=pthreads
320 enable_solaris_tar_check=yes
323 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
326 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
327 libmono_cflags="-D_THREAD_SAFE"
329 AC_DEFINE(PTHREAD_POINTER_ID)
330 AC_DEFINE(USE_MACH_SEMA, 1, [...])
332 libgc_threads=pthreads
334 if test "x$cross_compiling" = "xyes"; then
335 has_broken_apple_cpp=yes
337 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
338 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
339 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
341 dnl Snow Leopard and newer config.guess reports as this
343 BROKEN_DARWIN_FLAGS="-arch i386 -D_XOPEN_SOURCE"
344 BROKEN_DARWIN_CPPFLAGS="-D_XOPEN_SOURCE"
345 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
346 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
347 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
348 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
349 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
350 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
351 with_sgen_default_concurrent=yes
354 with_sgen_default_concurrent=yes
366 CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
367 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
369 LIBS="$LIBS -lnetwork -ltextencoding"
371 AC_DEFINE(PTHREAD_POINTER_ID)
372 dnl Haiku does not support static TLS with __thread
374 libgc_threads=pthreads
378 dnl Set up a 64-bit build
379 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
381 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
382 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
383 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
384 dnl specifiy 64-bit mode for tools.
385 AR="/usr/bin/ar -X64"
386 NM="/usr/bin/nm -X64"
387 dnl SGen is the future (changes to Boehm support code would be
388 dnl required if you wish to re-enable Boehm)
393 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
395 dnl use pthread TLS, __thread has issues with the compiler flags we use
397 dnl ppc Linux is the same? test further
401 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
411 if test x$need_link_unlink = xyes; then
412 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
415 if test x$host_win32 = xyes; then
416 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
419 if test x$target_win32 = xyes; then
420 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
423 if test x$host_darwin = xyes; then
424 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
427 # Defined for all targets/platforms using classic Windows API support.
428 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
429 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
431 AC_SUBST(extra_runtime_ldflags)
432 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
433 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
434 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
435 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
436 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
437 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
438 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
439 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
440 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
442 if test -z "$HOST_DARWIN_TRUE"; then :
443 PLATFORM_AOT_SUFFIX=.dylib
446 if test -z "$HOST_LINUX_TRUE"; then :
447 PLATFORM_AOT_SUFFIX=.so
450 if test -z "$HOST_WIN32_TRUE"; then :
451 PLATFORM_AOT_SUFFIX=.dll
454 AC_SUBST(PLATFORM_AOT_SUFFIX)
456 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
458 AC_CHECK_TOOL(CC, gcc, gcc)
460 AC_CHECK_TOOL(CXX, g++, g++)
466 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
468 # Set ASFLAGS if not already set.
469 : ${CCASFLAGS='$(CFLAGS)'}
473 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
474 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
475 if test "x$CXX" = "xg++"; then
476 if test "x$GXX" != "xyes"; then
477 # automake/libtool is so broken, it requires g++ even if the c++ sources
478 # are inside automake conditionals
479 AC_MSG_ERROR([You need to install g++])
483 dnl may require a specific autoconf version
484 dnl AC_PROG_CC_FOR_BUILD
485 dnl CC_FOR_BUILD not automatically detected
487 CFLAGS_FOR_BUILD=$CFLAGS
489 if test "x$cross_compiling" = "xyes"; then
494 AC_SUBST(CC_FOR_BUILD)
495 AC_SUBST(CFLAGS_FOR_BUILD)
497 AC_SUBST(BUILD_EXEEXT)
499 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
500 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
505 # This causes monodis to not link correctly
506 #AC_DISABLE_FAST_INSTALL
508 #lookup makedev() header
512 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
515 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
516 AC_SUBST(export_ldflags)
518 # Test whenever ld supports -version-script
522 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)
523 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)
524 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
525 [], [], [#include <stddef.h>
526 #include <sys/socket.h>
527 #include <linux/socket.h>])
529 AC_CHECK_HEADERS(sys/user.h, [], [],
531 #ifdef HAVE_SYS_PARAM_H
532 # include <sys/param.h>
536 AC_CHECK_HEADERS(linux/serial.h)
538 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
539 if test x$have_zlib = xyes; then
540 AC_TRY_COMPILE([#include <zlib.h>], [
541 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
543 #error No good zlib found
546 AC_MSG_RESULT(Using system zlib)
547 zlib_msg="system zlib"
548 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
550 AC_MSG_RESULT(Using embedded zlib)
552 zlib_msg="bundled zlib"
556 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
557 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
559 # for mono/metadata/debug-symfile.c
560 AC_CHECK_HEADERS(elf.h)
563 AC_CHECK_HEADERS(poll.h)
564 AC_CHECK_HEADERS(sys/poll.h)
565 AC_CHECK_HEADERS(sys/wait.h)
566 AC_CHECK_HEADERS(grp.h)
567 AC_CHECK_HEADERS(syslog.h)
568 AC_CHECK_FUNCS(vsyslog)
571 AC_CHECK_HEADERS(wchar.h)
572 AC_CHECK_HEADERS(ieeefp.h)
573 AC_MSG_CHECKING(for isinf)
574 AC_TRY_LINK([#include <math.h>], [
578 AC_DEFINE(HAVE_ISINF, 1, [isinf available])
580 # We'll have to use signals
584 AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
585 AC_TRY_LINK([#include <math.h>],
587 AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
590 # for Linux statfs support
591 AC_CHECK_HEADERS(linux/magic.h)
593 # For Android NDK unified headers
594 if test x$platform_android = xyes; then
595 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
596 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
598 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
599 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
600 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
601 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
602 # doesn't contain the required definitions (NDK 14)
603 if test x$have_android_signal_inlines = xyes; then
604 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
606 AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
608 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
612 android_sigrtminmax_work=yes
615 android_sigrtminmax_work=no
619 if test x$android_sigrtminmax_work = xno; then
620 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
624 # Attempt to detect whether we're using Android NDK unified headers
625 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
626 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
628 android_unified_headers=no
629 if test x$have_android_api_level = xyes; then
630 if test x$have_android_versioning = xyes; then
631 AC_MSG_CHECKING([whether using Android NDK unified headers])
633 # Both macros are defined only in the NDK unified headers
636 #include <android/api-level.h>
637 #include <android/versioning.h>
639 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
641 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
645 android_unified_headers=yes
648 android_unified_headers=no
654 if test x$android_unified_headers = xyes; then
655 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
659 # not 64 bit clean in cross-compile
660 if test "x$enable_wasm" = "xyes"; then
661 AC_DEFINE(SIZEOF_VOID_P,4)
662 AC_DEFINE(SIZEOF_LONG,4)
663 ac_cv_sizeof_void_p="4"
664 ac_cv_sizeof_long="4"
666 AC_CHECK_SIZEOF(void *)
667 AC_CHECK_SIZEOF(long)
671 AC_CHECK_SIZEOF(long long)
673 AC_CACHE_CHECK([for clang],
686 AC_ARG_ENABLE(visibility-hidden,
687 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
688 disable_visibility_hidden=yes, disable_visibility_hidden=no)
691 if test x"$GCC" = xyes; then
692 WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes -Wno-format-zero-length'
694 # We require C99 with some GNU extensions, e.g. `linux` macro
695 CFLAGS="$CFLAGS -std=gnu99"
697 # The runtime code does not respect ANSI C strict aliasing rules
698 CFLAGS="$CFLAGS -fno-strict-aliasing"
700 # We rely on signed overflow to behave
701 CFLAGS="$CFLAGS -fwrapv"
703 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
704 if test x"$disable_visibility_hidden" = xno; then
705 # Don't export any symbols by default
706 SHARED_CFLAGS="-fvisibility=hidden"
707 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
711 # Check for the normal version, since gcc ignores unknown -Wno options
712 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
713 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
717 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
723 if test "x$mono_cv_clang" = "xyes"; then
724 # https://bugzilla.samba.org/show_bug.cgi?id=8118
725 WARN="$WARN -Qunused-arguments"
726 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
727 # We rely on zero length arrays in structs
728 WARN="$WARN -Wno-zero-length-array"
731 # The Sun Forte compiler complains about inline functions that access static variables
732 # so disable all inlining.
735 CFLAGS="$CFLAGS -Dinline="
739 CFLAGS="$CFLAGS -g $WARN"
740 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
741 CPPFLAGS="$CPPFLAGS -g $WARN"
743 # Where's the 'mcs' source tree?
744 if test -d $srcdir/mcs; then
750 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
751 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
752 mcsdir=$with_mcs_path
756 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
759 # A sanity check to catch cases where the package was unpacked
760 # with an ancient tar program (Solaris)
762 AC_ARG_ENABLE(solaris-tar-check,
763 [ --disable-solaris-tar-check disable solaris tar check],
764 do_solaris_tar_check=no, do_solaris_tar_check=yes)
766 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
767 AC_MSG_CHECKING(integrity of package)
768 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
772 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"
773 AC_MSG_ERROR([$errorm])
777 if test "x$with_mcs_path" != "x"; then
778 mcs_topdir=$(cd "$mcsdir" && pwd)
779 mcs_topdir_from_srcdir=$mcs_topdir
781 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
782 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
785 # Convert mcs_topdir* paths to Windows syntax.
786 if test x$cross_compiling$host_win32 = xnoyes; then
787 mcs_topdir=$(cygpath -m $mcs_topdir)
788 case $mcs_topdir_from_srcdir in
790 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
795 AC_SUBST([mcs_topdir])
796 AC_SUBST([mcs_topdir_from_srcdir])
798 # gettext: prepare the translation directories.
799 # we do not configure the full gettext, as we consume it dynamically from C#
802 if test "x$USE_NLS" = "xyes"; then
803 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
805 if test "x$HAVE_MSGFMT" = "xno"; then
806 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
810 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
813 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
814 if test x$with_crosspkgdir = "x"; then
815 if test -s $PKG_CONFIG_PATH; then
816 pkg_config_path=$PKG_CONFIG_PATH
819 pkg_config_path=$with_crosspkgdir
820 PKG_CONFIG_PATH=$pkg_config_path
821 export PKG_CONFIG_PATH
825 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
826 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
827 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
829 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
830 if test x$werror_flag = xyes; then
831 WERROR_CFLAGS="-Werror"
833 AC_SUBST([WERROR_CFLAGS])
834 AC_SUBST([SHARED_CFLAGS])
836 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
837 GLIB_LIBS='$(top_builddir)/mono/eglib/libeglib.la -lm'
839 AC_SUBST(GLIB_CFLAGS)
842 # Enable support for fast thread-local storage
843 # Some systems have broken support, so we allow to disable it.
844 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
846 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
847 # This does not work on some platforms (bug #55253)
848 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
850 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
851 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
852 # Same as --with-shared_mono=no
853 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
855 if test "x$enable_static" = "xno"; then
859 if test "x$enable_shared" = "xno"; then
863 if test "x$enable_libraries" = "xno"; then
867 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
869 if test "x$host_win32" = "xyes"; then
870 # Boehm GC requires the runtime to be in its own dll
874 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
875 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
876 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
877 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
879 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
880 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
881 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
883 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
884 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
888 # Pass it to libgc as well
889 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
896 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
898 if test x$enable_small_config = xyes; then
899 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
900 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
903 AC_ARG_ENABLE(system-aot, [ --enable-system-aot Enable the Ahead-Of-Time compilation of system assemblies during the build (on by default on some platforms)], enable_system_aot=$enableval, enable_system_aot=default)
905 DISABLED_FEATURES=none
908 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
909 AC_MSG_CHECKING([CSharp compiler to use])
910 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
911 if test x$withval = xmcs; then
913 elif test x$withval = xroslyn; then
915 elif test x$withval = xdefault; then
918 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
920 ],[csc_compiler=default])
922 if test $csc_compiler = default; then
923 if test $endian = big; then
925 elif test $endian = little; then
927 powerpc*) csc_compiler=mcs ;;
928 *) csc_compiler=roslyn ;;
934 AC_MSG_RESULT($csc_compiler)
936 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
937 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
938 AC_ARG_WITH(jemalloc-assert, [ --with-jemalloc_assert=yes,no If jemalloc performs runtime checks for memory correctness (defaults to no)], [], [with_jemalloc_assert=no])
941 if test x$target_win32 = xyes; then
943 with_jemalloc_assert=no
944 with_jemalloc_always=no
947 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
948 if test "x$with_jemalloc_assert" = "xyes"; then
949 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
950 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
951 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
954 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
955 if test "x$with_jemalloc_always" = "xyes"; then
957 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
958 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
959 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
962 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
963 if test "x$with_jemalloc" = "xyes"; then
964 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
965 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
966 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
968 if test "x$target_mach" = "xyes"; then
969 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
972 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
973 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
975 AC_SUBST(JEMALLOC_CFLAGS)
976 AC_SUBST(JEMALLOC_CPPFLAGS)
977 AC_SUBST(JEMALLOC_LDFLAGS)
978 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
983 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
984 # MERP - The MS telemetry profile. Not for general use.
985 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
987 # Structured crashes are not merp crashes. Structured crashes are json dumps made by mono during crashes. Merp upload is going to use the dumping code is a very specific way, and is enabled at runtime with an icall.
989 #--with-crash_privacy=yes --with-structured_crashes=no means we don't wanna dump in non-merp-enabled builds, and we want to not send symbol strings. This is going to be the default pair of settings for VS4Mac.
990 #--with-crash_privacy=yes --with-structured_crashes=yes means you want to see crashes on your console, and you want to not see unmanaged symbol names. This is an option for proprietary apps that have manual bugs filed.
991 #--with-crash_privacy=no --with-structured_crashes=no means you want to see no crash dumps on failure and you don't care about privacy. This is how you'd set a "don't want it, don't care" configuration.
992 #--with-crash_privacy=no --with-structured_crashes=yes means you want full crashes and you want to see them in the terminal, not on telemetry. This is going to be how we build for CI.
994 AC_ARG_WITH(crash-privacy, [ --with-crash_privacy=yes,no If you want your crashes to not include names of symbols present in the binary. ], [], [with_crash_privacy=no])
995 AC_ARG_WITH(structured-crashes, [ --with-structured_crashes=yes,no If you want your unmanaged crashes to result in a small crash dump file. ], [], [with_structured_crashes=yes])
997 if test "x$with_crash_privacy" = "xno"; then
998 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1001 if test "x$with_structured_crashes" = "xno"; then
1002 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1006 # Set the build profiles and options before things which use them
1009 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])
1010 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1011 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1012 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])
1013 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])
1014 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1015 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1016 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])
1017 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])
1018 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1019 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1020 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1021 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1024 AC_ARG_WITH(runtime_preset, [ --with-runtime_preset=net_4_x,all,aot,hybridaot,fullaot,bitcode,unreal Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1025 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])
1026 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])
1027 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])
1030 dnl Spectre compiler mitigation flag checks
1032 if test "x$with_spectre_mitigation" = "xyes"; then
1033 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1035 SPECTRE_INDIRECT_BRANCH_KIND=
1036 case "x$with_spectre_indirect_branch_choice" in
1037 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1038 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1039 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1040 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1041 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1044 SPECTRE_FUNCTION_RETURN_KIND=""
1045 case "x$with_spectre_function_return_choice" in
1046 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1047 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1048 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1049 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1050 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1053 AX_CHECK_COMPILE_FLAG(
1054 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1055 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1058 AX_CHECK_COMPILE_FLAG(
1059 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1060 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1063 if test "x$SPECTRE_CFLAGS" != "x" ; then
1064 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1065 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1066 spectre_mitigation_status="mitigation enabled"
1069 spectre_mitigation_status="no mitigation"
1073 dnl Profile defaults
1075 TEST_PROFILE=default
1076 enable_llvm_default=no
1078 with_profile4_x_default=no
1079 with_monodroid_default=no
1080 with_monotouch_default=no
1081 with_monotouch_watch_default=no
1082 with_monotouch_tv_default=no
1083 with_xammac_default=no
1084 with_testing_aot_hybrid_default=no
1085 with_testing_aot_full_default=no
1086 with_winaot_default=no
1087 with_orbis_default=no
1088 with_unreal_default=no
1089 with_wasm_default=no
1091 with_bitcode_default=no
1092 with_cooperative_gc_default=no
1094 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1096 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1098 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1099 DISABLE_MCS_DOCS_default=yes
1100 elif test x$with_runtime_preset = xnet_4_x; then
1101 with_profile4_x_default=yes
1102 elif test x$with_runtime_preset = xall; then
1103 with_profile4_x_default=yes
1104 with_monodroid_default=yes
1105 with_monotouch_default=yes
1106 with_monotouch_watch_default=yes
1107 with_monotouch_tv_default=yes
1108 with_xammac_default=yes
1109 with_winaot_default=yes
1110 with_orbis_default=yes
1111 with_unreal_default=yes
1112 with_wasm_default=yes
1113 elif test x$with_runtime_preset = xfullaot; then
1114 DISABLE_MCS_DOCS_default=yes
1115 with_testing_aot_full_default=yes
1116 TEST_PROFILE=testing_aot_full
1118 mono_feature_disable_com='yes'
1119 mono_feature_disable_remoting='yes'
1120 mono_feature_disable_reflection_emit_save='yes'
1121 mono_feature_disable_reflection_emit='yes'
1122 mono_feature_disable_appdomains='yes'
1124 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1125 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1127 elif test x$with_runtime_preset = xbitcode; then
1128 DISABLE_MCS_DOCS_default=yes
1129 with_testing_aot_full_default=yes
1130 with_bitcode_default=yes
1131 with_cooperative_gc_default=yes
1132 TEST_PROFILE=testing_aot_full
1133 enable_llvm_default=yes
1135 mono_feature_disable_com='yes'
1136 mono_feature_disable_remoting='yes'
1137 mono_feature_disable_reflection_emit_save='yes'
1138 mono_feature_disable_reflection_emit='yes'
1139 mono_feature_disable_appdomains='yes'
1141 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1142 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1144 elif test x$with_runtime_preset = xhybridaot; then
1145 DISABLE_MCS_DOCS_default=yes
1146 with_testing_aot_hybrid_default=yes
1147 TEST_PROFILE=testing_aot_hybrid
1149 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1150 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1151 elif test x$with_runtime_preset = xaot; then
1152 with_profile4_x_default=yes
1154 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1157 DISABLE_MCS_DOCS_default=yes
1158 elif test x$with_runtime_preset = xwinaot; then
1159 DISABLE_MCS_DOCS_default=yes
1160 with_winaot_default=yes
1163 mono_feature_disable_com='yes'
1164 mono_feature_disable_remoting='yes'
1165 mono_feature_disable_reflection_emit_save='yes'
1166 mono_feature_disable_reflection_emit='yes'
1167 mono_feature_disable_appdomains='yes'
1169 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1170 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1172 elif test x$with_runtime_preset = xorbis; then
1173 DISABLE_MCS_DOCS_default=yes
1174 with_orbis_default=yes
1177 mono_feature_disable_com='yes'
1178 mono_feature_disable_remoting='yes'
1179 mono_feature_disable_reflection_emit_save='yes'
1180 mono_feature_disable_reflection_emit='yes'
1181 mono_feature_disable_appdomains='yes'
1183 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1184 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1186 elif test x$with_runtime_preset = xunreal; then
1187 DISABLE_MCS_DOCS_default=yes
1188 with_unreal_default=yes
1191 mono_feature_disable_com='yes'
1192 mono_feature_disable_remoting='yes'
1193 mono_feature_disable_appdomains='no'
1195 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1196 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1197 elif test x$with_runtime_preset = xwasm; then
1198 DISABLE_MCS_DOCS_default=yes
1199 with_wasm_default=yes
1202 mono_feature_disable_com='yes'
1203 mono_feature_disable_remoting='yes'
1204 mono_feature_disable_reflection_emit_save='yes'
1205 mono_feature_disable_reflection_emit='yes'
1206 mono_feature_disable_appdomains='yes'
1208 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1209 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1211 with_profile4_x_default=yes
1214 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1215 AC_SUBST(AOT_BUILD_FLAGS)
1216 AC_SUBST(AOT_RUN_FLAGS)
1217 # For llvmonlycheck + fullaotcheck
1218 AC_SUBST(INVARIANT_AOT_OPTIONS)
1221 AC_SUBST(TEST_PROFILE)
1223 if test "x$with_profile4_x" = "xdefault"; then
1224 with_profile4_x=$with_profile4_x_default
1226 if test "x$with_monodroid" = "xdefault"; then
1227 with_monodroid=$with_monodroid_default
1229 if test "x$with_monotouch" = "xdefault"; then
1230 with_monotouch=$with_monotouch_default
1232 if test "x$with_monotouch_watch" = "xdefault"; then
1233 with_monotouch_watch=$with_monotouch_watch_default
1235 if test "x$with_monotouch_tv" = "xdefault"; then
1236 with_monotouch_tv=$with_monotouch_tv_default
1238 if test "x$with_bitcode" = "xdefault"; then
1239 with_bitcode=$with_bitcode_default
1241 if test "x$with_xammac" = "xdefault"; then
1242 with_xammac=$with_xammac_default
1244 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1245 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1247 if test "x$with_testing_aot_full" = "xdefault"; then
1248 with_testing_aot_full=$with_testing_aot_full_default
1250 if test "x$with_winaot" = "xdefault"; then
1251 with_winaot=$with_winaot_default
1253 if test "x$with_orbis" = "xdefault"; then
1254 with_orbis=$with_orbis_default
1256 if test "x$with_unreal" = "xdefault"; then
1257 with_unreal=$with_unreal_default
1259 if test "x$with_wasm" = "xdefault"; then
1260 with_wasm=$with_wasm_default
1264 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1265 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1266 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1267 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1268 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1269 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1270 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1271 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1272 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1273 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1274 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1275 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1276 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1277 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"])
1278 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1280 default_profile=net_4_x
1281 if test -z "$INSTALL_MONODROID_TRUE"; then :
1282 default_profile=monodroid
1284 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1285 default_profile=monotouch
1287 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1288 default_profile=xammac
1290 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1291 default_profile=testing_aot_hybrid
1293 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1294 default_profile=testing_aot_full
1296 if test -z "$INSTALL_WINAOT_TRUE"; then :
1297 default_profile=winaot
1299 if test -z "$INSTALL_ORBIS_TRUE"; then :
1300 default_profile=orbis
1302 if test -z "$INSTALL_UNREAL_TRUE"; then :
1303 default_profile=unreal
1305 if test -z "$INSTALL_WASM_TRUE"; then :
1306 default_profile=wasm
1308 if test -z "$INSTALL_4_x_TRUE"; then :
1309 default_profile=net_4_x
1311 DEFAULT_PROFILE=$default_profile
1312 AC_SUBST(DEFAULT_PROFILE)
1315 # End build profile configuration
1318 if test x$USE_NLS = xprofile_default; then
1320 AC_MSG_CHECKING([NLS used])
1322 # We make the default value for USE_NLS
1323 # "no" on OSX because it isn't available on most
1324 # default OSX installs. The most common configurations will
1325 # all disable it, so this saves us typing.
1326 if test x$host_darwin = xyes; then
1333 AC_MSG_RESULT([$USE_NLS])
1336 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1337 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1338 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1339 security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1341 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1342 eval "mono_feature_disable_$feature='yes'"
1344 DISABLED_FEATURES=$enable_minimal
1345 disabled="Disabled: $enable_minimal"
1348 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1350 if test "x$mono_feature_disable_aot" = "xyes"; then
1351 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1352 enable_system_aot=no
1353 AC_MSG_NOTICE([Disabled AOT compiler])
1356 if test "x$mono_feature_disable_profiler" = "xyes"; then
1357 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1358 AC_MSG_NOTICE([Disabled support for the profiler])
1360 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1362 if test "x$mono_feature_disable_decimal" = "xyes"; then
1363 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1364 AC_MSG_NOTICE([Disabled support for decimal])
1367 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1368 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1369 AC_MSG_NOTICE([Disabled support for P/Invoke])
1372 if test "x$mono_feature_disable_debug" = "xyes"; then
1373 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1374 AC_MSG_NOTICE([Disabled support for runtime debugging])
1377 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1378 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1379 mono_feature_disable_reflection_emit_save=yes
1380 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1383 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1384 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1385 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1388 if test "x$mono_feature_disable_large_code" = "xyes"; then
1389 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1390 AC_MSG_NOTICE([Disabled support for large assemblies])
1393 if test "x$mono_feature_disable_logging" = "xyes"; then
1394 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1395 AC_MSG_NOTICE([Disabled support for logging])
1398 if test "x$mono_feature_disable_com" = "xyes"; then
1399 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1400 AC_MSG_NOTICE([Disabled COM support])
1403 if test "x$mono_feature_disable_ssa" = "xyes"; then
1404 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1405 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1408 if test "x$mono_feature_disable_generics" = "xyes"; then
1409 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1410 AC_MSG_NOTICE([Disabled Generics Support])
1413 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1414 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1415 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1418 if test "x$mono_feature_disable_portability" = "xyes"; then
1419 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1420 AC_MSG_NOTICE([Disabled IO Portability layer])
1423 if test "x$mono_feature_disable_attach" = "xyes"; then
1424 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1425 AC_MSG_NOTICE([Disabled agent attach])
1428 if test "x$mono_feature_disable_verifier" = "xyes"; then
1429 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1430 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1433 if test "x$mono_feature_disable_jit" = "xyes"; then
1434 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1435 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1438 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1440 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1441 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1442 AC_MSG_NOTICE([Disabled the interpreter])
1445 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1447 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1448 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1451 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1453 if test "x$mono_feature_disable_simd" = "xyes"; then
1454 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1455 AC_MSG_NOTICE([Disabled SIMD support])
1458 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1459 AC_DEFINE(DISABLE_SOFT_DEBUG, 1, [Disable Soft Debugger Agent.])
1460 AC_MSG_NOTICE([Disabled Soft Debugger.])
1463 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1464 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1465 AC_MSG_NOTICE([Disabled Performance Counters.])
1467 if test "x$mono_feature_disable_normalization" = "xyes"; then
1468 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1469 AC_MSG_NOTICE([Disabled String normalization support.])
1472 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1473 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1474 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1475 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1478 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1479 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1480 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1483 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1484 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1485 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1488 if test "x$mono_feature_disable_remoting" = "xyes"; then
1489 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1490 AC_MSG_NOTICE([Disabled remoting])
1493 if test "x$mono_feature_disable_security" = "xyes"; then
1494 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1495 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1498 if test "x$mono_feature_disable_lldb" = "xyes"; then
1499 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1500 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1503 if test "x$mono_feature_disable_mdb" = "xyes"; then
1504 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1505 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1508 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1509 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1510 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1514 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1515 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1516 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1519 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1520 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1521 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1524 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1525 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1526 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1529 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1530 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1532 has_extension_module=no
1533 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1535 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1536 if test x$extension = xdefault ; then
1537 has_extension_module=yes;
1540 if test x$enable_extension_module = xyes; then
1541 has_extension_module=yes;
1545 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1547 if test x$has_extension_module != xno ; then
1548 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1549 AC_MSG_NOTICE([Enabling mono extension module.])
1553 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1555 AC_MSG_CHECKING(for visibility __attribute__)
1558 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1559 int main () { doit (); return 0; }
1562 have_visibility_hidden=yes
1565 have_visibility_hidden=no
1570 dnl Boehm GC configuration
1573 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1575 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1576 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1578 if test "x$support_boehm" = "xyes"; then
1580 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1581 if test x$enable_parallel_mark = xyes; then
1582 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1592 if test "x$support_boehm" = "xyes"; then
1596 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1597 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1598 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1600 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1602 if test x$target_win32 = xyes; then
1603 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1604 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1607 gc_msg="Included Boehm GC with typed GC"
1608 if test x$enable_parallel_mark = xyes; then
1609 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1610 gc_msg="$gc_msg and parallel mark"
1612 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1617 AC_MSG_WARN("External Boehm is no longer supported")
1621 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1625 AC_MSG_WARN("Compiling mono without GC.")
1626 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1627 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1631 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1635 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])
1636 if test "x$large_heap" = "xyes"; then
1637 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1640 AC_SUBST(LIBGC_CPPFLAGS)
1641 AC_SUBST(LIBGC_LIBS)
1642 AC_SUBST(LIBGC_STATIC_LIBS)
1644 AC_SUBST(BOEHM_DEFINES)
1647 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1650 dnl End of Boehm GC Configuration
1653 dnl *************************************
1654 dnl *** Checks for zero length arrays ***
1655 dnl *************************************
1656 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1664 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1667 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1670 dnl ***********************************
1671 dnl *** Checks for signals
1672 dnl ***********************************
1673 AC_CHECK_HEADERS(signal.h)
1674 AC_CHECK_FUNCS(sigaction)
1675 AC_CHECK_FUNCS(kill)
1676 AC_CHECK_FUNCS(signal)
1678 # signal() is declared inline in Android headers
1679 # so we need to workaround it by overriding the check.
1680 if test x$platform_android = xyes; then
1681 AC_DEFINE(HAVE_SIGNAL,1)
1684 if test x$host_win32 = xno; then
1685 dnl *************************************
1686 dnl *** Checks for time capabilities ***
1687 dnl *************************************
1689 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1690 AC_TRY_COMPILE([#include <time.h>], [
1691 const int foo = CLOCK_MONOTONIC;
1694 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1699 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1700 AC_TRY_COMPILE([#include <time.h>], [
1701 const int foo = CLOCK_MONOTONIC_COARSE;
1704 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1709 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1710 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1711 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1713 dnl hires monotonic clock support
1714 AC_SEARCH_LIBS(clock_gettime, rt)
1715 AC_CHECK_FUNCS(clock_nanosleep)
1717 dnl dynamic loader support
1718 AC_CHECK_FUNC(dlopen, DL_LIB="",
1719 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1721 if test x$dl_support = xno; then
1722 AC_MSG_WARN([No dynamic loading support available])
1724 LIBS="$LIBS $DL_LIB"
1725 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1726 dnl from glib's configure.ac
1727 AC_CACHE_CHECK([for preceeding underscore in symbols],
1729 AC_TRY_RUN([#include <dlfcn.h>
1730 int mono_underscore_test (void) { return 42; }
1732 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1733 handle = dlopen ((void*)0, 0);
1735 f1 = dlsym (handle, "mono_underscore_test");
1736 f2 = dlsym (handle, "_mono_underscore_test");
1737 } return (!f2 || f1);
1739 [mono_cv_uscore=yes],
1740 [mono_cv_uscore=no],
1743 if test "x$mono_cv_uscore" = "xyes"; then
1744 MONO_DL_NEED_USCORE=1
1746 MONO_DL_NEED_USCORE=0
1748 AC_SUBST(MONO_DL_NEED_USCORE)
1749 AC_CHECK_FUNC(dlerror)
1752 dnl ******************************************************************
1753 dnl *** Checks for the IKVM JNI interface library ***
1754 dnl ******************************************************************
1755 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])
1758 if test x$with_ikvm_native = xyes; then
1759 ikvm_native_dir=ikvm-native
1760 jdk_headers_found="IKVM Native"
1763 AC_SUBST(ikvm_native_dir)
1765 AC_CHECK_HEADERS(execinfo.h)
1767 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1769 AC_CHECK_FUNCS(getgrgid_r)
1770 AC_CHECK_FUNCS(getgrnam_r)
1771 AC_CHECK_FUNCS(getresuid)
1772 AC_CHECK_FUNCS(setresuid)
1773 AC_CHECK_FUNCS(kqueue)
1774 AC_CHECK_FUNCS(backtrace_symbols)
1775 AC_CHECK_FUNCS(mkstemp)
1776 AC_CHECK_FUNCS(mmap)
1777 AC_CHECK_FUNCS(madvise)
1778 AC_CHECK_FUNCS(getrusage)
1779 AC_CHECK_FUNCS(getpriority)
1780 AC_CHECK_FUNCS(setpriority)
1781 AC_CHECK_FUNCS(dl_iterate_phdr)
1782 AC_CHECK_FUNCS(dladdr)
1783 AC_CHECK_FUNCS(sysconf)
1784 AC_CHECK_FUNCS(getrlimit)
1785 AC_CHECK_FUNCS(prctl)
1787 AC_CHECK_FUNCS(sched_getaffinity)
1788 AC_CHECK_FUNCS(sched_setaffinity)
1789 AC_CHECK_FUNCS(sched_getcpu)
1791 if test x$platform_android != xyes; then
1792 AC_CHECK_FUNCS(getpwnam_r)
1793 AC_CHECK_FUNCS(getpwuid_r)
1796 AC_FUNC_STRERROR_R()
1798 dnl ****************************************************************
1799 dnl *** Check for sched_setaffinity from glibc versions before ***
1800 dnl *** 2.3.4. The older versions of the function only take 2 ***
1801 dnl *** parameters, not 3. ***
1803 dnl *** Because the interface change was not made in a minor ***
1804 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1805 dnl *** won't always indicate the interface sched_affinity has. ***
1806 dnl ****************************************************************
1807 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1808 AC_TRY_COMPILE([#include <sched.h>], [
1810 sched_setaffinity(0, &mask);
1812 # Yes, we have it...
1814 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1816 # We have the new, three-parameter version
1819 AC_TRY_COMPILE([#include <sched.h>], [
1820 CPU_COUNT((void *) 0);
1823 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1825 # We have the new, three-parameter version
1829 dnl ******************************************************************
1830 dnl *** Check for large file support ***
1831 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1832 dnl ******************************************************************
1834 # Check that off_t can represent 2**63 - 1 correctly, working around
1835 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1836 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1838 AC_DEFUN([LARGE_FILES], [
1839 large_CPPFLAGS=$CPPFLAGS
1840 CPPFLAGS="$CPPFLAGS $1"
1842 #include <sys/types.h>
1845 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1846 #define COMPILE_TIME_ASSERT(pred) \
1847 switch(0){case 0:case pred:;}
1848 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1851 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1852 large_CPPFLAGS="$large_CPPFLAGS $1"
1857 CPPFLAGS=$large_CPPFLAGS
1860 AC_MSG_CHECKING(if off_t is 64 bits wide)
1862 if test $large_offt = no; then
1863 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1864 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1866 if test $large_offt = no; then
1867 AC_MSG_WARN([No 64 bit file size support available])
1870 dnl *****************************
1871 dnl *** Checks for libsocket ***
1872 dnl *****************************
1873 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1877 dnl *****************************
1878 dnl *** Checks for libinotify ***
1879 dnl *****************************
1880 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1883 dnl *******************************
1884 dnl *** Checks for MSG_NOSIGNAL ***
1885 dnl *******************************
1886 AC_MSG_CHECKING(for MSG_NOSIGNAL)
1887 AC_TRY_COMPILE([#include <sys/socket.h>], [
1888 int f = MSG_NOSIGNAL;
1890 # Yes, we have it...
1892 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1894 # We'll have to use signals
1898 dnl *****************************
1899 dnl *** Checks for IPPROTO_IP ***
1900 dnl *****************************
1901 AC_MSG_CHECKING(for IPPROTO_IP)
1902 AC_TRY_COMPILE([#include <netinet/in.h>], [
1903 int level = IPPROTO_IP;
1905 # Yes, we have it...
1907 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1909 # We'll have to use getprotobyname
1913 dnl *******************************
1914 dnl *** Checks for IPPROTO_IPV6 ***
1915 dnl *******************************
1916 AC_MSG_CHECKING(for IPPROTO_IPV6)
1917 AC_TRY_COMPILE([#include <netinet/in.h>], [
1918 int level = IPPROTO_IPV6;
1920 # Yes, we have it...
1922 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1924 # We'll have to use getprotobyname
1928 dnl ******************************
1929 dnl *** Checks for IPPROTO_TCP ***
1930 dnl ******************************
1931 AC_MSG_CHECKING(for IPPROTO_TCP)
1932 AC_TRY_COMPILE([#include <netinet/in.h>], [
1933 int level = IPPROTO_TCP;
1935 # Yes, we have it...
1937 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1939 # We'll have to use getprotobyname
1943 dnl *****************************
1944 dnl *** Checks for SOL_IP ***
1945 dnl *****************************
1946 AC_MSG_CHECKING(for SOL_IP)
1947 AC_TRY_COMPILE([#include <netdb.h>], [
1950 # Yes, we have it...
1952 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
1954 # We'll have to use getprotobyname
1958 dnl *****************************
1959 dnl *** Checks for SOL_IPV6 ***
1960 dnl *****************************
1961 AC_MSG_CHECKING(for SOL_IPV6)
1962 AC_TRY_COMPILE([#include <netdb.h>], [
1963 int level = SOL_IPV6;
1965 # Yes, we have it...
1967 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
1969 # We'll have to use getprotobyname
1973 dnl *****************************
1974 dnl *** Checks for SOL_TCP ***
1975 dnl *****************************
1976 AC_MSG_CHECKING(for SOL_TCP)
1977 AC_TRY_COMPILE([#include <netdb.h>], [
1978 int level = SOL_TCP;
1980 # Yes, we have it...
1982 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
1984 # We'll have to use getprotobyname
1988 dnl *****************************
1989 dnl *** Checks for IP_PKTINFO ***
1990 dnl *****************************
1991 AC_MSG_CHECKING(for IP_PKTINFO)
1992 AC_TRY_COMPILE([#include <linux/in.h>], [
1993 int level = IP_PKTINFO;
1995 # Yes, we have it...
1997 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2002 dnl *****************************
2003 dnl *** Checks for IPV6_PKTINFO ***
2004 dnl *****************************
2005 AC_MSG_CHECKING(for IPV6_PKTINFO)
2006 AC_TRY_COMPILE([#include <netdb.h>], [
2007 int level = IPV6_PKTINFO;
2009 # Yes, we have it...
2011 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2016 dnl **********************************
2017 dnl *** Checks for IP_DONTFRAG ***
2018 dnl **********************************
2019 AC_MSG_CHECKING(for IP_DONTFRAG)
2020 AC_TRY_COMPILE([#include <netinet/in.h>], [
2021 int level = IP_DONTFRAG;
2023 # Yes, we have it...
2025 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2030 dnl **********************************
2031 dnl *** Checks for IP_DONTFRAGMENT ***
2032 dnl **********************************
2033 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2034 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2035 int level = IP_DONTFRAGMENT;
2037 # Yes, we have it...
2039 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2044 dnl **********************************
2045 dnl *** Checks for IP_MTU_DISCOVER ***
2046 dnl **********************************
2047 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2048 AC_TRY_COMPILE([#include <linux/in.h>], [
2049 int level = IP_MTU_DISCOVER;
2051 # Yes, we have it...
2053 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2058 dnl **********************************
2059 dnl *** Checks for IP_PMTUDISC_DO ***
2060 dnl **********************************
2061 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2062 AC_TRY_COMPILE([#include <linux/in.h>], [
2063 int level = IP_PMTUDISC_DO;
2065 # Yes, we have it...
2067 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2072 dnl *********************************
2073 dnl *** Check for struct ip_mreqn ***
2074 dnl *********************************
2075 AC_MSG_CHECKING(for struct ip_mreqn)
2076 AC_TRY_COMPILE([#include <netinet/in.h>], [
2077 struct ip_mreqn mreq;
2078 mreq.imr_address.s_addr = 0;
2080 # Yes, we have it...
2082 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2084 # We'll just have to try and use struct ip_mreq
2086 AC_MSG_CHECKING(for struct ip_mreq)
2087 AC_TRY_COMPILE([#include <netinet/in.h>], [
2088 struct ip_mreq mreq;
2089 mreq.imr_interface.s_addr = 0;
2091 # Yes, we have it...
2093 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2095 # No multicast support
2100 dnl **********************************
2101 dnl *** Check for getaddrinfo ***
2102 dnl **********************************
2103 AC_MSG_CHECKING(for getaddrinfo)
2108 getaddrinfo(NULL,NULL,NULL,NULL);
2110 # Yes, we have it...
2112 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2117 dnl **********************************
2118 dnl *** Check for gethostbyname2_r ***
2119 dnl **********************************
2120 AC_MSG_CHECKING(for gethostbyname2_r)
2126 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2128 # Yes, we have it...
2130 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2135 dnl **********************************
2136 dnl *** Check for gethostbyname2 ***
2137 dnl **********************************
2138 AC_MSG_CHECKING(for gethostbyname2)
2143 gethostbyname2(NULL,0);
2145 # Yes, we have it...
2147 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2152 dnl **********************************
2153 dnl *** Check for gethostbyname ***
2154 dnl **********************************
2155 AC_MSG_CHECKING(for gethostbyname)
2160 gethostbyname(NULL);
2162 # Yes, we have it...
2164 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2169 dnl **********************************
2170 dnl *** Check for getprotobyname ***
2171 dnl **********************************
2172 AC_MSG_CHECKING(for getprotobyname)
2177 getprotobyname(NULL);
2179 # Yes, we have it...
2181 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2186 dnl **********************************
2187 dnl *** Check for getnameinfo ***
2188 dnl **********************************
2189 AC_MSG_CHECKING(for getnameinfo)
2194 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2196 # Yes, we have it...
2198 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2204 dnl **********************************
2205 dnl *** Check for inet_ntop ***
2206 dnl **********************************
2207 AC_MSG_CHECKING(for inet_ntop)
2210 #include <arpa/inet.h>
2212 inet_ntop (0, NULL, NULL, 0);
2214 # Yes, we have it...
2216 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2221 dnl *****************************
2222 dnl *** Checks for libnsl ***
2223 dnl *****************************
2224 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2226 AC_CHECK_FUNCS(inet_pton inet_aton)
2228 dnl *****************************
2229 dnl *** Checks for libxnet ***
2230 dnl *****************************
2233 AC_MSG_CHECKING(for Solaris XPG4 support)
2234 if test -f /usr/lib/libxnet.so; then
2235 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2236 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2237 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2244 if test "$GCC" = "yes"; then
2245 CFLAGS="$CFLAGS -Wno-char-subscripts"
2250 dnl *****************************
2251 dnl *** Checks for libpthread ***
2252 dnl *****************************
2253 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2254 # and libpthread does not exist
2258 dnl Haiku has pthread in libroot (libc equiv)
2259 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2262 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2265 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2268 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2271 AC_CHECK_HEADERS(pthread.h)
2272 AC_CHECK_HEADERS(pthread_np.h)
2273 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2274 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2275 AC_CHECK_FUNCS(pthread_kill)
2276 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2277 AC_TRY_COMPILE([ #include <pthread.h>], [
2278 pthread_mutexattr_t attr;
2279 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2284 AC_ERROR(Posix system lacks support for recursive mutexes)
2286 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2287 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2288 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2290 dnl **********************************
2291 dnl *** Check for mincore ***
2292 dnl **********************************
2293 AC_MSG_CHECKING(for mincore)
2296 #include <sys/types.h>
2297 #include <sys/mman.h>
2299 mincore(NULL, 0, NULL);
2301 # Yes, we have it...
2303 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2308 dnl ***********************************
2309 dnl *** Checks for working __thread ***
2310 dnl ***********************************
2311 AC_MSG_CHECKING(for working __thread)
2312 if test "x$with_tls" != "x__thread"; then
2313 AC_MSG_RESULT(disabled)
2314 elif test "x$cross_compiling" = "xyes"; then
2315 AC_MSG_RESULT(cross compiling, assuming yes)
2318 #if defined(__APPLE__) && defined(__clang__)
2319 #error "__thread does not currently work with clang on Mac OS X"
2322 #include <pthread.h>
2324 static int res1, res2;
2326 void thread_main (void *arg)
2341 pthread_create (&t1, NULL, thread_main, 1);
2342 pthread_create (&t2, NULL, thread_main, 2);
2344 pthread_join (t1, NULL);
2345 pthread_join (t2, NULL);
2347 return !(res1 + res2 == 2);
2357 dnl **************************************
2358 dnl *** Checks for working sigaltstack ***
2359 dnl **************************************
2360 AC_MSG_CHECKING(for working sigaltstack)
2361 if test "x$with_sigaltstack" != "xyes"; then
2362 AC_MSG_RESULT(disabled)
2363 elif test "x$cross_compiling" = "xyes"; then
2364 AC_MSG_RESULT(cross compiling, assuming yes)
2371 #include <pthread.h>
2372 #include <sys/wait.h>
2373 #if defined(__FreeBSD__) || defined(__NetBSD__)
2374 #define SA_STACK SA_ONSTACK
2377 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2382 volatile char*__ptr = NULL;
2384 loop (void *ignored)
2393 struct sigaction sa;
2396 pthread_attr_t attr;
2398 sa.sa_sigaction = sigsegv_signal_handler;
2399 sigemptyset (&sa.sa_mask);
2400 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2401 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2402 perror ("sigaction");
2406 /* x86 darwin deliver segfaults using SIGBUS */
2407 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2408 perror ("sigaction");
2411 sas.ss_sp = malloc (SIGSTKSZ);
2412 sas.ss_size = SIGSTKSZ;
2414 if (sigaltstack (&sas, NULL) == -1) {
2415 perror ("sigaltstack");
2419 pthread_attr_init (&attr);
2420 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2421 printf ("pthread_create\n");
2445 for (i = 0; i < 300; ++i) {
2446 waitpid (son, &status, WNOHANG);
2447 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2452 kill (son, SIGKILL);
2458 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2465 dnl ********************************
2466 dnl *** Checks for semaphore lib ***
2467 dnl ********************************
2468 # 'Real Time' functions on Solaris
2469 # posix4 on Solaris 2.6
2470 # pthread (first!) on Linux
2471 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2473 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2474 AC_CHECK_FUNCS(shm_open)
2476 dnl ********************************
2477 dnl *** Checks for timezone stuff **
2478 dnl ********************************
2479 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2485 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2486 if test $ac_cv_struct_tm_gmtoff = yes; then
2487 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2489 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2494 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2495 if test $ac_cv_var_timezone = yes; then
2496 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2498 AC_ERROR(unable to find a way to determine timezone)
2502 dnl *********************************
2503 dnl *** Checks for math functions ***
2504 dnl *********************************
2505 AC_SEARCH_LIBS(sqrtf, m)
2506 if test "x$has_broken_apple_cpp" != "xyes"; then
2507 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2508 AC_TRY_LINK([#include <math.h>],
2510 AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2513 AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2514 AC_TRY_LINK([#include <math.h>],
2516 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2519 dnl ****************************************************************
2520 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2521 dnl *** have it in the library (duh)) ***
2522 dnl ****************************************************************
2523 AC_CHECK_FUNCS(poll)
2525 dnl *************************
2526 dnl *** Check for signbit ***
2527 dnl *************************
2528 AC_MSG_CHECKING(for signbit)
2529 AC_TRY_LINK([#include <math.h>], [
2530 int s = signbit(1.0);
2533 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2538 dnl **********************************
2540 dnl **********************************
2541 AC_CHECK_HEADERS(sys/epoll.h)
2543 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2544 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2545 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2550 AC_CHECK_HEADERS(sys/event.h)
2551 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2553 dnl **************************************
2554 dnl * Darwin has a race that prevents us from using reliably:
2555 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2556 dnl * Since kqueue is mostly used for scaling large web servers,
2557 dnl * and very few folks run Mono on large web servers on OSX, falling
2559 dnl **************************************
2560 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2561 if test "x$host_darwin" = "xno"; then
2562 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2566 dnl ******************************
2567 dnl *** Checks for SIOCGIFCONF ***
2568 dnl ******************************
2569 AC_CHECK_HEADERS(sys/ioctl.h)
2570 AC_CHECK_HEADERS(net/if.h, [], [],
2572 #ifdef HAVE_SYS_TYPES_H
2573 # include <sys/types.h>
2575 #ifdef HAVE_SYS_SOCKET_H
2576 # include <sys/socket.h>
2579 AC_MSG_CHECKING(for ifreq)
2582 #include <sys/ioctl.h>
2590 x = (void *) &ifr->ifr_addr;
2593 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2597 dnl **********************************
2598 dnl *** Checks for sin_len ***
2599 dnl **********************************
2600 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2602 #include <netinet/in.h>
2604 struct sockaddr_in saddr;
2605 saddr.sin_len = sizeof (saddr);
2608 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2612 dnl **********************************
2613 dnl *** Checks for sin6_len ***
2614 dnl **********************************
2615 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2617 #include <netinet/in.h>
2619 struct sockaddr_in6 saddr6;
2620 saddr6.sin6_len = sizeof (saddr6);
2623 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2627 dnl **********************************
2628 dnl *** Check for getifaddrs ***
2629 dnl **********************************
2630 AC_MSG_CHECKING(for getifaddrs)
2633 #include <sys/types.h>
2634 #include <sys/socket.h>
2635 #include <ifaddrs.h>
2639 # Yes, we have it...
2641 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2645 dnl **********************************
2646 dnl *** Check for if_nametoindex ***
2647 dnl **********************************
2648 AC_MSG_CHECKING(for if_nametoindex)
2651 #include <sys/types.h>
2652 #include <sys/socket.h>
2655 if_nametoindex(NULL);
2657 # Yes, we have it...
2659 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2663 dnl **********************************
2664 dnl *** Check for access ***
2665 dnl **********************************
2666 AC_MSG_CHECKING(for access)
2672 # Yes, we have it...
2674 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2679 dnl **********************************
2680 dnl *** Checks for proclib ***
2681 dnl **********************************
2682 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.)])
2683 dnl **********************************
2684 dnl *** Checks for MonoPosixHelper ***
2685 dnl **********************************
2686 AC_CHECK_HEADERS(checklist.h)
2687 AC_CHECK_HEADERS(pathconf.h)
2688 AC_CHECK_HEADERS(fstab.h)
2689 AC_CHECK_HEADERS(attr/xattr.h)
2690 AC_CHECK_HEADERS(sys/extattr.h)
2691 AC_CHECK_HEADERS(sys/sendfile.h)
2692 AC_CHECK_HEADERS(sys/statvfs.h)
2693 AC_CHECK_HEADERS(sys/statfs.h)
2694 AC_CHECK_HEADERS(sys/vfstab.h)
2695 AC_CHECK_HEADERS(sys/xattr.h)
2696 AC_CHECK_HEADERS(sys/mman.h)
2697 AC_CHECK_HEADERS(sys/param.h)
2698 AC_CHECK_HEADERS(sys/mount.h, [], [],
2700 #ifdef HAVE_SYS_PARAM_H
2701 # include <sys/param.h>
2704 AC_CHECK_HEADERS(sys/mount.h)
2705 AC_CHECK_FUNCS(confstr)
2706 AC_CHECK_FUNCS(seekdir telldir)
2707 AC_CHECK_FUNCS(getdomainname)
2708 AC_CHECK_FUNCS(setdomainname)
2709 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2710 AC_CHECK_FUNCS(setgroups)
2711 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2712 AC_CHECK_FUNCS(getfsstat)
2713 AC_CHECK_FUNCS(lutimes futimes)
2714 AC_CHECK_FUNCS(mremap)
2715 AC_CHECK_FUNCS(remap_file_pages)
2716 AC_CHECK_FUNCS(posix_fadvise)
2717 AC_CHECK_FUNCS(posix_fallocate)
2718 AC_CHECK_FUNCS(posix_madvise)
2719 AC_CHECK_FUNCS(vsnprintf)
2720 AC_CHECK_FUNCS(sendfile)
2721 AC_CHECK_FUNCS(gethostid sethostid)
2722 AC_CHECK_FUNCS(sethostname)
2723 AC_CHECK_FUNCS(statfs)
2724 AC_CHECK_FUNCS(fstatfs)
2725 AC_CHECK_FUNCS(statvfs)
2726 AC_CHECK_FUNCS(fstatvfs)
2727 AC_CHECK_FUNCS(stime)
2728 AC_CHECK_FUNCS(strerror_r)
2729 AC_CHECK_FUNCS(ttyname_r)
2730 AC_CHECK_FUNCS(psignal)
2731 AC_CHECK_FUNCS(getlogin_r)
2732 AC_CHECK_FUNCS(lockf)
2733 AC_CHECK_FUNCS(swab)
2734 AC_CHECK_FUNCS(setusershell endusershell)
2735 AC_CHECK_FUNCS(futimens utimensat)
2736 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2737 AC_CHECK_FUNCS(readv writev preadv pwritev)
2738 AC_CHECK_FUNCS(setpgid)
2739 AC_CHECK_FUNCS(system)
2740 AC_CHECK_FUNCS(fork execv execve)
2741 AC_CHECK_FUNCS(accept4)
2742 AC_CHECK_FUNCS(localtime_r)
2743 AC_CHECK_FUNCS(mkdtemp)
2744 AC_CHECK_SIZEOF(size_t)
2745 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2746 [#include <sys/types.h>
2747 #include <sys/stat.h>
2748 #include <unistd.h>])
2749 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2750 [#include <sys/types.h>
2751 #include <sys/stat.h>
2752 #include <unistd.h>])
2753 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2754 [#include <sys/time.h>])
2755 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2756 [#include <sys/socket.h>])
2757 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2758 [#include <unistd.h>
2759 #include <fcntl.h>])
2760 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2761 [#include <sys/uio.h>])
2762 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2763 [#include <sys/socket.h>])
2764 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2765 [#include <sys/poll.h>])
2766 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2767 [#include <sys/socket.h>])
2768 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2769 [#include <sys/socket.h>])
2770 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2771 [#include <netinet/in.h>])
2772 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2773 [#include <netinet/in.h>])
2774 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2775 [#include <sys/un.h>])
2776 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2777 [#include <sys/types.h>
2778 #include <sys/stat.h>
2779 #include <unistd.h>])
2780 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2781 [#include <time.h>])
2782 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2783 [#include <sys/time.h>
2784 #include <sys/types.h>
2785 #include <utime.h>])
2786 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2787 [#include <sys/time.h>])
2788 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2789 [#include <sys/types.h>
2790 #include <utime.h>])
2792 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2793 [#include <sys/types.h>
2794 #include <dirent.h>])
2796 [struct passwd.pw_gecos],,,
2797 [#include <sys/types.h>
2800 [struct statfs.f_flags],,,
2801 [#include <sys/types.h>
2802 #include <sys/vfs.h>])
2804 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2805 [#include <sys/types.h>
2806 #include <sys/stat.h>
2807 #include <unistd.h>])
2809 dnl Favour xattr through glibc, but use libattr if we have to
2810 AC_CHECK_FUNC(lsetxattr, ,
2811 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2815 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2817 [struct kinfo_proc.kp_proc],,,
2818 [#include <sys/types.h>
2819 #include <sys/param.h>
2820 #include <sys/sysctl.h>
2821 #include <sys/proc.h>
2824 dnl *********************************
2825 dnl *** Checks for Windows compilation ***
2826 dnl *********************************
2827 AC_CHECK_HEADERS(sys/time.h)
2828 AC_CHECK_HEADERS(sys/param.h)
2829 AC_CHECK_HEADERS(dirent.h)
2831 dnl ******************************************
2832 dnl *** Checks for OSX and iOS compilation ***
2833 dnl ******************************************
2834 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2836 dnl *********************************
2837 dnl *** Check for Console 2.0 I/O ***
2838 dnl *********************************
2839 AC_CHECK_HEADERS([curses.h])
2840 AC_CHECK_HEADERS([term.h], [], [],
2845 AC_CHECK_HEADERS([termios.h])
2847 dnl *********************************
2848 dnl *** Checks for random ***
2849 dnl *********************************
2850 if test x$host_darwin = xno; then
2851 AC_CHECK_HEADERS(sys/random.h)
2852 AC_CHECK_FUNCS(getrandom getentropy)
2855 dnl *********************************
2856 dnl *** Checks for Windows compilation ***
2857 dnl *********************************
2858 AC_CHECK_HEADERS(winternl.h)
2860 jdk_headers_found=no
2861 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
2862 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
2863 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
2864 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
2865 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
2866 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
2867 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
2869 dnl *********************************
2870 dnl *** Check for struct ip_mreqn ***
2871 dnl *********************************
2872 AC_MSG_CHECKING(for struct ip_mreqn)
2873 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2874 struct ip_mreqn mreq;
2875 mreq.imr_address.s_addr = 0;
2877 # Yes, we have it...
2879 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
2881 # We'll just have to try and use struct ip_mreq
2883 AC_MSG_CHECKING(for struct ip_mreq)
2884 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2885 struct ip_mreq mreq;
2886 mreq.imr_interface.s_addr = 0;
2888 # Yes, we have it...
2890 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
2892 # No multicast support
2897 dnl **********************************
2898 dnl *** Check for getaddrinfo ***
2899 dnl **********************************
2900 AC_MSG_CHECKING(for getaddrinfo)
2903 #include <winsock2.h>
2904 #include <ws2tcpip.h>
2906 getaddrinfo(NULL,NULL,NULL,NULL);
2908 # Yes, we have it...
2910 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2915 dnl **********************************
2916 dnl *** Check for gethostbyname ***
2917 dnl **********************************
2918 AC_MSG_CHECKING(for gethostbyname)
2921 #include <winsock2.h>
2922 #include <ws2tcpip.h>
2924 gethostbyname(NULL);
2926 # Yes, we have it...
2928 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2933 dnl **********************************
2934 dnl *** Check for getprotobyname ***
2935 dnl **********************************
2936 AC_MSG_CHECKING(for getprotobyname)
2939 #include <winsock2.h>
2940 #include <ws2tcpip.h>
2942 getprotobyname(NULL);
2944 # Yes, we have it...
2946 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2951 dnl **********************************
2952 dnl *** Check for getnameinfo ***
2953 dnl **********************************
2954 AC_MSG_CHECKING(for getnameinfo)
2957 #include <winsock2.h>
2958 #include <ws2tcpip.h>
2960 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2962 # Yes, we have it...
2964 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2969 dnl **********************************
2970 dnl *** Check for inet_ntop ***
2971 dnl **********************************
2972 AC_MSG_CHECKING(for inet_ntop)
2975 #include <winsock2.h>
2976 #include <ws2tcpip.h>
2978 inet_ntop (0, NULL, NULL, 0);
2980 # Yes, we have it...
2982 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2987 dnl **********************************
2988 dnl *** Check for inet_pton ***
2989 dnl **********************************
2990 AC_MSG_CHECKING(for inet_pton)
2993 #include <winsock2.h>
2994 #include <ws2tcpip.h>
2999 inet_pton (0, NULL, NULL);
3001 # Yes, we have it...
3003 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3008 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3009 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3010 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3011 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3012 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3013 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3014 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3018 AC_MSG_CHECKING(for socklen_t)
3020 #include <sys/types.h>
3021 #include <sys/socket.h>
3025 ac_cv_c_socklen_t=yes
3026 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3032 AC_MSG_CHECKING(for array element initializer support)
3033 AC_TRY_COMPILE([#include <sys/socket.h>], [
3034 const int array[] = {[1] = 2,};
3036 # Yes, we have it...
3038 AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
3040 # We'll have to use signals
3044 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
3045 # Simply calling trunc (0.0) is no good since gcc will optimize the call away
3046 AC_TRY_LINK([#include <math.h>],
3047 [ static void *p = &trunc; ],
3049 AC_DEFINE(HAVE_TRUNC)
3055 if test "x$ac_cv_truncl" != "xyes"; then
3056 AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
3059 AC_CHECK_FUNCS(execvp)
3061 dnl ****************************
3062 dnl *** Look for /dev/random ***
3063 dnl ****************************
3065 AC_MSG_CHECKING([if usage of random device is requested])
3066 AC_ARG_ENABLE(dev-random,
3067 [ --disable-dev-random disable the use of the random device (enabled by default)],
3068 try_dev_random=$enableval, try_dev_random=yes)
3070 AC_MSG_RESULT($try_dev_random)
3074 dnl IBM i does not have /dev/random, use unblocking only
3077 NAME_DEV_RANDOM="/dev/urandom"
3080 dnl Win32 does not have /dev/random, they have their own method...
3082 *-mingw*|*-*-cygwin*)
3083 ac_cv_have_dev_random=no
3086 dnl Everywhere else, it's /dev/random
3089 NAME_DEV_RANDOM="/dev/random"
3093 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3095 dnl Now check if the device actually exists
3097 if test "x$try_dev_random" = "xyes"; then
3098 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3099 [if test -r "$NAME_DEV_RANDOM" ; then
3100 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3101 if test "x$ac_cv_have_dev_random" = "xyes"; then
3102 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3105 AC_MSG_CHECKING(for random device)
3106 ac_cv_have_dev_random=no
3107 AC_MSG_RESULT(has been disabled)
3110 if test "x$host_win32" = "xyes"; then
3111 AC_DEFINE(HAVE_CRYPT_RNG)
3114 if test "x$ac_cv_have_dev_random" = "xno" \
3115 && test "x$host_win32" = "xno"; then
3118 *** A system-provided entropy source was not found on this system.
3119 *** Because of this, the System.Security.Cryptography random number generator
3120 *** will throw a NotImplemented exception.
3122 *** If you are seeing this message, and you know your system DOES have an
3123 *** entropy collection in place, please report an issue on GitHub and
3124 *** provide information about the system and how to access the random device.
3126 *** Otherwise you can install either egd or prngd and set the environment
3127 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3131 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)
3133 AC_MSG_CHECKING([if big-arrays are to be enabled])
3134 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)
3135 if test "x$enable_big_arrays" = "xyes" ; then
3136 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3137 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3139 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3142 AC_MSG_RESULT($enable_big_arrays)
3148 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3150 if test "x$enable_dtrace" = "xyes"; then
3151 if test "x$has_dtrace" = "xno"; then
3152 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3154 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3155 if test "x$DTRACE" = "xno"; then
3156 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3158 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3159 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3165 if test "x$enable_dtrace" = "xyes"; then
3166 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3168 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3171 DTRACEFLAGS="-arch ppc64"
3174 DTRACEFLAGS="-arch x86_64"
3183 DTRACEFLAGS="-arch ppc"
3186 DTRACEFLAGS="-arch i386"
3193 AC_SUBST(DTRACEFLAGS)
3199 AC_CHECK_HEADERS([sys/sdt.h])
3201 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3202 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3204 dnl **************************
3205 dnl *** AOT cross offsets ***
3206 dnl **************************
3208 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3209 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3215 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3216 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3217 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)
3218 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3220 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3222 if test "x$enable_llvm" = "xdefault"; then
3223 enable_llvm=$enable_llvm_default
3226 if test "x$enable_llvm" = "xyes"; then
3227 if test "x$with_llvm" != "x"; then
3228 LLVM_CONFIG=$with_llvm/bin/llvm-config
3229 if test x$host_win32 = xyes; then
3230 LLVM_CONFIG=$LLVM_CONFIG.exe
3232 if test ! -x $LLVM_CONFIG; then
3233 AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3236 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3237 if test "x$LLVM_CONFIG" = "xno"; then
3238 AC_MSG_ERROR([llvm-config not found.])
3242 llvm_codegen="x86codegen"
3243 LLVM_ARCH_LIBS="-lLLVMX86Disassembler -lLLVMX86CodeGen -lLLVMX86AsmParser -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils"
3246 llvm_codegen="armcodegen"
3247 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3250 llvm_codegen="aarch64codegen"
3251 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3254 llvm_codegen="powerpccodegen"
3255 LLVM_ARCH_LIBS="-lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter"
3258 llvm_codegen="aarch64codegen"
3262 if test "x$host_win32" = "xno"; then
3264 # Should be something like '2.6' or '2.7svn'
3265 llvm_version=`$LLVM_CONFIG --version`
3266 llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3267 AC_MSG_CHECKING(LLVM version)
3268 AC_MSG_RESULT($llvm_version $llvm_api_version)
3269 if echo $llvm_version | grep -q 'mono'; then
3270 if test "x$enable_llvm_version_check" = "xyes"; then
3271 if test "$llvm_version" != "$expected_llvm_version"; then
3272 AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3276 AC_MSG_ERROR([Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm, with the GIT branch which matches this version of mono, i.e. 'mono-2-10' for Mono 2.10.])
3279 # The output of --cflags seems to include optimizations flags too
3280 if test $llvm_api_version -gt 100; then
3281 # The --cflags argument includes all kinds of warnings -pendantic etc.
3282 LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3283 LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3285 LLVM_CFLAGS=`$LLVM_CONFIG --cflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
3286 LLVM_CXXFLAGS=`$LLVM_CONFIG --cxxflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
3288 # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3289 # from LLVM classes.
3290 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3291 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3292 # This might include empty lines
3293 LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3294 llvm_jit_supported=yes
3295 llvm_jit_libs="jit mcjit $llvm_codegen"
3296 if test "x$host" != "x$target"; then
3297 # No need for jit libs
3298 llvm_jit_supported=no
3300 elif test $llvm_api_version -gt 100; then
3301 llvm_jit_libs="orcjit $llvm_codegen"
3303 LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3304 if test "x$LLVM_LIBS" = "x"; then
3305 echo "$LLVM_CONFIG --libs failed."
3308 LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3309 # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3310 if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3311 LLVM_LIBS="$LLVM_LIBS -lc++"
3313 LLVM_LIBS="$LLVM_LIBS -lstdc++"
3316 expected_llvm_version="3.4svn-mono-mono/e656cac"
3319 LLVM_CFLAGS="-I$with_llvm/include -DNDEBUG -D__NO_CTYPE_INLINE -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3320 LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3321 LLVM_LDFLAGS="-L$with_llvm/lib"
3322 LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3323 LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3324 -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMSelectionDAG -lLLVMAsmPrinter \
3325 -lLLVMMCDisassembler -lLLVMJIT -lLLVMAnalysis -lLLVMTarget \
3326 -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3327 -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3328 -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3329 -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3330 -lLLVMSupport -lstdc++"
3331 LLVM_LIBS="$LLVM_LIBS $LLVM_ARCH_LIBS $LLVM_SYSTEM_LIBS"
3333 llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3334 llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3337 if test "x$llvm_api_version" = "x"; then
3338 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3339 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3341 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3342 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3345 AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3347 AC_SUBST(LLVM_CFLAGS)
3348 AC_SUBST(LLVM_CXXFLAGS)
3350 AC_SUBST(LLVM_LDFLAGS)
3351 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3354 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3355 if test "x$enable_loadedllvm" = "xyes"; then
3356 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3358 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3360 if test "x$enable_llvm" = "xyes"; then
3361 enable_llvm_runtime=yes
3363 if test "x$enable_llvm_runtime" = "xyes"; then
3364 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3366 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3369 ACCESS_UNALIGNED="yes"
3373 SQLITE="libsqlite.so.0"
3374 SQLITE3="libsqlite3.so.0"
3376 GDKX11="libgdk-x11-2.0.so.0"
3377 GTKX11="libgtk-x11-2.0.so.0"
3378 XINERAMA="libXinerama.so.1"
3380 sizeof_register="SIZEOF_VOID_P"
3383 boehm_supported=true
3387 if test "x$enable_wasm" = "xyes"; then
3391 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3392 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3404 ACCESS_UNALIGNED="no"
3406 AC_MSG_CHECKING(for mips n32)
3408 #if _MIPS_SIM != _ABIN32
3425 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3430 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3431 # int astruct __attribute__ ((visibility ("hidden")));
3434 # void *p = &astruct;
3436 # gcc -fPIC --shared -o libfoo.so foo.c
3438 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3439 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3440 have_visibility_hidden=no
3443 have_visibility_hidden=no
3452 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3459 openbsd*|freebsd*|kfreebsd-gnu*)
3466 x86_64-*-* | amd64-*-*)
3469 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3470 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3477 BTLS_PLATFORM=x86_64
3478 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3483 BTLS_PLATFORM=x86_64
3484 boehm_supported=false
3486 openbsd*|freebsd*|kfreebsd-gnu*)
3489 BTLS_PLATFORM=x86_64
3496 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3502 ACCESS_UNALIGNED="no"
3509 if test x"$GCC" = xyes; then
3510 # We don't support v8 cpus
3511 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3513 if test x"$AR" = xfalse; then
3514 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3517 *-mingw*|*-*-cygwin*)
3518 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3519 have_visibility_hidden=no
3522 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3523 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3524 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3525 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3527 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3528 CFLAGS="$CFLAGS -mminimal-toc"
3531 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3537 BTLS_PLATFORM=powerpc
3538 dnl on AIX/PASE, shared libraries can be inside archives
3539 dnl if they are, we specify them by lib.a(lib.so)
3540 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3541 LIBC="libc.a(shr_64.o)"
3542 INTL="libintl.a(libintl.so.8)"
3546 BTLS_PLATFORM=powerpc
3555 ACCESS_UNALIGNED="no"
3556 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3562 ACCESS_UNALIGNED="no"
3563 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3568 ACCESS_UNALIGNED="no"
3570 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3573 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3575 arm*-linux*-gnueabi)
3576 BTLS_PLATFORM=armsoft
3583 ACCESS_UNALIGNED="no"
3584 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3587 # https://lkml.org/lkml/2012/7/15/133
3590 boehm_supported=false
3593 BTLS_PLATFORM=aarch64
3594 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3599 ACCESS_UNALIGNED="yes"
3602 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
3608 if test "x$host" != "x$target"; then
3609 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
3611 enable_support_build=no
3617 ACCESS_UNALIGNED="no"
3618 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3619 # Can't use tls, since it depends on the runtime detection of tls offsets
3620 # in mono-compiler.h
3625 AC_DEFINE(TARGET_WATCHOS, 1, [...])
3629 powerpc64-ps3-linux-gnu)
3631 arch_target=powerpc64
3632 AC_DEFINE(TARGET_PS3, 1, [...])
3633 # It would be better to just use TARGET_POWERPC64, but lots of code already
3635 AC_DEFINE(__mono_ppc64__, 1, [...])
3636 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3638 target_byte_order=G_BIG_ENDIAN
3640 powerpc64-xbox360-linux-gnu)
3642 arch_target=powerpc64
3643 AC_DEFINE(TARGET_XBOX360, 1, [...])
3644 # It would be better to just use TARGET_POWERPC64, but lots of code already
3647 target_byte_order=G_BIG_ENDIAN
3652 AC_DEFINE(TARGET_ARM, 1, [...])
3653 ACCESS_UNALIGNED="no"
3654 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3655 # Can't use tls, since it depends on the runtime detection of tls offsets
3656 # in mono-compiler.h
3660 armv7l-unknown-linux-gnueabi*)
3662 CPPFLAGS="$CPPFLAGS"
3664 armv5-*-linux-androideabi*)
3665 AC_DEFINE(TARGET_ANDROID, 1, [...])
3666 CPPFLAGS="$CPPFLAGS"
3668 *-linux-androideabi*)
3669 AC_DEFINE(TARGET_ANDROID, 1, [...])
3670 CPPFLAGS="$CPPFLAGS"
3677 AC_DEFINE(TARGET_ARM, 1, [...])
3678 ACCESS_UNALIGNED="no"
3679 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3680 # Can't use tls, since it depends on the runtime detection of tls offsets
3681 # in mono-compiler.h
3688 AC_DEFINE(TARGET_X86, 1, [...])
3689 CPPFLAGS="$CPPFLAGS"
3690 # Can't use tls, since it depends on the runtime detection of tls offsets
3691 # in mono-compiler.h
3697 AC_DEFINE(TARGET_ANDROID, 1, [...])
3704 AC_DEFINE(TARGET_AMD64, 1, [...])
3705 CPPFLAGS="$CPPFLAGS"
3706 # Can't use tls, since it depends on the runtime detection of tls offsets
3707 # in mono-compiler.h
3713 AC_DEFINE(TARGET_ANDROID, 1, [...])
3720 AC_DEFINE(TARGET_AMD64, 1, [...])
3721 AC_DEFINE(TARGET_PS4, 1, [...])
3722 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
3723 CPPFLAGS="$CPPFLAGS"
3724 # Can't use tls, since it depends on the runtime detection of tls offsets
3725 # in mono-compiler.h
3733 AC_DEFINE(TARGET_ARM64, 1, [...])
3734 CPPFLAGS="$CPPFLAGS"
3735 # Can't use tls, since it depends on the runtime detection of tls offsets
3736 # in mono-compiler.h
3741 AC_DEFINE(TARGET_ANDROID, 1, [...])
3749 AC_MSG_ERROR([Cross compiling is not supported for target $target])
3755 AC_DEFINE(TARGET_X86, 1, [...])
3758 AC_DEFINE(TARGET_AMD64, 1, [...])
3761 AC_DEFINE(TARGET_ARM, 1, [...])
3764 AC_DEFINE(TARGET_ARM64, 1, [...])
3767 AC_DEFINE(TARGET_POWERPC, 1, [...])
3770 AC_DEFINE(TARGET_POWERPC, 1, [...])
3771 AC_DEFINE(TARGET_POWERPC64, 1, [...])
3774 AC_DEFINE(TARGET_S390X, 1, [...])
3777 AC_DEFINE(TARGET_MIPS, 1, [...])
3780 AC_DEFINE(TARGET_SPARC, 1, [...])
3783 AC_DEFINE(TARGET_SPARC64, 1, [...])
3789 AC_DEFINE(HOST_X86, 1, [...])
3792 AC_DEFINE(HOST_AMD64, 1, [...])
3795 AC_DEFINE(HOST_ARM, 1, [...])
3798 AC_DEFINE(HOST_ARM64, 1, [...])
3801 AC_DEFINE(HOST_POWERPC, 1, [...])
3804 AC_DEFINE(HOST_POWERPC, 1, [...])
3805 AC_DEFINE(HOST_POWERPC64, 1, [...])
3808 AC_DEFINE(HOST_S390X, 1, [...])
3811 AC_DEFINE(HOST_MIPS, 1, [...])
3814 AC_DEFINE(HOST_SPARC, 1, [...])
3817 AC_DEFINE(HOST_SPARC64, 1, [...])
3829 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
3830 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
3832 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
3834 if test "x$enable_vtune" = "xyes"; then
3835 if test "x$with_vtune" = "x"; then
3836 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
3838 VTUNE_PATH=$with_vtune
3840 VTUNE_INCLUDE=$VTUNE_PATH/include
3843 VTUNE_LIB=$VTUNE_PATH/lib32
3846 VTUNE_LIB=$VTUNE_PATH/lib64
3849 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
3852 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
3853 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
3855 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
3856 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
3859 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
3860 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
3862 AC_SUBST(VTUNE_LIBS)
3863 AC_SUBST(VTUNE_CFLAGS)
3865 dnl Use GCC atomic ops if they work on the target.
3866 if test x$GCC = "xyes"; then
3868 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
3869 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
3874 if test "x$target_mach" = "xyes"; then
3876 if test "x$TARGET_SYS" = "xWATCHOS"; then
3877 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
3878 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3879 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3881 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
3882 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3883 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3884 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3887 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
3888 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
3889 #error fail this for ios
3892 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
3893 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
3894 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
3897 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3898 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3899 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3904 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
3907 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
3909 if test "x$sizeof_register" = "x4"; then
3910 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
3911 elif test "x$sizeof_register" = "x8"; then
3912 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
3914 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
3917 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
3919 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
3920 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
3921 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
3922 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
3924 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
3927 if test "x$have_visibility_hidden" = "xyes"; then
3928 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
3931 if test "x$have_deprecated" = "xyes"; then
3932 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
3936 dnl Simple Generational checks (sgen)
3939 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
3940 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
3941 if test x$buildsgen = xyes; then
3942 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
3943 SGEN_DEFINES="-DHAVE_SGEN_GC"
3946 if test x$with_sgen_default_concurrent != xno; then
3947 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
3948 conc_gc_msg=" (concurrent by default)"
3951 if test "x$gc_msg" = "x"; then
3952 gc_msg="sgen$conc_gc_msg"
3954 gc_msg="sgen$conc_gc_msg and $gc_msg"
3957 AC_SUBST(SGEN_DEFINES)
3958 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
3960 jit_status="Building and using the JIT"
3968 INTL="libintl.dylib"
3969 SQLITE="libsqlite.0.dylib"
3970 SQLITE3="libsqlite3.0.dylib"
3972 GDKX11="libgdk-x11-2.0.dylib"
3973 GTKX11="libgtk-x11-2.0.dylib"
3978 SQLITE="libsqlite.so"
3979 SQLITE3="libsqlite3.so"
3989 SQLITE="libsqlite.so"
3990 SQLITE3="libsqlite3.so"
3995 SQLITE="libsqlite.so"
3996 SQLITE3="libsqlite3.so"
4000 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4001 AC_MSG_CHECKING(for the soname of libX11.so)
4002 for i in $x_libraries $dlsearch_path; do
4004 if test -f $i/libX11.so.$r; then
4011 if test "x$X11" = "xlibX11.so"; then
4012 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4020 ######################################
4022 ######################################
4026 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4027 if test x$GCC = xyes; then
4028 GNUC_UNUSED='__attribute__((__unused__))'
4029 GNUC_NORETURN='__attribute__((__noreturn__))'
4031 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4034 AC_SUBST(GNUC_PRETTY)
4035 AC_SUBST(GNUC_UNUSED)
4036 AC_SUBST(GNUC_NORETURN)
4037 AC_SUBST(BREAKPOINT)
4039 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4042 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4058 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4063 arm*-darwin*|aarch64*-*)
4064 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4067 ORDER=G_LITTLE_ENDIAN
4070 LDFLAGS="$LDFLAGS -ltextencoding"
4073 CFLAGS="$CFLAGS -pthread"
4074 LDFLAGS="$LDFLAGS -pthread"
4085 # Defined for all targets/platforms using classic Windows API support.
4086 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4087 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4089 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf strerror_r)
4090 AC_CHECK_FUNCS(getrlimit)
4091 AC_CHECK_FUNCS(fork execv execve)
4093 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4095 if test x$with_overridable_allocators = xyes; then
4096 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4097 AC_MSG_NOTICE([Overridable allocator support enabled])
4099 AC_MSG_NOTICE([Overridable allocator support disabled])
4103 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4104 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4105 # removed once support for 10.6 is dropped.
4107 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4109 if test x$target_osx = xyes; then
4110 AC_CHECK_FUNCS(getpwuid_r)
4111 elif test x$target_ios = xno; then
4112 AC_CHECK_FUNCS(strndup getpwuid_r)
4115 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4117 AC_SEARCH_LIBS(sqrtf, m)
4119 # nanosleep may not be part of libc, also search it in other libraries
4120 AC_SEARCH_LIBS(nanosleep, rt)
4122 AC_SEARCH_LIBS(dlopen, dl)
4123 old_ldflags="${LDFLAGS}"
4124 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4125 if test $lt_cv_prog_gnu_ld = yes; then
4126 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4129 *-*-aix*|*-*-os400*)
4132 dnl Try to use export-dynamic anyways
4133 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4137 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4138 if test $found_export_dynamic = no; then
4139 LDFLAGS="${old_ldflags}"
4142 AC_MSG_CHECKING(for varargs macros)
4144 int foo (int i, int j);
4145 #define bar(...) foo (1, __VA_ARGS__)
4149 ],have_iso_varargs=yes,have_iso_varargs=no)
4150 AC_MSG_RESULT($have_iso_varargs)
4151 G_HAVE_ISO_VARARGS=0
4152 if test "x$have_iso_varargs" = "xyes"; then
4153 G_HAVE_ISO_VARARGS=1
4155 AC_SUBST(G_HAVE_ISO_VARARGS)
4157 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h localcharset.h sys/types.h sys/resource.h)
4158 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4159 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4160 AC_SUBST(HAVE_ALLOCA_H)
4162 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
4163 GPOINTER_TO_INT="((gint) (ptr))"
4164 GPOINTER_TO_UINT="((guint) (ptr))"
4165 GINT_TO_POINTER="((gpointer) (v))"
4166 GUINT_TO_POINTER="((gpointer) (v))"
4169 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
4170 GPOINTER_TO_INT="((gint)(long) (ptr))"
4171 GPOINTER_TO_UINT="((guint)(long) (ptr))"
4172 GINT_TO_POINTER="((gpointer)(glong) (v))"
4173 GUINT_TO_POINTER="((gpointer)(gulong) (v))"
4176 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
4177 GPOINTER_TO_INT="((gint)(long long) (ptr))"
4178 GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
4179 GINT_TO_POINTER="((gpointer)(long long) (v))"
4180 GUINT_TO_POINTER="((gpointer)(unsigned long long) (v))"
4182 GSIZE_FORMAT='"I64u"'
4184 AC_MSG_ERROR([unsupported pointer size])
4187 AC_SUBST(GPOINTER_TO_INT)
4188 AC_SUBST(GPOINTER_TO_UINT)
4189 AC_SUBST(GINT_TO_POINTER)
4190 AC_SUBST(GUINT_TO_POINTER)
4192 AC_SUBST(GSIZE_FORMAT)
4193 AC_SUBST(G_GUINT64_FORMAT)
4194 AC_SUBST(G_GINT64_FORMAT)
4195 AC_SUBST(G_GUINT32_FORMAT)
4196 AC_SUBST(G_GINT32_FORMAT)
4199 # END OF EGLIB CHECKS
4202 AC_ARG_WITH([libgdiplus],
4203 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4204 [], [with_libgdiplus=installed])
4206 # default install location
4207 libgdiplus_install_loc=libgdiplus${libsuffix}
4210 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4214 case $with_libgdiplus in
4221 if test x$cross_compiling = xno; then
4222 if test x$host_darwin = xyes; then
4223 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4225 libgdiplus_install_loc=$a
4233 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4236 /*) # absolute path, assume it is an install location
4237 libgdiplus_loc=$with_libgdiplus
4238 libgdiplus_install_loc=$with_libgdiplus
4242 libgdiplus_loc=`pwd`/$with_libgdiplus
4245 AC_SUBST(libgdiplus_loc)
4246 AC_SUBST(libgdiplus_install_loc)
4248 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)
4249 if test "x$icall_symbol_map" = "xyes"; then
4250 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4253 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4254 if test "x$icall_export" = "xyes"; then
4255 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4258 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4259 if test "x$icall_tables" = "xno"; then
4260 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4263 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4265 if test "x$with_tls" = "x__thread"; then
4266 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4267 # Pass the information to libgc
4268 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4269 AC_MSG_CHECKING(if the tls_model attribute is supported)
4270 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4273 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4279 if test ${TARGET} = ARM; then
4280 dnl ******************************************
4281 dnl *** Check to see what FPU is available ***
4282 dnl ******************************************
4283 AC_MSG_CHECKING(which FPU to use)
4286 # This is a bit tricky:
4288 # if (__ARM_PCS_VFP) {
4289 # /* mfloat-abi=hard == VFP with hard ABI */
4290 # } elif (!__SOFTFP__) {
4291 # /* mfloat-abi=softfp == VFP with soft ABI */
4293 # /* mfloat-abi=soft == no VFP */
4296 # The exception is iOS (w/ GCC) where none of the above
4297 # are defined (but iOS always uses the 'softfp' ABI).
4299 # No support for FPA.
4304 # iOS GCC always uses the 'softfp' ABI.
4305 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4309 # Are we using the 'hard' ABI?
4310 if test x$fpu = xNONE; then
4311 AC_TRY_COMPILE([], [
4312 #ifndef __ARM_PCS_VFP
4313 #error "Float ABI is not 'hard'"
4322 # No 'hard' ABI. 'soft' or 'softfp'?
4323 if test x$fpu = xNONE; then
4324 AC_TRY_COMPILE([], [
4326 #error "Float ABI is not 'softfp'"
4335 if test x$arm_fpu != x; then
4340 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4343 dnl *********************************************
4344 dnl *** Check which ARM version(s) we can use ***
4345 dnl *********************************************
4346 AC_MSG_CHECKING(which ARM version to use)
4348 AC_TRY_COMPILE([], [
4349 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4350 #error Not on ARM v5.
4358 AC_TRY_COMPILE([], [
4359 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4360 #error Not on ARM v6.
4369 AC_TRY_COMPILE([], [
4370 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4371 #error Not on ARM v7.
4381 AC_MSG_RESULT($arm_ver)
4383 if test x$arm_v5 = xyes; then
4384 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4385 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4388 if test x$arm_v6 = xyes; then
4389 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4390 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4393 if test x$arm_v7 = xyes; then
4394 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4395 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4399 if test ${TARGET} = unknown; then
4400 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4401 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4404 if test "x$platform_android" = "xyes"; then
4405 case "x${TARGET}" in
4410 BTLS_PLATFORM=android-armv5
4414 BTLS_PLATFORM=android-armv6
4418 BTLS_PLATFORM=android-armv7
4427 BTLS_PLATFORM=android-v8a
4431 BTLS_PLATFORM=android-x86
4435 BTLS_PLATFORM=android-x64
4443 if test ${ACCESS_UNALIGNED} = no; then
4444 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4447 if test x$host_darwin = xyes; then
4448 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4450 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4451 [AC_MSG_RESULT([no])],
4453 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4455 RANLIB="$RANLIB -no_warning_for_no_symbols"
4456 AC_MSG_RESULT([yes])
4463 # Pass CPPFLAGS to libgc configure
4464 # We should use a separate variable for this to avoid passing useless and
4465 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4466 # This should be executed late so we pick up the final version of CPPFLAGS
4467 # The problem with this approach, is that during a reconfigure, the main
4468 # configure scripts gets invoked with these arguments, so we use separate
4469 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4470 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4471 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4472 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4474 # Don't pass -finstrument-for-thread-suspension in,
4475 # if these are instrumented it will be very bad news
4476 # (infinite recursion, undefined parking behavior, etc)
4477 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4478 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\""
4479 if test "x$support_boehm" = "xyes"; then
4480 AC_CONFIG_SUBDIRS(libgc)
4486 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4487 if test x$with_malloc_mempools = xyes; then
4489 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4494 DISABLE_MCS_DOCS=default
4495 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4496 if test x$with_mcs_docs != xyes; then
4497 DISABLE_MCS_DOCS=yes
4500 if test -n "$INSTALL_4_x_TRUE"; then :
4501 DISABLE_MCS_DOCS=yes
4503 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4504 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4507 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)],[
4508 if test x$with_lazy_gc_thread_creation != xno ; then
4509 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4511 ], [with_lazy_gc_thread_creation=no])
4513 AC_ARG_WITH(cooperative_gc, [ --with-cooperative-gc=yes|no Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [with_cooperative_gc=default])
4515 if test x$with_cooperative_gc = xdefault; then
4516 with_cooperative_gc=$with_cooperative_gc_default
4519 if test x$with_cooperative_gc != xno; then
4520 AC_DEFINE(USE_COOP_GC,1,[Enable cooperative stop-the-world garbage collection.])
4523 AM_CONDITIONAL([ENABLE_COOP], [test x$with_cooperative_gc != xno])
4525 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],[
4527 if test x$enable_checked_build != x ; then
4528 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4530 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4531 eval "mono_checked_build_test_enable_$feature='yes'"
4534 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4535 eval "mono_checked_build_test_enable_gc='yes'"
4536 eval "mono_checked_build_test_enable_metadata='yes'"
4537 eval "mono_checked_build_test_enable_thread='yes'"
4538 eval "mono_checked_build_test_enable_private_types='yes'"
4541 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4542 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4545 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4546 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4549 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4550 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4553 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4554 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4558 AC_CHECK_HEADER([malloc.h],
4559 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
4560 [Define to 1 if you have /usr/include/malloc.h.])],,)
4562 if test x"$GCC" = xyes; then
4563 # Implicit function declarations are not 64 bit safe
4564 # Do this late, since this causes lots of configure tests to fail
4565 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4566 # jay has a lot of implicit declarations
4567 JAY_CFLAGS="-Wno-implicit-function-declaration"
4570 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4571 # instead of libmono-static.a
4572 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4573 LIBMONO_LA=libmini-static.la
4575 if test x$buildsgen = xyes; then
4576 LIBMONO_LA=libmonosgen-$API_VER.la
4578 LIBMONO_LA=libmonoboehm-$API_VER.la
4581 AC_SUBST(LIBMONO_LA)
4587 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4588 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
4589 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
4591 if test "x$enable_btls" = "xno"; then
4595 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
4598 if test "x$enable_btls" = "xyes"; then
4599 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4600 if test "x$CMAKE" = "xno"; then
4601 AC_MSG_ERROR("cmake not found")
4604 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4611 case "$BTLS_PLATFORM" in
4617 btls_cflags="$btls_cflags -arch i386"
4628 btls_cflags="-DOPENSSL_NO_ASM=1"
4640 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
4641 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
4645 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4648 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4651 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4654 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4657 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4660 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4663 AC_MSG_ERROR(Invalid BTLS platform)
4666 if test "x$platform_android" = "xyes"; then
4668 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4669 if test "x$with_btls_android_ndk" != "x"; then
4670 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4672 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4676 if test "x$btls_arch" != "x"; then
4677 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4680 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4682 AC_SUBST(BTLS_CFLAGS)
4683 AC_SUBST(BTLS_PLATFORM)
4684 AC_SUBST(BTLS_CMAKE_ARGS)
4686 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4691 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4693 if test x$DISABLE_MCS_DOCS = xyes; then
4700 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
4701 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4702 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4704 libmono_ldflags="$libmono_ldflags $LIBS"
4706 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4707 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4708 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4709 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4710 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4711 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4712 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4713 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4714 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4715 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4716 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4717 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4718 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4719 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4720 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4721 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4722 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4723 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4725 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4735 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4736 AC_SUBST(arch_target)
4741 #This must always be defined when building the runtime
4742 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4744 mono_build_root=`pwd`
4745 AC_SUBST(mono_build_root)
4747 mono_runtime=mono/mini/mono
4748 AC_SUBST(mono_runtime)
4750 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.7.0/tools/csc.exe
4752 if test $csc_compiler = mcs; then
4753 CSC=$mcs_topdir/class/lib/build/mcs.exe
4758 mono_cfg_root=$mono_build_root/runtime
4759 if test x$host_win32 = xyes; then
4760 if test "x$cross_compiling" = "xno"; then
4761 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4762 CSC=`cygpath -m -a $CSC`
4763 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4765 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4768 mono_cfg_dir=$mono_cfg_root/etc
4770 AC_SUBST(mono_cfg_dir)
4774 AC_CONFIG_FILES([po/mcs/Makefile.in])
4776 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4777 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4779 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4782 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4784 *) reldir=$depth/$srcdir ;;
4786 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4787 cd runtime/etc/mono/1.0
4788 rm -f machine.config
4789 $LN_S $reldir/data/net_1_1/machine.config machine.config
4793 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4796 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4798 *) reldir=$depth/$srcdir ;;
4800 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4801 cd runtime/etc/mono/2.0
4802 rm -f machine.config
4803 $LN_S $reldir/data/net_2_0/machine.config machine.config
4807 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4810 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4812 *) reldir=$depth/$srcdir ;;
4814 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4815 cd runtime/etc/mono/2.0
4817 $LN_S $reldir/data/net_2_0/web.config web.config
4821 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4824 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4826 *) reldir=$depth/$srcdir ;;
4828 $ac_aux_dir/install-sh -d runtime/etc/mono/
4829 cd runtime/etc/mono/
4831 $LN_S $reldir/data/browscap.ini browscap.ini
4835 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4836 [ depth=../../../../..
4838 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4840 *) reldir=$depth/$srcdir ;;
4842 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4843 cd runtime/etc/mono/2.0/Browsers
4844 rm -f Compat.browser
4845 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4849 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4850 [ depth=../../../../..
4852 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4854 *) reldir=$depth/$srcdir ;;
4856 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4857 cd runtime/etc/mono/4.0/Browsers
4858 rm -f Compat.browser
4859 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4863 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4864 [ depth=../../../../..
4866 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4868 *) reldir=$depth/$srcdir ;;
4870 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4871 cd runtime/etc/mono/4.5/Browsers
4872 rm -f Compat.browser
4873 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4877 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4880 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4882 *) reldir=$depth/$srcdir ;;
4884 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4885 cd runtime/etc/mono/4.0
4886 rm -f machine.config
4887 $LN_S $reldir/data/net_4_0/machine.config machine.config
4891 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4894 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4896 *) reldir=$depth/$srcdir ;;
4898 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4899 cd runtime/etc/mono/4.0
4901 $LN_S $reldir/data/net_4_0/web.config web.config
4905 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
4908 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4910 *) reldir=$depth/$srcdir ;;
4912 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4913 cd runtime/etc/mono/4.5
4914 rm -f machine.config
4915 $LN_S $reldir/data/net_4_5/machine.config machine.config
4919 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
4922 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4924 *) reldir=$depth/$srcdir ;;
4926 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4927 cd runtime/etc/mono/4.5
4929 $LN_S $reldir/data/net_4_5/web.config web.config
4933 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])
4934 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])
4939 acceptance-tests/Makefile
4941 scripts/mono-find-provides
4942 scripts/mono-find-requires
4946 mono/utils/jemalloc/Makefile
4947 mono/metadata/Makefile
4951 mono/arch/x86/Makefile
4952 mono/arch/amd64/Makefile
4953 mono/arch/ppc/Makefile
4954 mono/arch/sparc/Makefile
4955 mono/arch/s390x/Makefile
4956 mono/arch/arm/Makefile
4957 mono/arch/arm64/Makefile
4958 mono/arch/mips/Makefile
4961 mono/tests/tests-config
4962 mono/tests/gc-descriptors/Makefile
4963 mono/tests/testing_gac/Makefile
4964 mono/unit-tests/Makefile
4965 mono/benchmark/Makefile
4967 mono/profiler/Makefile
4969 mono/eglib/eglib-config.h
4971 ikvm-native/Makefile
4976 data/net_2_0/Makefile
4977 data/net_4_0/Makefile
4978 data/net_4_5/Makefile
4979 data/net_2_0/Browsers/Makefile
4980 data/net_4_0/Browsers/Makefile
4981 data/net_4_5/Browsers/Makefile
4988 data/mono-options.pc
4989 data/mono-lineeditor.pc
4995 data/system.web.extensions_1.0.pc
4996 data/system.web.extensions.design_1.0.pc
4997 data/system.web.mvc.pc
4998 data/system.web.mvc2.pc
4999 data/system.web.mvc3.pc
5000 data/aspnetwebstack.pc
5006 tools/locale-builder/Makefile
5008 tools/monograph/Makefile
5009 tools/pedump/Makefile
5015 # Update all submodules recursively to ensure everything is checked out
5016 $srcdir/scripts/update_submodules.sh
5018 if test x$host_win32 = xyes; then
5019 # Get rid of 'cyg' prefixes in library names
5020 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5021 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5022 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5023 # executable doesn't work...
5024 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5027 if test x$host_darwin = xyes; then
5028 # This doesn't seem to be required and it slows down parallel builds
5029 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5034 NONE) prefix=$ac_default_prefix ;;
5036 case $exec_prefix in
5037 NONE) exec_prefix='${prefix}' ;;
5041 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
5042 # any existing config.make. This allows people to share the same source tree
5043 # with different build directories, one native and one cross
5045 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5047 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5049 echo "prefix=$prefix" > $mcs_topdir/build/config.make
5050 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5051 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5052 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5053 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5054 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5055 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5056 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5057 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5060 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5061 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5064 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5067 [myver=$($AWK 'BEGIN {
5068 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5069 if(length(vsplit [1]) > 4) {
5070 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5072 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5075 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5076 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5078 if test x$host_darwin = xyes; then
5079 echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
5080 elif test x$host_win32 = xyes; then
5081 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5083 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5086 if test x$host_darwin = xyes; then
5087 echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
5088 elif test x$host_win32 = xyes; then
5089 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5091 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5094 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5095 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5098 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5099 enable_system_aot=yes
5102 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5103 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5106 if test x$DISABLE_MCS_DOCS = xyes; then
5107 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5110 if test x$has_extension_module != xno; then
5111 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5114 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5116 if test "x$test_bcl_opt" = "xyes"; then
5117 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5120 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5122 if test $csc_compiler = mcs; then
5123 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5126 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5127 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5128 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5129 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5132 if test "x$AOT_MODE" != "x" ; then
5133 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5136 if test "x$enable_btls" = "xyes"; then
5137 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5144 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5146 btls_platform_string=
5147 if test x$enable_btls = xyes; then
5148 if test x$btls_android = xyes; then
5149 btls_platform_string=" (android:$BTLS_PLATFORM)"
5151 btls_platform_string=" ($BTLS_PLATFORM)"
5157 C# Compiler: $csc_compiler
5164 SIGALTSTACK: $with_sigaltstack
5166 BigArrays: $enable_big_arrays
5167 DTrace: $enable_dtrace
5168 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5169 Spectre: $spectre_mitigation_status
5172 .NET 4.x: $with_profile4_x
5173 Xamarin.Android: $with_monodroid
5174 Xamarin.iOS: $with_monotouch
5175 Xamarin.WatchOS: $with_monotouch_watch
5176 Xamarin.TVOS: $with_monotouch_tv
5177 Xamarin.Mac: $with_xammac
5178 Windows AOT: $with_winaot
5180 Unreal: $with_unreal
5181 WebAssembly: $with_wasm
5182 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5183 JNI support: $jdk_headers_found
5184 libgdiplus: $libgdiplus_msg
5186 BTLS: $enable_btls$btls_platform_string
5187 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5190 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5191 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)