1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.15.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)
982 # Set the build profiles and options before things which use them
985 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])
986 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
987 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
988 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])
989 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])
990 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
991 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
992 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])
993 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])
994 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
995 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
996 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
997 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1000 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,bitcode,unreal Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1001 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])
1002 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])
1003 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])
1006 dnl Spectre compiler mitigation flag checks
1008 if test "x$with_spectre_mitigation" = "xyes"; then
1009 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1011 SPECTRE_INDIRECT_BRANCH_KIND=
1012 case "x$with_spectre_indirect_branch_choice" in
1013 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1014 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1015 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1016 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1017 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1020 SPECTRE_FUNCTION_RETURN_KIND=""
1021 case "x$with_spectre_function_return_choice" in
1022 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1023 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1024 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1025 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1026 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1029 AX_CHECK_COMPILE_FLAG(
1030 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1031 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1034 AX_CHECK_COMPILE_FLAG(
1035 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1036 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1039 if test "x$SPECTRE_CFLAGS" != "x" ; then
1040 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1041 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1042 spectre_mitigation_status="mitigation enabled"
1045 spectre_mitigation_status="no mitigation"
1049 dnl Profile defaults
1051 TEST_PROFILE=default
1052 enable_llvm_default=no
1054 with_profile4_x_default=no
1055 with_monodroid_default=no
1056 with_monotouch_default=no
1057 with_monotouch_watch_default=no
1058 with_monotouch_tv_default=no
1059 with_xammac_default=no
1060 with_testing_aot_hybrid_default=no
1061 with_testing_aot_full_default=no
1062 with_winaot_default=no
1063 with_orbis_default=no
1064 with_unreal_default=no
1065 with_wasm_default=no
1067 with_bitcode_default=no
1068 with_cooperative_gc_default=no
1070 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1072 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1074 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1075 DISABLE_MCS_DOCS_default=yes
1076 elif test x$with_runtime_preset = xnet_4_x; then
1077 with_profile4_x_default=yes
1078 elif test x$with_runtime_preset = xall; then
1079 with_profile4_x_default=yes
1080 with_monodroid_default=yes
1081 with_monotouch_default=yes
1082 with_monotouch_watch_default=yes
1083 with_monotouch_tv_default=yes
1084 with_xammac_default=yes
1085 with_winaot_default=yes
1086 with_orbis_default=yes
1087 with_unreal_default=yes
1088 with_wasm_default=yes
1089 with_testing_aot_hybrid_default=yes
1090 with_testing_aot_full_default=yes
1091 elif test x$with_runtime_preset = xbitcode; then
1092 DISABLE_MCS_DOCS_default=yes
1093 with_testing_aot_full_default=yes
1094 with_bitcode_default=yes
1095 with_cooperative_gc_default=yes
1096 TEST_PROFILE=testing_aot_full
1097 enable_llvm_default=yes
1099 mono_feature_disable_com='yes'
1100 mono_feature_disable_remoting='yes'
1101 mono_feature_disable_reflection_emit_save='yes'
1102 mono_feature_disable_reflection_emit='yes'
1103 mono_feature_disable_appdomains='yes'
1105 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1106 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1108 elif test x$with_runtime_preset = xfullaot; then
1109 DISABLE_MCS_DOCS_default=yes
1110 with_testing_aot_full_default=yes
1111 TEST_PROFILE=testing_aot_full
1113 mono_feature_disable_com='yes'
1114 mono_feature_disable_remoting='yes'
1115 mono_feature_disable_reflection_emit_save='yes'
1116 mono_feature_disable_reflection_emit='yes'
1117 mono_feature_disable_appdomains='yes'
1119 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1120 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1122 elif test x$with_runtime_preset = xfullaot_llvm; then
1123 DISABLE_MCS_DOCS_default=yes
1124 with_testing_aot_full_default=yes
1125 TEST_PROFILE=testing_aot_full
1127 mono_feature_disable_com='yes'
1128 mono_feature_disable_remoting='yes'
1129 mono_feature_disable_reflection_emit_save='yes'
1130 mono_feature_disable_reflection_emit='yes'
1131 mono_feature_disable_appdomains='yes'
1133 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1134 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1136 elif test x$with_runtime_preset = xhybridaot; then
1137 DISABLE_MCS_DOCS_default=yes
1138 with_testing_aot_hybrid_default=yes
1139 TEST_PROFILE=testing_aot_hybrid
1141 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1142 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1143 elif test x$with_runtime_preset = xhybridaot_llvm; then
1144 DISABLE_MCS_DOCS_default=yes
1145 with_testing_aot_hybrid_default=yes
1146 TEST_PROFILE=testing_aot_hybrid
1148 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1149 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1150 elif test x$with_runtime_preset = xaot; then
1151 with_profile4_x_default=yes
1153 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1156 DISABLE_MCS_DOCS_default=yes
1157 elif test x$with_runtime_preset = xaot_llvm; then
1158 with_profile4_x_default=yes
1160 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1163 DISABLE_MCS_DOCS_default=yes
1164 elif test x$with_runtime_preset = xwinaot; then
1165 DISABLE_MCS_DOCS_default=yes
1166 with_winaot_default=yes
1169 mono_feature_disable_com='yes'
1170 mono_feature_disable_remoting='yes'
1171 mono_feature_disable_reflection_emit_save='yes'
1172 mono_feature_disable_reflection_emit='yes'
1173 mono_feature_disable_appdomains='yes'
1175 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1176 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1178 elif test x$with_runtime_preset = xorbis; then
1179 DISABLE_MCS_DOCS_default=yes
1180 with_orbis_default=yes
1183 mono_feature_disable_com='yes'
1184 mono_feature_disable_remoting='yes'
1185 mono_feature_disable_reflection_emit_save='yes'
1186 mono_feature_disable_reflection_emit='yes'
1187 mono_feature_disable_appdomains='yes'
1189 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1190 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1192 elif test x$with_runtime_preset = xunreal; then
1193 DISABLE_MCS_DOCS_default=yes
1194 with_unreal_default=yes
1197 mono_feature_disable_com='yes'
1198 mono_feature_disable_remoting='yes'
1199 mono_feature_disable_appdomains='no'
1201 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1202 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1203 elif test x$with_runtime_preset = xwasm; then
1204 DISABLE_MCS_DOCS_default=yes
1205 with_wasm_default=yes
1208 mono_feature_disable_com='yes'
1209 mono_feature_disable_remoting='yes'
1210 mono_feature_disable_reflection_emit_save='yes'
1211 mono_feature_disable_reflection_emit='yes'
1212 mono_feature_disable_appdomains='yes'
1214 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1215 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1217 with_profile4_x_default=yes
1220 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1221 AC_SUBST(AOT_BUILD_FLAGS)
1222 AC_SUBST(AOT_RUN_FLAGS)
1223 # For llvmonlycheck + fullaotcheck
1224 AC_SUBST(INVARIANT_AOT_OPTIONS)
1227 AC_SUBST(TEST_PROFILE)
1229 if test "x$with_profile4_x" = "xdefault"; then
1230 with_profile4_x=$with_profile4_x_default
1232 if test "x$with_monodroid" = "xdefault"; then
1233 with_monodroid=$with_monodroid_default
1235 if test "x$with_monotouch" = "xdefault"; then
1236 with_monotouch=$with_monotouch_default
1238 if test "x$with_monotouch_watch" = "xdefault"; then
1239 with_monotouch_watch=$with_monotouch_watch_default
1241 if test "x$with_monotouch_tv" = "xdefault"; then
1242 with_monotouch_tv=$with_monotouch_tv_default
1244 if test "x$with_bitcode" = "xdefault"; then
1245 with_bitcode=$with_bitcode_default
1247 if test "x$with_xammac" = "xdefault"; then
1248 with_xammac=$with_xammac_default
1250 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1251 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1253 if test "x$with_testing_aot_full" = "xdefault"; then
1254 with_testing_aot_full=$with_testing_aot_full_default
1256 if test "x$with_winaot" = "xdefault"; then
1257 with_winaot=$with_winaot_default
1259 if test "x$with_orbis" = "xdefault"; then
1260 with_orbis=$with_orbis_default
1262 if test "x$with_unreal" = "xdefault"; then
1263 with_unreal=$with_unreal_default
1265 if test "x$with_wasm" = "xdefault"; then
1266 with_wasm=$with_wasm_default
1270 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1271 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1272 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1273 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1274 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1275 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1276 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1277 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1278 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1279 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1280 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1281 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1282 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1283 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"])
1284 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1286 default_profile=net_4_x
1287 if test -z "$INSTALL_MONODROID_TRUE"; then :
1288 default_profile=monodroid
1290 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1291 default_profile=monotouch
1293 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1294 default_profile=xammac
1296 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1297 default_profile=testing_aot_hybrid
1299 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1300 default_profile=testing_aot_full
1302 if test -z "$INSTALL_WINAOT_TRUE"; then :
1303 default_profile=winaot
1305 if test -z "$INSTALL_ORBIS_TRUE"; then :
1306 default_profile=orbis
1308 if test -z "$INSTALL_UNREAL_TRUE"; then :
1309 default_profile=unreal
1311 if test -z "$INSTALL_WASM_TRUE"; then :
1312 default_profile=wasm
1314 if test -z "$INSTALL_4_x_TRUE"; then :
1315 default_profile=net_4_x
1317 DEFAULT_PROFILE=$default_profile
1318 AC_SUBST(DEFAULT_PROFILE)
1321 # End build profile configuration
1324 if test x$USE_NLS = xprofile_default; then
1326 AC_MSG_CHECKING([NLS used])
1328 # We make the default value for USE_NLS
1329 # "no" on OSX because it isn't available on most
1330 # default OSX installs. The most common configurations will
1331 # all disable it, so this saves us typing.
1332 if test x$host_darwin = xyes; then
1339 AC_MSG_RESULT([$USE_NLS])
1342 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1343 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1344 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1345 security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1347 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1348 eval "mono_feature_disable_$feature='yes'"
1350 DISABLED_FEATURES=$enable_minimal
1351 disabled="Disabled: $enable_minimal"
1354 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1356 if test "x$mono_feature_disable_aot" = "xyes"; then
1357 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1358 enable_system_aot=no
1359 AC_MSG_NOTICE([Disabled AOT compiler])
1362 if test "x$mono_feature_disable_profiler" = "xyes"; then
1363 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1364 AC_MSG_NOTICE([Disabled support for the profiler])
1366 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1368 if test "x$mono_feature_disable_decimal" = "xyes"; then
1369 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1370 AC_MSG_NOTICE([Disabled support for decimal])
1373 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1374 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1375 AC_MSG_NOTICE([Disabled support for P/Invoke])
1378 if test "x$mono_feature_disable_debug" = "xyes"; then
1379 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1380 AC_MSG_NOTICE([Disabled support for runtime debugging])
1383 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1384 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1385 mono_feature_disable_reflection_emit_save=yes
1386 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1389 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1390 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1391 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1394 if test "x$mono_feature_disable_large_code" = "xyes"; then
1395 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1396 AC_MSG_NOTICE([Disabled support for large assemblies])
1399 if test "x$mono_feature_disable_logging" = "xyes"; then
1400 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1401 AC_MSG_NOTICE([Disabled support for logging])
1404 if test "x$mono_feature_disable_com" = "xyes"; then
1405 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1406 AC_MSG_NOTICE([Disabled COM support])
1409 if test "x$mono_feature_disable_ssa" = "xyes"; then
1410 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1411 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1414 if test "x$mono_feature_disable_generics" = "xyes"; then
1415 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1416 AC_MSG_NOTICE([Disabled Generics Support])
1419 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1420 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1421 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1424 if test "x$mono_feature_disable_portability" = "xyes"; then
1425 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1426 AC_MSG_NOTICE([Disabled IO Portability layer])
1429 if test "x$mono_feature_disable_attach" = "xyes"; then
1430 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1431 AC_MSG_NOTICE([Disabled agent attach])
1434 if test "x$mono_feature_disable_verifier" = "xyes"; then
1435 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1436 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1439 if test "x$mono_feature_disable_jit" = "xyes"; then
1440 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1441 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1444 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1446 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1447 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1448 AC_MSG_NOTICE([Disabled the interpreter])
1451 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1453 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1454 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1457 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1459 if test "x$mono_feature_disable_simd" = "xyes"; then
1460 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1461 AC_MSG_NOTICE([Disabled SIMD support])
1464 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1465 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1466 AC_MSG_NOTICE([Disabled Soft Debugger.])
1469 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1471 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1472 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1473 AC_MSG_NOTICE([Disabled Performance Counters.])
1475 if test "x$mono_feature_disable_normalization" = "xyes"; then
1476 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1477 AC_MSG_NOTICE([Disabled String normalization support.])
1480 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1481 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1482 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1483 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1486 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1487 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1488 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1491 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1492 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1493 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1496 if test "x$mono_feature_disable_remoting" = "xyes"; then
1497 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1498 AC_MSG_NOTICE([Disabled remoting])
1501 if test "x$mono_feature_disable_security" = "xyes"; then
1502 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1503 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1506 if test "x$mono_feature_disable_lldb" = "xyes"; then
1507 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1508 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1511 if test "x$mono_feature_disable_mdb" = "xyes"; then
1512 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1513 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1516 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1517 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1518 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1522 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1523 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1524 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1527 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1528 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1529 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1532 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1533 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1534 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1537 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1538 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1540 has_extension_module=no
1541 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1543 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1544 if test x$extension = xdefault ; then
1545 has_extension_module=yes;
1548 if test x$enable_extension_module = xyes; then
1549 has_extension_module=yes;
1553 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1555 if test x$has_extension_module != xno ; then
1556 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1557 AC_MSG_NOTICE([Enabling mono extension module.])
1561 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1563 AC_MSG_CHECKING(for visibility __attribute__)
1566 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1567 int main () { doit (); return 0; }
1570 have_visibility_hidden=yes
1573 have_visibility_hidden=no
1578 dnl Boehm GC configuration
1581 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1583 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1584 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1586 if test "x$support_boehm" = "xyes"; then
1588 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1589 if test x$enable_parallel_mark = xyes; then
1590 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1600 if test "x$support_boehm" = "xyes"; then
1604 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1605 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1606 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1608 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1610 if test x$target_win32 = xyes; then
1611 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1612 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1615 gc_msg="Included Boehm GC with typed GC"
1616 if test x$enable_parallel_mark = xyes; then
1617 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1618 gc_msg="$gc_msg and parallel mark"
1620 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1625 AC_MSG_WARN("External Boehm is no longer supported")
1629 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1633 AC_MSG_WARN("Compiling mono without GC.")
1634 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1635 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1639 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1643 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])
1644 if test "x$large_heap" = "xyes"; then
1645 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1648 AC_SUBST(LIBGC_CPPFLAGS)
1649 AC_SUBST(LIBGC_LIBS)
1650 AC_SUBST(LIBGC_STATIC_LIBS)
1652 AC_SUBST(BOEHM_DEFINES)
1655 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1658 dnl End of Boehm GC Configuration
1661 dnl *************************************
1662 dnl *** Checks for zero length arrays ***
1663 dnl *************************************
1664 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1672 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1675 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1678 dnl ***********************************
1679 dnl *** Checks for signals
1680 dnl ***********************************
1681 AC_CHECK_HEADERS(signal.h)
1682 AC_CHECK_FUNCS(sigaction)
1683 AC_CHECK_FUNCS(kill)
1684 AC_CHECK_FUNCS(signal)
1686 # signal() is declared inline in Android headers
1687 # so we need to workaround it by overriding the check.
1688 if test x$platform_android = xyes; then
1689 AC_DEFINE(HAVE_SIGNAL,1)
1692 if test x$host_win32 = xno; then
1693 dnl *************************************
1694 dnl *** Checks for time capabilities ***
1695 dnl *************************************
1697 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1698 AC_TRY_COMPILE([#include <time.h>], [
1699 const int foo = CLOCK_MONOTONIC;
1702 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1707 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1708 AC_TRY_COMPILE([#include <time.h>], [
1709 const int foo = CLOCK_MONOTONIC_COARSE;
1712 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1717 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1718 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1719 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1721 dnl hires monotonic clock support
1722 AC_SEARCH_LIBS(clock_gettime, rt)
1723 AC_CHECK_FUNCS(clock_nanosleep)
1725 dnl dynamic loader support
1726 AC_CHECK_FUNC(dlopen, DL_LIB="",
1727 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1729 if test x$dl_support = xno; then
1730 AC_MSG_WARN([No dynamic loading support available])
1732 LIBS="$LIBS $DL_LIB"
1733 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1734 dnl from glib's configure.ac
1735 AC_CACHE_CHECK([for preceeding underscore in symbols],
1737 AC_TRY_RUN([#include <dlfcn.h>
1738 int mono_underscore_test (void) { return 42; }
1740 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1741 handle = dlopen ((void*)0, 0);
1743 f1 = dlsym (handle, "mono_underscore_test");
1744 f2 = dlsym (handle, "_mono_underscore_test");
1745 } return (!f2 || f1);
1747 [mono_cv_uscore=yes],
1748 [mono_cv_uscore=no],
1751 if test "x$mono_cv_uscore" = "xyes"; then
1752 MONO_DL_NEED_USCORE=1
1754 MONO_DL_NEED_USCORE=0
1756 AC_SUBST(MONO_DL_NEED_USCORE)
1757 AC_CHECK_FUNC(dlerror)
1760 dnl ******************************************************************
1761 dnl *** Checks for the IKVM JNI interface library ***
1762 dnl ******************************************************************
1763 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])
1766 if test x$with_ikvm_native = xyes; then
1767 ikvm_native_dir=ikvm-native
1768 jdk_headers_found="IKVM Native"
1771 AC_SUBST(ikvm_native_dir)
1773 AC_CHECK_HEADERS(execinfo.h)
1775 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1777 AC_CHECK_FUNCS(getgrgid_r)
1778 AC_CHECK_FUNCS(getgrnam_r)
1779 AC_CHECK_FUNCS(getresuid)
1780 AC_CHECK_FUNCS(setresuid)
1781 AC_CHECK_FUNCS(kqueue)
1782 AC_CHECK_FUNCS(backtrace_symbols)
1783 AC_CHECK_FUNCS(mkstemp)
1784 AC_CHECK_FUNCS(mmap)
1785 AC_CHECK_FUNCS(madvise)
1786 AC_CHECK_FUNCS(getrusage)
1787 AC_CHECK_FUNCS(getpriority)
1788 AC_CHECK_FUNCS(setpriority)
1789 AC_CHECK_FUNCS(dl_iterate_phdr)
1790 AC_CHECK_FUNCS(dladdr)
1791 AC_CHECK_FUNCS(sysconf)
1792 AC_CHECK_FUNCS(getrlimit)
1793 AC_CHECK_FUNCS(prctl)
1795 AC_CHECK_FUNCS(sched_getaffinity)
1796 AC_CHECK_FUNCS(sched_setaffinity)
1797 AC_CHECK_FUNCS(sched_getcpu)
1799 if test x$platform_android != xyes; then
1800 AC_CHECK_FUNCS(getpwnam_r)
1801 AC_CHECK_FUNCS(getpwuid_r)
1804 AC_FUNC_STRERROR_R()
1806 dnl ****************************************************************
1807 dnl *** Check for sched_setaffinity from glibc versions before ***
1808 dnl *** 2.3.4. The older versions of the function only take 2 ***
1809 dnl *** parameters, not 3. ***
1811 dnl *** Because the interface change was not made in a minor ***
1812 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1813 dnl *** won't always indicate the interface sched_affinity has. ***
1814 dnl ****************************************************************
1815 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1816 AC_TRY_COMPILE([#include <sched.h>], [
1818 sched_setaffinity(0, &mask);
1820 # Yes, we have it...
1822 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1824 # We have the new, three-parameter version
1827 AC_TRY_COMPILE([#include <sched.h>], [
1828 CPU_COUNT((void *) 0);
1831 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1833 # We have the new, three-parameter version
1837 dnl ******************************************************************
1838 dnl *** Check for large file support ***
1839 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1840 dnl ******************************************************************
1842 # Check that off_t can represent 2**63 - 1 correctly, working around
1843 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1844 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1846 AC_DEFUN([LARGE_FILES], [
1847 large_CPPFLAGS=$CPPFLAGS
1848 CPPFLAGS="$CPPFLAGS $1"
1850 #include <sys/types.h>
1853 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1854 #define COMPILE_TIME_ASSERT(pred) \
1855 switch(0){case 0:case pred:;}
1856 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1859 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1860 large_CPPFLAGS="$large_CPPFLAGS $1"
1865 CPPFLAGS=$large_CPPFLAGS
1868 AC_MSG_CHECKING(if off_t is 64 bits wide)
1870 if test $large_offt = no; then
1871 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1872 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1874 if test $large_offt = no; then
1875 AC_MSG_WARN([No 64 bit file size support available])
1878 dnl *****************************
1879 dnl *** Checks for libsocket ***
1880 dnl *****************************
1881 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1885 dnl *****************************
1886 dnl *** Checks for libinotify ***
1887 dnl *****************************
1888 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1891 dnl *******************************
1892 dnl *** Checks for MSG_NOSIGNAL ***
1893 dnl *******************************
1894 AC_MSG_CHECKING(for MSG_NOSIGNAL)
1895 AC_TRY_COMPILE([#include <sys/socket.h>], [
1896 int f = MSG_NOSIGNAL;
1898 # Yes, we have it...
1900 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1902 # We'll have to use signals
1906 dnl *****************************
1907 dnl *** Checks for IPPROTO_IP ***
1908 dnl *****************************
1909 AC_MSG_CHECKING(for IPPROTO_IP)
1910 AC_TRY_COMPILE([#include <netinet/in.h>], [
1911 int level = IPPROTO_IP;
1913 # Yes, we have it...
1915 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1917 # We'll have to use getprotobyname
1921 dnl *******************************
1922 dnl *** Checks for IPPROTO_IPV6 ***
1923 dnl *******************************
1924 AC_MSG_CHECKING(for IPPROTO_IPV6)
1925 AC_TRY_COMPILE([#include <netinet/in.h>], [
1926 int level = IPPROTO_IPV6;
1928 # Yes, we have it...
1930 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1932 # We'll have to use getprotobyname
1936 dnl ******************************
1937 dnl *** Checks for IPPROTO_TCP ***
1938 dnl ******************************
1939 AC_MSG_CHECKING(for IPPROTO_TCP)
1940 AC_TRY_COMPILE([#include <netinet/in.h>], [
1941 int level = IPPROTO_TCP;
1943 # Yes, we have it...
1945 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1947 # We'll have to use getprotobyname
1951 dnl *****************************
1952 dnl *** Checks for SOL_IP ***
1953 dnl *****************************
1954 AC_MSG_CHECKING(for SOL_IP)
1955 AC_TRY_COMPILE([#include <netdb.h>], [
1958 # Yes, we have it...
1960 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
1962 # We'll have to use getprotobyname
1966 dnl *****************************
1967 dnl *** Checks for SOL_IPV6 ***
1968 dnl *****************************
1969 AC_MSG_CHECKING(for SOL_IPV6)
1970 AC_TRY_COMPILE([#include <netdb.h>], [
1971 int level = SOL_IPV6;
1973 # Yes, we have it...
1975 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
1977 # We'll have to use getprotobyname
1981 dnl *****************************
1982 dnl *** Checks for SOL_TCP ***
1983 dnl *****************************
1984 AC_MSG_CHECKING(for SOL_TCP)
1985 AC_TRY_COMPILE([#include <netdb.h>], [
1986 int level = SOL_TCP;
1988 # Yes, we have it...
1990 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
1992 # We'll have to use getprotobyname
1996 dnl *****************************
1997 dnl *** Checks for IP_PKTINFO ***
1998 dnl *****************************
1999 AC_MSG_CHECKING(for IP_PKTINFO)
2000 AC_TRY_COMPILE([#include <linux/in.h>], [
2001 int level = IP_PKTINFO;
2003 # Yes, we have it...
2005 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2010 dnl *****************************
2011 dnl *** Checks for IPV6_PKTINFO ***
2012 dnl *****************************
2013 AC_MSG_CHECKING(for IPV6_PKTINFO)
2014 AC_TRY_COMPILE([#include <netdb.h>], [
2015 int level = IPV6_PKTINFO;
2017 # Yes, we have it...
2019 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2024 dnl **********************************
2025 dnl *** Checks for IP_DONTFRAG ***
2026 dnl **********************************
2027 AC_MSG_CHECKING(for IP_DONTFRAG)
2028 AC_TRY_COMPILE([#include <netinet/in.h>], [
2029 int level = IP_DONTFRAG;
2031 # Yes, we have it...
2033 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2038 dnl **********************************
2039 dnl *** Checks for IP_DONTFRAGMENT ***
2040 dnl **********************************
2041 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2042 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2043 int level = IP_DONTFRAGMENT;
2045 # Yes, we have it...
2047 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2052 dnl **********************************
2053 dnl *** Checks for IP_MTU_DISCOVER ***
2054 dnl **********************************
2055 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2056 AC_TRY_COMPILE([#include <linux/in.h>], [
2057 int level = IP_MTU_DISCOVER;
2059 # Yes, we have it...
2061 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2066 dnl **********************************
2067 dnl *** Checks for IP_PMTUDISC_DO ***
2068 dnl **********************************
2069 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2070 AC_TRY_COMPILE([#include <linux/in.h>], [
2071 int level = IP_PMTUDISC_DO;
2073 # Yes, we have it...
2075 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2080 dnl *********************************
2081 dnl *** Check for struct ip_mreqn ***
2082 dnl *********************************
2083 AC_MSG_CHECKING(for struct ip_mreqn)
2084 AC_TRY_COMPILE([#include <netinet/in.h>], [
2085 struct ip_mreqn mreq;
2086 mreq.imr_address.s_addr = 0;
2088 # Yes, we have it...
2090 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2092 # We'll just have to try and use struct ip_mreq
2094 AC_MSG_CHECKING(for struct ip_mreq)
2095 AC_TRY_COMPILE([#include <netinet/in.h>], [
2096 struct ip_mreq mreq;
2097 mreq.imr_interface.s_addr = 0;
2099 # Yes, we have it...
2101 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2103 # No multicast support
2108 dnl **********************************
2109 dnl *** Check for getaddrinfo ***
2110 dnl **********************************
2111 AC_MSG_CHECKING(for getaddrinfo)
2116 getaddrinfo(NULL,NULL,NULL,NULL);
2118 # Yes, we have it...
2120 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2125 dnl **********************************
2126 dnl *** Check for gethostbyname2_r ***
2127 dnl **********************************
2128 AC_MSG_CHECKING(for gethostbyname2_r)
2134 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2136 # Yes, we have it...
2138 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2143 dnl **********************************
2144 dnl *** Check for gethostbyname2 ***
2145 dnl **********************************
2146 AC_MSG_CHECKING(for gethostbyname2)
2151 gethostbyname2(NULL,0);
2153 # Yes, we have it...
2155 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2160 dnl **********************************
2161 dnl *** Check for gethostbyname ***
2162 dnl **********************************
2163 AC_MSG_CHECKING(for gethostbyname)
2168 gethostbyname(NULL);
2170 # Yes, we have it...
2172 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2177 dnl **********************************
2178 dnl *** Check for getprotobyname ***
2179 dnl **********************************
2180 AC_MSG_CHECKING(for getprotobyname)
2185 getprotobyname(NULL);
2187 # Yes, we have it...
2189 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2194 dnl **********************************
2195 dnl *** Check for getnameinfo ***
2196 dnl **********************************
2197 AC_MSG_CHECKING(for getnameinfo)
2202 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2204 # Yes, we have it...
2206 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2212 dnl **********************************
2213 dnl *** Check for inet_ntop ***
2214 dnl **********************************
2215 AC_MSG_CHECKING(for inet_ntop)
2218 #include <arpa/inet.h>
2220 inet_ntop (0, NULL, NULL, 0);
2222 # Yes, we have it...
2224 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2229 dnl *****************************
2230 dnl *** Checks for libnsl ***
2231 dnl *****************************
2232 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2234 AC_CHECK_FUNCS(inet_pton inet_aton)
2236 dnl *****************************
2237 dnl *** Checks for libxnet ***
2238 dnl *****************************
2241 AC_MSG_CHECKING(for Solaris XPG4 support)
2242 if test -f /usr/lib/libxnet.so; then
2243 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2244 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2245 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2252 if test "$GCC" = "yes"; then
2253 CFLAGS="$CFLAGS -Wno-char-subscripts"
2258 dnl *****************************
2259 dnl *** Checks for libpthread ***
2260 dnl *****************************
2261 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2262 # and libpthread does not exist
2266 dnl Haiku has pthread in libroot (libc equiv)
2267 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2270 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2273 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2276 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2279 AC_CHECK_HEADERS(pthread.h)
2280 AC_CHECK_HEADERS(pthread_np.h)
2281 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2282 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2283 AC_CHECK_FUNCS(pthread_kill)
2284 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2285 AC_TRY_COMPILE([ #include <pthread.h>], [
2286 pthread_mutexattr_t attr;
2287 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2292 AC_ERROR(Posix system lacks support for recursive mutexes)
2294 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2295 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2296 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2298 dnl **********************************
2299 dnl *** Check for mincore ***
2300 dnl **********************************
2301 AC_MSG_CHECKING(for mincore)
2304 #include <sys/types.h>
2305 #include <sys/mman.h>
2307 mincore(NULL, 0, NULL);
2309 # Yes, we have it...
2311 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2316 dnl ***********************************
2317 dnl *** Checks for working __thread ***
2318 dnl ***********************************
2319 AC_MSG_CHECKING(for working __thread)
2320 if test "x$with_tls" != "x__thread"; then
2321 AC_MSG_RESULT(disabled)
2322 elif test "x$cross_compiling" = "xyes"; then
2323 AC_MSG_RESULT(cross compiling, assuming yes)
2326 #if defined(__APPLE__) && defined(__clang__)
2327 #error "__thread does not currently work with clang on Mac OS X"
2330 #include <pthread.h>
2332 static int res1, res2;
2334 void thread_main (void *arg)
2349 pthread_create (&t1, NULL, thread_main, 1);
2350 pthread_create (&t2, NULL, thread_main, 2);
2352 pthread_join (t1, NULL);
2353 pthread_join (t2, NULL);
2355 return !(res1 + res2 == 2);
2365 dnl **************************************
2366 dnl *** Checks for working sigaltstack ***
2367 dnl **************************************
2368 AC_MSG_CHECKING(for working sigaltstack)
2369 if test "x$with_sigaltstack" != "xyes"; then
2370 AC_MSG_RESULT(disabled)
2371 elif test "x$cross_compiling" = "xyes"; then
2372 AC_MSG_RESULT(cross compiling, assuming yes)
2379 #include <pthread.h>
2380 #include <sys/wait.h>
2381 #if defined(__FreeBSD__) || defined(__NetBSD__)
2382 #define SA_STACK SA_ONSTACK
2385 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2390 volatile char*__ptr = NULL;
2392 loop (void *ignored)
2401 struct sigaction sa;
2404 pthread_attr_t attr;
2406 sa.sa_sigaction = sigsegv_signal_handler;
2407 sigemptyset (&sa.sa_mask);
2408 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2409 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2410 perror ("sigaction");
2414 /* x86 darwin deliver segfaults using SIGBUS */
2415 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2416 perror ("sigaction");
2419 sas.ss_sp = malloc (SIGSTKSZ);
2420 sas.ss_size = SIGSTKSZ;
2422 if (sigaltstack (&sas, NULL) == -1) {
2423 perror ("sigaltstack");
2427 pthread_attr_init (&attr);
2428 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2429 printf ("pthread_create\n");
2453 for (i = 0; i < 300; ++i) {
2454 waitpid (son, &status, WNOHANG);
2455 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2460 kill (son, SIGKILL);
2466 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2473 dnl ********************************
2474 dnl *** Checks for semaphore lib ***
2475 dnl ********************************
2476 # 'Real Time' functions on Solaris
2477 # posix4 on Solaris 2.6
2478 # pthread (first!) on Linux
2479 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2481 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2482 AC_CHECK_FUNCS(shm_open)
2484 dnl ********************************
2485 dnl *** Checks for timezone stuff **
2486 dnl ********************************
2487 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2493 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2494 if test $ac_cv_struct_tm_gmtoff = yes; then
2495 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2497 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2502 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2503 if test $ac_cv_var_timezone = yes; then
2504 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2506 AC_ERROR(unable to find a way to determine timezone)
2510 dnl *********************************
2511 dnl *** Checks for math functions ***
2512 dnl *********************************
2513 AC_SEARCH_LIBS(sqrtf, m)
2514 if test "x$has_broken_apple_cpp" != "xyes"; then
2515 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2516 AC_TRY_LINK([#include <math.h>],
2518 AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2521 AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2522 AC_TRY_LINK([#include <math.h>],
2524 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2527 dnl ****************************************************************
2528 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2529 dnl *** have it in the library (duh)) ***
2530 dnl ****************************************************************
2531 AC_CHECK_FUNCS(poll)
2533 dnl *************************
2534 dnl *** Check for signbit ***
2535 dnl *************************
2536 AC_MSG_CHECKING(for signbit)
2537 AC_TRY_LINK([#include <math.h>], [
2538 int s = signbit(1.0);
2541 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2546 dnl **********************************
2548 dnl **********************************
2549 AC_CHECK_HEADERS(sys/epoll.h)
2551 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2552 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2553 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2558 AC_CHECK_HEADERS(sys/event.h)
2559 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2561 dnl **************************************
2562 dnl * Darwin has a race that prevents us from using reliably:
2563 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2564 dnl * Since kqueue is mostly used for scaling large web servers,
2565 dnl * and very few folks run Mono on large web servers on OSX, falling
2567 dnl **************************************
2568 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2569 if test "x$host_darwin" = "xno"; then
2570 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2574 dnl ******************************
2575 dnl *** Checks for SIOCGIFCONF ***
2576 dnl ******************************
2577 AC_CHECK_HEADERS(sys/ioctl.h)
2578 AC_CHECK_HEADERS(net/if.h, [], [],
2580 #ifdef HAVE_SYS_TYPES_H
2581 # include <sys/types.h>
2583 #ifdef HAVE_SYS_SOCKET_H
2584 # include <sys/socket.h>
2587 AC_MSG_CHECKING(for ifreq)
2590 #include <sys/ioctl.h>
2598 x = (void *) &ifr->ifr_addr;
2601 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2605 dnl **********************************
2606 dnl *** Checks for sin_len ***
2607 dnl **********************************
2608 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2610 #include <netinet/in.h>
2612 struct sockaddr_in saddr;
2613 saddr.sin_len = sizeof (saddr);
2616 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2620 dnl **********************************
2621 dnl *** Checks for sin6_len ***
2622 dnl **********************************
2623 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2625 #include <netinet/in.h>
2627 struct sockaddr_in6 saddr6;
2628 saddr6.sin6_len = sizeof (saddr6);
2631 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2635 dnl **********************************
2636 dnl *** Check for getifaddrs ***
2637 dnl **********************************
2638 AC_MSG_CHECKING(for getifaddrs)
2641 #include <sys/types.h>
2642 #include <sys/socket.h>
2643 #include <ifaddrs.h>
2647 # Yes, we have it...
2649 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2653 dnl **********************************
2654 dnl *** Check for if_nametoindex ***
2655 dnl **********************************
2656 AC_MSG_CHECKING(for if_nametoindex)
2659 #include <sys/types.h>
2660 #include <sys/socket.h>
2663 if_nametoindex(NULL);
2665 # Yes, we have it...
2667 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2671 dnl **********************************
2672 dnl *** Check for access ***
2673 dnl **********************************
2674 AC_MSG_CHECKING(for access)
2680 # Yes, we have it...
2682 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2687 dnl **********************************
2688 dnl *** Checks for proclib ***
2689 dnl **********************************
2690 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.)])
2691 dnl **********************************
2692 dnl *** Checks for MonoPosixHelper ***
2693 dnl **********************************
2694 AC_CHECK_HEADERS(checklist.h)
2695 AC_CHECK_HEADERS(pathconf.h)
2696 AC_CHECK_HEADERS(fstab.h)
2697 AC_CHECK_HEADERS(attr/xattr.h)
2698 AC_CHECK_HEADERS(sys/extattr.h)
2699 AC_CHECK_HEADERS(sys/sendfile.h)
2700 AC_CHECK_HEADERS(sys/statvfs.h)
2701 AC_CHECK_HEADERS(sys/statfs.h)
2702 AC_CHECK_HEADERS(sys/vfstab.h)
2703 AC_CHECK_HEADERS(sys/xattr.h)
2704 AC_CHECK_HEADERS(sys/mman.h)
2705 AC_CHECK_HEADERS(sys/param.h)
2706 AC_CHECK_HEADERS(sys/mount.h, [], [],
2708 #ifdef HAVE_SYS_PARAM_H
2709 # include <sys/param.h>
2712 AC_CHECK_HEADERS(sys/mount.h)
2713 AC_CHECK_FUNCS(confstr)
2714 AC_CHECK_FUNCS(seekdir telldir)
2715 AC_CHECK_FUNCS(getdomainname)
2716 AC_CHECK_FUNCS(setdomainname)
2717 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2718 AC_CHECK_FUNCS(setgroups)
2719 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2720 AC_CHECK_FUNCS(getfsstat)
2721 AC_CHECK_FUNCS(lutimes futimes)
2722 AC_CHECK_FUNCS(mremap)
2723 AC_CHECK_FUNCS(remap_file_pages)
2724 AC_CHECK_FUNCS(posix_fadvise)
2725 AC_CHECK_FUNCS(posix_fallocate)
2726 AC_CHECK_FUNCS(posix_madvise)
2727 AC_CHECK_FUNCS(vsnprintf)
2728 AC_CHECK_FUNCS(sendfile)
2729 AC_CHECK_FUNCS(gethostid sethostid)
2730 AC_CHECK_FUNCS(sethostname)
2731 AC_CHECK_FUNCS(statfs)
2732 AC_CHECK_FUNCS(fstatfs)
2733 AC_CHECK_FUNCS(statvfs)
2734 AC_CHECK_FUNCS(fstatvfs)
2735 AC_CHECK_FUNCS(stime)
2736 AC_CHECK_FUNCS(strerror_r)
2737 AC_CHECK_FUNCS(ttyname_r)
2738 AC_CHECK_FUNCS(psignal)
2739 AC_CHECK_FUNCS(getlogin_r)
2740 AC_CHECK_FUNCS(lockf)
2741 AC_CHECK_FUNCS(swab)
2742 AC_CHECK_FUNCS(setusershell endusershell)
2743 AC_CHECK_FUNCS(futimens utimensat)
2744 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2745 AC_CHECK_FUNCS(readv writev preadv pwritev)
2746 AC_CHECK_FUNCS(setpgid)
2747 AC_CHECK_FUNCS(system)
2748 AC_CHECK_FUNCS(fork execv execve)
2749 AC_CHECK_FUNCS(accept4)
2750 AC_CHECK_FUNCS(localtime_r)
2751 AC_CHECK_FUNCS(mkdtemp)
2752 AC_CHECK_SIZEOF(size_t)
2753 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2754 [#include <sys/types.h>
2755 #include <sys/stat.h>
2756 #include <unistd.h>])
2757 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2758 [#include <sys/types.h>
2759 #include <sys/stat.h>
2760 #include <unistd.h>])
2761 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2762 [#include <sys/time.h>])
2763 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2764 [#include <sys/socket.h>])
2765 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2766 [#include <unistd.h>
2767 #include <fcntl.h>])
2768 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2769 [#include <sys/uio.h>])
2770 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2771 [#include <sys/socket.h>])
2772 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2773 [#include <sys/poll.h>])
2774 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2775 [#include <sys/socket.h>])
2776 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2777 [#include <sys/socket.h>])
2778 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2779 [#include <netinet/in.h>])
2780 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2781 [#include <netinet/in.h>])
2782 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2783 [#include <sys/un.h>])
2784 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2785 [#include <sys/types.h>
2786 #include <sys/stat.h>
2787 #include <unistd.h>])
2788 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2789 [#include <time.h>])
2790 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2791 [#include <sys/time.h>
2792 #include <sys/types.h>
2793 #include <utime.h>])
2794 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2795 [#include <sys/time.h>])
2796 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2797 [#include <sys/types.h>
2798 #include <utime.h>])
2800 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2801 [#include <sys/types.h>
2802 #include <dirent.h>])
2804 [struct passwd.pw_gecos],,,
2805 [#include <sys/types.h>
2808 [struct statfs.f_flags],,,
2809 [#include <sys/types.h>
2810 #include <sys/vfs.h>])
2812 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2813 [#include <sys/types.h>
2814 #include <sys/stat.h>
2815 #include <unistd.h>])
2817 dnl Favour xattr through glibc, but use libattr if we have to
2818 AC_CHECK_FUNC(lsetxattr, ,
2819 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2823 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2825 [struct kinfo_proc.kp_proc],,,
2826 [#include <sys/types.h>
2827 #include <sys/param.h>
2828 #include <sys/sysctl.h>
2829 #include <sys/proc.h>
2832 dnl *********************************
2833 dnl *** Checks for Windows compilation ***
2834 dnl *********************************
2835 AC_CHECK_HEADERS(sys/time.h)
2836 AC_CHECK_HEADERS(sys/param.h)
2837 AC_CHECK_HEADERS(dirent.h)
2839 dnl ******************************************
2840 dnl *** Checks for OSX and iOS compilation ***
2841 dnl ******************************************
2842 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2844 dnl *********************************
2845 dnl *** Check for Console 2.0 I/O ***
2846 dnl *********************************
2847 AC_CHECK_HEADERS([curses.h])
2848 AC_CHECK_HEADERS([term.h], [], [],
2853 AC_CHECK_HEADERS([termios.h])
2855 dnl *********************************
2856 dnl *** Checks for random ***
2857 dnl *********************************
2858 if test x$host_darwin = xno; then
2859 AC_CHECK_HEADERS(sys/random.h)
2860 AC_CHECK_FUNCS(getrandom getentropy)
2863 dnl *********************************
2864 dnl *** Checks for Windows compilation ***
2865 dnl *********************************
2866 AC_CHECK_HEADERS(winternl.h)
2868 jdk_headers_found=no
2869 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
2870 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
2871 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
2872 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
2873 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
2874 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
2875 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
2877 dnl *********************************
2878 dnl *** Check for struct ip_mreqn ***
2879 dnl *********************************
2880 AC_MSG_CHECKING(for struct ip_mreqn)
2881 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2882 struct ip_mreqn mreq;
2883 mreq.imr_address.s_addr = 0;
2885 # Yes, we have it...
2887 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
2889 # We'll just have to try and use struct ip_mreq
2891 AC_MSG_CHECKING(for struct ip_mreq)
2892 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2893 struct ip_mreq mreq;
2894 mreq.imr_interface.s_addr = 0;
2896 # Yes, we have it...
2898 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
2900 # No multicast support
2905 dnl **********************************
2906 dnl *** Check for getaddrinfo ***
2907 dnl **********************************
2908 AC_MSG_CHECKING(for getaddrinfo)
2911 #include <winsock2.h>
2912 #include <ws2tcpip.h>
2914 getaddrinfo(NULL,NULL,NULL,NULL);
2916 # Yes, we have it...
2918 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2923 dnl **********************************
2924 dnl *** Check for gethostbyname ***
2925 dnl **********************************
2926 AC_MSG_CHECKING(for gethostbyname)
2929 #include <winsock2.h>
2930 #include <ws2tcpip.h>
2932 gethostbyname(NULL);
2934 # Yes, we have it...
2936 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2941 dnl **********************************
2942 dnl *** Check for getprotobyname ***
2943 dnl **********************************
2944 AC_MSG_CHECKING(for getprotobyname)
2947 #include <winsock2.h>
2948 #include <ws2tcpip.h>
2950 getprotobyname(NULL);
2952 # Yes, we have it...
2954 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2959 dnl **********************************
2960 dnl *** Check for getnameinfo ***
2961 dnl **********************************
2962 AC_MSG_CHECKING(for getnameinfo)
2965 #include <winsock2.h>
2966 #include <ws2tcpip.h>
2968 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2970 # Yes, we have it...
2972 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2977 dnl **********************************
2978 dnl *** Check for inet_ntop ***
2979 dnl **********************************
2980 AC_MSG_CHECKING(for inet_ntop)
2983 #include <winsock2.h>
2984 #include <ws2tcpip.h>
2986 inet_ntop (0, NULL, NULL, 0);
2988 # Yes, we have it...
2990 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2995 dnl **********************************
2996 dnl *** Check for inet_pton ***
2997 dnl **********************************
2998 AC_MSG_CHECKING(for inet_pton)
3001 #include <winsock2.h>
3002 #include <ws2tcpip.h>
3007 inet_pton (0, NULL, NULL);
3009 # Yes, we have it...
3011 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3016 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3017 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3018 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3019 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3020 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3021 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3022 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3026 AC_MSG_CHECKING(for socklen_t)
3028 #include <sys/types.h>
3029 #include <sys/socket.h>
3033 ac_cv_c_socklen_t=yes
3034 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3040 AC_MSG_CHECKING(for array element initializer support)
3041 AC_TRY_COMPILE([#include <sys/socket.h>], [
3042 const int array[] = {[1] = 2,};
3044 # Yes, we have it...
3046 AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
3048 # We'll have to use signals
3052 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
3053 # Simply calling trunc (0.0) is no good since gcc will optimize the call away
3054 AC_TRY_LINK([#include <math.h>],
3055 [ static void *p = &trunc; ],
3057 AC_DEFINE(HAVE_TRUNC)
3063 if test "x$ac_cv_truncl" != "xyes"; then
3064 AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
3067 AC_CHECK_FUNCS(execvp)
3069 dnl ****************************
3070 dnl *** Look for /dev/random ***
3071 dnl ****************************
3073 AC_MSG_CHECKING([if usage of random device is requested])
3074 AC_ARG_ENABLE(dev-random,
3075 [ --disable-dev-random disable the use of the random device (enabled by default)],
3076 try_dev_random=$enableval, try_dev_random=yes)
3078 AC_MSG_RESULT($try_dev_random)
3082 dnl IBM i does not have /dev/random, use unblocking only
3085 NAME_DEV_RANDOM="/dev/urandom"
3088 dnl Win32 does not have /dev/random, they have their own method...
3090 *-mingw*|*-*-cygwin*)
3091 ac_cv_have_dev_random=no
3094 dnl Everywhere else, it's /dev/random
3097 NAME_DEV_RANDOM="/dev/random"
3101 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3103 dnl Now check if the device actually exists
3105 if test "x$try_dev_random" = "xyes"; then
3106 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3107 [if test -r "$NAME_DEV_RANDOM" ; then
3108 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3109 if test "x$ac_cv_have_dev_random" = "xyes"; then
3110 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3113 AC_MSG_CHECKING(for random device)
3114 ac_cv_have_dev_random=no
3115 AC_MSG_RESULT(has been disabled)
3118 if test "x$host_win32" = "xyes"; then
3119 AC_DEFINE(HAVE_CRYPT_RNG)
3122 if test "x$ac_cv_have_dev_random" = "xno" \
3123 && test "x$host_win32" = "xno"; then
3126 *** A system-provided entropy source was not found on this system.
3127 *** Because of this, the System.Security.Cryptography random number generator
3128 *** will throw a NotImplemented exception.
3130 *** If you are seeing this message, and you know your system DOES have an
3131 *** entropy collection in place, please report an issue on GitHub and
3132 *** provide information about the system and how to access the random device.
3134 *** Otherwise you can install either egd or prngd and set the environment
3135 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3139 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)
3141 AC_MSG_CHECKING([if big-arrays are to be enabled])
3142 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)
3143 if test "x$enable_big_arrays" = "xyes" ; then
3144 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3145 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3147 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3150 AC_MSG_RESULT($enable_big_arrays)
3156 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3158 if test "x$enable_dtrace" = "xyes"; then
3159 if test "x$has_dtrace" = "xno"; then
3160 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3162 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3163 if test "x$DTRACE" = "xno"; then
3164 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3166 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3167 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3173 if test "x$enable_dtrace" = "xyes"; then
3174 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3176 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3179 DTRACEFLAGS="-arch ppc64"
3182 DTRACEFLAGS="-arch x86_64"
3191 DTRACEFLAGS="-arch ppc"
3194 DTRACEFLAGS="-arch i386"
3201 AC_SUBST(DTRACEFLAGS)
3207 AC_CHECK_HEADERS([sys/sdt.h])
3209 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3210 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3212 dnl **************************
3213 dnl *** AOT cross offsets ***
3214 dnl **************************
3216 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3217 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3223 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3224 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3225 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)
3226 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3228 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3230 if test "x$enable_llvm" = "xdefault"; then
3231 enable_llvm=$enable_llvm_default
3234 if test "x$enable_llvm" = "xyes"; then
3235 if test "x$with_llvm" != "x"; then
3236 LLVM_CONFIG=$with_llvm/bin/llvm-config
3237 if test x$host_win32 = xyes; then
3238 LLVM_CONFIG=$LLVM_CONFIG.exe
3240 if test ! -x $LLVM_CONFIG; then
3241 AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3244 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3245 if test "x$LLVM_CONFIG" = "xno"; then
3246 AC_MSG_ERROR([llvm-config not found.])
3250 llvm_codegen="x86codegen"
3253 llvm_codegen="armcodegen"
3256 llvm_codegen="aarch64codegen"
3260 if test "x$host_win32" = "xno"; then
3262 # Should be something like '2.6' or '2.7svn'
3263 llvm_version=`$LLVM_CONFIG --version`
3264 llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3265 AC_MSG_CHECKING(LLVM version)
3266 AC_MSG_RESULT($llvm_version $llvm_api_version)
3267 if echo $llvm_version | grep -q 'mono'; then
3268 if test "x$enable_llvm_version_check" = "xyes"; then
3269 if test "$llvm_version" != "$expected_llvm_version"; then
3270 AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3274 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.])
3277 # The output of --cflags seems to include optimizations flags too
3278 if test $llvm_api_version -gt 100; then
3279 # The --cflags argument includes all kinds of warnings -pendantic etc.
3280 LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3281 LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3283 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'`
3284 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'`
3286 # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3287 # from LLVM classes.
3288 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3289 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3290 # This might include empty lines
3291 LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3292 llvm_jit_supported=yes
3293 llvm_jit_libs="jit mcjit $llvm_codegen"
3294 if test "x$host" != "x$target"; then
3295 # No need for jit libs
3296 llvm_jit_supported=no
3298 elif test $llvm_api_version -gt 100; then
3299 llvm_jit_libs="orcjit $llvm_codegen"
3301 LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3302 if test "x$LLVM_LIBS" = "x"; then
3303 echo "$LLVM_CONFIG --libs failed."
3306 LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3307 # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3308 if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3309 LLVM_LIBS="$LLVM_LIBS -lc++"
3311 LLVM_LIBS="$LLVM_LIBS -lstdc++"
3314 expected_llvm_version="3.4svn-mono-mono/e656cac"
3317 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"
3318 LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3319 LLVM_LDFLAGS="-L$with_llvm/lib"
3320 LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3321 LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3322 -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo \
3323 -lLLVMARMAsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler \
3324 -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc \
3325 -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT \
3326 -lLLVMAnalysis -lLLVMTarget \
3327 -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3328 -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3329 -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3330 -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3331 -lLLVMSupport -lstdc++"
3332 LLVM_LIBS="$LLVM_LIBS $LLVM_SYSTEM_LIBS"
3334 llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3335 llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3338 if test "x$llvm_api_version" = "x"; then
3339 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3340 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3342 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3343 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3346 AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3348 AC_SUBST(LLVM_CFLAGS)
3349 AC_SUBST(LLVM_CXXFLAGS)
3351 AC_SUBST(LLVM_LDFLAGS)
3352 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3355 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3356 if test "x$enable_loadedllvm" = "xyes"; then
3357 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3359 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3361 if test "x$enable_llvm" = "xyes"; then
3362 enable_llvm_runtime=yes
3364 if test "x$enable_llvm_runtime" = "xyes"; then
3365 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3367 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3370 ACCESS_UNALIGNED="yes"
3374 SQLITE="libsqlite.so.0"
3375 SQLITE3="libsqlite3.so.0"
3377 GDKX11="libgdk-x11-2.0.so.0"
3378 GTKX11="libgtk-x11-2.0.so.0"
3379 XINERAMA="libXinerama.so.1"
3381 sizeof_register="SIZEOF_VOID_P"
3384 boehm_supported=true
3388 if test "x$enable_wasm" = "xyes"; then
3392 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3393 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3405 ACCESS_UNALIGNED="no"
3407 AC_MSG_CHECKING(for mips n32)
3409 #if _MIPS_SIM != _ABIN32
3426 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3431 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3432 # int astruct __attribute__ ((visibility ("hidden")));
3435 # void *p = &astruct;
3437 # gcc -fPIC --shared -o libfoo.so foo.c
3439 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3440 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3441 have_visibility_hidden=no
3444 have_visibility_hidden=no
3453 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3460 openbsd*|freebsd*|kfreebsd-gnu*)
3467 x86_64-*-* | amd64-*-*)
3470 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3471 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3478 BTLS_PLATFORM=x86_64
3479 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3484 BTLS_PLATFORM=x86_64
3485 boehm_supported=false
3487 openbsd*|freebsd*|kfreebsd-gnu*)
3490 BTLS_PLATFORM=x86_64
3497 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3503 ACCESS_UNALIGNED="no"
3510 if test x"$GCC" = xyes; then
3511 # We don't support v8 cpus
3512 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3514 if test x"$AR" = xfalse; then
3515 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3518 *-mingw*|*-*-cygwin*)
3519 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3520 have_visibility_hidden=no
3523 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3524 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3525 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3526 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3528 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3529 CFLAGS="$CFLAGS -mminimal-toc"
3532 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3538 BTLS_PLATFORM=powerpc
3539 dnl on AIX/PASE, shared libraries can be inside archives
3540 dnl if they are, we specify them by lib.a(lib.so)
3541 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3542 LIBC="libc.a(shr_64.o)"
3543 INTL="libintl.a(libintl.so.8)"
3547 BTLS_PLATFORM=powerpc
3556 ACCESS_UNALIGNED="no"
3557 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3563 ACCESS_UNALIGNED="no"
3564 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3569 ACCESS_UNALIGNED="no"
3571 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3574 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3576 arm*-linux*-gnueabi)
3577 BTLS_PLATFORM=armsoft
3584 ACCESS_UNALIGNED="no"
3585 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3588 # https://lkml.org/lkml/2012/7/15/133
3591 boehm_supported=false
3594 BTLS_PLATFORM=aarch64
3595 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3600 ACCESS_UNALIGNED="yes"
3603 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
3609 if test "x$host" != "x$target"; then
3610 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
3612 enable_support_build=no
3618 ACCESS_UNALIGNED="no"
3619 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3620 # Can't use tls, since it depends on the runtime detection of tls offsets
3621 # in mono-compiler.h
3626 AC_DEFINE(TARGET_WATCHOS, 1, [...])
3630 powerpc64-ps3-linux-gnu)
3632 arch_target=powerpc64
3633 AC_DEFINE(TARGET_PS3, 1, [...])
3634 # It would be better to just use TARGET_POWERPC64, but lots of code already
3636 AC_DEFINE(__mono_ppc64__, 1, [...])
3637 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3639 target_byte_order=G_BIG_ENDIAN
3641 powerpc64-xbox360-linux-gnu)
3643 arch_target=powerpc64
3644 AC_DEFINE(TARGET_XBOX360, 1, [...])
3645 # It would be better to just use TARGET_POWERPC64, but lots of code already
3648 target_byte_order=G_BIG_ENDIAN
3653 AC_DEFINE(TARGET_ARM, 1, [...])
3654 ACCESS_UNALIGNED="no"
3655 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3656 # Can't use tls, since it depends on the runtime detection of tls offsets
3657 # in mono-compiler.h
3661 armv7l-unknown-linux-gnueabi*)
3663 CPPFLAGS="$CPPFLAGS"
3665 armv5-*-linux-androideabi*)
3666 AC_DEFINE(TARGET_ANDROID, 1, [...])
3667 CPPFLAGS="$CPPFLAGS"
3669 *-linux-androideabi*)
3670 AC_DEFINE(TARGET_ANDROID, 1, [...])
3671 CPPFLAGS="$CPPFLAGS"
3678 AC_DEFINE(TARGET_ARM, 1, [...])
3679 ACCESS_UNALIGNED="no"
3680 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3681 # Can't use tls, since it depends on the runtime detection of tls offsets
3682 # in mono-compiler.h
3689 AC_DEFINE(TARGET_X86, 1, [...])
3690 CPPFLAGS="$CPPFLAGS"
3691 # Can't use tls, since it depends on the runtime detection of tls offsets
3692 # in mono-compiler.h
3698 AC_DEFINE(TARGET_ANDROID, 1, [...])
3705 AC_DEFINE(TARGET_AMD64, 1, [...])
3706 CPPFLAGS="$CPPFLAGS"
3707 # Can't use tls, since it depends on the runtime detection of tls offsets
3708 # in mono-compiler.h
3714 AC_DEFINE(TARGET_ANDROID, 1, [...])
3721 AC_DEFINE(TARGET_AMD64, 1, [...])
3722 AC_DEFINE(TARGET_PS4, 1, [...])
3723 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
3724 CPPFLAGS="$CPPFLAGS"
3725 # Can't use tls, since it depends on the runtime detection of tls offsets
3726 # in mono-compiler.h
3734 AC_DEFINE(TARGET_ARM64, 1, [...])
3735 CPPFLAGS="$CPPFLAGS"
3736 # Can't use tls, since it depends on the runtime detection of tls offsets
3737 # in mono-compiler.h
3742 AC_DEFINE(TARGET_ANDROID, 1, [...])
3750 AC_MSG_ERROR([Cross compiling is not supported for target $target])
3756 AC_DEFINE(TARGET_X86, 1, [...])
3759 AC_DEFINE(TARGET_AMD64, 1, [...])
3762 AC_DEFINE(TARGET_ARM, 1, [...])
3765 AC_DEFINE(TARGET_ARM64, 1, [...])
3768 AC_DEFINE(TARGET_POWERPC, 1, [...])
3771 AC_DEFINE(TARGET_POWERPC, 1, [...])
3772 AC_DEFINE(TARGET_POWERPC64, 1, [...])
3775 AC_DEFINE(TARGET_S390X, 1, [...])
3778 AC_DEFINE(TARGET_MIPS, 1, [...])
3781 AC_DEFINE(TARGET_SPARC, 1, [...])
3784 AC_DEFINE(TARGET_SPARC64, 1, [...])
3790 AC_DEFINE(HOST_X86, 1, [...])
3793 AC_DEFINE(HOST_AMD64, 1, [...])
3796 AC_DEFINE(HOST_ARM, 1, [...])
3799 AC_DEFINE(HOST_ARM64, 1, [...])
3802 AC_DEFINE(HOST_POWERPC, 1, [...])
3805 AC_DEFINE(HOST_POWERPC, 1, [...])
3806 AC_DEFINE(HOST_POWERPC64, 1, [...])
3809 AC_DEFINE(HOST_S390X, 1, [...])
3812 AC_DEFINE(HOST_MIPS, 1, [...])
3815 AC_DEFINE(HOST_SPARC, 1, [...])
3818 AC_DEFINE(HOST_SPARC64, 1, [...])
3830 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
3831 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
3833 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
3835 if test "x$enable_vtune" = "xyes"; then
3836 if test "x$with_vtune" = "x"; then
3837 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
3839 VTUNE_PATH=$with_vtune
3841 VTUNE_INCLUDE=$VTUNE_PATH/include
3844 VTUNE_LIB=$VTUNE_PATH/lib32
3847 VTUNE_LIB=$VTUNE_PATH/lib64
3850 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
3853 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
3854 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
3856 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
3857 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
3860 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
3861 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
3863 AC_SUBST(VTUNE_LIBS)
3864 AC_SUBST(VTUNE_CFLAGS)
3866 dnl Use GCC atomic ops if they work on the target.
3867 if test x$GCC = "xyes"; then
3869 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
3870 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
3875 if test "x$target_mach" = "xyes"; then
3877 if test "x$TARGET_SYS" = "xWATCHOS"; then
3878 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
3879 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3880 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3882 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
3883 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3884 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3885 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3888 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
3889 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
3890 #error fail this for ios
3893 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
3894 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
3895 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
3898 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3899 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3900 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3905 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
3908 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
3910 if test "x$sizeof_register" = "x4"; then
3911 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
3912 elif test "x$sizeof_register" = "x8"; then
3913 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
3915 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
3918 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
3920 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
3921 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
3922 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
3923 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
3925 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
3928 if test "x$have_visibility_hidden" = "xyes"; then
3929 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
3932 if test "x$have_deprecated" = "xyes"; then
3933 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
3937 dnl Simple Generational checks (sgen)
3940 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
3941 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
3942 if test x$buildsgen = xyes; then
3943 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
3944 SGEN_DEFINES="-DHAVE_SGEN_GC"
3947 if test x$with_sgen_default_concurrent != xno; then
3948 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
3949 conc_gc_msg=" (concurrent by default)"
3952 if test "x$gc_msg" = "x"; then
3953 gc_msg="sgen$conc_gc_msg"
3955 gc_msg="sgen$conc_gc_msg and $gc_msg"
3958 AC_SUBST(SGEN_DEFINES)
3959 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
3961 jit_status="Building and using the JIT"
3969 INTL="libintl.dylib"
3970 SQLITE="libsqlite.0.dylib"
3971 SQLITE3="libsqlite3.0.dylib"
3973 GDKX11="libgdk-x11-2.0.dylib"
3974 GTKX11="libgtk-x11-2.0.dylib"
3979 SQLITE="libsqlite.so"
3980 SQLITE3="libsqlite3.so"
3990 SQLITE="libsqlite.so"
3991 SQLITE3="libsqlite3.so"
3996 SQLITE="libsqlite.so"
3997 SQLITE3="libsqlite3.so"
4001 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4002 AC_MSG_CHECKING(for the soname of libX11.so)
4003 for i in $x_libraries $dlsearch_path; do
4005 if test -f $i/libX11.so.$r; then
4012 if test "x$X11" = "xlibX11.so"; then
4013 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4021 ######################################
4023 ######################################
4027 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4028 if test x$GCC = xyes; then
4029 GNUC_UNUSED='__attribute__((__unused__))'
4030 GNUC_NORETURN='__attribute__((__noreturn__))'
4032 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4035 AC_SUBST(GNUC_PRETTY)
4036 AC_SUBST(GNUC_UNUSED)
4037 AC_SUBST(GNUC_NORETURN)
4038 AC_SUBST(BREAKPOINT)
4040 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4043 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4059 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4064 arm*-darwin*|aarch64*-*)
4065 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4068 ORDER=G_LITTLE_ENDIAN
4071 LDFLAGS="$LDFLAGS -ltextencoding"
4074 CFLAGS="$CFLAGS -pthread"
4075 LDFLAGS="$LDFLAGS -pthread"
4086 # Defined for all targets/platforms using classic Windows API support.
4087 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4088 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4090 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf strerror_r)
4091 AC_CHECK_FUNCS(getrlimit)
4092 AC_CHECK_FUNCS(fork execv execve)
4094 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4096 if test x$with_overridable_allocators = xyes; then
4097 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4098 AC_MSG_NOTICE([Overridable allocator support enabled])
4100 AC_MSG_NOTICE([Overridable allocator support disabled])
4104 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4105 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4106 # removed once support for 10.6 is dropped.
4108 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4110 if test x$target_osx = xyes; then
4111 AC_CHECK_FUNCS(getpwuid_r)
4112 elif test x$target_ios = xno; then
4113 AC_CHECK_FUNCS(strndup getpwuid_r)
4116 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4118 AC_SEARCH_LIBS(sqrtf, m)
4120 # nanosleep may not be part of libc, also search it in other libraries
4121 AC_SEARCH_LIBS(nanosleep, rt)
4123 AC_SEARCH_LIBS(dlopen, dl)
4124 old_ldflags="${LDFLAGS}"
4125 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4126 if test $lt_cv_prog_gnu_ld = yes; then
4127 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4130 *-*-aix*|*-*-os400*)
4133 dnl Try to use export-dynamic anyways
4134 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4138 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4139 if test $found_export_dynamic = no; then
4140 LDFLAGS="${old_ldflags}"
4143 AC_MSG_CHECKING(for varargs macros)
4145 int foo (int i, int j);
4146 #define bar(...) foo (1, __VA_ARGS__)
4150 ],have_iso_varargs=yes,have_iso_varargs=no)
4151 AC_MSG_RESULT($have_iso_varargs)
4152 G_HAVE_ISO_VARARGS=0
4153 if test "x$have_iso_varargs" = "xyes"; then
4154 G_HAVE_ISO_VARARGS=1
4156 AC_SUBST(G_HAVE_ISO_VARARGS)
4158 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)
4159 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4160 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4161 AC_SUBST(HAVE_ALLOCA_H)
4163 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
4164 GPOINTER_TO_INT="((gint) (ptr))"
4165 GPOINTER_TO_UINT="((guint) (ptr))"
4166 GINT_TO_POINTER="((gpointer) (v))"
4167 GUINT_TO_POINTER="((gpointer) (v))"
4170 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
4171 GPOINTER_TO_INT="((gint)(long) (ptr))"
4172 GPOINTER_TO_UINT="((guint)(long) (ptr))"
4173 GINT_TO_POINTER="((gpointer)(glong) (v))"
4174 GUINT_TO_POINTER="((gpointer)(gulong) (v))"
4177 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
4178 GPOINTER_TO_INT="((gint)(long long) (ptr))"
4179 GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
4180 GINT_TO_POINTER="((gpointer)(long long) (v))"
4181 GUINT_TO_POINTER="((gpointer)(unsigned long long) (v))"
4183 GSIZE_FORMAT='"I64u"'
4185 AC_MSG_ERROR([unsupported pointer size])
4188 AC_SUBST(GPOINTER_TO_INT)
4189 AC_SUBST(GPOINTER_TO_UINT)
4190 AC_SUBST(GINT_TO_POINTER)
4191 AC_SUBST(GUINT_TO_POINTER)
4193 AC_SUBST(GSIZE_FORMAT)
4194 AC_SUBST(G_GUINT64_FORMAT)
4195 AC_SUBST(G_GINT64_FORMAT)
4196 AC_SUBST(G_GUINT32_FORMAT)
4197 AC_SUBST(G_GINT32_FORMAT)
4200 # END OF EGLIB CHECKS
4203 AC_ARG_WITH([libgdiplus],
4204 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4205 [], [with_libgdiplus=installed])
4207 # default install location
4208 libgdiplus_install_loc=libgdiplus${libsuffix}
4211 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4215 case $with_libgdiplus in
4222 if test x$cross_compiling = xno; then
4223 if test x$host_darwin = xyes; then
4224 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4226 libgdiplus_install_loc=$a
4234 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4237 /*) # absolute path, assume it is an install location
4238 libgdiplus_loc=$with_libgdiplus
4239 libgdiplus_install_loc=$with_libgdiplus
4243 libgdiplus_loc=`pwd`/$with_libgdiplus
4246 AC_SUBST(libgdiplus_loc)
4247 AC_SUBST(libgdiplus_install_loc)
4249 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)
4250 if test "x$icall_symbol_map" = "xyes"; then
4251 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4254 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4255 if test "x$icall_export" = "xyes"; then
4256 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4259 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4260 if test "x$icall_tables" = "xno"; then
4261 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4264 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4266 if test "x$with_tls" = "x__thread"; then
4267 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4268 # Pass the information to libgc
4269 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4270 AC_MSG_CHECKING(if the tls_model attribute is supported)
4271 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4274 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4280 if test ${TARGET} = ARM; then
4281 dnl ******************************************
4282 dnl *** Check to see what FPU is available ***
4283 dnl ******************************************
4284 AC_MSG_CHECKING(which FPU to use)
4287 # This is a bit tricky:
4289 # if (__ARM_PCS_VFP) {
4290 # /* mfloat-abi=hard == VFP with hard ABI */
4291 # } elif (!__SOFTFP__) {
4292 # /* mfloat-abi=softfp == VFP with soft ABI */
4294 # /* mfloat-abi=soft == no VFP */
4297 # The exception is iOS (w/ GCC) where none of the above
4298 # are defined (but iOS always uses the 'softfp' ABI).
4300 # No support for FPA.
4305 # iOS GCC always uses the 'softfp' ABI.
4306 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4310 # Are we using the 'hard' ABI?
4311 if test x$fpu = xNONE; then
4312 AC_TRY_COMPILE([], [
4313 #ifndef __ARM_PCS_VFP
4314 #error "Float ABI is not 'hard'"
4323 # No 'hard' ABI. 'soft' or 'softfp'?
4324 if test x$fpu = xNONE; then
4325 AC_TRY_COMPILE([], [
4327 #error "Float ABI is not 'softfp'"
4336 if test x$arm_fpu != x; then
4341 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4344 dnl *********************************************
4345 dnl *** Check which ARM version(s) we can use ***
4346 dnl *********************************************
4347 AC_MSG_CHECKING(which ARM version to use)
4349 AC_TRY_COMPILE([], [
4350 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4351 #error Not on ARM v5.
4359 AC_TRY_COMPILE([], [
4360 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4361 #error Not on ARM v6.
4370 AC_TRY_COMPILE([], [
4371 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4372 #error Not on ARM v7.
4382 AC_MSG_RESULT($arm_ver)
4384 if test x$arm_v5 = xyes; then
4385 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4386 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4389 if test x$arm_v6 = xyes; then
4390 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4391 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4394 if test x$arm_v7 = xyes; then
4395 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4396 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4400 if test ${TARGET} = unknown; then
4401 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4402 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4405 if test "x$platform_android" = "xyes"; then
4406 case "x${TARGET}" in
4411 BTLS_PLATFORM=android-armv5
4415 BTLS_PLATFORM=android-armv6
4419 BTLS_PLATFORM=android-armv7
4428 BTLS_PLATFORM=android-v8a
4432 BTLS_PLATFORM=android-x86
4436 BTLS_PLATFORM=android-x64
4444 if test ${ACCESS_UNALIGNED} = no; then
4445 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4448 if test x$host_darwin = xyes; then
4449 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4451 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4452 [AC_MSG_RESULT([no])],
4454 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4456 RANLIB="$RANLIB -no_warning_for_no_symbols"
4457 AC_MSG_RESULT([yes])
4464 # Pass CPPFLAGS to libgc configure
4465 # We should use a separate variable for this to avoid passing useless and
4466 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4467 # This should be executed late so we pick up the final version of CPPFLAGS
4468 # The problem with this approach, is that during a reconfigure, the main
4469 # configure scripts gets invoked with these arguments, so we use separate
4470 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4471 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4472 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4473 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4475 # Don't pass -finstrument-for-thread-suspension in,
4476 # if these are instrumented it will be very bad news
4477 # (infinite recursion, undefined parking behavior, etc)
4478 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4479 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\""
4480 if test "x$support_boehm" = "xyes"; then
4481 AC_CONFIG_SUBDIRS(libgc)
4487 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4488 if test x$with_malloc_mempools = xyes; then
4490 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4495 DISABLE_MCS_DOCS=default
4496 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4497 if test x$with_mcs_docs != xyes; then
4498 DISABLE_MCS_DOCS=yes
4501 if test -n "$INSTALL_4_x_TRUE"; then :
4502 DISABLE_MCS_DOCS=yes
4504 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4505 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4508 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)],[
4509 if test x$with_lazy_gc_thread_creation != xno ; then
4510 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4512 ], [with_lazy_gc_thread_creation=no])
4514 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])
4516 if test x$with_cooperative_gc = xdefault; then
4517 with_cooperative_gc=$with_cooperative_gc_default
4520 if test x$with_cooperative_gc != xno; then
4521 AC_DEFINE(USE_COOP_GC,1,[Enable cooperative stop-the-world garbage collection.])
4524 AM_CONDITIONAL([ENABLE_COOP], [test x$with_cooperative_gc != xno])
4526 AC_ARG_WITH(hybrid_suspend, [ --with-hybrid-suspend=yes|no Enable hybrid cooperative stop-the-world garbage collection (sgen only) - cooperative suspend for threads running managed and native code, and preemptive suspend for threads running native and P/Invoke code (defaults to no)], [
4527 if test x$with_hybrid_suspend != xno ; then
4528 AC_DEFINE(USE_HYBRID_SUSPEND,1,[Enable hybrid cooperative suspend for GC stop-the-world])
4530 if test x$with_cooperative_gc != xyes ; then
4531 AC_MSG_ERROR([Hybrid suspend requires --with-cooperative-gc=yes])
4533 ], [with_hybrid_suspend=no])
4535 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],[
4537 if test x$enable_checked_build != x ; then
4538 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4540 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4541 eval "mono_checked_build_test_enable_$feature='yes'"
4544 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4545 eval "mono_checked_build_test_enable_gc='yes'"
4546 eval "mono_checked_build_test_enable_metadata='yes'"
4547 eval "mono_checked_build_test_enable_thread='yes'"
4548 eval "mono_checked_build_test_enable_private_types='yes'"
4551 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4552 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4555 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4556 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4559 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4560 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4563 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4564 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4568 AC_CHECK_HEADER([malloc.h],
4569 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
4570 [Define to 1 if you have /usr/include/malloc.h.])],,)
4572 if test x"$GCC" = xyes; then
4573 # Implicit function declarations are not 64 bit safe
4574 # Do this late, since this causes lots of configure tests to fail
4575 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4576 # jay has a lot of implicit declarations
4577 JAY_CFLAGS="-Wno-implicit-function-declaration"
4580 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4581 # instead of libmono-static.a
4582 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4583 LIBMONO_LA=libmini-static.la
4585 if test x$buildsgen = xyes; then
4586 LIBMONO_LA=libmonosgen-$API_VER.la
4588 LIBMONO_LA=libmonoboehm-$API_VER.la
4591 AC_SUBST(LIBMONO_LA)
4597 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4598 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
4599 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
4601 if test "x$enable_btls" = "xno"; then
4605 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
4608 if test "x$enable_btls" = "xyes"; then
4609 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4610 if test "x$CMAKE" = "xno"; then
4611 AC_MSG_ERROR("cmake not found")
4614 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4621 case "$BTLS_PLATFORM" in
4627 btls_cflags="$btls_cflags -arch i386"
4638 btls_cflags="-DOPENSSL_NO_ASM=1"
4650 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
4651 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
4655 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4658 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4661 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4664 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4667 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4670 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4673 AC_MSG_ERROR(Invalid BTLS platform)
4676 if test "x$platform_android" = "xyes"; then
4678 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4679 if test "x$with_btls_android_ndk" != "x"; then
4680 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4682 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4686 if test "x$btls_arch" != "x"; then
4687 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4690 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4692 AC_SUBST(BTLS_CFLAGS)
4693 AC_SUBST(BTLS_PLATFORM)
4694 AC_SUBST(BTLS_CMAKE_ARGS)
4696 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4701 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4703 if test x$DISABLE_MCS_DOCS = xyes; then
4710 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
4711 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4712 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4714 libmono_ldflags="$libmono_ldflags $LIBS"
4716 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4717 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4718 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4719 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4720 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4721 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4722 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4723 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4724 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4725 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4726 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4727 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4728 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4729 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4730 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4731 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4732 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4733 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4735 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4745 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4746 AC_SUBST(arch_target)
4751 #This must always be defined when building the runtime
4752 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4754 mono_build_root=`pwd`
4755 AC_SUBST(mono_build_root)
4757 mono_runtime=mono/mini/mono
4758 AC_SUBST(mono_runtime)
4760 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.7.0/tools/csc.exe
4762 if test $csc_compiler = mcs; then
4763 CSC=$mcs_topdir/class/lib/build/mcs.exe
4768 mono_cfg_root=$mono_build_root/runtime
4769 if test x$host_win32 = xyes; then
4770 if test "x$cross_compiling" = "xno"; then
4771 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4772 CSC=`cygpath -m -a $CSC`
4773 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4775 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4778 mono_cfg_dir=$mono_cfg_root/etc
4780 AC_SUBST(mono_cfg_dir)
4784 AC_CONFIG_FILES([po/mcs/Makefile.in])
4786 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4787 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4789 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4792 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4794 *) reldir=$depth/$srcdir ;;
4796 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4797 cd runtime/etc/mono/1.0
4798 rm -f machine.config
4799 $LN_S $reldir/data/net_1_1/machine.config machine.config
4803 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4806 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4808 *) reldir=$depth/$srcdir ;;
4810 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4811 cd runtime/etc/mono/2.0
4812 rm -f machine.config
4813 $LN_S $reldir/data/net_2_0/machine.config machine.config
4817 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4820 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4822 *) reldir=$depth/$srcdir ;;
4824 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4825 cd runtime/etc/mono/2.0
4827 $LN_S $reldir/data/net_2_0/web.config web.config
4831 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4834 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4836 *) reldir=$depth/$srcdir ;;
4838 $ac_aux_dir/install-sh -d runtime/etc/mono/
4839 cd runtime/etc/mono/
4841 $LN_S $reldir/data/browscap.ini browscap.ini
4845 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4846 [ depth=../../../../..
4848 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4850 *) reldir=$depth/$srcdir ;;
4852 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4853 cd runtime/etc/mono/2.0/Browsers
4854 rm -f Compat.browser
4855 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4859 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4860 [ depth=../../../../..
4862 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4864 *) reldir=$depth/$srcdir ;;
4866 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4867 cd runtime/etc/mono/4.0/Browsers
4868 rm -f Compat.browser
4869 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4873 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4874 [ depth=../../../../..
4876 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4878 *) reldir=$depth/$srcdir ;;
4880 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4881 cd runtime/etc/mono/4.5/Browsers
4882 rm -f Compat.browser
4883 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4887 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4890 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4892 *) reldir=$depth/$srcdir ;;
4894 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4895 cd runtime/etc/mono/4.0
4896 rm -f machine.config
4897 $LN_S $reldir/data/net_4_0/machine.config machine.config
4901 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4904 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4906 *) reldir=$depth/$srcdir ;;
4908 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4909 cd runtime/etc/mono/4.0
4911 $LN_S $reldir/data/net_4_0/web.config web.config
4915 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
4918 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4920 *) reldir=$depth/$srcdir ;;
4922 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4923 cd runtime/etc/mono/4.5
4924 rm -f machine.config
4925 $LN_S $reldir/data/net_4_5/machine.config machine.config
4929 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
4932 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4934 *) reldir=$depth/$srcdir ;;
4936 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4937 cd runtime/etc/mono/4.5
4939 $LN_S $reldir/data/net_4_5/web.config web.config
4943 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])
4944 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])
4949 acceptance-tests/Makefile
4951 scripts/mono-find-provides
4952 scripts/mono-find-requires
4956 mono/utils/jemalloc/Makefile
4957 mono/metadata/Makefile
4961 mono/arch/x86/Makefile
4962 mono/arch/amd64/Makefile
4963 mono/arch/ppc/Makefile
4964 mono/arch/sparc/Makefile
4965 mono/arch/s390x/Makefile
4966 mono/arch/arm/Makefile
4967 mono/arch/arm64/Makefile
4968 mono/arch/mips/Makefile
4971 mono/tests/tests-config
4972 mono/tests/gc-descriptors/Makefile
4973 mono/tests/testing_gac/Makefile
4974 mono/unit-tests/Makefile
4975 mono/benchmark/Makefile
4977 mono/profiler/Makefile
4979 mono/eglib/eglib-config.h
4981 ikvm-native/Makefile
4986 data/net_2_0/Makefile
4987 data/net_4_0/Makefile
4988 data/net_4_5/Makefile
4989 data/net_2_0/Browsers/Makefile
4990 data/net_4_0/Browsers/Makefile
4991 data/net_4_5/Browsers/Makefile
4998 data/mono-options.pc
4999 data/mono-lineeditor.pc
5005 data/system.web.extensions_1.0.pc
5006 data/system.web.extensions.design_1.0.pc
5007 data/system.web.mvc.pc
5008 data/system.web.mvc2.pc
5009 data/system.web.mvc3.pc
5010 data/aspnetwebstack.pc
5016 tools/locale-builder/Makefile
5018 tools/monograph/Makefile
5019 tools/pedump/Makefile
5025 # Update all submodules recursively to ensure everything is checked out
5026 $srcdir/scripts/update_submodules.sh
5028 if test x$host_win32 = xyes; then
5029 # Get rid of 'cyg' prefixes in library names
5030 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5031 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5032 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5033 # executable doesn't work...
5034 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5037 if test x$host_darwin = xyes; then
5038 # This doesn't seem to be required and it slows down parallel builds
5039 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5044 NONE) prefix=$ac_default_prefix ;;
5046 case $exec_prefix in
5047 NONE) exec_prefix='${prefix}' ;;
5051 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
5052 # any existing config.make. This allows people to share the same source tree
5053 # with different build directories, one native and one cross
5055 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5057 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5059 echo "prefix=$prefix" > $mcs_topdir/build/config.make
5060 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5061 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5062 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5063 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5064 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5065 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5066 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5067 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5070 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5071 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5074 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5077 [myver=$($AWK 'BEGIN {
5078 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5079 if(length(vsplit [1]) > 4) {
5080 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5082 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5085 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5086 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5088 if test x$host_darwin = xyes; then
5089 echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
5090 echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
5091 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
5092 elif test x$host_win32 = xyes; then
5093 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5094 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5095 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
5097 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5098 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5099 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5102 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5103 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5106 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5107 enable_system_aot=yes
5110 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5111 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5114 if test x$DISABLE_MCS_DOCS = xyes; then
5115 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5118 if test x$has_extension_module != xno; then
5119 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5122 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5124 if test "x$test_bcl_opt" = "xyes"; then
5125 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5128 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5130 if test $csc_compiler = mcs; then
5131 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5134 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5135 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5136 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5137 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5140 if test "x$AOT_MODE" != "x" ; then
5141 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5144 if test "x$enable_btls" = "xyes"; then
5145 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5152 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5154 btls_platform_string=
5155 if test x$enable_btls = xyes; then
5156 if test x$btls_android = xyes; then
5157 btls_platform_string=" (android:$BTLS_PLATFORM)"
5159 btls_platform_string=" ($BTLS_PLATFORM)"
5165 C# Compiler: $csc_compiler
5172 SIGALTSTACK: $with_sigaltstack
5174 BigArrays: $enable_big_arrays
5175 DTrace: $enable_dtrace
5176 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5177 Spectre: $spectre_mitigation_status
5180 .NET 4.x: $with_profile4_x
5181 Xamarin.Android: $with_monodroid
5182 Xamarin.iOS: $with_monotouch
5183 Xamarin.WatchOS: $with_monotouch_watch
5184 Xamarin.TVOS: $with_monotouch_tv
5185 Xamarin.Mac: $with_xammac
5186 Windows AOT: $with_winaot
5188 Unreal: $with_unreal
5189 WebAssembly: $with_wasm
5190 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5191 JNI support: $jdk_headers_found
5192 libgdiplus: $libgdiplus_msg
5194 BTLS: $enable_btls$btls_platform_string
5195 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5198 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5199 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)