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_LARGE_FILES -D_REENTRANT"
381 libmono_cflags="-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_remset, sgen_marksweep_par, sgen_marksweep_fixed, sgen_marksweep_fixed_par, sgen_copying.],
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_remset" = "xyes"; then
1481 AC_DEFINE(DISABLE_SGEN_REMSET, 1, [Disable wbarrier=remset support in SGEN.])
1482 AC_MSG_NOTICE([Disabled wbarrier=remset support in SGEN.])
1485 if test "x$mono_feature_disable_sgen_marksweep_par" = "xyes"; then
1486 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_PAR, 1, [Disable major=marksweep-par support in SGEN.])
1487 AC_MSG_NOTICE([Disabled major=marksweep-par support in SGEN.])
1490 if test "x$mono_feature_disable_sgen_marksweep_fixed" = "xyes"; then
1491 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_FIXED, 1, [Disable major=marksweep-fixed support in SGEN.])
1492 AC_MSG_NOTICE([Disabled major=marksweep-fixed support in SGEN.])
1495 if test "x$mono_feature_disable_sgen_marksweep_fixed_par" = "xyes"; then
1496 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_FIXED_PAR, 1, [Disable major=marksweep-fixed-par support in SGEN.])
1497 AC_MSG_NOTICE([Disabled major=marksweep-fixed-par support in SGEN.])
1500 if test "x$mono_feature_disable_sgen_copying" = "xyes"; then
1501 AC_DEFINE(DISABLE_SGEN_MAJOR_COPYING, 1, [Disable major=copying support in SGEN.])
1502 AC_MSG_NOTICE([Disabled major=copying support in SGEN.])
1505 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1506 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1508 has_extension_module=no
1509 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1511 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1512 if test x$extension = xdefault ; then
1513 has_extension_module=yes;
1516 if test x$enable_extension_module = xyes; then
1517 has_extension_module=yes;
1521 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1523 if test x$has_extension_module != xno ; then
1524 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1525 AC_MSG_NOTICE([Enabling mono extension module.])
1529 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1531 AC_MSG_CHECKING(for visibility __attribute__)
1534 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1535 int main () { doit (); return 0; }
1538 have_visibility_hidden=yes
1541 have_visibility_hidden=no
1546 dnl Boehm GC configuration
1549 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1551 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1552 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1554 if test "x$support_boehm" = "xyes"; then
1556 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1557 if test x$enable_parallel_mark = xyes; then
1558 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1568 if test "x$support_boehm" = "xyes"; then
1572 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1573 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1574 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1576 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1578 if test x$target_win32 = xyes; then
1579 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1580 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1583 gc_msg="Included Boehm GC with typed GC"
1584 if test x$enable_parallel_mark = xyes; then
1585 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1586 gc_msg="$gc_msg and parallel mark"
1588 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1593 AC_MSG_WARN("External Boehm is no longer supported")
1597 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1601 AC_MSG_WARN("Compiling mono without GC.")
1602 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1603 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1607 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1611 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])
1612 if test "x$large_heap" = "xyes"; then
1613 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1616 AC_SUBST(LIBGC_CPPFLAGS)
1617 AC_SUBST(LIBGC_LIBS)
1618 AC_SUBST(LIBGC_STATIC_LIBS)
1620 AC_SUBST(BOEHM_DEFINES)
1623 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1626 dnl End of Boehm GC Configuration
1629 dnl *************************************
1630 dnl *** Checks for zero length arrays ***
1631 dnl *************************************
1632 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1640 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1643 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1646 dnl ***********************************
1647 dnl *** Checks for signals
1648 dnl ***********************************
1649 AC_CHECK_HEADERS(signal.h)
1650 AC_CHECK_FUNCS(sigaction)
1651 AC_CHECK_FUNCS(kill)
1652 AC_CHECK_FUNCS(signal)
1654 # signal() is declared inline in Android headers
1655 # so we need to workaround it by overriding the check.
1656 if test x$platform_android = xyes; then
1657 AC_DEFINE(HAVE_SIGNAL,1)
1660 if test x$host_win32 = xno; then
1662 dnl hires monotonic clock support
1663 AC_SEARCH_LIBS(clock_gettime, rt)
1664 AC_CHECK_FUNCS(clock_nanosleep)
1666 dnl dynamic loader support
1667 AC_CHECK_FUNC(dlopen, DL_LIB="",
1668 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1670 if test x$dl_support = xno; then
1671 AC_MSG_WARN([No dynamic loading support available])
1673 LIBS="$LIBS $DL_LIB"
1674 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1675 dnl from glib's configure.ac
1676 AC_CACHE_CHECK([for preceeding underscore in symbols],
1678 AC_TRY_RUN([#include <dlfcn.h>
1679 int mono_underscore_test (void) { return 42; }
1681 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1682 handle = dlopen ((void*)0, 0);
1684 f1 = dlsym (handle, "mono_underscore_test");
1685 f2 = dlsym (handle, "_mono_underscore_test");
1686 } return (!f2 || f1);
1688 [mono_cv_uscore=yes],
1689 [mono_cv_uscore=no],
1692 if test "x$mono_cv_uscore" = "xyes"; then
1693 MONO_DL_NEED_USCORE=1
1695 MONO_DL_NEED_USCORE=0
1697 AC_SUBST(MONO_DL_NEED_USCORE)
1698 AC_CHECK_FUNC(dlerror)
1701 dnl ******************************************************************
1702 dnl *** Checks for the IKVM JNI interface library ***
1703 dnl ******************************************************************
1704 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])
1707 if test x$with_ikvm_native = xyes; then
1708 ikvm_native_dir=ikvm-native
1709 jdk_headers_found="IKVM Native"
1712 AC_SUBST(ikvm_native_dir)
1714 AC_CHECK_HEADERS(execinfo.h)
1716 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1718 AC_CHECK_FUNCS(getgrgid_r)
1719 AC_CHECK_FUNCS(getgrnam_r)
1720 AC_CHECK_FUNCS(getresuid)
1721 AC_CHECK_FUNCS(setresuid)
1722 AC_CHECK_FUNCS(kqueue)
1723 AC_CHECK_FUNCS(backtrace_symbols)
1724 AC_CHECK_FUNCS(mkstemp)
1725 AC_CHECK_FUNCS(mmap)
1726 AC_CHECK_FUNCS(madvise)
1727 AC_CHECK_FUNCS(getrusage)
1728 AC_CHECK_FUNCS(getpriority)
1729 AC_CHECK_FUNCS(setpriority)
1730 AC_CHECK_FUNCS(dl_iterate_phdr)
1731 AC_CHECK_FUNCS(dladdr)
1732 AC_CHECK_FUNCS(sysconf)
1733 AC_CHECK_FUNCS(getrlimit)
1734 AC_CHECK_FUNCS(prctl)
1736 AC_CHECK_FUNCS(sched_getaffinity)
1737 AC_CHECK_FUNCS(sched_setaffinity)
1738 AC_CHECK_FUNCS(sched_getcpu)
1740 if test x$platform_android != xyes; then
1741 AC_CHECK_FUNCS(getpwnam_r)
1742 AC_CHECK_FUNCS(getpwuid_r)
1745 AC_FUNC_STRERROR_R()
1747 dnl ****************************************************************
1748 dnl *** Check for sched_setaffinity from glibc versions before ***
1749 dnl *** 2.3.4. The older versions of the function only take 2 ***
1750 dnl *** parameters, not 3. ***
1752 dnl *** Because the interface change was not made in a minor ***
1753 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1754 dnl *** won't always indicate the interface sched_affinity has. ***
1755 dnl ****************************************************************
1756 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1757 AC_TRY_COMPILE([#include <sched.h>], [
1759 sched_setaffinity(0, &mask);
1761 # Yes, we have it...
1763 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1765 # We have the new, three-parameter version
1768 AC_TRY_COMPILE([#include <sched.h>], [
1769 CPU_COUNT((void *) 0);
1772 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1774 # We have the new, three-parameter version
1778 dnl ******************************************************************
1779 dnl *** Check for large file support ***
1780 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1781 dnl ******************************************************************
1783 # Check that off_t can represent 2**63 - 1 correctly, working around
1784 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1785 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1787 AC_DEFUN([LARGE_FILES], [
1788 large_CPPFLAGS=$CPPFLAGS
1789 CPPFLAGS="$CPPFLAGS $1"
1791 #include <sys/types.h>
1794 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1795 #define COMPILE_TIME_ASSERT(pred) \
1796 switch(0){case 0:case pred:;}
1797 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1800 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1801 large_CPPFLAGS="$large_CPPFLAGS $1"
1806 CPPFLAGS=$large_CPPFLAGS
1809 AC_MSG_CHECKING(if off_t is 64 bits wide)
1811 if test $large_offt = no; then
1812 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1813 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1815 if test $large_offt = no; then
1816 AC_MSG_WARN([No 64 bit file size support available])
1819 dnl *****************************
1820 dnl *** Checks for libsocket ***
1821 dnl *****************************
1822 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1826 dnl *****************************
1827 dnl *** Checks for libinotify ***
1828 dnl *****************************
1829 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1832 dnl *******************************
1833 dnl *** Checks for MSG_NOSIGNAL ***
1834 dnl *******************************
1835 AC_MSG_CHECKING(for MSG_NOSIGNAL)
1836 AC_TRY_COMPILE([#include <sys/socket.h>], [
1837 int f = MSG_NOSIGNAL;
1839 # Yes, we have it...
1841 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1843 # We'll have to use signals
1847 dnl *****************************
1848 dnl *** Checks for IPPROTO_IP ***
1849 dnl *****************************
1850 AC_MSG_CHECKING(for IPPROTO_IP)
1851 AC_TRY_COMPILE([#include <netinet/in.h>], [
1852 int level = IPPROTO_IP;
1854 # Yes, we have it...
1856 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1858 # We'll have to use getprotobyname
1862 dnl *******************************
1863 dnl *** Checks for IPPROTO_IPV6 ***
1864 dnl *******************************
1865 AC_MSG_CHECKING(for IPPROTO_IPV6)
1866 AC_TRY_COMPILE([#include <netinet/in.h>], [
1867 int level = IPPROTO_IPV6;
1869 # Yes, we have it...
1871 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1873 # We'll have to use getprotobyname
1877 dnl ******************************
1878 dnl *** Checks for IPPROTO_TCP ***
1879 dnl ******************************
1880 AC_MSG_CHECKING(for IPPROTO_TCP)
1881 AC_TRY_COMPILE([#include <netinet/in.h>], [
1882 int level = IPPROTO_TCP;
1884 # Yes, we have it...
1886 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1888 # We'll have to use getprotobyname
1892 dnl *****************************
1893 dnl *** Checks for SOL_IP ***
1894 dnl *****************************
1895 AC_MSG_CHECKING(for SOL_IP)
1896 AC_TRY_COMPILE([#include <netdb.h>], [
1899 # Yes, we have it...
1901 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
1903 # We'll have to use getprotobyname
1907 dnl *****************************
1908 dnl *** Checks for SOL_IPV6 ***
1909 dnl *****************************
1910 AC_MSG_CHECKING(for SOL_IPV6)
1911 AC_TRY_COMPILE([#include <netdb.h>], [
1912 int level = SOL_IPV6;
1914 # Yes, we have it...
1916 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
1918 # We'll have to use getprotobyname
1922 dnl *****************************
1923 dnl *** Checks for SOL_TCP ***
1924 dnl *****************************
1925 AC_MSG_CHECKING(for SOL_TCP)
1926 AC_TRY_COMPILE([#include <netdb.h>], [
1927 int level = SOL_TCP;
1929 # Yes, we have it...
1931 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
1933 # We'll have to use getprotobyname
1937 dnl *****************************
1938 dnl *** Checks for IP_PKTINFO ***
1939 dnl *****************************
1940 AC_MSG_CHECKING(for IP_PKTINFO)
1941 AC_TRY_COMPILE([#include <linux/in.h>], [
1942 int level = IP_PKTINFO;
1944 # Yes, we have it...
1946 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1951 dnl *****************************
1952 dnl *** Checks for IPV6_PKTINFO ***
1953 dnl *****************************
1954 AC_MSG_CHECKING(for IPV6_PKTINFO)
1955 AC_TRY_COMPILE([#include <netdb.h>], [
1956 int level = IPV6_PKTINFO;
1958 # Yes, we have it...
1960 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
1965 dnl **********************************
1966 dnl *** Checks for IP_DONTFRAG ***
1967 dnl **********************************
1968 AC_MSG_CHECKING(for IP_DONTFRAG)
1969 AC_TRY_COMPILE([#include <netinet/in.h>], [
1970 int level = IP_DONTFRAG;
1972 # Yes, we have it...
1974 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
1979 dnl **********************************
1980 dnl *** Checks for IP_DONTFRAGMENT ***
1981 dnl **********************************
1982 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
1983 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
1984 int level = IP_DONTFRAGMENT;
1986 # Yes, we have it...
1988 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
1993 dnl **********************************
1994 dnl *** Checks for IP_MTU_DISCOVER ***
1995 dnl **********************************
1996 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
1997 AC_TRY_COMPILE([#include <linux/in.h>], [
1998 int level = IP_MTU_DISCOVER;
2000 # Yes, we have it...
2002 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2007 dnl **********************************
2008 dnl *** Checks for IP_PMTUDISC_DO ***
2009 dnl **********************************
2010 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2011 AC_TRY_COMPILE([#include <linux/in.h>], [
2012 int level = IP_PMTUDISC_DO;
2014 # Yes, we have it...
2016 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2021 dnl *********************************
2022 dnl *** Check for struct ip_mreqn ***
2023 dnl *********************************
2024 AC_MSG_CHECKING(for struct ip_mreqn)
2025 AC_TRY_COMPILE([#include <netinet/in.h>], [
2026 struct ip_mreqn mreq;
2027 mreq.imr_address.s_addr = 0;
2029 # Yes, we have it...
2031 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2033 # We'll just have to try and use struct ip_mreq
2035 AC_MSG_CHECKING(for struct ip_mreq)
2036 AC_TRY_COMPILE([#include <netinet/in.h>], [
2037 struct ip_mreq mreq;
2038 mreq.imr_interface.s_addr = 0;
2040 # Yes, we have it...
2042 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2044 # No multicast support
2049 dnl **********************************
2050 dnl *** Check for getaddrinfo ***
2051 dnl **********************************
2052 AC_MSG_CHECKING(for getaddrinfo)
2057 getaddrinfo(NULL,NULL,NULL,NULL);
2059 # Yes, we have it...
2061 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2066 dnl **********************************
2067 dnl *** Check for gethostbyname2_r ***
2068 dnl **********************************
2069 AC_MSG_CHECKING(for gethostbyname2_r)
2075 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2077 # Yes, we have it...
2079 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2084 dnl **********************************
2085 dnl *** Check for gethostbyname2 ***
2086 dnl **********************************
2087 AC_MSG_CHECKING(for gethostbyname2)
2092 gethostbyname2(NULL,0);
2094 # Yes, we have it...
2096 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2101 dnl **********************************
2102 dnl *** Check for gethostbyname ***
2103 dnl **********************************
2104 AC_MSG_CHECKING(for gethostbyname)
2109 gethostbyname(NULL);
2111 # Yes, we have it...
2113 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2118 dnl **********************************
2119 dnl *** Check for getprotobyname ***
2120 dnl **********************************
2121 AC_MSG_CHECKING(for getprotobyname)
2126 getprotobyname(NULL);
2128 # Yes, we have it...
2130 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2135 dnl **********************************
2136 dnl *** Check for getnameinfo ***
2137 dnl **********************************
2138 AC_MSG_CHECKING(for getnameinfo)
2143 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2145 # Yes, we have it...
2147 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2153 dnl **********************************
2154 dnl *** Check for inet_ntop ***
2155 dnl **********************************
2156 AC_MSG_CHECKING(for inet_ntop)
2159 #include <arpa/inet.h>
2161 inet_ntop (0, NULL, NULL, 0);
2163 # Yes, we have it...
2165 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2170 dnl *****************************
2171 dnl *** Checks for libnsl ***
2172 dnl *****************************
2173 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2175 AC_CHECK_FUNCS(inet_pton inet_aton)
2177 dnl *****************************
2178 dnl *** Checks for libxnet ***
2179 dnl *****************************
2182 AC_MSG_CHECKING(for Solaris XPG4 support)
2183 if test -f /usr/lib/libxnet.so; then
2184 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2185 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2186 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2193 if test "$GCC" = "yes"; then
2194 CFLAGS="$CFLAGS -Wno-char-subscripts"
2199 dnl *****************************
2200 dnl *** Checks for libpthread ***
2201 dnl *****************************
2202 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2203 # and libpthread does not exist
2207 dnl Haiku has pthread in libroot (libc equiv)
2208 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2211 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2214 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2217 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2220 AC_CHECK_HEADERS(pthread.h)
2221 AC_CHECK_HEADERS(pthread_np.h)
2222 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2223 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2224 AC_CHECK_FUNCS(pthread_kill)
2225 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2226 AC_TRY_COMPILE([ #include <pthread.h>], [
2227 pthread_mutexattr_t attr;
2228 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2233 AC_ERROR(Posix system lacks support for recursive mutexes)
2235 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2236 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2237 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2239 dnl **********************************
2240 dnl *** Check for mincore ***
2241 dnl **********************************
2242 AC_MSG_CHECKING(for mincore)
2245 #include <sys/types.h>
2246 #include <sys/mman.h>
2248 mincore(NULL, 0, NULL);
2250 # Yes, we have it...
2252 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2257 dnl ***********************************
2258 dnl *** Checks for working __thread ***
2259 dnl ***********************************
2260 AC_MSG_CHECKING(for working __thread)
2261 if test "x$with_tls" != "x__thread"; then
2262 AC_MSG_RESULT(disabled)
2263 elif test "x$cross_compiling" = "xyes"; then
2264 AC_MSG_RESULT(cross compiling, assuming yes)
2267 #if defined(__APPLE__) && defined(__clang__)
2268 #error "__thread does not currently work with clang on Mac OS X"
2271 #include <pthread.h>
2273 static int res1, res2;
2275 void thread_main (void *arg)
2290 pthread_create (&t1, NULL, thread_main, 1);
2291 pthread_create (&t2, NULL, thread_main, 2);
2293 pthread_join (t1, NULL);
2294 pthread_join (t2, NULL);
2296 return !(res1 + res2 == 2);
2306 dnl **************************************
2307 dnl *** Checks for working sigaltstack ***
2308 dnl **************************************
2309 AC_MSG_CHECKING(for working sigaltstack)
2310 if test "x$with_sigaltstack" != "xyes"; then
2311 AC_MSG_RESULT(disabled)
2312 elif test "x$cross_compiling" = "xyes"; then
2313 AC_MSG_RESULT(cross compiling, assuming yes)
2320 #include <pthread.h>
2321 #include <sys/wait.h>
2322 #if defined(__FreeBSD__) || defined(__NetBSD__)
2323 #define SA_STACK SA_ONSTACK
2326 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2331 volatile char*__ptr = NULL;
2333 loop (void *ignored)
2342 struct sigaction sa;
2345 pthread_attr_t attr;
2347 sa.sa_sigaction = sigsegv_signal_handler;
2348 sigemptyset (&sa.sa_mask);
2349 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2350 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2351 perror ("sigaction");
2355 /* x86 darwin deliver segfaults using SIGBUS */
2356 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2357 perror ("sigaction");
2360 sas.ss_sp = malloc (SIGSTKSZ);
2361 sas.ss_size = SIGSTKSZ;
2363 if (sigaltstack (&sas, NULL) == -1) {
2364 perror ("sigaltstack");
2368 pthread_attr_init (&attr);
2369 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2370 printf ("pthread_create\n");
2394 for (i = 0; i < 300; ++i) {
2395 waitpid (son, &status, WNOHANG);
2396 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2401 kill (son, SIGKILL);
2407 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2414 dnl ********************************
2415 dnl *** Checks for semaphore lib ***
2416 dnl ********************************
2417 # 'Real Time' functions on Solaris
2418 # posix4 on Solaris 2.6
2419 # pthread (first!) on Linux
2420 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2422 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2423 AC_CHECK_FUNCS(shm_open)
2425 dnl ********************************
2426 dnl *** Checks for timezone stuff **
2427 dnl ********************************
2428 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2434 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2435 if test $ac_cv_struct_tm_gmtoff = yes; then
2436 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2438 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2443 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2444 if test $ac_cv_var_timezone = yes; then
2445 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2447 AC_ERROR(unable to find a way to determine timezone)
2451 dnl *********************************
2452 dnl *** Checks for math functions ***
2453 dnl *********************************
2454 AC_SEARCH_LIBS(sqrtf, m)
2455 if test "x$has_broken_apple_cpp" != "xyes"; then
2456 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2457 AC_TRY_LINK([#include <math.h>],
2459 AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2462 AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2463 AC_TRY_LINK([#include <math.h>],
2465 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2468 dnl ****************************************************************
2469 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2470 dnl *** have it in the library (duh)) ***
2471 dnl ****************************************************************
2472 AC_CHECK_FUNCS(poll)
2474 dnl *************************
2475 dnl *** Check for signbit ***
2476 dnl *************************
2477 AC_MSG_CHECKING(for signbit)
2478 AC_TRY_LINK([#include <math.h>], [
2479 int s = signbit(1.0);
2482 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2487 dnl **********************************
2489 dnl **********************************
2490 AC_CHECK_HEADERS(sys/epoll.h)
2492 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2493 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2494 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2499 AC_CHECK_HEADERS(sys/event.h)
2500 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2502 dnl **************************************
2503 dnl * Darwin has a race that prevents us from using reliably:
2504 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2505 dnl * Since kqueue is mostly used for scaling large web servers,
2506 dnl * and very few folks run Mono on large web servers on OSX, falling
2508 dnl **************************************
2509 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2510 if test "x$host_darwin" = "xno"; then
2511 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2515 dnl ******************************
2516 dnl *** Checks for SIOCGIFCONF ***
2517 dnl ******************************
2518 AC_CHECK_HEADERS(sys/ioctl.h)
2519 AC_CHECK_HEADERS(net/if.h, [], [],
2521 #ifdef HAVE_SYS_TYPES_H
2522 # include <sys/types.h>
2524 #ifdef HAVE_SYS_SOCKET_H
2525 # include <sys/socket.h>
2528 AC_MSG_CHECKING(for ifreq)
2531 #include <sys/ioctl.h>
2539 x = (void *) &ifr->ifr_addr;
2542 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2546 dnl **********************************
2547 dnl *** Checks for sin_len ***
2548 dnl **********************************
2549 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2551 #include <netinet/in.h>
2553 struct sockaddr_in saddr;
2554 saddr.sin_len = sizeof (saddr);
2557 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2561 dnl **********************************
2562 dnl *** Checks for sin6_len ***
2563 dnl **********************************
2564 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2566 #include <netinet/in.h>
2568 struct sockaddr_in6 saddr6;
2569 saddr6.sin6_len = sizeof (saddr6);
2572 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2576 dnl **********************************
2577 dnl *** Check for getifaddrs ***
2578 dnl **********************************
2579 AC_MSG_CHECKING(for getifaddrs)
2582 #include <sys/types.h>
2583 #include <sys/socket.h>
2584 #include <ifaddrs.h>
2588 # Yes, we have it...
2590 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2594 dnl **********************************
2595 dnl *** Check for if_nametoindex ***
2596 dnl **********************************
2597 AC_MSG_CHECKING(for if_nametoindex)
2600 #include <sys/types.h>
2601 #include <sys/socket.h>
2604 if_nametoindex(NULL);
2606 # Yes, we have it...
2608 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2613 dnl **********************************
2614 dnl *** Checks for proclib ***
2615 dnl **********************************
2616 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.)])
2617 dnl **********************************
2618 dnl *** Checks for MonoPosixHelper ***
2619 dnl **********************************
2620 AC_CHECK_HEADERS(checklist.h)
2621 AC_CHECK_HEADERS(pathconf.h)
2622 AC_CHECK_HEADERS(fstab.h)
2623 AC_CHECK_HEADERS(attr/xattr.h)
2624 AC_CHECK_HEADERS(sys/extattr.h)
2625 AC_CHECK_HEADERS(sys/sendfile.h)
2626 AC_CHECK_HEADERS(sys/statvfs.h)
2627 AC_CHECK_HEADERS(sys/statfs.h)
2628 AC_CHECK_HEADERS(sys/vfstab.h)
2629 AC_CHECK_HEADERS(sys/xattr.h)
2630 AC_CHECK_HEADERS(sys/mman.h)
2631 AC_CHECK_HEADERS(sys/param.h)
2632 AC_CHECK_HEADERS(sys/mount.h, [], [],
2634 #ifdef HAVE_SYS_PARAM_H
2635 # include <sys/param.h>
2638 AC_CHECK_HEADERS(sys/mount.h)
2639 AC_CHECK_FUNCS(confstr)
2640 AC_CHECK_FUNCS(seekdir telldir)
2641 AC_CHECK_FUNCS(getdomainname)
2642 AC_CHECK_FUNCS(setdomainname)
2643 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2644 AC_CHECK_FUNCS(setgroups)
2645 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2646 AC_CHECK_FUNCS(getfsstat)
2647 AC_CHECK_FUNCS(lutimes futimes)
2648 AC_CHECK_FUNCS(mremap)
2649 AC_CHECK_FUNCS(remap_file_pages)
2650 AC_CHECK_FUNCS(posix_fadvise)
2651 AC_CHECK_FUNCS(posix_fallocate)
2652 AC_CHECK_FUNCS(posix_madvise)
2653 AC_CHECK_FUNCS(vsnprintf)
2654 AC_CHECK_FUNCS(sendfile)
2655 AC_CHECK_FUNCS(gethostid sethostid)
2656 AC_CHECK_FUNCS(sethostname)
2657 AC_CHECK_FUNCS(statfs)
2658 AC_CHECK_FUNCS(fstatfs)
2659 AC_CHECK_FUNCS(statvfs)
2660 AC_CHECK_FUNCS(fstatvfs)
2661 AC_CHECK_FUNCS(stime)
2662 AC_CHECK_FUNCS(strerror_r)
2663 AC_CHECK_FUNCS(ttyname_r)
2664 AC_CHECK_FUNCS(psignal)
2665 AC_CHECK_FUNCS(getlogin_r)
2666 AC_CHECK_FUNCS(lockf)
2667 AC_CHECK_FUNCS(swab)
2668 AC_CHECK_FUNCS(setusershell endusershell)
2669 AC_CHECK_FUNCS(futimens utimensat)
2670 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2671 AC_CHECK_FUNCS(readv writev preadv pwritev)
2672 AC_CHECK_FUNCS(setpgid)
2673 AC_CHECK_FUNCS(system)
2674 AC_CHECK_FUNCS(fork execv execve)
2675 AC_CHECK_FUNCS(accept4)
2676 AC_CHECK_FUNCS(localtime_r)
2677 AC_CHECK_FUNCS(mkdtemp)
2678 AC_CHECK_SIZEOF(size_t)
2679 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2680 [#include <sys/types.h>
2681 #include <sys/stat.h>
2682 #include <unistd.h>])
2683 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2684 [#include <sys/types.h>
2685 #include <sys/stat.h>
2686 #include <unistd.h>])
2687 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2688 [#include <sys/time.h>])
2689 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2690 [#include <sys/socket.h>])
2691 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2692 [#include <unistd.h>
2693 #include <fcntl.h>])
2694 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2695 [#include <sys/uio.h>])
2696 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2697 [#include <sys/socket.h>])
2698 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2699 [#include <sys/poll.h>])
2700 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2701 [#include <sys/socket.h>])
2702 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2703 [#include <sys/socket.h>])
2704 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2705 [#include <netinet/in.h>])
2706 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2707 [#include <netinet/in.h>])
2708 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2709 [#include <sys/un.h>])
2710 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2711 [#include <sys/types.h>
2712 #include <sys/stat.h>
2713 #include <unistd.h>])
2714 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2715 [#include <time.h>])
2716 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2717 [#include <sys/time.h>
2718 #include <sys/types.h>
2719 #include <utime.h>])
2720 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2721 [#include <sys/time.h>])
2722 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2723 [#include <sys/types.h>
2724 #include <utime.h>])
2726 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2727 [#include <sys/types.h>
2728 #include <dirent.h>])
2730 [struct passwd.pw_gecos],,,
2731 [#include <sys/types.h>
2734 [struct statfs.f_flags],,,
2735 [#include <sys/types.h>
2736 #include <sys/vfs.h>])
2738 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2739 [#include <sys/types.h>
2740 #include <sys/stat.h>
2741 #include <unistd.h>])
2743 dnl Favour xattr through glibc, but use libattr if we have to
2744 AC_CHECK_FUNC(lsetxattr, ,
2745 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2749 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2751 [struct kinfo_proc.kp_proc],,,
2752 [#include <sys/types.h>
2753 #include <sys/param.h>
2754 #include <sys/sysctl.h>
2755 #include <sys/proc.h>
2758 dnl *********************************
2759 dnl *** Checks for Windows compilation ***
2760 dnl *********************************
2761 AC_CHECK_HEADERS(sys/time.h)
2762 AC_CHECK_HEADERS(sys/param.h)
2763 AC_CHECK_HEADERS(dirent.h)
2765 dnl ******************************************
2766 dnl *** Checks for OSX and iOS compilation ***
2767 dnl ******************************************
2768 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2770 dnl *********************************
2771 dnl *** Check for Console 2.0 I/O ***
2772 dnl *********************************
2773 AC_CHECK_HEADERS([curses.h])
2774 AC_CHECK_HEADERS([term.h], [], [],
2779 AC_CHECK_HEADERS([termios.h])
2781 dnl *********************************
2782 dnl *** Checks for random ***
2783 dnl *********************************
2784 if test x$host_darwin = xno; then
2785 AC_CHECK_HEADERS(sys/random.h)
2786 AC_CHECK_FUNCS(getrandom getentropy)
2789 dnl *********************************
2790 dnl *** Checks for Windows compilation ***
2791 dnl *********************************
2792 AC_CHECK_HEADERS(winternl.h)
2794 jdk_headers_found=no
2795 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
2796 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
2797 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
2798 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
2799 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
2800 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
2801 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
2803 dnl *********************************
2804 dnl *** Check for struct ip_mreqn ***
2805 dnl *********************************
2806 AC_MSG_CHECKING(for struct ip_mreqn)
2807 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2808 struct ip_mreqn mreq;
2809 mreq.imr_address.s_addr = 0;
2811 # Yes, we have it...
2813 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
2815 # We'll just have to try and use struct ip_mreq
2817 AC_MSG_CHECKING(for struct ip_mreq)
2818 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2819 struct ip_mreq mreq;
2820 mreq.imr_interface.s_addr = 0;
2822 # Yes, we have it...
2824 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
2826 # No multicast support
2831 dnl **********************************
2832 dnl *** Check for getaddrinfo ***
2833 dnl **********************************
2834 AC_MSG_CHECKING(for getaddrinfo)
2837 #include <winsock2.h>
2838 #include <ws2tcpip.h>
2840 getaddrinfo(NULL,NULL,NULL,NULL);
2842 # Yes, we have it...
2844 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2849 dnl **********************************
2850 dnl *** Check for gethostbyname ***
2851 dnl **********************************
2852 AC_MSG_CHECKING(for gethostbyname)
2855 #include <winsock2.h>
2856 #include <ws2tcpip.h>
2858 gethostbyname(NULL);
2860 # Yes, we have it...
2862 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2867 dnl **********************************
2868 dnl *** Check for getprotobyname ***
2869 dnl **********************************
2870 AC_MSG_CHECKING(for getprotobyname)
2873 #include <winsock2.h>
2874 #include <ws2tcpip.h>
2876 getprotobyname(NULL);
2878 # Yes, we have it...
2880 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2885 dnl **********************************
2886 dnl *** Check for getnameinfo ***
2887 dnl **********************************
2888 AC_MSG_CHECKING(for getnameinfo)
2891 #include <winsock2.h>
2892 #include <ws2tcpip.h>
2894 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2896 # Yes, we have it...
2898 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2903 dnl **********************************
2904 dnl *** Check for inet_ntop ***
2905 dnl **********************************
2906 AC_MSG_CHECKING(for inet_ntop)
2909 #include <winsock2.h>
2910 #include <ws2tcpip.h>
2912 inet_ntop (0, NULL, NULL, 0);
2914 # Yes, we have it...
2916 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2921 dnl **********************************
2922 dnl *** Check for inet_pton ***
2923 dnl **********************************
2924 AC_MSG_CHECKING(for inet_pton)
2927 #include <winsock2.h>
2928 #include <ws2tcpip.h>
2933 inet_pton (0, NULL, NULL);
2935 # Yes, we have it...
2937 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
2942 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
2943 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
2944 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
2945 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
2946 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
2947 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
2948 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
2952 AC_MSG_CHECKING(for socklen_t)
2954 #include <sys/types.h>
2955 #include <sys/socket.h>
2959 ac_cv_c_socklen_t=yes
2960 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
2966 AC_MSG_CHECKING(for array element initializer support)
2967 AC_TRY_COMPILE([#include <sys/socket.h>], [
2968 const int array[] = {[1] = 2,};
2970 # Yes, we have it...
2972 AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
2974 # We'll have to use signals
2978 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
2979 # Simply calling trunc (0.0) is no good since gcc will optimize the call away
2980 AC_TRY_LINK([#include <math.h>],
2981 [ static void *p = &trunc; ],
2983 AC_DEFINE(HAVE_TRUNC)
2989 if test "x$ac_cv_truncl" != "xyes"; then
2990 AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
2993 AC_CHECK_FUNCS(execvp)
2995 dnl ****************************
2996 dnl *** Look for /dev/random ***
2997 dnl ****************************
2999 AC_MSG_CHECKING([if usage of random device is requested])
3000 AC_ARG_ENABLE(dev-random,
3001 [ --disable-dev-random disable the use of the random device (enabled by default)],
3002 try_dev_random=$enableval, try_dev_random=yes)
3004 AC_MSG_RESULT($try_dev_random)
3008 NAME_DEV_RANDOM="/dev/srandom"
3011 dnl IBM i does not have /dev/random, use unblocking only
3014 NAME_DEV_RANDOM="/dev/urandom"
3017 dnl Win32 does not have /dev/random, they have their own method...
3019 *-mingw*|*-*-cygwin*)
3020 ac_cv_have_dev_random=no
3023 dnl Everywhere else, it's /dev/random
3026 NAME_DEV_RANDOM="/dev/random"
3030 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3032 dnl Now check if the device actually exists
3034 if test "x$try_dev_random" = "xyes"; then
3035 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3036 [if test -r "$NAME_DEV_RANDOM" ; then
3037 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3038 if test "x$ac_cv_have_dev_random" = "xyes"; then
3039 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3042 AC_MSG_CHECKING(for random device)
3043 ac_cv_have_dev_random=no
3044 AC_MSG_RESULT(has been disabled)
3047 if test "x$host_win32" = "xyes"; then
3048 AC_DEFINE(HAVE_CRYPT_RNG)
3051 if test "x$ac_cv_have_dev_random" = "xno" \
3052 && test "x$host_win32" = "xno"; then
3055 *** A system-provided entropy source was not found on this system.
3056 *** Because of this, the System.Security.Cryptography random number generator
3057 *** will throw a NotImplemented exception.
3059 *** If you are seeing this message, and you know your system DOES have an
3060 *** entropy collection in place, please contact <crichton@gimp.org> and
3061 *** provide information about the system and how to access the random device.
3063 *** Otherwise you can install either egd or prngd and set the environment
3064 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3068 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)
3070 AC_MSG_CHECKING([if big-arrays are to be enabled])
3071 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)
3072 if test "x$enable_big_arrays" = "xyes" ; then
3073 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3074 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3076 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3079 AC_MSG_RESULT($enable_big_arrays)
3085 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3087 if test "x$enable_dtrace" = "xyes"; then
3088 if test "x$has_dtrace" = "xno"; then
3089 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3091 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3092 if test "x$DTRACE" = "xno"; then
3093 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3095 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3096 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3102 if test "x$enable_dtrace" = "xyes"; then
3103 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3105 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3108 DTRACEFLAGS="-arch ppc64"
3111 DTRACEFLAGS="-arch x86_64"
3120 DTRACEFLAGS="-arch ppc"
3123 DTRACEFLAGS="-arch i386"
3130 AC_SUBST(DTRACEFLAGS)
3136 AC_CHECK_HEADERS([sys/sdt.h])
3138 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3139 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3141 dnl **************************
3142 dnl *** AOT cross offsets ***
3143 dnl **************************
3145 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3146 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3152 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3153 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3154 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)
3155 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3157 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3159 if test "x$enable_llvm" = "xdefault"; then
3160 enable_llvm=$enable_llvm_default
3163 if test "x$enable_llvm" = "xyes"; then
3164 if test "x$with_llvm" != "x"; then
3165 LLVM_CONFIG=$with_llvm/bin/llvm-config
3166 if test x$host_win32 = xyes; then
3167 LLVM_CONFIG=$LLVM_CONFIG.exe
3169 if test ! -x $LLVM_CONFIG; then
3170 AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3173 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3174 if test "x$LLVM_CONFIG" = "xno"; then
3175 AC_MSG_ERROR([llvm-config not found.])
3179 llvm_codegen="x86codegen"
3182 llvm_codegen="armcodegen"
3186 if test "x$host_win32" = "xno"; then
3188 # Should be something like '2.6' or '2.7svn'
3189 llvm_version=`$LLVM_CONFIG --version`
3190 llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3191 AC_MSG_CHECKING(LLVM version)
3192 AC_MSG_RESULT($llvm_version $llvm_api_version)
3193 if echo $llvm_version | grep -q 'mono'; then
3194 if test "x$enable_llvm_version_check" = "xyes"; then
3195 if test "$llvm_version" != "$expected_llvm_version"; then
3196 AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3200 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.])
3203 # The output of --cflags seems to include optimizations flags too
3204 if test $llvm_api_version -gt 100; then
3205 # The --cflags argument includes all kinds of warnings -pendantic etc.
3206 LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3207 LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3209 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'`
3210 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'`
3212 # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3213 # from LLVM classes.
3214 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3215 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3216 # This might include empty lines
3217 LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3218 llvm_jit_supported=yes
3219 llvm_jit_libs="jit mcjit $llvm_codegen"
3220 if test "x$host" != "x$target"; then
3221 # No need for jit libs
3222 llvm_jit_supported=no
3224 elif test $llvm_api_version -gt 100; then
3225 llvm_jit_libs="orcjit $llvm_codegen"
3227 LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3228 if test "x$LLVM_LIBS" = "x"; then
3229 echo "$LLVM_CONFIG --libs failed."
3232 LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3233 # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3234 if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3235 LLVM_LIBS="$LLVM_LIBS -lc++"
3237 LLVM_LIBS="$LLVM_LIBS -lstdc++"
3240 expected_llvm_version="3.4svn-mono-mono/e656cac"
3243 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"
3244 LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3245 LLVM_LDFLAGS="-L$with_llvm/lib"
3246 LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3247 LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3248 -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo \
3249 -lLLVMARMAsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler \
3250 -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc \
3251 -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT \
3252 -lLLVMAnalysis -lLLVMTarget \
3253 -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3254 -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3255 -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3256 -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3257 -lLLVMSupport -lstdc++"
3258 LLVM_LIBS="$LLVM_LIBS $LLVM_SYSTEM_LIBS"
3260 llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3261 llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3264 if test "x$llvm_api_version" = "x"; then
3265 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3266 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3268 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3269 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3272 AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3274 AC_SUBST(LLVM_CFLAGS)
3275 AC_SUBST(LLVM_CXXFLAGS)
3277 AC_SUBST(LLVM_LDFLAGS)
3278 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3281 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3282 if test "x$enable_loadedllvm" = "xyes"; then
3283 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3285 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3287 if test "x$enable_llvm" = "xyes"; then
3288 enable_llvm_runtime=yes
3290 if test "x$enable_llvm_runtime" = "xyes"; then
3291 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3293 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3296 ACCESS_UNALIGNED="yes"
3300 SQLITE="libsqlite.so.0"
3301 SQLITE3="libsqlite3.so.0"
3303 GDKX11="libgdk-x11-2.0.so.0"
3304 GTKX11="libgtk-x11-2.0.so.0"
3305 XINERAMA="libXinerama.so.1"
3307 sizeof_register="SIZEOF_VOID_P"
3310 boehm_supported=true
3314 if test "x$enable_wasm" = "xyes"; then
3318 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3319 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3331 ACCESS_UNALIGNED="no"
3333 AC_MSG_CHECKING(for mips n32)
3335 #if _MIPS_SIM != _ABIN32
3352 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3357 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3358 # int astruct __attribute__ ((visibility ("hidden")));
3361 # void *p = &astruct;
3363 # gcc -fPIC --shared -o libfoo.so foo.c
3365 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3366 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3367 have_visibility_hidden=no
3370 have_visibility_hidden=no
3379 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3386 openbsd*|freebsd*|kfreebsd-gnu*)
3393 x86_64-*-* | amd64-*-*)
3396 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3397 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3404 BTLS_PLATFORM=x86_64
3405 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3410 BTLS_PLATFORM=x86_64
3411 boehm_supported=false
3413 openbsd*|freebsd*|kfreebsd-gnu*)
3416 BTLS_PLATFORM=x86_64
3423 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3429 ACCESS_UNALIGNED="no"
3436 if test x"$GCC" = xyes; then
3437 # We don't support v8 cpus
3438 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3440 if test x"$AR" = xfalse; then
3441 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3444 *-mingw*|*-*-cygwin*)
3445 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3446 have_visibility_hidden=no
3449 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3450 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3451 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3452 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3454 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3455 CFLAGS="$CFLAGS -mminimal-toc"
3458 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3463 dnl on AIX/PASE, shared libraries can be inside archives
3464 dnl if they are, we specify them by lib.a(lib.so)
3465 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3466 LIBC="libc.a(shr_64.o)"
3467 INTL="libintl.a(libintl.so.9)"
3478 ACCESS_UNALIGNED="no"
3479 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3485 ACCESS_UNALIGNED="no"
3486 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3491 ACCESS_UNALIGNED="no"
3493 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3496 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3498 arm*-linux*-gnueabi)
3499 BTLS_PLATFORM=armsoft
3506 ACCESS_UNALIGNED="no"
3507 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3510 # https://lkml.org/lkml/2012/7/15/133
3513 boehm_supported=false
3516 BTLS_PLATFORM=aarch64
3517 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3522 ACCESS_UNALIGNED="yes"
3523 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
3529 if test "x$host" != "x$target"; then
3530 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
3532 enable_support_build=no
3538 ACCESS_UNALIGNED="no"
3539 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3540 # Can't use tls, since it depends on the runtime detection of tls offsets
3541 # in mono-compiler.h
3546 AC_DEFINE(TARGET_WATCHOS, 1, [...])
3550 powerpc64-ps3-linux-gnu)
3552 arch_target=powerpc64
3553 AC_DEFINE(TARGET_PS3, 1, [...])
3554 # It would be better to just use TARGET_POWERPC64, but lots of code already
3556 AC_DEFINE(__mono_ppc64__, 1, [...])
3557 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3559 target_byte_order=G_BIG_ENDIAN
3561 powerpc64-xbox360-linux-gnu)
3563 arch_target=powerpc64
3564 AC_DEFINE(TARGET_XBOX360, 1, [...])
3565 # It would be better to just use TARGET_POWERPC64, but lots of code already
3568 target_byte_order=G_BIG_ENDIAN
3573 AC_DEFINE(TARGET_ARM, 1, [...])
3574 ACCESS_UNALIGNED="no"
3575 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3576 # Can't use tls, since it depends on the runtime detection of tls offsets
3577 # in mono-compiler.h
3581 armv7l-unknown-linux-gnueabi*)
3583 CPPFLAGS="$CPPFLAGS"
3585 armv5-*-linux-androideabi*)
3586 AC_DEFINE(TARGET_ANDROID, 1, [...])
3587 CPPFLAGS="$CPPFLAGS"
3589 *-linux-androideabi*)
3590 AC_DEFINE(TARGET_ANDROID, 1, [...])
3591 CPPFLAGS="$CPPFLAGS"
3598 AC_DEFINE(TARGET_ARM, 1, [...])
3599 ACCESS_UNALIGNED="no"
3600 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3601 # Can't use tls, since it depends on the runtime detection of tls offsets
3602 # in mono-compiler.h
3609 AC_DEFINE(TARGET_X86, 1, [...])
3610 CPPFLAGS="$CPPFLAGS"
3611 # Can't use tls, since it depends on the runtime detection of tls offsets
3612 # in mono-compiler.h
3618 AC_DEFINE(TARGET_ANDROID, 1, [...])
3625 AC_DEFINE(TARGET_AMD64, 1, [...])
3626 CPPFLAGS="$CPPFLAGS"
3627 # Can't use tls, since it depends on the runtime detection of tls offsets
3628 # in mono-compiler.h
3634 AC_DEFINE(TARGET_ANDROID, 1, [...])
3641 AC_DEFINE(TARGET_AMD64, 1, [...])
3642 AC_DEFINE(TARGET_PS4, 1, [...])
3643 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
3644 CPPFLAGS="$CPPFLAGS"
3645 # Can't use tls, since it depends on the runtime detection of tls offsets
3646 # in mono-compiler.h
3654 AC_DEFINE(TARGET_ARM64, 1, [...])
3655 CPPFLAGS="$CPPFLAGS"
3656 # Can't use tls, since it depends on the runtime detection of tls offsets
3657 # in mono-compiler.h
3662 AC_DEFINE(TARGET_ANDROID, 1, [...])
3670 AC_MSG_ERROR([Cross compiling is not supported for target $target])
3676 AC_DEFINE(TARGET_X86, 1, [...])
3679 AC_DEFINE(TARGET_AMD64, 1, [...])
3682 AC_DEFINE(TARGET_ARM, 1, [...])
3685 AC_DEFINE(TARGET_ARM64, 1, [...])
3688 AC_DEFINE(TARGET_POWERPC, 1, [...])
3691 AC_DEFINE(TARGET_POWERPC, 1, [...])
3692 AC_DEFINE(TARGET_POWERPC64, 1, [...])
3695 AC_DEFINE(TARGET_S390X, 1, [...])
3698 AC_DEFINE(TARGET_MIPS, 1, [...])
3701 AC_DEFINE(TARGET_SPARC, 1, [...])
3704 AC_DEFINE(TARGET_SPARC64, 1, [...])
3710 AC_DEFINE(HOST_X86, 1, [...])
3713 AC_DEFINE(HOST_AMD64, 1, [...])
3716 AC_DEFINE(HOST_ARM, 1, [...])
3719 AC_DEFINE(HOST_ARM64, 1, [...])
3722 AC_DEFINE(HOST_POWERPC, 1, [...])
3725 AC_DEFINE(HOST_POWERPC, 1, [...])
3726 AC_DEFINE(HOST_POWERPC64, 1, [...])
3729 AC_DEFINE(HOST_S390X, 1, [...])
3732 AC_DEFINE(HOST_MIPS, 1, [...])
3735 AC_DEFINE(HOST_SPARC, 1, [...])
3738 AC_DEFINE(HOST_SPARC64, 1, [...])
3750 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
3751 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
3753 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
3755 if test "x$enable_vtune" = "xyes"; then
3756 if test "x$with_vtune" = "x"; then
3757 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
3759 VTUNE_PATH=$with_vtune
3761 VTUNE_INCLUDE=$VTUNE_PATH/include
3764 VTUNE_LIB=$VTUNE_PATH/lib32
3767 VTUNE_LIB=$VTUNE_PATH/lib64
3770 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
3773 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
3774 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
3776 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
3777 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
3780 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
3781 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
3783 AC_SUBST(VTUNE_LIBS)
3784 AC_SUBST(VTUNE_CFLAGS)
3786 dnl Use GCC atomic ops if they work on the target.
3787 if test x$GCC = "xyes"; then
3789 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
3790 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
3795 if test "x$target_mach" = "xyes"; then
3797 if test "x$TARGET_SYS" = "xWATCHOS"; then
3798 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
3799 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3800 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3802 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
3803 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3804 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3805 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3808 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
3809 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
3810 #error fail this for ios
3813 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
3814 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
3815 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
3818 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3819 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3820 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3825 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
3828 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
3830 if test "x$sizeof_register" = "x4"; then
3831 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
3832 elif test "x$sizeof_register" = "x8"; then
3833 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
3835 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
3838 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
3840 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
3841 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
3842 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
3843 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
3845 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
3848 if test "x$have_visibility_hidden" = "xyes"; then
3849 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
3852 if test "x$have_deprecated" = "xyes"; then
3853 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
3857 dnl Simple Generational checks (sgen)
3860 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
3861 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
3862 if test x$buildsgen = xyes; then
3863 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
3864 SGEN_DEFINES="-DHAVE_SGEN_GC"
3867 if test x$with_sgen_default_concurrent != xno; then
3868 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
3869 conc_gc_msg=" (concurrent by default)"
3872 if test "x$gc_msg" = "x"; then
3873 gc_msg="sgen$conc_gc_msg"
3875 gc_msg="sgen$conc_gc_msg and $gc_msg"
3878 AC_SUBST(SGEN_DEFINES)
3879 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
3881 jit_status="Building and using the JIT"
3889 INTL="libintl.dylib"
3890 SQLITE="libsqlite.0.dylib"
3891 SQLITE3="libsqlite3.0.dylib"
3893 GDKX11="libgdk-x11-2.0.dylib"
3894 GTKX11="libgtk-x11-2.0.dylib"
3899 SQLITE="libsqlite.so"
3900 SQLITE3="libsqlite3.so"
3910 SQLITE="libsqlite.so"
3911 SQLITE3="libsqlite3.so"
3916 SQLITE="libsqlite.so"
3917 SQLITE3="libsqlite3.so"
3921 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
3922 AC_MSG_CHECKING(for the soname of libX11.so)
3923 for i in $x_libraries $dlsearch_path; do
3925 if test -f $i/libX11.so.$r; then
3932 if test "x$X11" = "xlibX11.so"; then
3933 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
3941 ######################################
3943 ######################################
3947 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
3948 if test x$GCC = xyes; then
3949 GNUC_UNUSED='__attribute__((__unused__))'
3950 GNUC_NORETURN='__attribute__((__noreturn__))'
3952 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
3955 AC_SUBST(GNUC_PRETTY)
3956 AC_SUBST(GNUC_UNUSED)
3957 AC_SUBST(GNUC_NORETURN)
3958 AC_SUBST(BREAKPOINT)
3960 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
3963 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
3979 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
3984 arm*-darwin*|aarch64*-*)
3985 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
3988 ORDER=G_LITTLE_ENDIAN
3991 LDFLAGS="$LDFLAGS -ltextencoding"
3994 CFLAGS="$CFLAGS -pthread"
3995 LDFLAGS="$LDFLAGS -pthread"
4006 # Defined for all targets/platforms using classic Windows API support.
4007 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4008 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4010 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf strerror_r)
4011 AC_CHECK_FUNCS(getrlimit)
4012 AC_CHECK_FUNCS(fork execv execve)
4014 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4016 if test x$with_overridable_allocators = xyes; then
4017 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4018 AC_MSG_NOTICE([Overridable allocator support enabled])
4020 AC_MSG_NOTICE([Overridable allocator support disabled])
4024 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4025 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4026 # removed once support for 10.6 is dropped.
4028 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4030 if test x$target_osx = xyes; then
4031 AC_CHECK_FUNCS(getpwuid_r)
4032 elif test x$target_ios = xno; then
4033 AC_CHECK_FUNCS(strndup getpwuid_r)
4036 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4038 AC_SEARCH_LIBS(sqrtf, m)
4040 # nanosleep may not be part of libc, also search it in other libraries
4041 AC_SEARCH_LIBS(nanosleep, rt)
4043 AC_SEARCH_LIBS(dlopen, dl)
4044 old_ldflags="${LDFLAGS}"
4045 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4046 if test $lt_cv_prog_gnu_ld = yes; then
4047 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4050 *-*-aix*|*-*-os400*)
4053 dnl Try to use export-dynamic anyways
4054 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4058 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4059 if test $found_export_dynamic = no; then
4060 LDFLAGS="${old_ldflags}"
4063 AC_MSG_CHECKING(for varargs macros)
4065 int foo (int i, int j);
4066 #define bar(...) foo (1, __VA_ARGS__)
4070 ],have_iso_varargs=yes,have_iso_varargs=no)
4071 AC_MSG_RESULT($have_iso_varargs)
4072 G_HAVE_ISO_VARARGS=0
4073 if test "x$have_iso_varargs" = "xyes"; then
4074 G_HAVE_ISO_VARARGS=1
4076 AC_SUBST(G_HAVE_ISO_VARARGS)
4078 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)
4079 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+="-liconv -lcharset"])])
4080 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4081 AC_SUBST(HAVE_ALLOCA_H)
4083 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
4084 GPOINTER_TO_INT="((gint) (ptr))"
4085 GPOINTER_TO_UINT="((guint) (ptr))"
4086 GINT_TO_POINTER="((gpointer) (v))"
4087 GUINT_TO_POINTER="((gpointer) (v))"
4090 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
4091 GPOINTER_TO_INT="((gint)(long) (ptr))"
4092 GPOINTER_TO_UINT="((guint)(long) (ptr))"
4093 GINT_TO_POINTER="((gpointer)(glong) (v))"
4094 GUINT_TO_POINTER="((gpointer)(gulong) (v))"
4097 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
4098 GPOINTER_TO_INT="((gint)(long long) (ptr))"
4099 GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
4100 GINT_TO_POINTER="((gpointer)(long long) (v))"
4101 GUINT_TO_POINTER="((gpointer)(unsigned long long) (v))"
4103 GSIZE_FORMAT='"I64u"'
4105 AC_MSG_ERROR([unsupported pointer size])
4108 AC_SUBST(GPOINTER_TO_INT)
4109 AC_SUBST(GPOINTER_TO_UINT)
4110 AC_SUBST(GINT_TO_POINTER)
4111 AC_SUBST(GUINT_TO_POINTER)
4113 AC_SUBST(GSIZE_FORMAT)
4114 AC_SUBST(G_GUINT64_FORMAT)
4115 AC_SUBST(G_GINT64_FORMAT)
4116 AC_SUBST(G_GUINT32_FORMAT)
4117 AC_SUBST(G_GINT32_FORMAT)
4120 # END OF EGLIB CHECKS
4123 AC_ARG_WITH([libgdiplus],
4124 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4125 [], [with_libgdiplus=installed])
4127 # default install location
4128 libgdiplus_install_loc=libgdiplus${libsuffix}
4131 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4135 case $with_libgdiplus in
4142 if test x$cross_compiling = xno; then
4143 if test x$host_darwin = xyes; then
4144 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4146 libgdiplus_install_loc=$a
4154 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4157 /*) # absolute path, assume it is an install location
4158 libgdiplus_loc=$with_libgdiplus
4159 libgdiplus_install_loc=$with_libgdiplus
4163 libgdiplus_loc=`pwd`/$with_libgdiplus
4166 AC_SUBST(libgdiplus_loc)
4167 AC_SUBST(libgdiplus_install_loc)
4169 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)
4170 if test "x$icall_symbol_map" = "xyes"; then
4171 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4174 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4175 if test "x$icall_export" = "xyes"; then
4176 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4179 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4180 if test "x$icall_tables" = "xno"; then
4181 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4184 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4186 if test "x$with_tls" = "x__thread"; then
4187 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4188 # Pass the information to libgc
4189 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4190 AC_MSG_CHECKING(if the tls_model attribute is supported)
4191 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4194 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4200 if test ${TARGET} = ARM; then
4201 dnl ******************************************
4202 dnl *** Check to see what FPU is available ***
4203 dnl ******************************************
4204 AC_MSG_CHECKING(which FPU to use)
4207 # This is a bit tricky:
4209 # if (__ARM_PCS_VFP) {
4210 # /* mfloat-abi=hard == VFP with hard ABI */
4211 # } elif (!__SOFTFP__) {
4212 # /* mfloat-abi=softfp == VFP with soft ABI */
4214 # /* mfloat-abi=soft == no VFP */
4217 # The exception is iOS (w/ GCC) where none of the above
4218 # are defined (but iOS always uses the 'softfp' ABI).
4220 # No support for FPA.
4225 # iOS GCC always uses the 'softfp' ABI.
4226 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4230 # Are we using the 'hard' ABI?
4231 if test x$fpu = xNONE; then
4232 AC_TRY_COMPILE([], [
4233 #ifndef __ARM_PCS_VFP
4234 #error "Float ABI is not 'hard'"
4243 # No 'hard' ABI. 'soft' or 'softfp'?
4244 if test x$fpu = xNONE; then
4245 AC_TRY_COMPILE([], [
4247 #error "Float ABI is not 'softfp'"
4256 if test x$arm_fpu != x; then
4261 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4264 dnl *********************************************
4265 dnl *** Check which ARM version(s) we can use ***
4266 dnl *********************************************
4267 AC_MSG_CHECKING(which ARM version to use)
4269 AC_TRY_COMPILE([], [
4270 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4271 #error Not on ARM v5.
4279 AC_TRY_COMPILE([], [
4280 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4281 #error Not on ARM v6.
4290 AC_TRY_COMPILE([], [
4291 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4292 #error Not on ARM v7.
4302 AC_MSG_RESULT($arm_ver)
4304 if test x$arm_v5 = xyes; then
4305 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4306 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4309 if test x$arm_v6 = xyes; then
4310 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4311 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4314 if test x$arm_v7 = xyes; then
4315 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4316 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4320 if test ${TARGET} = unknown; then
4321 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4322 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4325 if test "x$platform_android" = "xyes"; then
4326 case "x${TARGET}" in
4331 BTLS_PLATFORM=android-armv5
4335 BTLS_PLATFORM=android-armv6
4339 BTLS_PLATFORM=android-armv7
4348 BTLS_PLATFORM=android-v8a
4352 BTLS_PLATFORM=android-x86
4356 BTLS_PLATFORM=android-x64
4364 if test ${ACCESS_UNALIGNED} = no; then
4365 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4368 if test x$host_darwin = xyes; then
4369 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4371 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4372 [AC_MSG_RESULT([no])],
4374 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4376 RANLIB="$RANLIB -no_warning_for_no_symbols"
4377 AC_MSG_RESULT([yes])
4384 # Pass CPPFLAGS to libgc configure
4385 # We should use a separate variable for this to avoid passing useless and
4386 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4387 # This should be executed late so we pick up the final version of CPPFLAGS
4388 # The problem with this approach, is that during a reconfigure, the main
4389 # configure scripts gets invoked with these arguments, so we use separate
4390 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4391 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4392 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4393 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4395 # Don't pass -finstrument-for-thread-suspension in,
4396 # if these are instrumented it will be very bad news
4397 # (infinite recursion, undefined parking behavior, etc)
4398 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4399 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\""
4400 if test "x$support_boehm" = "xyes"; then
4401 AC_CONFIG_SUBDIRS(libgc)
4407 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4408 if test x$with_malloc_mempools = xyes; then
4410 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4415 DISABLE_MCS_DOCS=default
4416 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4417 if test x$with_mcs_docs != xyes; then
4418 DISABLE_MCS_DOCS=yes
4421 if test -n "$INSTALL_4_x_TRUE"; then :
4422 DISABLE_MCS_DOCS=yes
4424 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4425 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4428 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)],[
4429 if test x$with_lazy_gc_thread_creation != xno ; then
4430 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4432 ], [with_lazy_gc_thread_creation=no])
4434 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])
4436 if test x$with_cooperative_gc = xdefault; then
4437 with_cooperative_gc=$with_cooperative_gc_default
4440 if test x$with_cooperative_gc != xno; then
4441 AC_DEFINE(USE_COOP_GC,1,[Enable cooperative stop-the-world garbage collection.])
4444 AM_CONDITIONAL([ENABLE_COOP], [test x$with_cooperative_gc != xno])
4446 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],[
4448 if test x$enable_checked_build != x ; then
4449 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4451 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4452 eval "mono_checked_build_test_enable_$feature='yes'"
4455 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4456 eval "mono_checked_build_test_enable_gc='yes'"
4457 eval "mono_checked_build_test_enable_metadata='yes'"
4458 eval "mono_checked_build_test_enable_thread='yes'"
4459 eval "mono_checked_build_test_enable_private_types='yes'"
4462 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4463 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4466 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4467 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4470 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4471 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4474 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4475 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4479 AC_CHECK_HEADER([malloc.h],
4480 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
4481 [Define to 1 if you have /usr/include/malloc.h.])],,)
4483 if test x"$GCC" = xyes; then
4484 # Implicit function declarations are not 64 bit safe
4485 # Do this late, since this causes lots of configure tests to fail
4486 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4487 # jay has a lot of implicit declarations
4488 JAY_CFLAGS="-Wno-implicit-function-declaration"
4491 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4492 # instead of libmono-static.a
4493 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4494 LIBMONO_LA=libmini-static.la
4496 if test x$buildsgen = xyes; then
4497 LIBMONO_LA=libmonosgen-$API_VER.la
4499 LIBMONO_LA=libmonoboehm-$API_VER.la
4502 AC_SUBST(LIBMONO_LA)
4508 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4509 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
4511 AM_CONDITIONAL(BTLS, test x$enable_btls = xyes)
4514 if test "x$enable_btls" = "xyes"; then
4515 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4516 if test "x$CMAKE" = "xno"; then
4517 AC_MSG_ERROR("cmake not found")
4520 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4527 case "$BTLS_PLATFORM" in
4533 btls_cflags="$btls_cflags -arch i386"
4544 btls_cflags="-DOPENSSL_NO_ASM=1"
4550 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4553 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4556 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4559 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4562 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4565 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4568 AC_MSG_ERROR(Invalid BTLS platform)
4571 if test "x$platform_android" = "xyes"; then
4573 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4574 if test "x$with_btls_android_ndk" != "x"; then
4575 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4577 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4581 if test "x$btls_arch" != "x"; then
4582 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4585 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4587 AC_SUBST(BTLS_CFLAGS)
4588 AC_SUBST(BTLS_PLATFORM)
4589 AC_SUBST(BTLS_CMAKE_ARGS)
4591 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4596 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4598 if test x$DISABLE_MCS_DOCS = xyes; then
4605 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
4606 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4607 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4609 libmono_ldflags="$libmono_ldflags $LIBS"
4611 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4612 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4613 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4614 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4615 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4616 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4617 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4618 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4619 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4620 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4621 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4622 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4623 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4624 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4625 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4626 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4627 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4628 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4630 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4640 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4641 AC_SUBST(arch_target)
4646 #This must always be defined when building the runtime
4647 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4649 mono_build_root=`pwd`
4650 AC_SUBST(mono_build_root)
4652 mono_runtime=mono/mini/mono
4653 AC_SUBST(mono_runtime)
4655 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.6.0/tools/csc.exe
4657 if test $csc_compiler = mcs; then
4658 CSC=$mcs_topdir/class/lib/build/mcs.exe
4663 mono_cfg_root=$mono_build_root/runtime
4664 if test x$host_win32 = xyes; then
4665 if test "x$cross_compiling" = "xno"; then
4666 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4667 CSC=`cygpath -m -a $CSC`
4668 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4670 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4673 mono_cfg_dir=$mono_cfg_root/etc
4675 AC_SUBST(mono_cfg_dir)
4679 AC_CONFIG_FILES([po/mcs/Makefile.in])
4681 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4682 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4684 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4687 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4689 *) reldir=$depth/$srcdir ;;
4691 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4692 cd runtime/etc/mono/1.0
4693 rm -f machine.config
4694 $LN_S $reldir/data/net_1_1/machine.config machine.config
4698 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4701 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4703 *) reldir=$depth/$srcdir ;;
4705 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4706 cd runtime/etc/mono/2.0
4707 rm -f machine.config
4708 $LN_S $reldir/data/net_2_0/machine.config machine.config
4712 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4715 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4717 *) reldir=$depth/$srcdir ;;
4719 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4720 cd runtime/etc/mono/2.0
4722 $LN_S $reldir/data/net_2_0/web.config web.config
4726 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4729 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4731 *) reldir=$depth/$srcdir ;;
4733 $ac_aux_dir/install-sh -d runtime/etc/mono/
4734 cd runtime/etc/mono/
4736 $LN_S $reldir/data/browscap.ini browscap.ini
4740 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4741 [ depth=../../../../..
4743 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4745 *) reldir=$depth/$srcdir ;;
4747 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4748 cd runtime/etc/mono/2.0/Browsers
4749 rm -f Compat.browser
4750 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4754 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4755 [ depth=../../../../..
4757 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4759 *) reldir=$depth/$srcdir ;;
4761 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4762 cd runtime/etc/mono/4.0/Browsers
4763 rm -f Compat.browser
4764 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4768 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4769 [ depth=../../../../..
4771 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4773 *) reldir=$depth/$srcdir ;;
4775 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4776 cd runtime/etc/mono/4.5/Browsers
4777 rm -f Compat.browser
4778 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4782 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4785 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4787 *) reldir=$depth/$srcdir ;;
4789 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4790 cd runtime/etc/mono/4.0
4791 rm -f machine.config
4792 $LN_S $reldir/data/net_4_0/machine.config machine.config
4796 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4799 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4801 *) reldir=$depth/$srcdir ;;
4803 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4804 cd runtime/etc/mono/4.0
4806 $LN_S $reldir/data/net_4_0/web.config web.config
4810 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
4813 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4815 *) reldir=$depth/$srcdir ;;
4817 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4818 cd runtime/etc/mono/4.5
4819 rm -f machine.config
4820 $LN_S $reldir/data/net_4_5/machine.config machine.config
4824 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
4827 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4829 *) reldir=$depth/$srcdir ;;
4831 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4832 cd runtime/etc/mono/4.5
4834 $LN_S $reldir/data/net_4_5/web.config web.config
4838 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])
4839 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])
4844 acceptance-tests/Makefile
4846 scripts/mono-find-provides
4847 scripts/mono-find-requires
4851 mono/utils/jemalloc/Makefile
4852 mono/metadata/Makefile
4856 mono/arch/x86/Makefile
4857 mono/arch/amd64/Makefile
4858 mono/arch/ppc/Makefile
4859 mono/arch/sparc/Makefile
4860 mono/arch/s390x/Makefile
4861 mono/arch/arm/Makefile
4862 mono/arch/arm64/Makefile
4863 mono/arch/mips/Makefile
4866 mono/tests/tests-config
4867 mono/tests/gc-descriptors/Makefile
4868 mono/tests/testing_gac/Makefile
4869 mono/unit-tests/Makefile
4870 mono/benchmark/Makefile
4872 mono/profiler/Makefile
4874 mono/eglib/eglib-config.h
4876 ikvm-native/Makefile
4881 data/net_2_0/Makefile
4882 data/net_4_0/Makefile
4883 data/net_4_5/Makefile
4884 data/net_2_0/Browsers/Makefile
4885 data/net_4_0/Browsers/Makefile
4886 data/net_4_5/Browsers/Makefile
4893 data/mono-options.pc
4894 data/mono-lineeditor.pc
4900 data/system.web.extensions_1.0.pc
4901 data/system.web.extensions.design_1.0.pc
4902 data/system.web.mvc.pc
4903 data/system.web.mvc2.pc
4904 data/system.web.mvc3.pc
4905 data/aspnetwebstack.pc
4911 tools/locale-builder/Makefile
4913 tools/monograph/Makefile
4914 tools/pedump/Makefile
4920 # Update all submodules recursively to ensure everything is checked out
4921 $srcdir/scripts/update_submodules.sh
4923 if test x$host_win32 = xyes; then
4924 # Get rid of 'cyg' prefixes in library names
4925 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
4926 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
4927 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
4928 # executable doesn't work...
4929 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
4932 if test x$host_darwin = xyes; then
4933 # This doesn't seem to be required and it slows down parallel builds
4934 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
4939 NONE) prefix=$ac_default_prefix ;;
4941 case $exec_prefix in
4942 NONE) exec_prefix='${prefix}' ;;
4946 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
4947 # any existing config.make. This allows people to share the same source tree
4948 # with different build directories, one native and one cross
4950 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
4952 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
4954 echo "prefix=$prefix" > $mcs_topdir/build/config.make
4955 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
4956 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
4957 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
4958 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
4959 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
4960 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
4961 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
4962 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
4965 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
4966 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
4969 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
4972 [myver=$($AWK 'BEGIN {
4973 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
4974 if(length(vsplit [1]) > 4) {
4975 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
4977 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
4980 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
4981 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
4983 if test x$host_darwin = xyes; then
4984 echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
4985 elif test x$host_win32 = xyes; then
4986 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
4988 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
4991 if test x$host_darwin = xyes; then
4992 echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
4993 elif test x$host_win32 = xyes; then
4994 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
4996 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
4999 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5000 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5003 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5004 enable_system_aot=yes
5007 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5008 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5011 if test x$DISABLE_MCS_DOCS = xyes; then
5012 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5015 if test x$has_extension_module != xno; then
5016 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5019 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5021 if test "x$test_bcl_opt" = "xyes"; then
5022 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5025 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5027 if test $csc_compiler = mcs; then
5028 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5031 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5032 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5033 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5034 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5037 if test "x$AOT_MODE" != "x" ; then
5038 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5041 if test "x$enable_btls" = "xyes"; then
5042 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5049 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5051 btls_platform_string=
5052 if test x$enable_btls = xyes; then
5053 if test x$btls_android = xyes; then
5054 btls_platform_string=" (android:$BTLS_PLATFORM)"
5056 btls_platform_string=" ($BTLS_PLATFORM)"
5062 C# Compiler: $csc_compiler
5069 SIGALTSTACK: $with_sigaltstack
5071 BigArrays: $enable_big_arrays
5072 DTrace: $enable_dtrace
5073 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5074 Spectre: $spectre_mitigation_status
5077 .NET 4.x: $with_profile4_x
5078 Xamarin.Android: $with_monodroid
5079 Xamarin.iOS: $with_monotouch
5080 Xamarin.WatchOS: $with_monotouch_watch
5081 Xamarin.TVOS: $with_monotouch_tv
5082 Xamarin.Mac: $with_xammac
5083 Windows AOT: $with_winaot
5085 Unreal: $with_unreal
5086 WebAssembly: $with_wasm
5087 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5088 JNI support: $jdk_headers_found
5089 libgdiplus: $libgdiplus_msg
5091 BTLS: $enable_btls$btls_platform_string
5092 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5095 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5096 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)