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 NAME_DEV_RANDOM="/dev/srandom"
3007 dnl IBM i does not have /dev/random, use unblocking only
3010 NAME_DEV_RANDOM="/dev/urandom"
3013 dnl Win32 does not have /dev/random, they have their own method...
3015 *-mingw*|*-*-cygwin*)
3016 ac_cv_have_dev_random=no
3019 dnl Everywhere else, it's /dev/random
3022 NAME_DEV_RANDOM="/dev/random"
3026 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3028 dnl Now check if the device actually exists
3030 if test "x$try_dev_random" = "xyes"; then
3031 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3032 [if test -r "$NAME_DEV_RANDOM" ; then
3033 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3034 if test "x$ac_cv_have_dev_random" = "xyes"; then
3035 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3038 AC_MSG_CHECKING(for random device)
3039 ac_cv_have_dev_random=no
3040 AC_MSG_RESULT(has been disabled)
3043 if test "x$host_win32" = "xyes"; then
3044 AC_DEFINE(HAVE_CRYPT_RNG)
3047 if test "x$ac_cv_have_dev_random" = "xno" \
3048 && test "x$host_win32" = "xno"; then
3051 *** A system-provided entropy source was not found on this system.
3052 *** Because of this, the System.Security.Cryptography random number generator
3053 *** will throw a NotImplemented exception.
3055 *** If you are seeing this message, and you know your system DOES have an
3056 *** entropy collection in place, please contact <crichton@gimp.org> and
3057 *** provide information about the system and how to access the random device.
3059 *** Otherwise you can install either egd or prngd and set the environment
3060 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3064 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)
3066 AC_MSG_CHECKING([if big-arrays are to be enabled])
3067 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)
3068 if test "x$enable_big_arrays" = "xyes" ; then
3069 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3070 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3072 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3075 AC_MSG_RESULT($enable_big_arrays)
3081 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3083 if test "x$enable_dtrace" = "xyes"; then
3084 if test "x$has_dtrace" = "xno"; then
3085 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3087 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3088 if test "x$DTRACE" = "xno"; then
3089 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3091 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3092 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3098 if test "x$enable_dtrace" = "xyes"; then
3099 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3101 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3104 DTRACEFLAGS="-arch ppc64"
3107 DTRACEFLAGS="-arch x86_64"
3116 DTRACEFLAGS="-arch ppc"
3119 DTRACEFLAGS="-arch i386"
3126 AC_SUBST(DTRACEFLAGS)
3132 AC_CHECK_HEADERS([sys/sdt.h])
3134 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3135 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3137 dnl **************************
3138 dnl *** AOT cross offsets ***
3139 dnl **************************
3141 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3142 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3148 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3149 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3150 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)
3151 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3153 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3155 if test "x$enable_llvm" = "xdefault"; then
3156 enable_llvm=$enable_llvm_default
3159 if test "x$enable_llvm" = "xyes"; then
3160 if test "x$with_llvm" != "x"; then
3161 LLVM_CONFIG=$with_llvm/bin/llvm-config
3162 if test x$host_win32 = xyes; then
3163 LLVM_CONFIG=$LLVM_CONFIG.exe
3165 if test ! -x $LLVM_CONFIG; then
3166 AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3169 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3170 if test "x$LLVM_CONFIG" = "xno"; then
3171 AC_MSG_ERROR([llvm-config not found.])
3175 llvm_codegen="x86codegen"
3178 llvm_codegen="armcodegen"
3182 if test "x$host_win32" = "xno"; then
3184 # Should be something like '2.6' or '2.7svn'
3185 llvm_version=`$LLVM_CONFIG --version`
3186 llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3187 AC_MSG_CHECKING(LLVM version)
3188 AC_MSG_RESULT($llvm_version $llvm_api_version)
3189 if echo $llvm_version | grep -q 'mono'; then
3190 if test "x$enable_llvm_version_check" = "xyes"; then
3191 if test "$llvm_version" != "$expected_llvm_version"; then
3192 AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3196 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.])
3199 # The output of --cflags seems to include optimizations flags too
3200 if test $llvm_api_version -gt 100; then
3201 # The --cflags argument includes all kinds of warnings -pendantic etc.
3202 LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3203 LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3205 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'`
3206 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'`
3208 # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3209 # from LLVM classes.
3210 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3211 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3212 # This might include empty lines
3213 LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3214 llvm_jit_supported=yes
3215 llvm_jit_libs="jit mcjit $llvm_codegen"
3216 if test "x$host" != "x$target"; then
3217 # No need for jit libs
3218 llvm_jit_supported=no
3220 elif test $llvm_api_version -gt 100; then
3221 llvm_jit_libs="orcjit $llvm_codegen"
3223 LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3224 if test "x$LLVM_LIBS" = "x"; then
3225 echo "$LLVM_CONFIG --libs failed."
3228 LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3229 # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3230 if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3231 LLVM_LIBS="$LLVM_LIBS -lc++"
3233 LLVM_LIBS="$LLVM_LIBS -lstdc++"
3236 expected_llvm_version="3.4svn-mono-mono/e656cac"
3239 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"
3240 LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3241 LLVM_LDFLAGS="-L$with_llvm/lib"
3242 LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3243 LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3244 -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo \
3245 -lLLVMARMAsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler \
3246 -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc \
3247 -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT \
3248 -lLLVMAnalysis -lLLVMTarget \
3249 -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3250 -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3251 -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3252 -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3253 -lLLVMSupport -lstdc++"
3254 LLVM_LIBS="$LLVM_LIBS $LLVM_SYSTEM_LIBS"
3256 llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3257 llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3260 if test "x$llvm_api_version" = "x"; then
3261 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3262 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3264 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3265 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3268 AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3270 AC_SUBST(LLVM_CFLAGS)
3271 AC_SUBST(LLVM_CXXFLAGS)
3273 AC_SUBST(LLVM_LDFLAGS)
3274 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3277 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3278 if test "x$enable_loadedllvm" = "xyes"; then
3279 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3281 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3283 if test "x$enable_llvm" = "xyes"; then
3284 enable_llvm_runtime=yes
3286 if test "x$enable_llvm_runtime" = "xyes"; then
3287 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3289 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3292 ACCESS_UNALIGNED="yes"
3296 SQLITE="libsqlite.so.0"
3297 SQLITE3="libsqlite3.so.0"
3299 GDKX11="libgdk-x11-2.0.so.0"
3300 GTKX11="libgtk-x11-2.0.so.0"
3301 XINERAMA="libXinerama.so.1"
3303 sizeof_register="SIZEOF_VOID_P"
3306 boehm_supported=true
3310 if test "x$enable_wasm" = "xyes"; then
3314 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3315 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3327 ACCESS_UNALIGNED="no"
3329 AC_MSG_CHECKING(for mips n32)
3331 #if _MIPS_SIM != _ABIN32
3348 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3353 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3354 # int astruct __attribute__ ((visibility ("hidden")));
3357 # void *p = &astruct;
3359 # gcc -fPIC --shared -o libfoo.so foo.c
3361 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3362 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3363 have_visibility_hidden=no
3366 have_visibility_hidden=no
3375 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3382 openbsd*|freebsd*|kfreebsd-gnu*)
3389 x86_64-*-* | amd64-*-*)
3392 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3393 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3400 BTLS_PLATFORM=x86_64
3401 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3406 BTLS_PLATFORM=x86_64
3407 boehm_supported=false
3409 openbsd*|freebsd*|kfreebsd-gnu*)
3412 BTLS_PLATFORM=x86_64
3419 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3425 ACCESS_UNALIGNED="no"
3432 if test x"$GCC" = xyes; then
3433 # We don't support v8 cpus
3434 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3436 if test x"$AR" = xfalse; then
3437 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3440 *-mingw*|*-*-cygwin*)
3441 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3442 have_visibility_hidden=no
3445 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3446 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3447 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3448 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3450 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3451 CFLAGS="$CFLAGS -mminimal-toc"
3454 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3459 dnl on AIX/PASE, shared libraries can be inside archives
3460 dnl if they are, we specify them by lib.a(lib.so)
3461 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3462 LIBC="libc.a(shr_64.o)"
3463 INTL="libintl.a(libintl.so.9)"
3474 ACCESS_UNALIGNED="no"
3475 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3481 ACCESS_UNALIGNED="no"
3482 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3487 ACCESS_UNALIGNED="no"
3489 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3492 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3494 arm*-linux*-gnueabi)
3495 BTLS_PLATFORM=armsoft
3502 ACCESS_UNALIGNED="no"
3503 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3506 # https://lkml.org/lkml/2012/7/15/133
3509 boehm_supported=false
3512 BTLS_PLATFORM=aarch64
3513 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3518 ACCESS_UNALIGNED="yes"
3519 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
3525 if test "x$host" != "x$target"; then
3526 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
3528 enable_support_build=no
3534 ACCESS_UNALIGNED="no"
3535 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3536 # Can't use tls, since it depends on the runtime detection of tls offsets
3537 # in mono-compiler.h
3542 AC_DEFINE(TARGET_WATCHOS, 1, [...])
3546 powerpc64-ps3-linux-gnu)
3548 arch_target=powerpc64
3549 AC_DEFINE(TARGET_PS3, 1, [...])
3550 # It would be better to just use TARGET_POWERPC64, but lots of code already
3552 AC_DEFINE(__mono_ppc64__, 1, [...])
3553 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3555 target_byte_order=G_BIG_ENDIAN
3557 powerpc64-xbox360-linux-gnu)
3559 arch_target=powerpc64
3560 AC_DEFINE(TARGET_XBOX360, 1, [...])
3561 # It would be better to just use TARGET_POWERPC64, but lots of code already
3564 target_byte_order=G_BIG_ENDIAN
3569 AC_DEFINE(TARGET_ARM, 1, [...])
3570 ACCESS_UNALIGNED="no"
3571 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3572 # Can't use tls, since it depends on the runtime detection of tls offsets
3573 # in mono-compiler.h
3577 armv7l-unknown-linux-gnueabi*)
3579 CPPFLAGS="$CPPFLAGS"
3581 armv5-*-linux-androideabi*)
3582 AC_DEFINE(TARGET_ANDROID, 1, [...])
3583 CPPFLAGS="$CPPFLAGS"
3585 *-linux-androideabi*)
3586 AC_DEFINE(TARGET_ANDROID, 1, [...])
3587 CPPFLAGS="$CPPFLAGS"
3594 AC_DEFINE(TARGET_ARM, 1, [...])
3595 ACCESS_UNALIGNED="no"
3596 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3597 # Can't use tls, since it depends on the runtime detection of tls offsets
3598 # in mono-compiler.h
3605 AC_DEFINE(TARGET_X86, 1, [...])
3606 CPPFLAGS="$CPPFLAGS"
3607 # Can't use tls, since it depends on the runtime detection of tls offsets
3608 # in mono-compiler.h
3614 AC_DEFINE(TARGET_ANDROID, 1, [...])
3621 AC_DEFINE(TARGET_AMD64, 1, [...])
3622 CPPFLAGS="$CPPFLAGS"
3623 # Can't use tls, since it depends on the runtime detection of tls offsets
3624 # in mono-compiler.h
3630 AC_DEFINE(TARGET_ANDROID, 1, [...])
3637 AC_DEFINE(TARGET_AMD64, 1, [...])
3638 AC_DEFINE(TARGET_PS4, 1, [...])
3639 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
3640 CPPFLAGS="$CPPFLAGS"
3641 # Can't use tls, since it depends on the runtime detection of tls offsets
3642 # in mono-compiler.h
3650 AC_DEFINE(TARGET_ARM64, 1, [...])
3651 CPPFLAGS="$CPPFLAGS"
3652 # Can't use tls, since it depends on the runtime detection of tls offsets
3653 # in mono-compiler.h
3658 AC_DEFINE(TARGET_ANDROID, 1, [...])
3666 AC_MSG_ERROR([Cross compiling is not supported for target $target])
3672 AC_DEFINE(TARGET_X86, 1, [...])
3675 AC_DEFINE(TARGET_AMD64, 1, [...])
3678 AC_DEFINE(TARGET_ARM, 1, [...])
3681 AC_DEFINE(TARGET_ARM64, 1, [...])
3684 AC_DEFINE(TARGET_POWERPC, 1, [...])
3687 AC_DEFINE(TARGET_POWERPC, 1, [...])
3688 AC_DEFINE(TARGET_POWERPC64, 1, [...])
3691 AC_DEFINE(TARGET_S390X, 1, [...])
3694 AC_DEFINE(TARGET_MIPS, 1, [...])
3697 AC_DEFINE(TARGET_SPARC, 1, [...])
3700 AC_DEFINE(TARGET_SPARC64, 1, [...])
3706 AC_DEFINE(HOST_X86, 1, [...])
3709 AC_DEFINE(HOST_AMD64, 1, [...])
3712 AC_DEFINE(HOST_ARM, 1, [...])
3715 AC_DEFINE(HOST_ARM64, 1, [...])
3718 AC_DEFINE(HOST_POWERPC, 1, [...])
3721 AC_DEFINE(HOST_POWERPC, 1, [...])
3722 AC_DEFINE(HOST_POWERPC64, 1, [...])
3725 AC_DEFINE(HOST_S390X, 1, [...])
3728 AC_DEFINE(HOST_MIPS, 1, [...])
3731 AC_DEFINE(HOST_SPARC, 1, [...])
3734 AC_DEFINE(HOST_SPARC64, 1, [...])
3746 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
3747 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
3749 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
3751 if test "x$enable_vtune" = "xyes"; then
3752 if test "x$with_vtune" = "x"; then
3753 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
3755 VTUNE_PATH=$with_vtune
3757 VTUNE_INCLUDE=$VTUNE_PATH/include
3760 VTUNE_LIB=$VTUNE_PATH/lib32
3763 VTUNE_LIB=$VTUNE_PATH/lib64
3766 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
3769 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
3770 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
3772 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
3773 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
3776 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
3777 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
3779 AC_SUBST(VTUNE_LIBS)
3780 AC_SUBST(VTUNE_CFLAGS)
3782 dnl Use GCC atomic ops if they work on the target.
3783 if test x$GCC = "xyes"; then
3785 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
3786 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
3791 if test "x$target_mach" = "xyes"; then
3793 if test "x$TARGET_SYS" = "xWATCHOS"; then
3794 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
3795 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3796 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3798 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
3799 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3800 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3801 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3804 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
3805 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
3806 #error fail this for ios
3809 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
3810 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
3811 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
3814 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3815 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3816 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3821 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
3824 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
3826 if test "x$sizeof_register" = "x4"; then
3827 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
3828 elif test "x$sizeof_register" = "x8"; then
3829 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
3831 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
3834 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
3836 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
3837 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
3838 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
3839 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
3841 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
3844 if test "x$have_visibility_hidden" = "xyes"; then
3845 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
3848 if test "x$have_deprecated" = "xyes"; then
3849 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
3853 dnl Simple Generational checks (sgen)
3856 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
3857 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
3858 if test x$buildsgen = xyes; then
3859 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
3860 SGEN_DEFINES="-DHAVE_SGEN_GC"
3863 if test x$with_sgen_default_concurrent != xno; then
3864 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
3865 conc_gc_msg=" (concurrent by default)"
3868 if test "x$gc_msg" = "x"; then
3869 gc_msg="sgen$conc_gc_msg"
3871 gc_msg="sgen$conc_gc_msg and $gc_msg"
3874 AC_SUBST(SGEN_DEFINES)
3875 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
3877 jit_status="Building and using the JIT"
3885 INTL="libintl.dylib"
3886 SQLITE="libsqlite.0.dylib"
3887 SQLITE3="libsqlite3.0.dylib"
3889 GDKX11="libgdk-x11-2.0.dylib"
3890 GTKX11="libgtk-x11-2.0.dylib"
3895 SQLITE="libsqlite.so"
3896 SQLITE3="libsqlite3.so"
3906 SQLITE="libsqlite.so"
3907 SQLITE3="libsqlite3.so"
3912 SQLITE="libsqlite.so"
3913 SQLITE3="libsqlite3.so"
3917 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
3918 AC_MSG_CHECKING(for the soname of libX11.so)
3919 for i in $x_libraries $dlsearch_path; do
3921 if test -f $i/libX11.so.$r; then
3928 if test "x$X11" = "xlibX11.so"; then
3929 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
3937 ######################################
3939 ######################################
3943 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
3944 if test x$GCC = xyes; then
3945 GNUC_UNUSED='__attribute__((__unused__))'
3946 GNUC_NORETURN='__attribute__((__noreturn__))'
3948 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
3951 AC_SUBST(GNUC_PRETTY)
3952 AC_SUBST(GNUC_UNUSED)
3953 AC_SUBST(GNUC_NORETURN)
3954 AC_SUBST(BREAKPOINT)
3956 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
3959 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
3975 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
3980 arm*-darwin*|aarch64*-*)
3981 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
3984 ORDER=G_LITTLE_ENDIAN
3987 LDFLAGS="$LDFLAGS -ltextencoding"
3990 CFLAGS="$CFLAGS -pthread"
3991 LDFLAGS="$LDFLAGS -pthread"
4002 # Defined for all targets/platforms using classic Windows API support.
4003 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4004 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4006 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf strerror_r)
4007 AC_CHECK_FUNCS(getrlimit)
4008 AC_CHECK_FUNCS(fork execv execve)
4010 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4012 if test x$with_overridable_allocators = xyes; then
4013 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4014 AC_MSG_NOTICE([Overridable allocator support enabled])
4016 AC_MSG_NOTICE([Overridable allocator support disabled])
4020 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4021 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4022 # removed once support for 10.6 is dropped.
4024 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4026 if test x$target_osx = xyes; then
4027 AC_CHECK_FUNCS(getpwuid_r)
4028 elif test x$target_ios = xno; then
4029 AC_CHECK_FUNCS(strndup getpwuid_r)
4032 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4034 AC_SEARCH_LIBS(sqrtf, m)
4036 # nanosleep may not be part of libc, also search it in other libraries
4037 AC_SEARCH_LIBS(nanosleep, rt)
4039 AC_SEARCH_LIBS(dlopen, dl)
4040 old_ldflags="${LDFLAGS}"
4041 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4042 if test $lt_cv_prog_gnu_ld = yes; then
4043 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4046 *-*-aix*|*-*-os400*)
4049 dnl Try to use export-dynamic anyways
4050 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4054 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4055 if test $found_export_dynamic = no; then
4056 LDFLAGS="${old_ldflags}"
4059 AC_MSG_CHECKING(for varargs macros)
4061 int foo (int i, int j);
4062 #define bar(...) foo (1, __VA_ARGS__)
4066 ],have_iso_varargs=yes,have_iso_varargs=no)
4067 AC_MSG_RESULT($have_iso_varargs)
4068 G_HAVE_ISO_VARARGS=0
4069 if test "x$have_iso_varargs" = "xyes"; then
4070 G_HAVE_ISO_VARARGS=1
4072 AC_SUBST(G_HAVE_ISO_VARARGS)
4074 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)
4075 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4076 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4077 AC_SUBST(HAVE_ALLOCA_H)
4079 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
4080 GPOINTER_TO_INT="((gint) (ptr))"
4081 GPOINTER_TO_UINT="((guint) (ptr))"
4082 GINT_TO_POINTER="((gpointer) (v))"
4083 GUINT_TO_POINTER="((gpointer) (v))"
4086 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
4087 GPOINTER_TO_INT="((gint)(long) (ptr))"
4088 GPOINTER_TO_UINT="((guint)(long) (ptr))"
4089 GINT_TO_POINTER="((gpointer)(glong) (v))"
4090 GUINT_TO_POINTER="((gpointer)(gulong) (v))"
4093 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
4094 GPOINTER_TO_INT="((gint)(long long) (ptr))"
4095 GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
4096 GINT_TO_POINTER="((gpointer)(long long) (v))"
4097 GUINT_TO_POINTER="((gpointer)(unsigned long long) (v))"
4099 GSIZE_FORMAT='"I64u"'
4101 AC_MSG_ERROR([unsupported pointer size])
4104 AC_SUBST(GPOINTER_TO_INT)
4105 AC_SUBST(GPOINTER_TO_UINT)
4106 AC_SUBST(GINT_TO_POINTER)
4107 AC_SUBST(GUINT_TO_POINTER)
4109 AC_SUBST(GSIZE_FORMAT)
4110 AC_SUBST(G_GUINT64_FORMAT)
4111 AC_SUBST(G_GINT64_FORMAT)
4112 AC_SUBST(G_GUINT32_FORMAT)
4113 AC_SUBST(G_GINT32_FORMAT)
4116 # END OF EGLIB CHECKS
4119 AC_ARG_WITH([libgdiplus],
4120 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4121 [], [with_libgdiplus=installed])
4123 # default install location
4124 libgdiplus_install_loc=libgdiplus${libsuffix}
4127 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4131 case $with_libgdiplus in
4138 if test x$cross_compiling = xno; then
4139 if test x$host_darwin = xyes; then
4140 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4142 libgdiplus_install_loc=$a
4150 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4153 /*) # absolute path, assume it is an install location
4154 libgdiplus_loc=$with_libgdiplus
4155 libgdiplus_install_loc=$with_libgdiplus
4159 libgdiplus_loc=`pwd`/$with_libgdiplus
4162 AC_SUBST(libgdiplus_loc)
4163 AC_SUBST(libgdiplus_install_loc)
4165 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)
4166 if test "x$icall_symbol_map" = "xyes"; then
4167 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4170 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4171 if test "x$icall_export" = "xyes"; then
4172 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4175 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4176 if test "x$icall_tables" = "xno"; then
4177 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4180 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4182 if test "x$with_tls" = "x__thread"; then
4183 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4184 # Pass the information to libgc
4185 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4186 AC_MSG_CHECKING(if the tls_model attribute is supported)
4187 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4190 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4196 if test ${TARGET} = ARM; then
4197 dnl ******************************************
4198 dnl *** Check to see what FPU is available ***
4199 dnl ******************************************
4200 AC_MSG_CHECKING(which FPU to use)
4203 # This is a bit tricky:
4205 # if (__ARM_PCS_VFP) {
4206 # /* mfloat-abi=hard == VFP with hard ABI */
4207 # } elif (!__SOFTFP__) {
4208 # /* mfloat-abi=softfp == VFP with soft ABI */
4210 # /* mfloat-abi=soft == no VFP */
4213 # The exception is iOS (w/ GCC) where none of the above
4214 # are defined (but iOS always uses the 'softfp' ABI).
4216 # No support for FPA.
4221 # iOS GCC always uses the 'softfp' ABI.
4222 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4226 # Are we using the 'hard' ABI?
4227 if test x$fpu = xNONE; then
4228 AC_TRY_COMPILE([], [
4229 #ifndef __ARM_PCS_VFP
4230 #error "Float ABI is not 'hard'"
4239 # No 'hard' ABI. 'soft' or 'softfp'?
4240 if test x$fpu = xNONE; then
4241 AC_TRY_COMPILE([], [
4243 #error "Float ABI is not 'softfp'"
4252 if test x$arm_fpu != x; then
4257 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4260 dnl *********************************************
4261 dnl *** Check which ARM version(s) we can use ***
4262 dnl *********************************************
4263 AC_MSG_CHECKING(which ARM version to use)
4265 AC_TRY_COMPILE([], [
4266 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4267 #error Not on ARM v5.
4275 AC_TRY_COMPILE([], [
4276 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4277 #error Not on ARM v6.
4286 AC_TRY_COMPILE([], [
4287 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4288 #error Not on ARM v7.
4298 AC_MSG_RESULT($arm_ver)
4300 if test x$arm_v5 = xyes; then
4301 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4302 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4305 if test x$arm_v6 = xyes; then
4306 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4307 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4310 if test x$arm_v7 = xyes; then
4311 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4312 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4316 if test ${TARGET} = unknown; then
4317 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4318 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4321 if test "x$platform_android" = "xyes"; then
4322 case "x${TARGET}" in
4327 BTLS_PLATFORM=android-armv5
4331 BTLS_PLATFORM=android-armv6
4335 BTLS_PLATFORM=android-armv7
4344 BTLS_PLATFORM=android-v8a
4348 BTLS_PLATFORM=android-x86
4352 BTLS_PLATFORM=android-x64
4360 if test ${ACCESS_UNALIGNED} = no; then
4361 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4364 if test x$host_darwin = xyes; then
4365 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4367 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4368 [AC_MSG_RESULT([no])],
4370 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4372 RANLIB="$RANLIB -no_warning_for_no_symbols"
4373 AC_MSG_RESULT([yes])
4380 # Pass CPPFLAGS to libgc configure
4381 # We should use a separate variable for this to avoid passing useless and
4382 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4383 # This should be executed late so we pick up the final version of CPPFLAGS
4384 # The problem with this approach, is that during a reconfigure, the main
4385 # configure scripts gets invoked with these arguments, so we use separate
4386 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4387 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4388 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4389 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4391 # Don't pass -finstrument-for-thread-suspension in,
4392 # if these are instrumented it will be very bad news
4393 # (infinite recursion, undefined parking behavior, etc)
4394 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4395 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\""
4396 if test "x$support_boehm" = "xyes"; then
4397 AC_CONFIG_SUBDIRS(libgc)
4403 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4404 if test x$with_malloc_mempools = xyes; then
4406 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4411 DISABLE_MCS_DOCS=default
4412 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4413 if test x$with_mcs_docs != xyes; then
4414 DISABLE_MCS_DOCS=yes
4417 if test -n "$INSTALL_4_x_TRUE"; then :
4418 DISABLE_MCS_DOCS=yes
4420 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4421 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4424 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)],[
4425 if test x$with_lazy_gc_thread_creation != xno ; then
4426 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4428 ], [with_lazy_gc_thread_creation=no])
4430 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])
4432 if test x$with_cooperative_gc = xdefault; then
4433 with_cooperative_gc=$with_cooperative_gc_default
4436 if test x$with_cooperative_gc != xno; then
4437 AC_DEFINE(USE_COOP_GC,1,[Enable cooperative stop-the-world garbage collection.])
4440 AM_CONDITIONAL([ENABLE_COOP], [test x$with_cooperative_gc != xno])
4442 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],[
4444 if test x$enable_checked_build != x ; then
4445 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4447 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4448 eval "mono_checked_build_test_enable_$feature='yes'"
4451 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4452 eval "mono_checked_build_test_enable_gc='yes'"
4453 eval "mono_checked_build_test_enable_metadata='yes'"
4454 eval "mono_checked_build_test_enable_thread='yes'"
4455 eval "mono_checked_build_test_enable_private_types='yes'"
4458 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4459 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4462 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4463 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4466 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4467 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4470 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4471 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4475 AC_CHECK_HEADER([malloc.h],
4476 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
4477 [Define to 1 if you have /usr/include/malloc.h.])],,)
4479 if test x"$GCC" = xyes; then
4480 # Implicit function declarations are not 64 bit safe
4481 # Do this late, since this causes lots of configure tests to fail
4482 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4483 # jay has a lot of implicit declarations
4484 JAY_CFLAGS="-Wno-implicit-function-declaration"
4487 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4488 # instead of libmono-static.a
4489 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4490 LIBMONO_LA=libmini-static.la
4492 if test x$buildsgen = xyes; then
4493 LIBMONO_LA=libmonosgen-$API_VER.la
4495 LIBMONO_LA=libmonoboehm-$API_VER.la
4498 AC_SUBST(LIBMONO_LA)
4504 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4505 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
4507 AM_CONDITIONAL(BTLS, test x$enable_btls = xyes)
4510 if test "x$enable_btls" = "xyes"; then
4511 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4512 if test "x$CMAKE" = "xno"; then
4513 AC_MSG_ERROR("cmake not found")
4516 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4523 case "$BTLS_PLATFORM" in
4529 btls_cflags="$btls_cflags -arch i386"
4540 btls_cflags="-DOPENSSL_NO_ASM=1"
4546 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4549 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4552 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4555 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4558 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4561 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4564 AC_MSG_ERROR(Invalid BTLS platform)
4567 if test "x$platform_android" = "xyes"; then
4569 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4570 if test "x$with_btls_android_ndk" != "x"; then
4571 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4573 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4577 if test "x$btls_arch" != "x"; then
4578 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4581 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4583 AC_SUBST(BTLS_CFLAGS)
4584 AC_SUBST(BTLS_PLATFORM)
4585 AC_SUBST(BTLS_CMAKE_ARGS)
4587 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4592 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4594 if test x$DISABLE_MCS_DOCS = xyes; then
4601 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
4602 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4603 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4605 libmono_ldflags="$libmono_ldflags $LIBS"
4607 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4608 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4609 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4610 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4611 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4612 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4613 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4614 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4615 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4616 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4617 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4618 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4619 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4620 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4621 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4622 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4623 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4624 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4626 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4636 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4637 AC_SUBST(arch_target)
4642 #This must always be defined when building the runtime
4643 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4645 mono_build_root=`pwd`
4646 AC_SUBST(mono_build_root)
4648 mono_runtime=mono/mini/mono
4649 AC_SUBST(mono_runtime)
4651 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.6.0/tools/csc.exe
4653 if test $csc_compiler = mcs; then
4654 CSC=$mcs_topdir/class/lib/build/mcs.exe
4659 mono_cfg_root=$mono_build_root/runtime
4660 if test x$host_win32 = xyes; then
4661 if test "x$cross_compiling" = "xno"; then
4662 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4663 CSC=`cygpath -m -a $CSC`
4664 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4666 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4669 mono_cfg_dir=$mono_cfg_root/etc
4671 AC_SUBST(mono_cfg_dir)
4675 AC_CONFIG_FILES([po/mcs/Makefile.in])
4677 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4678 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4680 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4683 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4685 *) reldir=$depth/$srcdir ;;
4687 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4688 cd runtime/etc/mono/1.0
4689 rm -f machine.config
4690 $LN_S $reldir/data/net_1_1/machine.config machine.config
4694 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4697 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4699 *) reldir=$depth/$srcdir ;;
4701 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4702 cd runtime/etc/mono/2.0
4703 rm -f machine.config
4704 $LN_S $reldir/data/net_2_0/machine.config machine.config
4708 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4711 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4713 *) reldir=$depth/$srcdir ;;
4715 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4716 cd runtime/etc/mono/2.0
4718 $LN_S $reldir/data/net_2_0/web.config web.config
4722 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4725 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4727 *) reldir=$depth/$srcdir ;;
4729 $ac_aux_dir/install-sh -d runtime/etc/mono/
4730 cd runtime/etc/mono/
4732 $LN_S $reldir/data/browscap.ini browscap.ini
4736 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4737 [ depth=../../../../..
4739 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4741 *) reldir=$depth/$srcdir ;;
4743 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4744 cd runtime/etc/mono/2.0/Browsers
4745 rm -f Compat.browser
4746 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4750 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4751 [ depth=../../../../..
4753 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4755 *) reldir=$depth/$srcdir ;;
4757 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4758 cd runtime/etc/mono/4.0/Browsers
4759 rm -f Compat.browser
4760 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4764 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4765 [ depth=../../../../..
4767 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4769 *) reldir=$depth/$srcdir ;;
4771 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4772 cd runtime/etc/mono/4.5/Browsers
4773 rm -f Compat.browser
4774 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4778 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4781 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4783 *) reldir=$depth/$srcdir ;;
4785 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4786 cd runtime/etc/mono/4.0
4787 rm -f machine.config
4788 $LN_S $reldir/data/net_4_0/machine.config machine.config
4792 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4795 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4797 *) reldir=$depth/$srcdir ;;
4799 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4800 cd runtime/etc/mono/4.0
4802 $LN_S $reldir/data/net_4_0/web.config web.config
4806 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
4809 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4811 *) reldir=$depth/$srcdir ;;
4813 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4814 cd runtime/etc/mono/4.5
4815 rm -f machine.config
4816 $LN_S $reldir/data/net_4_5/machine.config machine.config
4820 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
4823 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4825 *) reldir=$depth/$srcdir ;;
4827 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4828 cd runtime/etc/mono/4.5
4830 $LN_S $reldir/data/net_4_5/web.config web.config
4834 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])
4835 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])
4840 acceptance-tests/Makefile
4842 scripts/mono-find-provides
4843 scripts/mono-find-requires
4847 mono/utils/jemalloc/Makefile
4848 mono/metadata/Makefile
4852 mono/arch/x86/Makefile
4853 mono/arch/amd64/Makefile
4854 mono/arch/ppc/Makefile
4855 mono/arch/sparc/Makefile
4856 mono/arch/s390x/Makefile
4857 mono/arch/arm/Makefile
4858 mono/arch/arm64/Makefile
4859 mono/arch/mips/Makefile
4862 mono/tests/tests-config
4863 mono/tests/gc-descriptors/Makefile
4864 mono/tests/testing_gac/Makefile
4865 mono/unit-tests/Makefile
4866 mono/benchmark/Makefile
4868 mono/profiler/Makefile
4870 mono/eglib/eglib-config.h
4872 ikvm-native/Makefile
4877 data/net_2_0/Makefile
4878 data/net_4_0/Makefile
4879 data/net_4_5/Makefile
4880 data/net_2_0/Browsers/Makefile
4881 data/net_4_0/Browsers/Makefile
4882 data/net_4_5/Browsers/Makefile
4889 data/mono-options.pc
4890 data/mono-lineeditor.pc
4896 data/system.web.extensions_1.0.pc
4897 data/system.web.extensions.design_1.0.pc
4898 data/system.web.mvc.pc
4899 data/system.web.mvc2.pc
4900 data/system.web.mvc3.pc
4901 data/aspnetwebstack.pc
4907 tools/locale-builder/Makefile
4909 tools/monograph/Makefile
4910 tools/pedump/Makefile
4916 # Update all submodules recursively to ensure everything is checked out
4917 $srcdir/scripts/update_submodules.sh
4919 if test x$host_win32 = xyes; then
4920 # Get rid of 'cyg' prefixes in library names
4921 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
4922 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
4923 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
4924 # executable doesn't work...
4925 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
4928 if test x$host_darwin = xyes; then
4929 # This doesn't seem to be required and it slows down parallel builds
4930 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
4935 NONE) prefix=$ac_default_prefix ;;
4937 case $exec_prefix in
4938 NONE) exec_prefix='${prefix}' ;;
4942 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
4943 # any existing config.make. This allows people to share the same source tree
4944 # with different build directories, one native and one cross
4946 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
4948 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
4950 echo "prefix=$prefix" > $mcs_topdir/build/config.make
4951 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
4952 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
4953 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
4954 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
4955 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
4956 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
4957 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
4958 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
4961 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
4962 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
4965 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
4968 [myver=$($AWK 'BEGIN {
4969 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
4970 if(length(vsplit [1]) > 4) {
4971 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
4973 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
4976 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
4977 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
4979 if test x$host_darwin = xyes; then
4980 echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
4981 elif test x$host_win32 = xyes; then
4982 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
4984 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
4987 if test x$host_darwin = xyes; then
4988 echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
4989 elif test x$host_win32 = xyes; then
4990 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
4992 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
4995 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
4996 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
4999 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5000 enable_system_aot=yes
5003 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5004 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5007 if test x$DISABLE_MCS_DOCS = xyes; then
5008 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5011 if test x$has_extension_module != xno; then
5012 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5015 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5017 if test "x$test_bcl_opt" = "xyes"; then
5018 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5021 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5023 if test $csc_compiler = mcs; then
5024 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5027 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5028 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5029 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5030 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5033 if test "x$AOT_MODE" != "x" ; then
5034 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5037 if test "x$enable_btls" = "xyes"; then
5038 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5045 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5047 btls_platform_string=
5048 if test x$enable_btls = xyes; then
5049 if test x$btls_android = xyes; then
5050 btls_platform_string=" (android:$BTLS_PLATFORM)"
5052 btls_platform_string=" ($BTLS_PLATFORM)"
5058 C# Compiler: $csc_compiler
5065 SIGALTSTACK: $with_sigaltstack
5067 BigArrays: $enable_big_arrays
5068 DTrace: $enable_dtrace
5069 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5070 Spectre: $spectre_mitigation_status
5073 .NET 4.x: $with_profile4_x
5074 Xamarin.Android: $with_monodroid
5075 Xamarin.iOS: $with_monotouch
5076 Xamarin.WatchOS: $with_monotouch_watch
5077 Xamarin.TVOS: $with_monotouch_tv
5078 Xamarin.Mac: $with_xammac
5079 Windows AOT: $with_winaot
5081 Unreal: $with_unreal
5082 WebAssembly: $with_wasm
5083 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5084 JNI support: $jdk_headers_found
5085 libgdiplus: $libgdiplus_msg
5087 BTLS: $enable_btls$btls_platform_string
5088 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5091 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5092 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)