1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.13.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
524 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)
525 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)
526 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
527 [], [], [#include <stddef.h>
528 #include <sys/socket.h>
529 #include <linux/socket.h>])
531 AC_CHECK_HEADERS(sys/user.h, [], [],
533 #ifdef HAVE_SYS_PARAM_H
534 # include <sys/param.h>
538 AC_CHECK_HEADERS(linux/serial.h)
540 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
541 if test x$have_zlib = xyes; then
542 AC_TRY_COMPILE([#include <zlib.h>], [
543 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
545 #error No good zlib found
548 AC_MSG_RESULT(Using system zlib)
549 zlib_msg="system zlib"
550 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
552 AC_MSG_RESULT(Using embedded zlib)
554 zlib_msg="bundled zlib"
558 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
559 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
561 # for mono/metadata/debug-symfile.c
562 AC_CHECK_HEADERS(elf.h)
565 AC_CHECK_HEADERS(poll.h)
566 AC_CHECK_HEADERS(sys/poll.h)
567 AC_CHECK_HEADERS(sys/wait.h)
568 AC_CHECK_HEADERS(grp.h)
569 AC_CHECK_HEADERS(syslog.h)
570 AC_CHECK_FUNCS(vsyslog)
573 AC_CHECK_HEADERS(wchar.h)
574 AC_CHECK_HEADERS(ieeefp.h)
575 AC_MSG_CHECKING(for isinf)
576 AC_TRY_LINK([#include <math.h>], [
580 AC_DEFINE(HAVE_ISINF, 1, [isinf available])
582 # We'll have to use signals
586 AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
587 AC_TRY_LINK([#include <math.h>],
589 AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
592 # for Linux statfs support
593 AC_CHECK_HEADERS(linux/magic.h)
595 # For Android NDK unified headers
596 if test x$platform_android = xyes; then
597 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
598 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
600 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
601 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
602 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
603 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
604 # doesn't contain the required definitions (NDK 14)
605 if test x$have_android_signal_inlines = xyes; then
606 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
608 AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
610 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
614 android_sigrtminmax_work=yes
617 android_sigrtminmax_work=no
621 if test x$android_sigrtminmax_work = xno; then
622 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
626 # Attempt to detect whether we're using Android NDK unified headers
627 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
628 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
630 android_unified_headers=no
631 if test x$have_android_api_level = xyes; then
632 if test x$have_android_versioning = xyes; then
633 AC_MSG_CHECKING([whether using Android NDK unified headers])
635 # Both macros are defined only in the NDK unified headers
638 #include <android/api-level.h>
639 #include <android/versioning.h>
641 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
643 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
647 android_unified_headers=yes
650 android_unified_headers=no
656 if test x$android_unified_headers = xyes; then
657 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
661 # not 64 bit clean in cross-compile
662 if test "x$enable_wasm" = "xyes"; then
663 AC_DEFINE(SIZEOF_VOID_P,4)
664 AC_DEFINE(SIZEOF_LONG,4)
665 ac_cv_sizeof_void_p="4"
666 ac_cv_sizeof_long="4"
668 AC_CHECK_SIZEOF(void *)
669 AC_CHECK_SIZEOF(long)
673 AC_CHECK_SIZEOF(long long)
675 AC_CACHE_CHECK([for clang],
688 AC_ARG_ENABLE(visibility-hidden,
689 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
690 disable_visibility_hidden=yes, disable_visibility_hidden=no)
693 if test x"$GCC" = xyes; then
694 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'
696 # We require C99 with some GNU extensions, e.g. `linux` macro
697 CFLAGS="$CFLAGS -std=gnu99"
699 # The runtime code does not respect ANSI C strict aliasing rules
700 CFLAGS="$CFLAGS -fno-strict-aliasing"
702 # We rely on signed overflow to behave
703 CFLAGS="$CFLAGS -fwrapv"
705 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
706 if test x"$disable_visibility_hidden" = xno; then
707 # Don't export any symbols by default
708 SHARED_CFLAGS="-fvisibility=hidden"
709 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
713 # Check for the normal version, since gcc ignores unknown -Wno options
714 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
715 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
719 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
725 if test "x$mono_cv_clang" = "xyes"; then
726 # https://bugzilla.samba.org/show_bug.cgi?id=8118
727 WARN="$WARN -Qunused-arguments"
728 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
729 # We rely on zero length arrays in structs
730 WARN="$WARN -Wno-zero-length-array"
733 # The Sun Forte compiler complains about inline functions that access static variables
734 # so disable all inlining.
737 CFLAGS="$CFLAGS -Dinline="
741 CFLAGS="$CFLAGS -g $WARN"
742 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
743 CPPFLAGS="$CPPFLAGS -g $WARN"
745 # Where's the 'mcs' source tree?
746 if test -d $srcdir/mcs; then
752 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
753 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
754 mcsdir=$with_mcs_path
758 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
761 # A sanity check to catch cases where the package was unpacked
762 # with an ancient tar program (Solaris)
764 AC_ARG_ENABLE(solaris-tar-check,
765 [ --disable-solaris-tar-check disable solaris tar check],
766 do_solaris_tar_check=no, do_solaris_tar_check=yes)
768 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
769 AC_MSG_CHECKING(integrity of package)
770 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
774 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"
775 AC_MSG_ERROR([$errorm])
779 if test "x$with_mcs_path" != "x"; then
780 mcs_topdir=$(cd "$mcsdir" && pwd)
781 mcs_topdir_from_srcdir=$mcs_topdir
783 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
784 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
787 # Convert mcs_topdir* paths to Windows syntax.
788 if test x$cross_compiling$host_win32 = xnoyes; then
789 mcs_topdir=$(cygpath -m $mcs_topdir)
790 case $mcs_topdir_from_srcdir in
792 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
797 AC_SUBST([mcs_topdir])
798 AC_SUBST([mcs_topdir_from_srcdir])
800 # gettext: prepare the translation directories.
801 # we do not configure the full gettext, as we consume it dynamically from C#
804 if test "x$USE_NLS" = "xyes"; then
805 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
807 if test "x$HAVE_MSGFMT" = "xno"; then
808 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
812 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
815 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
816 if test x$with_crosspkgdir = "x"; then
817 if test -s $PKG_CONFIG_PATH; then
818 pkg_config_path=$PKG_CONFIG_PATH
821 pkg_config_path=$with_crosspkgdir
822 PKG_CONFIG_PATH=$pkg_config_path
823 export PKG_CONFIG_PATH
827 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
828 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
829 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
831 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
832 if test x$werror_flag = xyes; then
833 WERROR_CFLAGS="-Werror"
835 AC_SUBST([WERROR_CFLAGS])
836 AC_SUBST([SHARED_CFLAGS])
838 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
839 GLIB_LIBS='$(top_builddir)/mono/eglib/libeglib.la -lm'
841 AC_SUBST(GLIB_CFLAGS)
844 # Enable support for fast thread-local storage
845 # Some systems have broken support, so we allow to disable it.
846 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
848 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
849 # This does not work on some platforms (bug #55253)
850 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
852 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
853 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
854 # Same as --with-shared_mono=no
855 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
857 if test "x$enable_static" = "xno"; then
861 if test "x$enable_shared" = "xno"; then
865 if test "x$enable_libraries" = "xno"; then
869 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
871 if test "x$host_win32" = "xyes"; then
872 # Boehm GC requires the runtime to be in its own dll
876 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
877 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
878 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
879 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
881 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
882 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
883 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
885 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
886 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
890 # Pass it to libgc as well
891 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
898 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
900 if test x$enable_small_config = xyes; then
901 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
902 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
905 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)
907 DISABLED_FEATURES=none
910 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
911 AC_MSG_CHECKING([CSharp compiler to use])
912 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
913 if test x$withval = xmcs; then
915 elif test x$withval = xroslyn; then
917 elif test x$withval = xdefault; then
920 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
922 ],[csc_compiler=default])
924 if test $csc_compiler = default; then
925 if test $endian = big; then
927 elif test $endian = little; then
929 powerpc*) csc_compiler=mcs ;;
930 *) csc_compiler=roslyn ;;
936 AC_MSG_RESULT($csc_compiler)
938 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
939 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
940 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])
943 if test x$target_win32 = xyes; then
945 with_jemalloc_assert=no
946 with_jemalloc_always=no
949 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
950 if test "x$with_jemalloc_assert" = "xyes"; then
951 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
952 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
953 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
956 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
957 if test "x$with_jemalloc_always" = "xyes"; then
959 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
960 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
961 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
964 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
965 if test "x$with_jemalloc" = "xyes"; then
966 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
967 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
968 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
970 if test "x$target_mach" = "xyes"; then
971 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
974 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
975 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
977 AC_SUBST(JEMALLOC_CFLAGS)
978 AC_SUBST(JEMALLOC_CPPFLAGS)
979 AC_SUBST(JEMALLOC_LDFLAGS)
980 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
984 # Set the build profiles and options before things which use them
987 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])
988 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
989 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
990 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])
991 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])
992 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
993 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
994 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])
995 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])
996 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
997 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
998 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
999 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1002 AC_ARG_WITH(runtime_preset, [ --with-runtime_preset=net_4_x,all,aot,hybridaot,fullaot,bitcode,unreal Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1003 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])
1004 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])
1005 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])
1008 dnl Spectre compiler mitigation flag checks
1010 if test "x$with_spectre_mitigation" = "xyes"; then
1011 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1013 SPECTRE_INDIRECT_BRANCH_KIND=
1014 case "x$with_spectre_indirect_branch_choice" in
1015 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1016 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1017 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1018 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1019 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1022 SPECTRE_FUNCTION_RETURN_KIND=""
1023 case "x$with_spectre_function_return_choice" in
1024 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1025 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1026 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1027 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1028 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1031 AX_CHECK_COMPILE_FLAG(
1032 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1033 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1036 AX_CHECK_COMPILE_FLAG(
1037 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1038 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1041 if test "x$SPECTRE_CFLAGS" != "x" ; then
1042 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1043 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1044 spectre_mitigation_status="mitigation enabled"
1047 spectre_mitigation_status="no mitigation"
1051 dnl Profile defaults
1053 TEST_PROFILE=default
1054 enable_llvm_default=no
1056 with_profile4_x_default=no
1057 with_monodroid_default=no
1058 with_monotouch_default=no
1059 with_monotouch_watch_default=no
1060 with_monotouch_tv_default=no
1061 with_xammac_default=no
1062 with_testing_aot_hybrid_default=no
1063 with_testing_aot_full_default=no
1064 with_winaot_default=no
1065 with_orbis_default=no
1066 with_unreal_default=no
1067 with_wasm_default=no
1069 with_bitcode_default=no
1070 with_cooperative_gc_default=no
1072 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=9000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1074 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1076 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1077 DISABLE_MCS_DOCS_default=yes
1078 elif test x$with_runtime_preset = xnet_4_x; then
1079 with_profile4_x_default=yes
1080 elif test x$with_runtime_preset = xall; then
1081 with_profile4_x_default=yes
1082 with_monodroid_default=yes
1083 with_monotouch_default=yes
1084 with_monotouch_watch_default=yes
1085 with_monotouch_tv_default=yes
1086 with_xammac_default=yes
1087 with_winaot_default=yes
1088 with_orbis_default=yes
1089 with_unreal_default=yes
1090 with_wasm_default=yes
1091 elif test x$with_runtime_preset = xfullaot; then
1092 DISABLE_MCS_DOCS_default=yes
1093 with_testing_aot_full_default=yes
1094 TEST_PROFILE=testing_aot_full
1096 mono_feature_disable_com='yes'
1097 mono_feature_disable_remoting='yes'
1098 mono_feature_disable_reflection_emit_save='yes'
1099 mono_feature_disable_reflection_emit='yes'
1100 mono_feature_disable_appdomains='yes'
1102 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1103 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1105 elif test x$with_runtime_preset = xbitcode; then
1106 DISABLE_MCS_DOCS_default=yes
1107 with_testing_aot_full_default=yes
1108 with_bitcode_default=yes
1109 with_cooperative_gc_default=yes
1110 TEST_PROFILE=testing_aot_full
1111 enable_llvm_default=yes
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 --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1120 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1122 elif test x$with_runtime_preset = xhybridaot; then
1123 DISABLE_MCS_DOCS_default=yes
1124 with_testing_aot_hybrid_default=yes
1125 TEST_PROFILE=testing_aot_hybrid
1127 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1128 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1129 elif test x$with_runtime_preset = xaot; then
1130 with_profile4_x_default=yes
1132 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1135 DISABLE_MCS_DOCS_default=yes
1136 elif test x$with_runtime_preset = xwinaot; then
1137 DISABLE_MCS_DOCS_default=yes
1138 with_winaot_default=yes
1141 mono_feature_disable_com='yes'
1142 mono_feature_disable_remoting='yes'
1143 mono_feature_disable_reflection_emit_save='yes'
1144 mono_feature_disable_reflection_emit='yes'
1145 mono_feature_disable_appdomains='yes'
1147 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1148 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1150 elif test x$with_runtime_preset = xorbis; then
1151 DISABLE_MCS_DOCS_default=yes
1152 with_orbis_default=yes
1155 mono_feature_disable_com='yes'
1156 mono_feature_disable_remoting='yes'
1157 mono_feature_disable_reflection_emit_save='yes'
1158 mono_feature_disable_reflection_emit='yes'
1159 mono_feature_disable_appdomains='yes'
1161 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1162 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1164 elif test x$with_runtime_preset = xunreal; then
1165 DISABLE_MCS_DOCS_default=yes
1166 with_unreal_default=yes
1169 mono_feature_disable_com='yes'
1170 mono_feature_disable_remoting='yes'
1171 mono_feature_disable_appdomains='no'
1173 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1174 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1175 elif test x$with_runtime_preset = xwasm; then
1176 DISABLE_MCS_DOCS_default=yes
1177 with_wasm_default=yes
1180 mono_feature_disable_com='yes'
1181 mono_feature_disable_remoting='yes'
1182 mono_feature_disable_reflection_emit_save='yes'
1183 mono_feature_disable_reflection_emit='yes'
1184 mono_feature_disable_appdomains='yes'
1186 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1187 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1189 with_profile4_x_default=yes
1192 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1193 AC_SUBST(AOT_BUILD_FLAGS)
1194 AC_SUBST(AOT_RUN_FLAGS)
1195 # For llvmonlycheck + fullaotcheck
1196 AC_SUBST(INVARIANT_AOT_OPTIONS)
1199 AC_SUBST(TEST_PROFILE)
1201 if test "x$with_profile4_x" = "xdefault"; then
1202 with_profile4_x=$with_profile4_x_default
1204 if test "x$with_monodroid" = "xdefault"; then
1205 with_monodroid=$with_monodroid_default
1207 if test "x$with_monotouch" = "xdefault"; then
1208 with_monotouch=$with_monotouch_default
1210 if test "x$with_monotouch_watch" = "xdefault"; then
1211 with_monotouch_watch=$with_monotouch_watch_default
1213 if test "x$with_monotouch_tv" = "xdefault"; then
1214 with_monotouch_tv=$with_monotouch_tv_default
1216 if test "x$with_bitcode" = "xdefault"; then
1217 with_bitcode=$with_bitcode_default
1219 if test "x$with_xammac" = "xdefault"; then
1220 with_xammac=$with_xammac_default
1222 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1223 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1225 if test "x$with_testing_aot_full" = "xdefault"; then
1226 with_testing_aot_full=$with_testing_aot_full_default
1228 if test "x$with_winaot" = "xdefault"; then
1229 with_winaot=$with_winaot_default
1231 if test "x$with_orbis" = "xdefault"; then
1232 with_orbis=$with_orbis_default
1234 if test "x$with_unreal" = "xdefault"; then
1235 with_unreal=$with_unreal_default
1237 if test "x$with_wasm" = "xdefault"; then
1238 with_wasm=$with_wasm_default
1242 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1243 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1244 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1245 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1246 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1247 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1248 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1249 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1250 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1251 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1252 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1253 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1254 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1255 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"])
1256 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1258 default_profile=net_4_x
1259 if test -z "$INSTALL_MONODROID_TRUE"; then :
1260 default_profile=monodroid
1262 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1263 default_profile=monotouch
1265 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1266 default_profile=xammac
1268 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1269 default_profile=testing_aot_hybrid
1271 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1272 default_profile=testing_aot_full
1274 if test -z "$INSTALL_WINAOT_TRUE"; then :
1275 default_profile=winaot
1277 if test -z "$INSTALL_ORBIS_TRUE"; then :
1278 default_profile=orbis
1280 if test -z "$INSTALL_UNREAL_TRUE"; then :
1281 default_profile=unreal
1283 if test -z "$INSTALL_WASM_TRUE"; then :
1284 default_profile=wasm
1286 if test -z "$INSTALL_4_x_TRUE"; then :
1287 default_profile=net_4_x
1289 DEFAULT_PROFILE=$default_profile
1290 AC_SUBST(DEFAULT_PROFILE)
1293 # End build profile configuration
1296 if test x$USE_NLS = xprofile_default; then
1298 AC_MSG_CHECKING([NLS used])
1300 # We make the default value for USE_NLS
1301 # "no" on OSX because it isn't available on most
1302 # default OSX installs. The most common configurations will
1303 # all disable it, so this saves us typing.
1304 if test x$host_darwin = xyes; then
1311 AC_MSG_RESULT([$USE_NLS])
1314 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1315 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1316 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1317 security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1319 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1320 eval "mono_feature_disable_$feature='yes'"
1322 DISABLED_FEATURES=$enable_minimal
1323 disabled="Disabled: $enable_minimal"
1326 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1328 if test "x$mono_feature_disable_aot" = "xyes"; then
1329 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1330 enable_system_aot=no
1331 AC_MSG_NOTICE([Disabled AOT compiler])
1334 if test "x$mono_feature_disable_profiler" = "xyes"; then
1335 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1336 AC_MSG_NOTICE([Disabled support for the profiler])
1338 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1340 if test "x$mono_feature_disable_decimal" = "xyes"; then
1341 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1342 AC_MSG_NOTICE([Disabled support for decimal])
1345 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1346 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1347 AC_MSG_NOTICE([Disabled support for P/Invoke])
1350 if test "x$mono_feature_disable_debug" = "xyes"; then
1351 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1352 AC_MSG_NOTICE([Disabled support for runtime debugging])
1355 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1356 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1357 mono_feature_disable_reflection_emit_save=yes
1358 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1361 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1362 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1363 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1366 if test "x$mono_feature_disable_large_code" = "xyes"; then
1367 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1368 AC_MSG_NOTICE([Disabled support for large assemblies])
1371 if test "x$mono_feature_disable_logging" = "xyes"; then
1372 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1373 AC_MSG_NOTICE([Disabled support for logging])
1376 if test "x$mono_feature_disable_com" = "xyes"; then
1377 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1378 AC_MSG_NOTICE([Disabled COM support])
1381 if test "x$mono_feature_disable_ssa" = "xyes"; then
1382 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1383 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1386 if test "x$mono_feature_disable_generics" = "xyes"; then
1387 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1388 AC_MSG_NOTICE([Disabled Generics Support])
1391 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1392 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1393 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1396 if test "x$mono_feature_disable_portability" = "xyes"; then
1397 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1398 AC_MSG_NOTICE([Disabled IO Portability layer])
1401 if test "x$mono_feature_disable_attach" = "xyes"; then
1402 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1403 AC_MSG_NOTICE([Disabled agent attach])
1406 if test "x$mono_feature_disable_verifier" = "xyes"; then
1407 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1408 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1411 if test "x$mono_feature_disable_jit" = "xyes"; then
1412 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1413 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1416 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1418 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1419 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1420 AC_MSG_NOTICE([Disabled the interpreter])
1423 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1425 if test "x$mono_feature_disable_simd" = "xyes"; then
1426 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1427 AC_MSG_NOTICE([Disabled SIMD support])
1430 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1431 AC_DEFINE(DISABLE_SOFT_DEBUG, 1, [Disable Soft Debugger Agent.])
1432 AC_MSG_NOTICE([Disabled Soft Debugger.])
1435 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1436 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1437 AC_MSG_NOTICE([Disabled Performance Counters.])
1439 if test "x$mono_feature_disable_normalization" = "xyes"; then
1440 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1441 AC_MSG_NOTICE([Disabled String normalization support.])
1444 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1445 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1446 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1447 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1450 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1451 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1452 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1455 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1456 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1457 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1460 if test "x$mono_feature_disable_remoting" = "xyes"; then
1461 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1462 AC_MSG_NOTICE([Disabled remoting])
1465 if test "x$mono_feature_disable_security" = "xyes"; then
1466 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1467 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1470 if test "x$mono_feature_disable_lldb" = "xyes"; then
1471 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1472 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1475 if test "x$mono_feature_disable_mdb" = "xyes"; then
1476 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1477 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1480 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1481 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1482 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1486 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1487 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1488 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1491 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1492 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1493 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1496 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1497 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1498 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1501 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1502 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1504 has_extension_module=no
1505 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1507 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1508 if test x$extension = xdefault ; then
1509 has_extension_module=yes;
1512 if test x$enable_extension_module = xyes; then
1513 has_extension_module=yes;
1517 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1519 if test x$has_extension_module != xno ; then
1520 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1521 AC_MSG_NOTICE([Enabling mono extension module.])
1525 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1527 AC_MSG_CHECKING(for visibility __attribute__)
1530 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1531 int main () { doit (); return 0; }
1534 have_visibility_hidden=yes
1537 have_visibility_hidden=no
1542 dnl Boehm GC configuration
1545 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1547 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1548 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1550 if test "x$support_boehm" = "xyes"; then
1552 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1553 if test x$enable_parallel_mark = xyes; then
1554 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1564 if test "x$support_boehm" = "xyes"; then
1568 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1569 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1570 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1572 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1574 if test x$target_win32 = xyes; then
1575 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1576 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1579 gc_msg="Included Boehm GC with typed GC"
1580 if test x$enable_parallel_mark = xyes; then
1581 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1582 gc_msg="$gc_msg and parallel mark"
1584 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1589 AC_MSG_WARN("External Boehm is no longer supported")
1593 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1597 AC_MSG_WARN("Compiling mono without GC.")
1598 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1599 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1603 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1607 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])
1608 if test "x$large_heap" = "xyes"; then
1609 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1612 AC_SUBST(LIBGC_CPPFLAGS)
1613 AC_SUBST(LIBGC_LIBS)
1614 AC_SUBST(LIBGC_STATIC_LIBS)
1616 AC_SUBST(BOEHM_DEFINES)
1619 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1622 dnl End of Boehm GC Configuration
1625 dnl *************************************
1626 dnl *** Checks for zero length arrays ***
1627 dnl *************************************
1628 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1636 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1639 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1642 dnl ***********************************
1643 dnl *** Checks for signals
1644 dnl ***********************************
1645 AC_CHECK_HEADERS(signal.h)
1646 AC_CHECK_FUNCS(sigaction)
1647 AC_CHECK_FUNCS(kill)
1648 AC_CHECK_FUNCS(signal)
1650 # signal() is declared inline in Android headers
1651 # so we need to workaround it by overriding the check.
1652 if test x$platform_android = xyes; then
1653 AC_DEFINE(HAVE_SIGNAL,1)
1656 if test x$host_win32 = xno; then
1658 dnl hires monotonic clock support
1659 AC_SEARCH_LIBS(clock_gettime, rt)
1660 AC_CHECK_FUNCS(clock_nanosleep)
1662 dnl dynamic loader support
1663 AC_CHECK_FUNC(dlopen, DL_LIB="",
1664 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1666 if test x$dl_support = xno; then
1667 AC_MSG_WARN([No dynamic loading support available])
1669 LIBS="$LIBS $DL_LIB"
1670 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1671 dnl from glib's configure.ac
1672 AC_CACHE_CHECK([for preceeding underscore in symbols],
1674 AC_TRY_RUN([#include <dlfcn.h>
1675 int mono_underscore_test (void) { return 42; }
1677 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1678 handle = dlopen ((void*)0, 0);
1680 f1 = dlsym (handle, "mono_underscore_test");
1681 f2 = dlsym (handle, "_mono_underscore_test");
1682 } return (!f2 || f1);
1684 [mono_cv_uscore=yes],
1685 [mono_cv_uscore=no],
1688 if test "x$mono_cv_uscore" = "xyes"; then
1689 MONO_DL_NEED_USCORE=1
1691 MONO_DL_NEED_USCORE=0
1693 AC_SUBST(MONO_DL_NEED_USCORE)
1694 AC_CHECK_FUNC(dlerror)
1697 dnl ******************************************************************
1698 dnl *** Checks for the IKVM JNI interface library ***
1699 dnl ******************************************************************
1700 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])
1703 if test x$with_ikvm_native = xyes; then
1704 ikvm_native_dir=ikvm-native
1705 jdk_headers_found="IKVM Native"
1708 AC_SUBST(ikvm_native_dir)
1710 AC_CHECK_HEADERS(execinfo.h)
1712 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1714 AC_CHECK_FUNCS(getgrgid_r)
1715 AC_CHECK_FUNCS(getgrnam_r)
1716 AC_CHECK_FUNCS(getresuid)
1717 AC_CHECK_FUNCS(setresuid)
1718 AC_CHECK_FUNCS(kqueue)
1719 AC_CHECK_FUNCS(backtrace_symbols)
1720 AC_CHECK_FUNCS(mkstemp)
1721 AC_CHECK_FUNCS(mmap)
1722 AC_CHECK_FUNCS(madvise)
1723 AC_CHECK_FUNCS(getrusage)
1724 AC_CHECK_FUNCS(getpriority)
1725 AC_CHECK_FUNCS(setpriority)
1726 AC_CHECK_FUNCS(dl_iterate_phdr)
1727 AC_CHECK_FUNCS(dladdr)
1728 AC_CHECK_FUNCS(sysconf)
1729 AC_CHECK_FUNCS(getrlimit)
1730 AC_CHECK_FUNCS(prctl)
1732 AC_CHECK_FUNCS(sched_getaffinity)
1733 AC_CHECK_FUNCS(sched_setaffinity)
1734 AC_CHECK_FUNCS(sched_getcpu)
1736 if test x$platform_android != xyes; then
1737 AC_CHECK_FUNCS(getpwnam_r)
1738 AC_CHECK_FUNCS(getpwuid_r)
1741 AC_FUNC_STRERROR_R()
1743 dnl ****************************************************************
1744 dnl *** Check for sched_setaffinity from glibc versions before ***
1745 dnl *** 2.3.4. The older versions of the function only take 2 ***
1746 dnl *** parameters, not 3. ***
1748 dnl *** Because the interface change was not made in a minor ***
1749 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1750 dnl *** won't always indicate the interface sched_affinity has. ***
1751 dnl ****************************************************************
1752 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1753 AC_TRY_COMPILE([#include <sched.h>], [
1755 sched_setaffinity(0, &mask);
1757 # Yes, we have it...
1759 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1761 # We have the new, three-parameter version
1764 AC_TRY_COMPILE([#include <sched.h>], [
1765 CPU_COUNT((void *) 0);
1768 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1770 # We have the new, three-parameter version
1774 dnl ******************************************************************
1775 dnl *** Check for large file support ***
1776 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1777 dnl ******************************************************************
1779 # Check that off_t can represent 2**63 - 1 correctly, working around
1780 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1781 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1783 AC_DEFUN([LARGE_FILES], [
1784 large_CPPFLAGS=$CPPFLAGS
1785 CPPFLAGS="$CPPFLAGS $1"
1787 #include <sys/types.h>
1790 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1791 #define COMPILE_TIME_ASSERT(pred) \
1792 switch(0){case 0:case pred:;}
1793 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1796 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1797 large_CPPFLAGS="$large_CPPFLAGS $1"
1802 CPPFLAGS=$large_CPPFLAGS
1805 AC_MSG_CHECKING(if off_t is 64 bits wide)
1807 if test $large_offt = no; then
1808 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1809 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1811 if test $large_offt = no; then
1812 AC_MSG_WARN([No 64 bit file size support available])
1815 dnl *****************************
1816 dnl *** Checks for libsocket ***
1817 dnl *****************************
1818 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1822 dnl *****************************
1823 dnl *** Checks for libinotify ***
1824 dnl *****************************
1825 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1828 dnl *******************************
1829 dnl *** Checks for MSG_NOSIGNAL ***
1830 dnl *******************************
1831 AC_MSG_CHECKING(for MSG_NOSIGNAL)
1832 AC_TRY_COMPILE([#include <sys/socket.h>], [
1833 int f = MSG_NOSIGNAL;
1835 # Yes, we have it...
1837 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1839 # We'll have to use signals
1843 dnl *****************************
1844 dnl *** Checks for IPPROTO_IP ***
1845 dnl *****************************
1846 AC_MSG_CHECKING(for IPPROTO_IP)
1847 AC_TRY_COMPILE([#include <netinet/in.h>], [
1848 int level = IPPROTO_IP;
1850 # Yes, we have it...
1852 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1854 # We'll have to use getprotobyname
1858 dnl *******************************
1859 dnl *** Checks for IPPROTO_IPV6 ***
1860 dnl *******************************
1861 AC_MSG_CHECKING(for IPPROTO_IPV6)
1862 AC_TRY_COMPILE([#include <netinet/in.h>], [
1863 int level = IPPROTO_IPV6;
1865 # Yes, we have it...
1867 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1869 # We'll have to use getprotobyname
1873 dnl ******************************
1874 dnl *** Checks for IPPROTO_TCP ***
1875 dnl ******************************
1876 AC_MSG_CHECKING(for IPPROTO_TCP)
1877 AC_TRY_COMPILE([#include <netinet/in.h>], [
1878 int level = IPPROTO_TCP;
1880 # Yes, we have it...
1882 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1884 # We'll have to use getprotobyname
1888 dnl *****************************
1889 dnl *** Checks for SOL_IP ***
1890 dnl *****************************
1891 AC_MSG_CHECKING(for SOL_IP)
1892 AC_TRY_COMPILE([#include <netdb.h>], [
1895 # Yes, we have it...
1897 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
1899 # We'll have to use getprotobyname
1903 dnl *****************************
1904 dnl *** Checks for SOL_IPV6 ***
1905 dnl *****************************
1906 AC_MSG_CHECKING(for SOL_IPV6)
1907 AC_TRY_COMPILE([#include <netdb.h>], [
1908 int level = SOL_IPV6;
1910 # Yes, we have it...
1912 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
1914 # We'll have to use getprotobyname
1918 dnl *****************************
1919 dnl *** Checks for SOL_TCP ***
1920 dnl *****************************
1921 AC_MSG_CHECKING(for SOL_TCP)
1922 AC_TRY_COMPILE([#include <netdb.h>], [
1923 int level = SOL_TCP;
1925 # Yes, we have it...
1927 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
1929 # We'll have to use getprotobyname
1933 dnl *****************************
1934 dnl *** Checks for IP_PKTINFO ***
1935 dnl *****************************
1936 AC_MSG_CHECKING(for IP_PKTINFO)
1937 AC_TRY_COMPILE([#include <linux/in.h>], [
1938 int level = IP_PKTINFO;
1940 # Yes, we have it...
1942 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1947 dnl *****************************
1948 dnl *** Checks for IPV6_PKTINFO ***
1949 dnl *****************************
1950 AC_MSG_CHECKING(for IPV6_PKTINFO)
1951 AC_TRY_COMPILE([#include <netdb.h>], [
1952 int level = IPV6_PKTINFO;
1954 # Yes, we have it...
1956 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
1961 dnl **********************************
1962 dnl *** Checks for IP_DONTFRAG ***
1963 dnl **********************************
1964 AC_MSG_CHECKING(for IP_DONTFRAG)
1965 AC_TRY_COMPILE([#include <netinet/in.h>], [
1966 int level = IP_DONTFRAG;
1968 # Yes, we have it...
1970 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
1975 dnl **********************************
1976 dnl *** Checks for IP_DONTFRAGMENT ***
1977 dnl **********************************
1978 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
1979 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
1980 int level = IP_DONTFRAGMENT;
1982 # Yes, we have it...
1984 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
1989 dnl **********************************
1990 dnl *** Checks for IP_MTU_DISCOVER ***
1991 dnl **********************************
1992 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
1993 AC_TRY_COMPILE([#include <linux/in.h>], [
1994 int level = IP_MTU_DISCOVER;
1996 # Yes, we have it...
1998 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2003 dnl **********************************
2004 dnl *** Checks for IP_PMTUDISC_DO ***
2005 dnl **********************************
2006 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2007 AC_TRY_COMPILE([#include <linux/in.h>], [
2008 int level = IP_PMTUDISC_DO;
2010 # Yes, we have it...
2012 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2017 dnl *********************************
2018 dnl *** Check for struct ip_mreqn ***
2019 dnl *********************************
2020 AC_MSG_CHECKING(for struct ip_mreqn)
2021 AC_TRY_COMPILE([#include <netinet/in.h>], [
2022 struct ip_mreqn mreq;
2023 mreq.imr_address.s_addr = 0;
2025 # Yes, we have it...
2027 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2029 # We'll just have to try and use struct ip_mreq
2031 AC_MSG_CHECKING(for struct ip_mreq)
2032 AC_TRY_COMPILE([#include <netinet/in.h>], [
2033 struct ip_mreq mreq;
2034 mreq.imr_interface.s_addr = 0;
2036 # Yes, we have it...
2038 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2040 # No multicast support
2045 dnl **********************************
2046 dnl *** Check for getaddrinfo ***
2047 dnl **********************************
2048 AC_MSG_CHECKING(for getaddrinfo)
2053 getaddrinfo(NULL,NULL,NULL,NULL);
2055 # Yes, we have it...
2057 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2062 dnl **********************************
2063 dnl *** Check for gethostbyname2_r ***
2064 dnl **********************************
2065 AC_MSG_CHECKING(for gethostbyname2_r)
2071 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2073 # Yes, we have it...
2075 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2080 dnl **********************************
2081 dnl *** Check for gethostbyname2 ***
2082 dnl **********************************
2083 AC_MSG_CHECKING(for gethostbyname2)
2088 gethostbyname2(NULL,0);
2090 # Yes, we have it...
2092 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2097 dnl **********************************
2098 dnl *** Check for gethostbyname ***
2099 dnl **********************************
2100 AC_MSG_CHECKING(for gethostbyname)
2105 gethostbyname(NULL);
2107 # Yes, we have it...
2109 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2114 dnl **********************************
2115 dnl *** Check for getprotobyname ***
2116 dnl **********************************
2117 AC_MSG_CHECKING(for getprotobyname)
2122 getprotobyname(NULL);
2124 # Yes, we have it...
2126 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2131 dnl **********************************
2132 dnl *** Check for getnameinfo ***
2133 dnl **********************************
2134 AC_MSG_CHECKING(for getnameinfo)
2139 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2141 # Yes, we have it...
2143 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2149 dnl **********************************
2150 dnl *** Check for inet_ntop ***
2151 dnl **********************************
2152 AC_MSG_CHECKING(for inet_ntop)
2155 #include <arpa/inet.h>
2157 inet_ntop (0, NULL, NULL, 0);
2159 # Yes, we have it...
2161 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2166 dnl *****************************
2167 dnl *** Checks for libnsl ***
2168 dnl *****************************
2169 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2171 AC_CHECK_FUNCS(inet_pton inet_aton)
2173 dnl *****************************
2174 dnl *** Checks for libxnet ***
2175 dnl *****************************
2178 AC_MSG_CHECKING(for Solaris XPG4 support)
2179 if test -f /usr/lib/libxnet.so; then
2180 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2181 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2182 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2189 if test "$GCC" = "yes"; then
2190 CFLAGS="$CFLAGS -Wno-char-subscripts"
2195 dnl *****************************
2196 dnl *** Checks for libpthread ***
2197 dnl *****************************
2198 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2199 # and libpthread does not exist
2203 dnl Haiku has pthread in libroot (libc equiv)
2204 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2207 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2210 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2213 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2216 AC_CHECK_HEADERS(pthread.h)
2217 AC_CHECK_HEADERS(pthread_np.h)
2218 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2219 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2220 AC_CHECK_FUNCS(pthread_kill)
2221 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2222 AC_TRY_COMPILE([ #include <pthread.h>], [
2223 pthread_mutexattr_t attr;
2224 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2229 AC_ERROR(Posix system lacks support for recursive mutexes)
2231 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2232 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2233 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2235 dnl **********************************
2236 dnl *** Check for mincore ***
2237 dnl **********************************
2238 AC_MSG_CHECKING(for mincore)
2241 #include <sys/types.h>
2242 #include <sys/mman.h>
2244 mincore(NULL, 0, NULL);
2246 # Yes, we have it...
2248 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2253 dnl ***********************************
2254 dnl *** Checks for working __thread ***
2255 dnl ***********************************
2256 AC_MSG_CHECKING(for working __thread)
2257 if test "x$with_tls" != "x__thread"; then
2258 AC_MSG_RESULT(disabled)
2259 elif test "x$cross_compiling" = "xyes"; then
2260 AC_MSG_RESULT(cross compiling, assuming yes)
2263 #if defined(__APPLE__) && defined(__clang__)
2264 #error "__thread does not currently work with clang on Mac OS X"
2267 #include <pthread.h>
2269 static int res1, res2;
2271 void thread_main (void *arg)
2286 pthread_create (&t1, NULL, thread_main, 1);
2287 pthread_create (&t2, NULL, thread_main, 2);
2289 pthread_join (t1, NULL);
2290 pthread_join (t2, NULL);
2292 return !(res1 + res2 == 2);
2302 dnl **************************************
2303 dnl *** Checks for working sigaltstack ***
2304 dnl **************************************
2305 AC_MSG_CHECKING(for working sigaltstack)
2306 if test "x$with_sigaltstack" != "xyes"; then
2307 AC_MSG_RESULT(disabled)
2308 elif test "x$cross_compiling" = "xyes"; then
2309 AC_MSG_RESULT(cross compiling, assuming yes)
2316 #include <pthread.h>
2317 #include <sys/wait.h>
2318 #if defined(__FreeBSD__) || defined(__NetBSD__)
2319 #define SA_STACK SA_ONSTACK
2322 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2327 volatile char*__ptr = NULL;
2329 loop (void *ignored)
2338 struct sigaction sa;
2341 pthread_attr_t attr;
2343 sa.sa_sigaction = sigsegv_signal_handler;
2344 sigemptyset (&sa.sa_mask);
2345 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2346 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2347 perror ("sigaction");
2351 /* x86 darwin deliver segfaults using SIGBUS */
2352 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2353 perror ("sigaction");
2356 sas.ss_sp = malloc (SIGSTKSZ);
2357 sas.ss_size = SIGSTKSZ;
2359 if (sigaltstack (&sas, NULL) == -1) {
2360 perror ("sigaltstack");
2364 pthread_attr_init (&attr);
2365 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2366 printf ("pthread_create\n");
2390 for (i = 0; i < 300; ++i) {
2391 waitpid (son, &status, WNOHANG);
2392 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2397 kill (son, SIGKILL);
2403 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2410 dnl ********************************
2411 dnl *** Checks for semaphore lib ***
2412 dnl ********************************
2413 # 'Real Time' functions on Solaris
2414 # posix4 on Solaris 2.6
2415 # pthread (first!) on Linux
2416 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2418 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2419 AC_CHECK_FUNCS(shm_open)
2421 dnl ********************************
2422 dnl *** Checks for timezone stuff **
2423 dnl ********************************
2424 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2430 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2431 if test $ac_cv_struct_tm_gmtoff = yes; then
2432 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2434 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2439 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2440 if test $ac_cv_var_timezone = yes; then
2441 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2443 AC_ERROR(unable to find a way to determine timezone)
2447 dnl *********************************
2448 dnl *** Checks for math functions ***
2449 dnl *********************************
2450 AC_SEARCH_LIBS(sqrtf, m)
2451 if test "x$has_broken_apple_cpp" != "xyes"; then
2452 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2453 AC_TRY_LINK([#include <math.h>],
2455 AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2458 AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2459 AC_TRY_LINK([#include <math.h>],
2461 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2464 dnl ****************************************************************
2465 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2466 dnl *** have it in the library (duh)) ***
2467 dnl ****************************************************************
2468 AC_CHECK_FUNCS(poll)
2470 dnl *************************
2471 dnl *** Check for signbit ***
2472 dnl *************************
2473 AC_MSG_CHECKING(for signbit)
2474 AC_TRY_LINK([#include <math.h>], [
2475 int s = signbit(1.0);
2478 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2483 dnl **********************************
2485 dnl **********************************
2486 AC_CHECK_HEADERS(sys/epoll.h)
2488 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2489 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2490 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2495 AC_CHECK_HEADERS(sys/event.h)
2496 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2498 dnl **************************************
2499 dnl * Darwin has a race that prevents us from using reliably:
2500 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2501 dnl * Since kqueue is mostly used for scaling large web servers,
2502 dnl * and very few folks run Mono on large web servers on OSX, falling
2504 dnl **************************************
2505 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2506 if test "x$host_darwin" = "xno"; then
2507 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2511 dnl ******************************
2512 dnl *** Checks for SIOCGIFCONF ***
2513 dnl ******************************
2514 AC_CHECK_HEADERS(sys/ioctl.h)
2515 AC_CHECK_HEADERS(net/if.h, [], [],
2517 #ifdef HAVE_SYS_TYPES_H
2518 # include <sys/types.h>
2520 #ifdef HAVE_SYS_SOCKET_H
2521 # include <sys/socket.h>
2524 AC_MSG_CHECKING(for ifreq)
2527 #include <sys/ioctl.h>
2535 x = (void *) &ifr->ifr_addr;
2538 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2542 dnl **********************************
2543 dnl *** Checks for sin_len ***
2544 dnl **********************************
2545 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2547 #include <netinet/in.h>
2549 struct sockaddr_in saddr;
2550 saddr.sin_len = sizeof (saddr);
2553 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2557 dnl **********************************
2558 dnl *** Checks for sin6_len ***
2559 dnl **********************************
2560 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2562 #include <netinet/in.h>
2564 struct sockaddr_in6 saddr6;
2565 saddr6.sin6_len = sizeof (saddr6);
2568 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2572 dnl **********************************
2573 dnl *** Check for getifaddrs ***
2574 dnl **********************************
2575 AC_MSG_CHECKING(for getifaddrs)
2578 #include <sys/types.h>
2579 #include <sys/socket.h>
2580 #include <ifaddrs.h>
2584 # Yes, we have it...
2586 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2590 dnl **********************************
2591 dnl *** Check for if_nametoindex ***
2592 dnl **********************************
2593 AC_MSG_CHECKING(for if_nametoindex)
2596 #include <sys/types.h>
2597 #include <sys/socket.h>
2600 if_nametoindex(NULL);
2602 # Yes, we have it...
2604 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2609 dnl **********************************
2610 dnl *** Checks for proclib ***
2611 dnl **********************************
2612 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.)])
2613 dnl **********************************
2614 dnl *** Checks for MonoPosixHelper ***
2615 dnl **********************************
2616 AC_CHECK_HEADERS(checklist.h)
2617 AC_CHECK_HEADERS(pathconf.h)
2618 AC_CHECK_HEADERS(fstab.h)
2619 AC_CHECK_HEADERS(attr/xattr.h)
2620 AC_CHECK_HEADERS(sys/extattr.h)
2621 AC_CHECK_HEADERS(sys/sendfile.h)
2622 AC_CHECK_HEADERS(sys/statvfs.h)
2623 AC_CHECK_HEADERS(sys/statfs.h)
2624 AC_CHECK_HEADERS(sys/vfstab.h)
2625 AC_CHECK_HEADERS(sys/xattr.h)
2626 AC_CHECK_HEADERS(sys/mman.h)
2627 AC_CHECK_HEADERS(sys/param.h)
2628 AC_CHECK_HEADERS(sys/mount.h, [], [],
2630 #ifdef HAVE_SYS_PARAM_H
2631 # include <sys/param.h>
2634 AC_CHECK_HEADERS(sys/mount.h)
2635 AC_CHECK_FUNCS(confstr)
2636 AC_CHECK_FUNCS(seekdir telldir)
2637 AC_CHECK_FUNCS(getdomainname)
2638 AC_CHECK_FUNCS(setdomainname)
2639 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2640 AC_CHECK_FUNCS(setgroups)
2641 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2642 AC_CHECK_FUNCS(getfsstat)
2643 AC_CHECK_FUNCS(lutimes futimes)
2644 AC_CHECK_FUNCS(mremap)
2645 AC_CHECK_FUNCS(remap_file_pages)
2646 AC_CHECK_FUNCS(posix_fadvise)
2647 AC_CHECK_FUNCS(posix_fallocate)
2648 AC_CHECK_FUNCS(posix_madvise)
2649 AC_CHECK_FUNCS(vsnprintf)
2650 AC_CHECK_FUNCS(sendfile)
2651 AC_CHECK_FUNCS(gethostid sethostid)
2652 AC_CHECK_FUNCS(sethostname)
2653 AC_CHECK_FUNCS(statfs)
2654 AC_CHECK_FUNCS(fstatfs)
2655 AC_CHECK_FUNCS(statvfs)
2656 AC_CHECK_FUNCS(fstatvfs)
2657 AC_CHECK_FUNCS(stime)
2658 AC_CHECK_FUNCS(strerror_r)
2659 AC_CHECK_FUNCS(ttyname_r)
2660 AC_CHECK_FUNCS(psignal)
2661 AC_CHECK_FUNCS(getlogin_r)
2662 AC_CHECK_FUNCS(lockf)
2663 AC_CHECK_FUNCS(swab)
2664 AC_CHECK_FUNCS(setusershell endusershell)
2665 AC_CHECK_FUNCS(futimens utimensat)
2666 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2667 AC_CHECK_FUNCS(readv writev preadv pwritev)
2668 AC_CHECK_FUNCS(setpgid)
2669 AC_CHECK_FUNCS(system)
2670 AC_CHECK_FUNCS(fork execv execve)
2671 AC_CHECK_FUNCS(accept4)
2672 AC_CHECK_FUNCS(localtime_r)
2673 AC_CHECK_FUNCS(mkdtemp)
2674 AC_CHECK_SIZEOF(size_t)
2675 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2676 [#include <sys/types.h>
2677 #include <sys/stat.h>
2678 #include <unistd.h>])
2679 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2680 [#include <sys/types.h>
2681 #include <sys/stat.h>
2682 #include <unistd.h>])
2683 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2684 [#include <sys/time.h>])
2685 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2686 [#include <sys/socket.h>])
2687 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2688 [#include <unistd.h>
2689 #include <fcntl.h>])
2690 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2691 [#include <sys/uio.h>])
2692 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2693 [#include <sys/socket.h>])
2694 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2695 [#include <sys/poll.h>])
2696 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2697 [#include <sys/socket.h>])
2698 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2699 [#include <sys/socket.h>])
2700 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2701 [#include <netinet/in.h>])
2702 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2703 [#include <netinet/in.h>])
2704 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2705 [#include <sys/un.h>])
2706 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2707 [#include <sys/types.h>
2708 #include <sys/stat.h>
2709 #include <unistd.h>])
2710 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2711 [#include <time.h>])
2712 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2713 [#include <sys/time.h>
2714 #include <sys/types.h>
2715 #include <utime.h>])
2716 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2717 [#include <sys/time.h>])
2718 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2719 [#include <sys/types.h>
2720 #include <utime.h>])
2722 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2723 [#include <sys/types.h>
2724 #include <dirent.h>])
2726 [struct passwd.pw_gecos],,,
2727 [#include <sys/types.h>
2730 [struct statfs.f_flags],,,
2731 [#include <sys/types.h>
2732 #include <sys/vfs.h>])
2734 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2735 [#include <sys/types.h>
2736 #include <sys/stat.h>
2737 #include <unistd.h>])
2739 dnl Favour xattr through glibc, but use libattr if we have to
2740 AC_CHECK_FUNC(lsetxattr, ,
2741 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2745 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2747 [struct kinfo_proc.kp_proc],,,
2748 [#include <sys/types.h>
2749 #include <sys/param.h>
2750 #include <sys/sysctl.h>
2751 #include <sys/proc.h>
2754 dnl *********************************
2755 dnl *** Checks for Windows compilation ***
2756 dnl *********************************
2757 AC_CHECK_HEADERS(sys/time.h)
2758 AC_CHECK_HEADERS(sys/param.h)
2759 AC_CHECK_HEADERS(dirent.h)
2761 dnl ******************************************
2762 dnl *** Checks for OSX and iOS compilation ***
2763 dnl ******************************************
2764 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2766 dnl *********************************
2767 dnl *** Check for Console 2.0 I/O ***
2768 dnl *********************************
2769 AC_CHECK_HEADERS([curses.h])
2770 AC_CHECK_HEADERS([term.h], [], [],
2775 AC_CHECK_HEADERS([termios.h])
2777 dnl *********************************
2778 dnl *** Checks for random ***
2779 dnl *********************************
2780 if test x$host_darwin = xno; then
2781 AC_CHECK_HEADERS(sys/random.h)
2782 AC_CHECK_FUNCS(getrandom getentropy)
2785 dnl *********************************
2786 dnl *** Checks for Windows compilation ***
2787 dnl *********************************
2788 AC_CHECK_HEADERS(winternl.h)
2790 jdk_headers_found=no
2791 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
2792 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
2793 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
2794 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
2795 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
2796 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
2797 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
2799 dnl *********************************
2800 dnl *** Check for struct ip_mreqn ***
2801 dnl *********************************
2802 AC_MSG_CHECKING(for struct ip_mreqn)
2803 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2804 struct ip_mreqn mreq;
2805 mreq.imr_address.s_addr = 0;
2807 # Yes, we have it...
2809 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
2811 # We'll just have to try and use struct ip_mreq
2813 AC_MSG_CHECKING(for struct ip_mreq)
2814 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2815 struct ip_mreq mreq;
2816 mreq.imr_interface.s_addr = 0;
2818 # Yes, we have it...
2820 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
2822 # No multicast support
2827 dnl **********************************
2828 dnl *** Check for getaddrinfo ***
2829 dnl **********************************
2830 AC_MSG_CHECKING(for getaddrinfo)
2833 #include <winsock2.h>
2834 #include <ws2tcpip.h>
2836 getaddrinfo(NULL,NULL,NULL,NULL);
2838 # Yes, we have it...
2840 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2845 dnl **********************************
2846 dnl *** Check for gethostbyname ***
2847 dnl **********************************
2848 AC_MSG_CHECKING(for gethostbyname)
2851 #include <winsock2.h>
2852 #include <ws2tcpip.h>
2854 gethostbyname(NULL);
2856 # Yes, we have it...
2858 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2863 dnl **********************************
2864 dnl *** Check for getprotobyname ***
2865 dnl **********************************
2866 AC_MSG_CHECKING(for getprotobyname)
2869 #include <winsock2.h>
2870 #include <ws2tcpip.h>
2872 getprotobyname(NULL);
2874 # Yes, we have it...
2876 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2881 dnl **********************************
2882 dnl *** Check for getnameinfo ***
2883 dnl **********************************
2884 AC_MSG_CHECKING(for getnameinfo)
2887 #include <winsock2.h>
2888 #include <ws2tcpip.h>
2890 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2892 # Yes, we have it...
2894 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2899 dnl **********************************
2900 dnl *** Check for inet_ntop ***
2901 dnl **********************************
2902 AC_MSG_CHECKING(for inet_ntop)
2905 #include <winsock2.h>
2906 #include <ws2tcpip.h>
2908 inet_ntop (0, NULL, NULL, 0);
2910 # Yes, we have it...
2912 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2917 dnl **********************************
2918 dnl *** Check for inet_pton ***
2919 dnl **********************************
2920 AC_MSG_CHECKING(for inet_pton)
2923 #include <winsock2.h>
2924 #include <ws2tcpip.h>
2929 inet_pton (0, NULL, NULL);
2931 # Yes, we have it...
2933 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
2938 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
2939 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
2940 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
2941 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
2942 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
2943 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
2944 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
2948 AC_MSG_CHECKING(for socklen_t)
2950 #include <sys/types.h>
2951 #include <sys/socket.h>
2955 ac_cv_c_socklen_t=yes
2956 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
2962 AC_MSG_CHECKING(for array element initializer support)
2963 AC_TRY_COMPILE([#include <sys/socket.h>], [
2964 const int array[] = {[1] = 2,};
2966 # Yes, we have it...
2968 AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
2970 # We'll have to use signals
2974 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
2975 # Simply calling trunc (0.0) is no good since gcc will optimize the call away
2976 AC_TRY_LINK([#include <math.h>],
2977 [ static void *p = &trunc; ],
2979 AC_DEFINE(HAVE_TRUNC)
2985 if test "x$ac_cv_truncl" != "xyes"; then
2986 AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
2989 AC_CHECK_FUNCS(execvp)
2991 dnl ****************************
2992 dnl *** Look for /dev/random ***
2993 dnl ****************************
2995 AC_MSG_CHECKING([if usage of random device is requested])
2996 AC_ARG_ENABLE(dev-random,
2997 [ --disable-dev-random disable the use of the random device (enabled by default)],
2998 try_dev_random=$enableval, try_dev_random=yes)
3000 AC_MSG_RESULT($try_dev_random)
3004 dnl IBM i does not have /dev/random, use unblocking only
3007 NAME_DEV_RANDOM="/dev/urandom"
3010 dnl Win32 does not have /dev/random, they have their own method...
3012 *-mingw*|*-*-cygwin*)
3013 ac_cv_have_dev_random=no
3016 dnl Everywhere else, it's /dev/random
3019 NAME_DEV_RANDOM="/dev/random"
3023 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3025 dnl Now check if the device actually exists
3027 if test "x$try_dev_random" = "xyes"; then
3028 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3029 [if test -r "$NAME_DEV_RANDOM" ; then
3030 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3031 if test "x$ac_cv_have_dev_random" = "xyes"; then
3032 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3035 AC_MSG_CHECKING(for random device)
3036 ac_cv_have_dev_random=no
3037 AC_MSG_RESULT(has been disabled)
3040 if test "x$host_win32" = "xyes"; then
3041 AC_DEFINE(HAVE_CRYPT_RNG)
3044 if test "x$ac_cv_have_dev_random" = "xno" \
3045 && test "x$host_win32" = "xno"; then
3048 *** A system-provided entropy source was not found on this system.
3049 *** Because of this, the System.Security.Cryptography random number generator
3050 *** will throw a NotImplemented exception.
3052 *** If you are seeing this message, and you know your system DOES have an
3053 *** entropy collection in place, please report an issue on GitHub and
3054 *** provide information about the system and how to access the random device.
3056 *** Otherwise you can install either egd or prngd and set the environment
3057 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3061 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)
3063 AC_MSG_CHECKING([if big-arrays are to be enabled])
3064 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)
3065 if test "x$enable_big_arrays" = "xyes" ; then
3066 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3067 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3069 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3072 AC_MSG_RESULT($enable_big_arrays)
3078 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3080 if test "x$enable_dtrace" = "xyes"; then
3081 if test "x$has_dtrace" = "xno"; then
3082 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3084 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3085 if test "x$DTRACE" = "xno"; then
3086 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3088 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3089 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3095 if test "x$enable_dtrace" = "xyes"; then
3096 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3098 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3101 DTRACEFLAGS="-arch ppc64"
3104 DTRACEFLAGS="-arch x86_64"
3113 DTRACEFLAGS="-arch ppc"
3116 DTRACEFLAGS="-arch i386"
3123 AC_SUBST(DTRACEFLAGS)
3129 AC_CHECK_HEADERS([sys/sdt.h])
3131 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3132 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3134 dnl **************************
3135 dnl *** AOT cross offsets ***
3136 dnl **************************
3138 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3139 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3145 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3146 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3147 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)
3148 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3150 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3152 if test "x$enable_llvm" = "xdefault"; then
3153 enable_llvm=$enable_llvm_default
3156 if test "x$enable_llvm" = "xyes"; then
3157 if test "x$with_llvm" != "x"; then
3158 LLVM_CONFIG=$with_llvm/bin/llvm-config
3159 if test x$host_win32 = xyes; then
3160 LLVM_CONFIG=$LLVM_CONFIG.exe
3162 if test ! -x $LLVM_CONFIG; then
3163 AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3166 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3167 if test "x$LLVM_CONFIG" = "xno"; then
3168 AC_MSG_ERROR([llvm-config not found.])
3172 llvm_codegen="x86codegen"
3175 llvm_codegen="armcodegen"
3179 if test "x$host_win32" = "xno"; then
3181 # Should be something like '2.6' or '2.7svn'
3182 llvm_version=`$LLVM_CONFIG --version`
3183 llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3184 AC_MSG_CHECKING(LLVM version)
3185 AC_MSG_RESULT($llvm_version $llvm_api_version)
3186 if echo $llvm_version | grep -q 'mono'; then
3187 if test "x$enable_llvm_version_check" = "xyes"; then
3188 if test "$llvm_version" != "$expected_llvm_version"; then
3189 AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3193 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.])
3196 # The output of --cflags seems to include optimizations flags too
3197 if test $llvm_api_version -gt 100; then
3198 # The --cflags argument includes all kinds of warnings -pendantic etc.
3199 LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3200 LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3202 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'`
3203 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'`
3205 # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3206 # from LLVM classes.
3207 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3208 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3209 # This might include empty lines
3210 LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3211 llvm_jit_supported=yes
3212 llvm_jit_libs="jit mcjit $llvm_codegen"
3213 if test "x$host" != "x$target"; then
3214 # No need for jit libs
3215 llvm_jit_supported=no
3217 elif test $llvm_api_version -gt 100; then
3218 llvm_jit_libs="orcjit $llvm_codegen"
3220 LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3221 if test "x$LLVM_LIBS" = "x"; then
3222 echo "$LLVM_CONFIG --libs failed."
3225 LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3226 # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3227 if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3228 LLVM_LIBS="$LLVM_LIBS -lc++"
3230 LLVM_LIBS="$LLVM_LIBS -lstdc++"
3233 expected_llvm_version="3.4svn-mono-mono/e656cac"
3236 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"
3237 LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3238 LLVM_LDFLAGS="-L$with_llvm/lib"
3239 LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3240 LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3241 -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo \
3242 -lLLVMARMAsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler \
3243 -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc \
3244 -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT \
3245 -lLLVMAnalysis -lLLVMTarget \
3246 -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3247 -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3248 -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3249 -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3250 -lLLVMSupport -lstdc++"
3251 LLVM_LIBS="$LLVM_LIBS $LLVM_SYSTEM_LIBS"
3253 llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3254 llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3257 if test "x$llvm_api_version" = "x"; then
3258 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3259 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3261 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3262 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3265 AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3267 AC_SUBST(LLVM_CFLAGS)
3268 AC_SUBST(LLVM_CXXFLAGS)
3270 AC_SUBST(LLVM_LDFLAGS)
3271 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3274 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3275 if test "x$enable_loadedllvm" = "xyes"; then
3276 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3278 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3280 if test "x$enable_llvm" = "xyes"; then
3281 enable_llvm_runtime=yes
3283 if test "x$enable_llvm_runtime" = "xyes"; then
3284 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3286 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3289 ACCESS_UNALIGNED="yes"
3293 SQLITE="libsqlite.so.0"
3294 SQLITE3="libsqlite3.so.0"
3296 GDKX11="libgdk-x11-2.0.so.0"
3297 GTKX11="libgtk-x11-2.0.so.0"
3298 XINERAMA="libXinerama.so.1"
3300 sizeof_register="SIZEOF_VOID_P"
3303 boehm_supported=true
3307 if test "x$enable_wasm" = "xyes"; then
3311 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3312 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3324 ACCESS_UNALIGNED="no"
3326 AC_MSG_CHECKING(for mips n32)
3328 #if _MIPS_SIM != _ABIN32
3345 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3350 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3351 # int astruct __attribute__ ((visibility ("hidden")));
3354 # void *p = &astruct;
3356 # gcc -fPIC --shared -o libfoo.so foo.c
3358 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3359 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3360 have_visibility_hidden=no
3363 have_visibility_hidden=no
3372 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3379 openbsd*|freebsd*|kfreebsd-gnu*)
3386 x86_64-*-* | amd64-*-*)
3389 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3390 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3397 BTLS_PLATFORM=x86_64
3398 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3403 BTLS_PLATFORM=x86_64
3404 boehm_supported=false
3406 openbsd*|freebsd*|kfreebsd-gnu*)
3409 BTLS_PLATFORM=x86_64
3416 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3422 ACCESS_UNALIGNED="no"
3429 if test x"$GCC" = xyes; then
3430 # We don't support v8 cpus
3431 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3433 if test x"$AR" = xfalse; then
3434 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3437 *-mingw*|*-*-cygwin*)
3438 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3439 have_visibility_hidden=no
3442 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3443 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3444 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3445 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3447 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3448 CFLAGS="$CFLAGS -mminimal-toc"
3451 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3456 dnl on AIX/PASE, shared libraries can be inside archives
3457 dnl if they are, we specify them by lib.a(lib.so)
3458 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3459 LIBC="libc.a(shr_64.o)"
3460 INTL="libintl.a(libintl.so.9)"
3471 ACCESS_UNALIGNED="no"
3472 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3478 ACCESS_UNALIGNED="no"
3479 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3484 ACCESS_UNALIGNED="no"
3486 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3489 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3491 arm*-linux*-gnueabi)
3492 BTLS_PLATFORM=armsoft
3499 ACCESS_UNALIGNED="no"
3500 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3503 # https://lkml.org/lkml/2012/7/15/133
3506 boehm_supported=false
3509 BTLS_PLATFORM=aarch64
3510 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3515 ACCESS_UNALIGNED="yes"
3516 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
3522 if test "x$host" != "x$target"; then
3523 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
3525 enable_support_build=no
3531 ACCESS_UNALIGNED="no"
3532 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3533 # Can't use tls, since it depends on the runtime detection of tls offsets
3534 # in mono-compiler.h
3539 AC_DEFINE(TARGET_WATCHOS, 1, [...])
3543 powerpc64-ps3-linux-gnu)
3545 arch_target=powerpc64
3546 AC_DEFINE(TARGET_PS3, 1, [...])
3547 # It would be better to just use TARGET_POWERPC64, but lots of code already
3549 AC_DEFINE(__mono_ppc64__, 1, [...])
3550 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3552 target_byte_order=G_BIG_ENDIAN
3554 powerpc64-xbox360-linux-gnu)
3556 arch_target=powerpc64
3557 AC_DEFINE(TARGET_XBOX360, 1, [...])
3558 # It would be better to just use TARGET_POWERPC64, but lots of code already
3561 target_byte_order=G_BIG_ENDIAN
3566 AC_DEFINE(TARGET_ARM, 1, [...])
3567 ACCESS_UNALIGNED="no"
3568 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3569 # Can't use tls, since it depends on the runtime detection of tls offsets
3570 # in mono-compiler.h
3574 armv7l-unknown-linux-gnueabi*)
3576 CPPFLAGS="$CPPFLAGS"
3578 armv5-*-linux-androideabi*)
3579 AC_DEFINE(TARGET_ANDROID, 1, [...])
3580 CPPFLAGS="$CPPFLAGS"
3582 *-linux-androideabi*)
3583 AC_DEFINE(TARGET_ANDROID, 1, [...])
3584 CPPFLAGS="$CPPFLAGS"
3591 AC_DEFINE(TARGET_ARM, 1, [...])
3592 ACCESS_UNALIGNED="no"
3593 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3594 # Can't use tls, since it depends on the runtime detection of tls offsets
3595 # in mono-compiler.h
3602 AC_DEFINE(TARGET_X86, 1, [...])
3603 CPPFLAGS="$CPPFLAGS"
3604 # Can't use tls, since it depends on the runtime detection of tls offsets
3605 # in mono-compiler.h
3611 AC_DEFINE(TARGET_ANDROID, 1, [...])
3618 AC_DEFINE(TARGET_AMD64, 1, [...])
3619 CPPFLAGS="$CPPFLAGS"
3620 # Can't use tls, since it depends on the runtime detection of tls offsets
3621 # in mono-compiler.h
3627 AC_DEFINE(TARGET_ANDROID, 1, [...])
3634 AC_DEFINE(TARGET_AMD64, 1, [...])
3635 AC_DEFINE(TARGET_PS4, 1, [...])
3636 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
3637 CPPFLAGS="$CPPFLAGS"
3638 # Can't use tls, since it depends on the runtime detection of tls offsets
3639 # in mono-compiler.h
3647 AC_DEFINE(TARGET_ARM64, 1, [...])
3648 CPPFLAGS="$CPPFLAGS"
3649 # Can't use tls, since it depends on the runtime detection of tls offsets
3650 # in mono-compiler.h
3655 AC_DEFINE(TARGET_ANDROID, 1, [...])
3663 AC_MSG_ERROR([Cross compiling is not supported for target $target])
3669 AC_DEFINE(TARGET_X86, 1, [...])
3672 AC_DEFINE(TARGET_AMD64, 1, [...])
3675 AC_DEFINE(TARGET_ARM, 1, [...])
3678 AC_DEFINE(TARGET_ARM64, 1, [...])
3681 AC_DEFINE(TARGET_POWERPC, 1, [...])
3684 AC_DEFINE(TARGET_POWERPC, 1, [...])
3685 AC_DEFINE(TARGET_POWERPC64, 1, [...])
3688 AC_DEFINE(TARGET_S390X, 1, [...])
3691 AC_DEFINE(TARGET_MIPS, 1, [...])
3694 AC_DEFINE(TARGET_SPARC, 1, [...])
3697 AC_DEFINE(TARGET_SPARC64, 1, [...])
3703 AC_DEFINE(HOST_X86, 1, [...])
3706 AC_DEFINE(HOST_AMD64, 1, [...])
3709 AC_DEFINE(HOST_ARM, 1, [...])
3712 AC_DEFINE(HOST_ARM64, 1, [...])
3715 AC_DEFINE(HOST_POWERPC, 1, [...])
3718 AC_DEFINE(HOST_POWERPC, 1, [...])
3719 AC_DEFINE(HOST_POWERPC64, 1, [...])
3722 AC_DEFINE(HOST_S390X, 1, [...])
3725 AC_DEFINE(HOST_MIPS, 1, [...])
3728 AC_DEFINE(HOST_SPARC, 1, [...])
3731 AC_DEFINE(HOST_SPARC64, 1, [...])
3743 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
3744 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
3746 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
3748 if test "x$enable_vtune" = "xyes"; then
3749 if test "x$with_vtune" = "x"; then
3750 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
3752 VTUNE_PATH=$with_vtune
3754 VTUNE_INCLUDE=$VTUNE_PATH/include
3757 VTUNE_LIB=$VTUNE_PATH/lib32
3760 VTUNE_LIB=$VTUNE_PATH/lib64
3763 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
3766 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
3767 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
3769 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
3770 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
3773 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
3774 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
3776 AC_SUBST(VTUNE_LIBS)
3777 AC_SUBST(VTUNE_CFLAGS)
3779 dnl Use GCC atomic ops if they work on the target.
3780 if test x$GCC = "xyes"; then
3782 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
3783 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
3788 if test "x$target_mach" = "xyes"; then
3790 if test "x$TARGET_SYS" = "xWATCHOS"; then
3791 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
3792 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3793 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3795 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
3796 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3797 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3798 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3801 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
3802 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
3803 #error fail this for ios
3806 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
3807 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
3808 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
3811 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3812 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3813 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3818 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
3821 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
3823 if test "x$sizeof_register" = "x4"; then
3824 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
3825 elif test "x$sizeof_register" = "x8"; then
3826 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
3828 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
3831 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
3833 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
3834 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
3835 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
3836 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
3838 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
3841 if test "x$have_visibility_hidden" = "xyes"; then
3842 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
3845 if test "x$have_deprecated" = "xyes"; then
3846 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
3850 dnl Simple Generational checks (sgen)
3853 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
3854 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
3855 if test x$buildsgen = xyes; then
3856 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
3857 SGEN_DEFINES="-DHAVE_SGEN_GC"
3860 if test x$with_sgen_default_concurrent != xno; then
3861 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
3862 conc_gc_msg=" (concurrent by default)"
3865 if test "x$gc_msg" = "x"; then
3866 gc_msg="sgen$conc_gc_msg"
3868 gc_msg="sgen$conc_gc_msg and $gc_msg"
3871 AC_SUBST(SGEN_DEFINES)
3872 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
3874 jit_status="Building and using the JIT"
3882 INTL="libintl.dylib"
3883 SQLITE="libsqlite.0.dylib"
3884 SQLITE3="libsqlite3.0.dylib"
3886 GDKX11="libgdk-x11-2.0.dylib"
3887 GTKX11="libgtk-x11-2.0.dylib"
3892 SQLITE="libsqlite.so"
3893 SQLITE3="libsqlite3.so"
3903 SQLITE="libsqlite.so"
3904 SQLITE3="libsqlite3.so"
3909 SQLITE="libsqlite.so"
3910 SQLITE3="libsqlite3.so"
3914 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
3915 AC_MSG_CHECKING(for the soname of libX11.so)
3916 for i in $x_libraries $dlsearch_path; do
3918 if test -f $i/libX11.so.$r; then
3925 if test "x$X11" = "xlibX11.so"; then
3926 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
3934 ######################################
3936 ######################################
3940 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
3941 if test x$GCC = xyes; then
3942 GNUC_UNUSED='__attribute__((__unused__))'
3943 GNUC_NORETURN='__attribute__((__noreturn__))'
3945 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
3948 AC_SUBST(GNUC_PRETTY)
3949 AC_SUBST(GNUC_UNUSED)
3950 AC_SUBST(GNUC_NORETURN)
3951 AC_SUBST(BREAKPOINT)
3953 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
3956 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
3972 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
3977 arm*-darwin*|aarch64*-*)
3978 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
3981 ORDER=G_LITTLE_ENDIAN
3984 LDFLAGS="$LDFLAGS -ltextencoding"
3987 CFLAGS="$CFLAGS -pthread"
3988 LDFLAGS="$LDFLAGS -pthread"
3999 # Defined for all targets/platforms using classic Windows API support.
4000 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4001 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4003 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf strerror_r)
4004 AC_CHECK_FUNCS(getrlimit)
4005 AC_CHECK_FUNCS(fork execv execve)
4007 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4009 if test x$with_overridable_allocators = xyes; then
4010 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4011 AC_MSG_NOTICE([Overridable allocator support enabled])
4013 AC_MSG_NOTICE([Overridable allocator support disabled])
4017 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4018 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4019 # removed once support for 10.6 is dropped.
4021 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4023 if test x$target_osx = xyes; then
4024 AC_CHECK_FUNCS(getpwuid_r)
4025 elif test x$target_ios = xno; then
4026 AC_CHECK_FUNCS(strndup getpwuid_r)
4029 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4031 AC_SEARCH_LIBS(sqrtf, m)
4033 # nanosleep may not be part of libc, also search it in other libraries
4034 AC_SEARCH_LIBS(nanosleep, rt)
4036 AC_SEARCH_LIBS(dlopen, dl)
4037 old_ldflags="${LDFLAGS}"
4038 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4039 if test $lt_cv_prog_gnu_ld = yes; then
4040 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4043 *-*-aix*|*-*-os400*)
4046 dnl Try to use export-dynamic anyways
4047 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4051 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4052 if test $found_export_dynamic = no; then
4053 LDFLAGS="${old_ldflags}"
4056 AC_MSG_CHECKING(for varargs macros)
4058 int foo (int i, int j);
4059 #define bar(...) foo (1, __VA_ARGS__)
4063 ],have_iso_varargs=yes,have_iso_varargs=no)
4064 AC_MSG_RESULT($have_iso_varargs)
4065 G_HAVE_ISO_VARARGS=0
4066 if test "x$have_iso_varargs" = "xyes"; then
4067 G_HAVE_ISO_VARARGS=1
4069 AC_SUBST(G_HAVE_ISO_VARARGS)
4071 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)
4072 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4073 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4074 AC_SUBST(HAVE_ALLOCA_H)
4076 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
4077 GPOINTER_TO_INT="((gint) (ptr))"
4078 GPOINTER_TO_UINT="((guint) (ptr))"
4079 GINT_TO_POINTER="((gpointer) (v))"
4080 GUINT_TO_POINTER="((gpointer) (v))"
4083 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
4084 GPOINTER_TO_INT="((gint)(long) (ptr))"
4085 GPOINTER_TO_UINT="((guint)(long) (ptr))"
4086 GINT_TO_POINTER="((gpointer)(glong) (v))"
4087 GUINT_TO_POINTER="((gpointer)(gulong) (v))"
4090 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
4091 GPOINTER_TO_INT="((gint)(long long) (ptr))"
4092 GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
4093 GINT_TO_POINTER="((gpointer)(long long) (v))"
4094 GUINT_TO_POINTER="((gpointer)(unsigned long long) (v))"
4096 GSIZE_FORMAT='"I64u"'
4098 AC_MSG_ERROR([unsupported pointer size])
4101 AC_SUBST(GPOINTER_TO_INT)
4102 AC_SUBST(GPOINTER_TO_UINT)
4103 AC_SUBST(GINT_TO_POINTER)
4104 AC_SUBST(GUINT_TO_POINTER)
4106 AC_SUBST(GSIZE_FORMAT)
4107 AC_SUBST(G_GUINT64_FORMAT)
4108 AC_SUBST(G_GINT64_FORMAT)
4109 AC_SUBST(G_GUINT32_FORMAT)
4110 AC_SUBST(G_GINT32_FORMAT)
4113 # END OF EGLIB CHECKS
4116 AC_ARG_WITH([libgdiplus],
4117 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4118 [], [with_libgdiplus=installed])
4120 # default install location
4121 libgdiplus_install_loc=libgdiplus${libsuffix}
4124 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4128 case $with_libgdiplus in
4135 if test x$cross_compiling = xno; then
4136 if test x$host_darwin = xyes; then
4137 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4139 libgdiplus_install_loc=$a
4147 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4150 /*) # absolute path, assume it is an install location
4151 libgdiplus_loc=$with_libgdiplus
4152 libgdiplus_install_loc=$with_libgdiplus
4156 libgdiplus_loc=`pwd`/$with_libgdiplus
4159 AC_SUBST(libgdiplus_loc)
4160 AC_SUBST(libgdiplus_install_loc)
4162 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)
4163 if test "x$icall_symbol_map" = "xyes"; then
4164 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4167 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4168 if test "x$icall_export" = "xyes"; then
4169 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4172 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4173 if test "x$icall_tables" = "xno"; then
4174 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4177 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4179 if test "x$with_tls" = "x__thread"; then
4180 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4181 # Pass the information to libgc
4182 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4183 AC_MSG_CHECKING(if the tls_model attribute is supported)
4184 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4187 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4193 if test ${TARGET} = ARM; then
4194 dnl ******************************************
4195 dnl *** Check to see what FPU is available ***
4196 dnl ******************************************
4197 AC_MSG_CHECKING(which FPU to use)
4200 # This is a bit tricky:
4202 # if (__ARM_PCS_VFP) {
4203 # /* mfloat-abi=hard == VFP with hard ABI */
4204 # } elif (!__SOFTFP__) {
4205 # /* mfloat-abi=softfp == VFP with soft ABI */
4207 # /* mfloat-abi=soft == no VFP */
4210 # The exception is iOS (w/ GCC) where none of the above
4211 # are defined (but iOS always uses the 'softfp' ABI).
4213 # No support for FPA.
4218 # iOS GCC always uses the 'softfp' ABI.
4219 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4223 # Are we using the 'hard' ABI?
4224 if test x$fpu = xNONE; then
4225 AC_TRY_COMPILE([], [
4226 #ifndef __ARM_PCS_VFP
4227 #error "Float ABI is not 'hard'"
4236 # No 'hard' ABI. 'soft' or 'softfp'?
4237 if test x$fpu = xNONE; then
4238 AC_TRY_COMPILE([], [
4240 #error "Float ABI is not 'softfp'"
4249 if test x$arm_fpu != x; then
4254 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4257 dnl *********************************************
4258 dnl *** Check which ARM version(s) we can use ***
4259 dnl *********************************************
4260 AC_MSG_CHECKING(which ARM version to use)
4262 AC_TRY_COMPILE([], [
4263 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4264 #error Not on ARM v5.
4272 AC_TRY_COMPILE([], [
4273 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4274 #error Not on ARM v6.
4283 AC_TRY_COMPILE([], [
4284 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4285 #error Not on ARM v7.
4295 AC_MSG_RESULT($arm_ver)
4297 if test x$arm_v5 = xyes; then
4298 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4299 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4302 if test x$arm_v6 = xyes; then
4303 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4304 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4307 if test x$arm_v7 = xyes; then
4308 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4309 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4313 if test ${TARGET} = unknown; then
4314 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4315 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4318 if test "x$platform_android" = "xyes"; then
4319 case "x${TARGET}" in
4324 BTLS_PLATFORM=android-armv5
4328 BTLS_PLATFORM=android-armv6
4332 BTLS_PLATFORM=android-armv7
4341 BTLS_PLATFORM=android-v8a
4345 BTLS_PLATFORM=android-x86
4349 BTLS_PLATFORM=android-x64
4357 if test ${ACCESS_UNALIGNED} = no; then
4358 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4361 if test x$host_darwin = xyes; then
4362 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4364 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4365 [AC_MSG_RESULT([no])],
4367 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4369 RANLIB="$RANLIB -no_warning_for_no_symbols"
4370 AC_MSG_RESULT([yes])
4377 # Pass CPPFLAGS to libgc configure
4378 # We should use a separate variable for this to avoid passing useless and
4379 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4380 # This should be executed late so we pick up the final version of CPPFLAGS
4381 # The problem with this approach, is that during a reconfigure, the main
4382 # configure scripts gets invoked with these arguments, so we use separate
4383 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4384 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4385 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4386 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4388 # Don't pass -finstrument-for-thread-suspension in,
4389 # if these are instrumented it will be very bad news
4390 # (infinite recursion, undefined parking behavior, etc)
4391 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4392 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\""
4393 if test "x$support_boehm" = "xyes"; then
4394 AC_CONFIG_SUBDIRS(libgc)
4400 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4401 if test x$with_malloc_mempools = xyes; then
4403 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4408 DISABLE_MCS_DOCS=default
4409 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4410 if test x$with_mcs_docs != xyes; then
4411 DISABLE_MCS_DOCS=yes
4414 if test -n "$INSTALL_4_x_TRUE"; then :
4415 DISABLE_MCS_DOCS=yes
4417 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4418 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4421 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)],[
4422 if test x$with_lazy_gc_thread_creation != xno ; then
4423 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4425 ], [with_lazy_gc_thread_creation=no])
4427 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])
4429 if test x$with_cooperative_gc = xdefault; then
4430 with_cooperative_gc=$with_cooperative_gc_default
4433 if test x$with_cooperative_gc != xno; then
4434 AC_DEFINE(USE_COOP_GC,1,[Enable cooperative stop-the-world garbage collection.])
4437 AM_CONDITIONAL([ENABLE_COOP], [test x$with_cooperative_gc != xno])
4439 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],[
4441 if test x$enable_checked_build != x ; then
4442 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4444 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4445 eval "mono_checked_build_test_enable_$feature='yes'"
4448 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4449 eval "mono_checked_build_test_enable_gc='yes'"
4450 eval "mono_checked_build_test_enable_metadata='yes'"
4451 eval "mono_checked_build_test_enable_thread='yes'"
4452 eval "mono_checked_build_test_enable_private_types='yes'"
4455 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4456 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4459 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4460 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4463 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4464 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4467 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4468 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4472 AC_CHECK_HEADER([malloc.h],
4473 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
4474 [Define to 1 if you have /usr/include/malloc.h.])],,)
4476 if test x"$GCC" = xyes; then
4477 # Implicit function declarations are not 64 bit safe
4478 # Do this late, since this causes lots of configure tests to fail
4479 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4480 # jay has a lot of implicit declarations
4481 JAY_CFLAGS="-Wno-implicit-function-declaration"
4484 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4485 # instead of libmono-static.a
4486 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4487 LIBMONO_LA=libmini-static.la
4489 if test x$buildsgen = xyes; then
4490 LIBMONO_LA=libmonosgen-$API_VER.la
4492 LIBMONO_LA=libmonoboehm-$API_VER.la
4495 AC_SUBST(LIBMONO_LA)
4501 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4502 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
4504 AM_CONDITIONAL(BTLS, test x$enable_btls = xyes)
4507 if test "x$enable_btls" = "xyes"; then
4508 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4509 if test "x$CMAKE" = "xno"; then
4510 AC_MSG_ERROR("cmake not found")
4513 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4520 case "$BTLS_PLATFORM" in
4526 btls_cflags="$btls_cflags -arch i386"
4537 btls_cflags="-DOPENSSL_NO_ASM=1"
4543 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4546 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4549 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4552 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4555 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4558 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4561 AC_MSG_ERROR(Invalid BTLS platform)
4564 if test "x$platform_android" = "xyes"; then
4566 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4567 if test "x$with_btls_android_ndk" != "x"; then
4568 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4570 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4574 if test "x$btls_arch" != "x"; then
4575 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4578 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4580 AC_SUBST(BTLS_CFLAGS)
4581 AC_SUBST(BTLS_PLATFORM)
4582 AC_SUBST(BTLS_CMAKE_ARGS)
4584 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4589 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4591 if test x$DISABLE_MCS_DOCS = xyes; then
4598 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
4599 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4600 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4602 libmono_ldflags="$libmono_ldflags $LIBS"
4604 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4605 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4606 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4607 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4608 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4609 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4610 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4611 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4612 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4613 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4614 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4615 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4616 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4617 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4618 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4619 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4620 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4621 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4623 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4633 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4634 AC_SUBST(arch_target)
4639 #This must always be defined when building the runtime
4640 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4642 mono_build_root=`pwd`
4643 AC_SUBST(mono_build_root)
4645 mono_runtime=mono/mini/mono
4646 AC_SUBST(mono_runtime)
4648 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.6.0/tools/csc.exe
4650 if test $csc_compiler = mcs; then
4651 CSC=$mcs_topdir/class/lib/build/mcs.exe
4656 mono_cfg_root=$mono_build_root/runtime
4657 if test x$host_win32 = xyes; then
4658 if test "x$cross_compiling" = "xno"; then
4659 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4660 CSC=`cygpath -m -a $CSC`
4661 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4663 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4666 mono_cfg_dir=$mono_cfg_root/etc
4668 AC_SUBST(mono_cfg_dir)
4672 AC_CONFIG_FILES([po/mcs/Makefile.in])
4674 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4675 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4677 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4680 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4682 *) reldir=$depth/$srcdir ;;
4684 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4685 cd runtime/etc/mono/1.0
4686 rm -f machine.config
4687 $LN_S $reldir/data/net_1_1/machine.config machine.config
4691 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4694 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4696 *) reldir=$depth/$srcdir ;;
4698 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4699 cd runtime/etc/mono/2.0
4700 rm -f machine.config
4701 $LN_S $reldir/data/net_2_0/machine.config machine.config
4705 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4708 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4710 *) reldir=$depth/$srcdir ;;
4712 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4713 cd runtime/etc/mono/2.0
4715 $LN_S $reldir/data/net_2_0/web.config web.config
4719 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4722 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4724 *) reldir=$depth/$srcdir ;;
4726 $ac_aux_dir/install-sh -d runtime/etc/mono/
4727 cd runtime/etc/mono/
4729 $LN_S $reldir/data/browscap.ini browscap.ini
4733 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4734 [ depth=../../../../..
4736 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4738 *) reldir=$depth/$srcdir ;;
4740 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4741 cd runtime/etc/mono/2.0/Browsers
4742 rm -f Compat.browser
4743 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4747 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4748 [ depth=../../../../..
4750 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4752 *) reldir=$depth/$srcdir ;;
4754 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4755 cd runtime/etc/mono/4.0/Browsers
4756 rm -f Compat.browser
4757 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4761 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4762 [ depth=../../../../..
4764 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4766 *) reldir=$depth/$srcdir ;;
4768 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4769 cd runtime/etc/mono/4.5/Browsers
4770 rm -f Compat.browser
4771 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4775 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4778 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4780 *) reldir=$depth/$srcdir ;;
4782 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4783 cd runtime/etc/mono/4.0
4784 rm -f machine.config
4785 $LN_S $reldir/data/net_4_0/machine.config machine.config
4789 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4792 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4794 *) reldir=$depth/$srcdir ;;
4796 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4797 cd runtime/etc/mono/4.0
4799 $LN_S $reldir/data/net_4_0/web.config web.config
4803 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
4806 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4808 *) reldir=$depth/$srcdir ;;
4810 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4811 cd runtime/etc/mono/4.5
4812 rm -f machine.config
4813 $LN_S $reldir/data/net_4_5/machine.config machine.config
4817 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
4820 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4822 *) reldir=$depth/$srcdir ;;
4824 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4825 cd runtime/etc/mono/4.5
4827 $LN_S $reldir/data/net_4_5/web.config web.config
4831 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])
4832 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])
4837 acceptance-tests/Makefile
4839 scripts/mono-find-provides
4840 scripts/mono-find-requires
4844 mono/utils/jemalloc/Makefile
4845 mono/metadata/Makefile
4849 mono/arch/x86/Makefile
4850 mono/arch/amd64/Makefile
4851 mono/arch/ppc/Makefile
4852 mono/arch/sparc/Makefile
4853 mono/arch/s390x/Makefile
4854 mono/arch/arm/Makefile
4855 mono/arch/arm64/Makefile
4856 mono/arch/mips/Makefile
4859 mono/tests/tests-config
4860 mono/tests/gc-descriptors/Makefile
4861 mono/tests/testing_gac/Makefile
4862 mono/unit-tests/Makefile
4863 mono/benchmark/Makefile
4865 mono/profiler/Makefile
4867 mono/eglib/eglib-config.h
4869 ikvm-native/Makefile
4874 data/net_2_0/Makefile
4875 data/net_4_0/Makefile
4876 data/net_4_5/Makefile
4877 data/net_2_0/Browsers/Makefile
4878 data/net_4_0/Browsers/Makefile
4879 data/net_4_5/Browsers/Makefile
4886 data/mono-options.pc
4887 data/mono-lineeditor.pc
4893 data/system.web.extensions_1.0.pc
4894 data/system.web.extensions.design_1.0.pc
4895 data/system.web.mvc.pc
4896 data/system.web.mvc2.pc
4897 data/system.web.mvc3.pc
4898 data/aspnetwebstack.pc
4904 tools/locale-builder/Makefile
4906 tools/monograph/Makefile
4907 tools/pedump/Makefile
4913 # Update all submodules recursively to ensure everything is checked out
4914 $srcdir/scripts/update_submodules.sh
4916 if test x$host_win32 = xyes; then
4917 # Get rid of 'cyg' prefixes in library names
4918 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
4919 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
4920 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
4921 # executable doesn't work...
4922 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
4925 if test x$host_darwin = xyes; then
4926 # This doesn't seem to be required and it slows down parallel builds
4927 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
4932 NONE) prefix=$ac_default_prefix ;;
4934 case $exec_prefix in
4935 NONE) exec_prefix='${prefix}' ;;
4939 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
4940 # any existing config.make. This allows people to share the same source tree
4941 # with different build directories, one native and one cross
4943 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
4945 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
4947 echo "prefix=$prefix" > $mcs_topdir/build/config.make
4948 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
4949 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
4950 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
4951 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
4952 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
4953 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
4954 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
4955 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
4958 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
4959 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
4962 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
4965 [myver=$($AWK 'BEGIN {
4966 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
4967 if(length(vsplit [1]) > 4) {
4968 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
4970 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
4973 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
4974 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
4976 if test x$host_darwin = xyes; then
4977 echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
4978 elif test x$host_win32 = xyes; then
4979 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
4981 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
4984 if test x$host_darwin = xyes; then
4985 echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
4986 elif test x$host_win32 = xyes; then
4987 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
4989 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
4992 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
4993 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
4996 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
4997 enable_system_aot=yes
5000 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5001 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5004 if test x$DISABLE_MCS_DOCS = xyes; then
5005 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5008 if test x$has_extension_module != xno; then
5009 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5012 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5014 if test "x$test_bcl_opt" = "xyes"; then
5015 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5018 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5020 if test $csc_compiler = mcs; then
5021 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5024 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5025 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5026 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5027 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5030 if test "x$AOT_MODE" != "x" ; then
5031 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5034 if test "x$enable_btls" = "xyes"; then
5035 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5042 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5044 btls_platform_string=
5045 if test x$enable_btls = xyes; then
5046 if test x$btls_android = xyes; then
5047 btls_platform_string=" (android:$BTLS_PLATFORM)"
5049 btls_platform_string=" ($BTLS_PLATFORM)"
5055 C# Compiler: $csc_compiler
5062 SIGALTSTACK: $with_sigaltstack
5064 BigArrays: $enable_big_arrays
5065 DTrace: $enable_dtrace
5066 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5067 Spectre: $spectre_mitigation_status
5070 .NET 4.x: $with_profile4_x
5071 Xamarin.Android: $with_monodroid
5072 Xamarin.iOS: $with_monotouch
5073 Xamarin.WatchOS: $with_monotouch_watch
5074 Xamarin.TVOS: $with_monotouch_tv
5075 Xamarin.Mac: $with_xammac
5076 Windows AOT: $with_winaot
5078 Unreal: $with_unreal
5079 WebAssembly: $with_wasm
5080 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5081 JNI support: $jdk_headers_found
5082 libgdiplus: $libgdiplus_msg
5084 BTLS: $enable_btls$btls_platform_string
5085 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5088 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5089 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)