1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.21.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`
36 # This is the version of the corlib-runtime interface. When
37 # making changes to this interface (by changing the layout
38 # of classes the runtime knows about, changing icall signature or
39 # semantics etc), change this variable.
41 # This must be unique relative to corlib interface/semantics.
43 # Generate it with uuidgen. For example:
44 # perl -pi.bak -e "s/^MONO_CORLIB_VERSION=\S+/MONO_CORLIB_VERSION=`uuidgen`/" configure.ac
46 # There is no ordering of corlib versions, no old or new,
47 # the runtime expects an exact match.
49 MONO_CORLIB_VERSION=E06DCE2D-7852-4BBA-AD9F-54D67EEF1FF9
52 # Put a quoted #define in config.h.
53 # Substitute @MONO_CORLIB_VERSION@ unquoted.
55 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
56 AC_SUBST(MONO_CORLIB_VERSION)
60 echo "Run configure using ./configure --host=i686-pc-mingw32"
64 # In case of cygwin, override LN_S, irrespective of what it determines.
65 # The build uses cygwin, but the actual runtime doesn't.
67 *cygwin* ) LN_S='cp -p';;
75 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
76 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
77 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
78 CFLAGS_FOR_LIBGC=$CFLAGS
79 CPPFLAGS_FOR_BTLS=$CPPFLAGS
80 CFLAGS_FOR_BTLS=$CFLAGS
82 # libgc uses some deprecated APIs
83 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
86 # These are the flags that need to be stored in the mono.pc file for
87 # compiling code that will embed Mono
91 AC_SUBST(libmono_cflags)
92 AC_SUBST(libmono_ldflags)
94 # Variable to have relocatable .pc files (lib, or lib64)
95 # realpath isn't always available, and requires that all but the tip of the provided
96 # path exists. Fall back to the old behaviour, but realpath allows depth >1
97 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
98 # too deep for the old method to work
99 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
100 AC_SUBST(reloc_libdir)
102 # Set to yes if Unix sockets cannot be created in an anonymous namespace
105 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
106 extra_runtime_ldflags=""
108 # Thread configuration inspired by sleepycat's db
109 AC_MSG_CHECKING([host platform characteristics])
126 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
127 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
129 libgc_threads=pthreads
132 *-mingw*|*-*-cygwin*)
133 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
134 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
137 if test "x$cross_compiling" = "xno"; then
138 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
142 if test "x$host" = "x$target"; then
147 # Windows 7 or later is required
148 CPPFLAGS="$CPPFLAGS -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
149 LDFLAGS="$LDFLAGS -lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
150 libmono_cflags="-mms-bitfields -mwindows"
151 libmono_ldflags="-mms-bitfields -mwindows"
156 with_sgen_default_concurrent=yes
158 # This forces libgc to use the DllMain based thread registration code on win32
159 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
162 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
163 libmono_cflags="-D_REENTRANT"
164 LDFLAGS="$LDFLAGS -pthread"
165 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
166 libmono_ldflags="-pthread"
169 libgc_threads=pthreads
172 with_sgen_default_concurrent=yes
175 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
176 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
177 libmono_ldflags="-lpthread -pthread"
179 libgc_threads=pthreads
183 with_sgen_default_concurrent=yes
187 LDFLAGS="$LDFLAGS -lutil"
188 if test "x$PTHREAD_CFLAGS" = "x"; then
189 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
192 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
193 libmono_cflags="$PTHREAD_CFLAGS"
195 if test "x$PTHREAD_LIBS" = "x"; then
196 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
197 libmono_ldflags="-pthread"
199 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
200 libmono_ldflags="$PTHREAD_LIBS"
202 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
204 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
206 libgc_threads=pthreads
209 with_sgen_default_concurrent=yes
212 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
213 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
214 if test "x$disable_munmap" != "xyes"; then
215 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
217 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
218 LDFLAGS="$LDFLAGS -pthread"
220 AC_DEFINE(PTHREAD_POINTER_ID)
222 libgc_threads=pthreads
226 with_sgen_default_concurrent=yes
230 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
231 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
233 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
234 if test "x$disable_munmap" != "xyes"; then
235 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
237 libmono_cflags="-D_REENTRANT"
239 libgc_threads=pthreads
246 # Android doesn't support boehm, as it's missing <link.h>
250 # isinf(3) requires -lm
251 LDFLAGS="$LDFLAGS -lm"
253 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
254 # PAGE_SIZE; breaks mono/io-layer/collection.c
255 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
256 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
257 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
259 # to bypass the underscore linker check, can't work when cross-compiling
265 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
266 if test "x$disable_munmap" != "xyes"; then
267 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
269 libmono_cflags="-D_REENTRANT"
271 libgc_threads=pthreads
273 if test "x$cross_compiling" != "xno"; then
274 # to bypass the underscore linker check, not
275 # available during cross-compilation
289 # https://bugzilla.novell.com/show_bug.cgi?id=504411
293 with_sgen_default_concurrent=yes
296 echo "nacl no longer supported."
300 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
301 # +ESdbgasm only valid on bundled cc on RISC
302 # silently ignored for ia64
303 if test $GCC != "yes"; then
304 CFLAGS="$CFLAGS +ESdbgasm"
305 # Arrange for run-time dereferencing of null
306 # pointers to produce a SIGSEGV signal.
307 LDFLAGS="$LDFLAGS -z"
309 CFLAGS="$CFLAGS +ESdbgasm"
310 LDFLAGS="$LDFLAGS -z"
311 libmono_cflags="-D_REENTRANT"
312 libmono_ldflags="-lpthread"
313 libgc_threads=pthreads
318 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
320 libmono_cflags="-D_REENTRANT"
321 libgc_threads=pthreads
324 enable_solaris_tar_check=yes
327 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
330 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
331 libmono_cflags="-D_THREAD_SAFE"
333 AC_DEFINE(PTHREAD_POINTER_ID)
334 AC_DEFINE(USE_MACH_SEMA, 1, [...])
336 libgc_threads=pthreads
338 if test "x$cross_compiling" = "xyes"; then
339 has_broken_apple_cpp=yes
341 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
342 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
343 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
345 dnl Snow Leopard and newer config.guess reports as this
347 BROKEN_DARWIN_FLAGS="-arch i386"
348 BROKEN_DARWIN_CPPFLAGS=""
349 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
350 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
351 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
352 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
353 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
354 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
355 with_sgen_default_concurrent=yes
358 with_sgen_default_concurrent=yes
370 dnl BSD_SOURCE is for getifaddrs
371 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
372 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
374 LIBS="$LIBS -lnetwork -ltextencoding"
376 AC_DEFINE(PTHREAD_POINTER_ID)
377 dnl Haiku does not support static TLS with __thread
379 libgc_threads=pthreads
384 dnl Set up a 64-bit build
385 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
387 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
388 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
389 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
390 dnl specifiy 64-bit mode for tools.
391 AR="/usr/bin/ar -X64"
392 NM="/usr/bin/nm -X64"
393 dnl SGen is the future (changes to Boehm support code would be
394 dnl required if you wish to re-enable Boehm)
399 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
401 dnl use pthread TLS, __thread has issues with the compiler flags we use
403 dnl ppc Linux is the same? test further
407 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
414 if test x$need_link_unlink = xyes; then
415 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
418 if test x$host_win32 = xyes; then
419 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
422 if test x$target_win32 = xyes; then
423 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
426 if test x$host_darwin = xyes; then
427 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
430 # Defined for all targets/platforms using classic Windows API support.
431 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
432 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
434 AC_SUBST(extra_runtime_ldflags)
435 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
436 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
437 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
438 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
439 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
440 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
441 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
442 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
443 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
445 if test -z "$HOST_DARWIN_TRUE"; then :
446 PLATFORM_AOT_SUFFIX=.dylib
449 if test -z "$HOST_LINUX_TRUE"; then :
450 PLATFORM_AOT_SUFFIX=.so
453 if test -z "$HOST_WIN32_TRUE"; then :
454 PLATFORM_AOT_SUFFIX=.dll
457 AC_SUBST(PLATFORM_AOT_SUFFIX)
459 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
461 AC_CHECK_TOOL(CC, gcc, gcc)
463 AC_CHECK_TOOL(CXX, g++, g++)
469 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
471 # Set ASFLAGS if not already set.
472 : ${CCASFLAGS='$(CFLAGS)'}
476 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
477 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
478 if test "x$CXX" = "xg++"; then
479 if test "x$GXX" != "xyes"; then
480 # automake/libtool is so broken, it requires g++ even if the c++ sources
481 # are inside automake conditionals
482 AC_MSG_ERROR([You need to install g++])
486 dnl may require a specific autoconf version
487 dnl AC_PROG_CC_FOR_BUILD
488 dnl CC_FOR_BUILD not automatically detected
490 CFLAGS_FOR_BUILD=$CFLAGS
492 if test "x$cross_compiling" = "xyes"; then
497 AC_SUBST(CC_FOR_BUILD)
498 AC_SUBST(CFLAGS_FOR_BUILD)
500 AC_SUBST(BUILD_EXEEXT)
502 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
503 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
508 # This causes monodis to not link correctly
509 #AC_DISABLE_FAST_INSTALL
511 #lookup makedev() header
515 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
518 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
519 AC_SUBST(export_ldflags)
521 # Test whenever ld supports -version-script
525 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 copyfile.h)
526 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)
527 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
528 [], [], [#include <stddef.h>
529 #include <sys/socket.h>
530 #include <linux/socket.h>])
532 AC_CHECK_HEADERS(sys/user.h, [], [],
534 #ifdef HAVE_SYS_PARAM_H
535 # include <sys/param.h>
539 AC_CHECK_HEADERS(linux/serial.h)
541 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
542 if test x$have_zlib = xyes; then
543 AC_TRY_COMPILE([#include <zlib.h>], [
544 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
546 #error No good zlib found
549 AC_MSG_RESULT(Using system zlib)
550 zlib_msg="system zlib"
551 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
553 AC_MSG_RESULT(Using embedded zlib)
555 zlib_msg="bundled zlib"
559 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
560 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
562 # for mono/metadata/debug-symfile.c
563 AC_CHECK_HEADERS(elf.h)
566 AC_CHECK_HEADERS(poll.h)
567 AC_CHECK_HEADERS(sys/poll.h)
568 AC_CHECK_HEADERS(sys/wait.h)
569 AC_CHECK_HEADERS(grp.h)
570 AC_CHECK_HEADERS(syslog.h)
571 AC_CHECK_FUNCS(vsyslog)
574 AC_CHECK_HEADERS(wchar.h)
576 # for Linux statfs support
577 AC_CHECK_HEADERS(linux/magic.h)
579 # For Android NDK unified headers
580 if test x$platform_android = xyes; then
581 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
582 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
584 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
585 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
586 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
587 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
588 # doesn't contain the required definitions (NDK 14)
589 if test x$have_android_signal_inlines = xyes; then
590 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
592 AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
594 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
598 android_sigrtminmax_work=yes
601 android_sigrtminmax_work=no
605 if test x$android_sigrtminmax_work = xno; then
606 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
610 # Attempt to detect whether we're using Android NDK unified headers
611 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
612 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
614 android_unified_headers=no
615 if test x$have_android_api_level = xyes; then
616 if test x$have_android_versioning = xyes; then
617 AC_MSG_CHECKING([whether using Android NDK unified headers])
619 # Both macros are defined only in the NDK unified headers
622 #include <android/api-level.h>
623 #include <android/versioning.h>
625 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
627 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
631 android_unified_headers=yes
634 android_unified_headers=no
640 if test x$android_unified_headers = xyes; then
641 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
645 # not 64 bit clean in cross-compile
646 AC_CHECK_SIZEOF(void *)
647 AC_CHECK_SIZEOF(long)
650 AC_CHECK_SIZEOF(long long)
652 AC_CACHE_CHECK([for clang],
665 AC_ARG_ENABLE(visibility-hidden,
666 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
667 disable_visibility_hidden=yes, disable_visibility_hidden=no)
670 if test x"$GCC" = xyes; then
671 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
672 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
674 # We require C99 with some GNU extensions, e.g. `linux` macro
675 CFLAGS="$CFLAGS -std=gnu99"
677 # The runtime code does not respect ANSI C strict aliasing rules
678 CFLAGS="$CFLAGS -fno-strict-aliasing"
680 # We rely on signed overflow to behave
681 CFLAGS="$CFLAGS -fwrapv"
683 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
684 if test x"$disable_visibility_hidden" = xno; then
685 # Don't export any symbols by default
686 SHARED_CFLAGS="-fvisibility=hidden"
687 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
691 # Check for the normal version, since gcc ignores unknown -Wno options
692 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
693 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
697 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
703 if test "x$mono_cv_clang" = "xyes"; then
704 # https://bugzilla.samba.org/show_bug.cgi?id=8118
705 WARN="$WARN -Qunused-arguments"
706 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
707 # We rely on zero length arrays in structs
708 WARN="$WARN -Wno-zero-length-array"
711 # The Sun Forte compiler complains about inline functions that access static variables
712 # so disable all inlining.
715 CFLAGS="$CFLAGS -Dinline="
719 CFLAGS="$WARN $CFLAGS -g"
720 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
721 CPPFLAGS="$WARN $CPPFLAGS -g"
723 # Where's the 'mcs' source tree?
724 if test -d $srcdir/mcs; then
730 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
731 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
732 mcsdir=$with_mcs_path
736 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
739 # A sanity check to catch cases where the package was unpacked
740 # with an ancient tar program (Solaris)
742 AC_ARG_ENABLE(solaris-tar-check,
743 [ --disable-solaris-tar-check disable solaris tar check],
744 do_solaris_tar_check=no, do_solaris_tar_check=yes)
746 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
747 AC_MSG_CHECKING(integrity of package)
748 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
752 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"
753 AC_MSG_ERROR([$errorm])
757 if test "x$with_mcs_path" != "x"; then
758 mcs_topdir=$(cd "$mcsdir" && pwd)
759 mcs_topdir_from_srcdir=$mcs_topdir
761 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
762 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
765 # Convert mcs_topdir* paths to Windows syntax.
766 if test x$cross_compiling$host_win32 = xnoyes; then
767 mcs_topdir=$(cygpath -m $mcs_topdir)
768 case $mcs_topdir_from_srcdir in
770 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
775 AC_SUBST([mcs_topdir])
776 AC_SUBST([mcs_topdir_from_srcdir])
778 # gettext: prepare the translation directories.
779 # we do not configure the full gettext, as we consume it dynamically from C#
782 if test "x$USE_NLS" = "xyes"; then
783 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
785 if test "x$HAVE_MSGFMT" = "xno"; then
786 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
790 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
793 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
794 if test x$with_crosspkgdir = "x"; then
795 if test -s $PKG_CONFIG_PATH; then
796 pkg_config_path=$PKG_CONFIG_PATH
799 pkg_config_path=$with_crosspkgdir
800 PKG_CONFIG_PATH=$pkg_config_path
801 export PKG_CONFIG_PATH
805 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
806 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
807 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
809 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
810 if test x$werror_flag = xyes; then
811 WERROR_CFLAGS="-Werror"
813 AC_SUBST([WERROR_CFLAGS])
814 AC_SUBST([SHARED_CFLAGS])
816 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
818 AC_SUBST(GLIB_CFLAGS)
820 # Enable support for fast thread-local storage
821 # Some systems have broken support, so we allow to disable it.
822 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
824 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
825 # This does not work on some platforms (bug #55253)
826 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
828 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
829 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
830 # Same as --with-shared_mono=no
831 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
833 if test "x$enable_static" = "xno"; then
837 if test "x$enable_shared" = "xno"; then
841 if test "x$enable_libraries" = "xno"; then
845 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
847 if test "x$host_win32" = "xyes"; then
848 # Boehm GC requires the runtime to be in its own dll
852 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
853 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
854 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
855 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
857 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
858 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
859 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
861 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
862 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
866 # Pass it to libgc as well
867 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
874 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
876 if test x$enable_small_config = xyes; then
877 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
878 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
881 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)
883 DISABLED_FEATURES=none
886 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
887 AC_MSG_CHECKING([CSharp compiler to use])
888 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
889 if test x$withval = xmcs; then
891 elif test x$withval = xroslyn; then
893 elif test x$withval = xdefault; then
896 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
898 ],[csc_compiler=default])
900 if test $csc_compiler = default; then
901 if test $endian = big; then
903 elif test $endian = little; then
905 powerpc*) csc_compiler=mcs ;;
906 *) csc_compiler=roslyn ;;
912 AC_MSG_RESULT($csc_compiler)
914 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
915 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
916 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])
919 if test x$target_win32 = xyes; then
921 with_jemalloc_assert=no
922 with_jemalloc_always=no
925 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
926 if test "x$with_jemalloc_assert" = "xyes"; then
927 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
928 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
929 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
932 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
933 if test "x$with_jemalloc_always" = "xyes"; then
935 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
936 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
937 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
940 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
941 if test "x$with_jemalloc" = "xyes"; then
942 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
943 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
944 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
946 if test "x$target_mach" = "xyes"; then
947 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
950 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
951 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
953 AC_SUBST(JEMALLOC_CFLAGS)
954 AC_SUBST(JEMALLOC_CPPFLAGS)
955 AC_SUBST(JEMALLOC_LDFLAGS)
956 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
960 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
961 # MERP - The MS telemetry profile. Not for general use.
962 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
964 # Structured crashes are not merp crashes. Structured crashes are json dumps made by mono during crashes. Merp upload is going to use the dumping code is a very specific way, and is enabled at runtime with an icall.
966 #--with-crash_privacy=yes --with-structured_crashes=no means we don't wanna dump in non-merp-enabled builds, and we want to not send symbol strings. This is going to be the default pair of settings for VS4Mac.
967 #--with-crash_privacy=yes --with-structured_crashes=yes means you want to see crashes on your console, and you want to not see unmanaged symbol names. This is an option for proprietary apps that have manual bugs filed.
968 #--with-crash_privacy=no --with-structured_crashes=no means you want to see no crash dumps on failure and you don't care about privacy. This is how you'd set a "don't want it, don't care" configuration.
969 #--with-crash_privacy=no --with-structured_crashes=yes means you want full crashes and you want to see them in the terminal, not on telemetry. This is going to be how we build for CI.
971 AC_ARG_WITH(crash-privacy, [ --with-crash_privacy=yes,no If you want your crashes to not include names of symbols present in the binary. ], [], [with_crash_privacy=yes])
972 AC_ARG_WITH(structured-crashes, [ --with-structured_crashes=yes,no If you want your unmanaged crashes to result in a small crash dump file. ], [], [with_structured_crashes=yes])
973 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
975 if test "x$with_crash_privacy" = "xyes"; then
976 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
979 if test "x$with_structured_crashes" = "xno"; then
980 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
984 *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
989 if test "x$crash_reporting" != "xyes"; then
990 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
991 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
994 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
995 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
997 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
998 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1000 if test x$enable_monodroid = xyes; then
1001 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1004 if test x$enable_monotouch = xyes; then
1005 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1008 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1010 # mono/corefx/native has a lot of invalid C++98 in its headers
1011 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1012 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1013 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1014 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1016 AC_SUBST(CXXFLAGS_COMMON)
1018 if test "x$enable_cxx" = "xyes"; then
1020 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1022 # -std=gnu99 -xc++ is not allowed and errors.
1023 CXX_REMOVE_CFLAGS=-std=gnu99
1024 # These give warnings and should be removed. They are C-only.
1025 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1026 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1027 # Likewise with CentOS 6 gcc 4.4.
1028 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1030 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1031 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1032 # generates a warning every time we run gcc which is very unsightly.
1033 # The warning is for e.g. sprintf(foo, "") which can just be
1034 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1035 # and completely legal and valid.
1036 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1037 # Alternatively, just run $CXX -xc++ -c /dev/null.
1039 ORIG_CXXFLAGS=$CXXFLAGS
1040 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1041 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1042 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1044 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1045 CXXFLAGS=$ORIG_CXXFLAGS
1048 AC_SUBST(CXX_ADD_CFLAGS)
1049 AC_SUBST(CXX_REMOVE_CFLAGS)
1052 # Set the build profiles and options before things which use them
1055 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])
1056 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1057 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1058 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])
1059 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])
1060 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1061 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1062 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])
1063 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])
1064 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1065 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1066 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1067 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1070 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,bitcode,unreal Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1071 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])
1072 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])
1073 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])
1076 dnl Spectre compiler mitigation flag checks
1078 if test "x$with_spectre_mitigation" = "xyes"; then
1079 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1081 SPECTRE_INDIRECT_BRANCH_KIND=
1082 case "x$with_spectre_indirect_branch_choice" in
1083 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1084 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1085 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1086 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1087 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1090 SPECTRE_FUNCTION_RETURN_KIND=""
1091 case "x$with_spectre_function_return_choice" in
1092 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1093 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1094 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1095 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1096 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1099 AX_CHECK_COMPILE_FLAG(
1100 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1101 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1104 AX_CHECK_COMPILE_FLAG(
1105 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1106 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1109 if test "x$SPECTRE_CFLAGS" != "x" ; then
1110 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1111 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1112 spectre_mitigation_status="mitigation enabled"
1115 spectre_mitigation_status="no mitigation"
1119 dnl Profile defaults
1121 TEST_PROFILE=default
1122 enable_llvm_default=no
1124 with_profile4_x_default=no
1125 with_monodroid_default=no
1126 with_monotouch_default=no
1127 with_monotouch_watch_default=no
1128 with_monotouch_tv_default=no
1129 with_xammac_default=no
1130 with_testing_aot_hybrid_default=no
1131 with_testing_aot_full_default=no
1132 with_winaot_default=no
1133 with_orbis_default=no
1134 with_unreal_default=no
1135 with_wasm_default=no
1137 with_bitcode_default=no
1138 enable_cooperative_suspend_default=no
1139 enable_hybrid_suspend_default=no
1141 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1143 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1145 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1146 DISABLE_MCS_DOCS_default=yes
1147 elif test x$with_runtime_preset = xnet_4_x; then
1148 with_profile4_x_default=yes
1149 elif test x$with_runtime_preset = xall; then
1150 with_profile4_x_default=yes
1151 with_monodroid_default=yes
1152 with_monotouch_default=yes
1153 with_monotouch_watch_default=yes
1154 with_monotouch_tv_default=yes
1155 with_xammac_default=yes
1156 with_winaot_default=yes
1157 with_orbis_default=yes
1158 with_unreal_default=yes
1159 with_wasm_default=yes
1160 with_testing_aot_hybrid_default=yes
1161 with_testing_aot_full_default=yes
1162 elif test x$with_runtime_preset = xbitcode; then
1163 DISABLE_MCS_DOCS_default=yes
1164 with_testing_aot_full_default=yes
1165 with_bitcode_default=yes
1166 enable_cooperative_suspend_default=yes
1167 TEST_PROFILE=testing_aot_full
1168 enable_llvm_default=yes
1170 mono_feature_disable_com='yes'
1171 mono_feature_disable_remoting='yes'
1172 mono_feature_disable_reflection_emit_save='yes'
1173 mono_feature_disable_reflection_emit='yes'
1174 mono_feature_disable_appdomains='yes'
1176 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1177 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1179 elif test x$with_runtime_preset = xfullaot; then
1180 DISABLE_MCS_DOCS_default=yes
1181 with_testing_aot_full_default=yes
1182 TEST_PROFILE=testing_aot_full
1184 mono_feature_disable_com='yes'
1185 mono_feature_disable_remoting='yes'
1186 mono_feature_disable_reflection_emit_save='yes'
1187 mono_feature_disable_reflection_emit='yes'
1188 mono_feature_disable_appdomains='yes'
1190 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1191 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1193 elif test x$with_runtime_preset = xfullaot_llvm; then
1194 DISABLE_MCS_DOCS_default=yes
1195 with_testing_aot_full_default=yes
1196 TEST_PROFILE=testing_aot_full
1198 mono_feature_disable_com='yes'
1199 mono_feature_disable_remoting='yes'
1200 mono_feature_disable_reflection_emit_save='yes'
1201 mono_feature_disable_reflection_emit='yes'
1202 mono_feature_disable_appdomains='yes'
1204 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1205 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1207 elif test x$with_runtime_preset = xhybridaot; then
1208 DISABLE_MCS_DOCS_default=yes
1209 with_testing_aot_hybrid_default=yes
1210 TEST_PROFILE=testing_aot_hybrid
1212 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1213 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1214 elif test x$with_runtime_preset = xhybridaot_llvm; then
1215 DISABLE_MCS_DOCS_default=yes
1216 with_testing_aot_hybrid_default=yes
1217 TEST_PROFILE=testing_aot_hybrid
1219 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1220 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1221 elif test x$with_runtime_preset = xaot; then
1222 with_profile4_x_default=yes
1224 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1227 DISABLE_MCS_DOCS_default=yes
1228 elif test x$with_runtime_preset = xaot_llvm; then
1229 with_profile4_x_default=yes
1231 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1234 DISABLE_MCS_DOCS_default=yes
1235 elif test x$with_runtime_preset = xwinaot; then
1236 DISABLE_MCS_DOCS_default=yes
1237 with_winaot_default=yes
1240 mono_feature_disable_com='yes'
1241 mono_feature_disable_remoting='yes'
1242 mono_feature_disable_reflection_emit_save='yes'
1243 mono_feature_disable_reflection_emit='yes'
1244 mono_feature_disable_appdomains='yes'
1246 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1247 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1249 elif test x$with_runtime_preset = xorbis; then
1250 DISABLE_MCS_DOCS_default=yes
1251 with_orbis_default=yes
1254 mono_feature_disable_com='yes'
1255 mono_feature_disable_remoting='yes'
1256 mono_feature_disable_reflection_emit_save='yes'
1257 mono_feature_disable_reflection_emit='yes'
1258 mono_feature_disable_appdomains='yes'
1260 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1261 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1263 elif test x$with_runtime_preset = xunreal; then
1264 DISABLE_MCS_DOCS_default=yes
1265 with_unreal_default=yes
1268 mono_feature_disable_com='yes'
1269 mono_feature_disable_remoting='yes'
1270 mono_feature_disable_appdomains='no'
1272 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1273 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1274 elif test x$with_runtime_preset = xwasm; then
1275 DISABLE_MCS_DOCS_default=yes
1276 with_wasm_default=yes
1279 mono_feature_disable_com='yes'
1280 mono_feature_disable_remoting='yes'
1281 mono_feature_disable_reflection_emit_save='yes'
1282 mono_feature_disable_reflection_emit='yes'
1283 mono_feature_disable_appdomains='yes'
1285 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1286 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1288 with_profile4_x_default=yes
1291 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1292 AC_SUBST(AOT_BUILD_FLAGS)
1293 AC_SUBST(AOT_RUN_FLAGS)
1294 # For llvmonlycheck + fullaotcheck
1295 AC_SUBST(INVARIANT_AOT_OPTIONS)
1298 AC_SUBST(TEST_PROFILE)
1300 if test "x$with_profile4_x" = "xdefault"; then
1301 with_profile4_x=$with_profile4_x_default
1303 if test "x$with_monodroid" = "xdefault"; then
1304 with_monodroid=$with_monodroid_default
1306 if test "x$with_monotouch" = "xdefault"; then
1307 with_monotouch=$with_monotouch_default
1309 if test "x$with_monotouch_watch" = "xdefault"; then
1310 with_monotouch_watch=$with_monotouch_watch_default
1312 if test "x$with_monotouch_tv" = "xdefault"; then
1313 with_monotouch_tv=$with_monotouch_tv_default
1315 if test "x$with_bitcode" = "xdefault"; then
1316 with_bitcode=$with_bitcode_default
1318 if test "x$with_xammac" = "xdefault"; then
1319 with_xammac=$with_xammac_default
1321 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1322 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1324 if test "x$with_testing_aot_full" = "xdefault"; then
1325 with_testing_aot_full=$with_testing_aot_full_default
1327 if test "x$with_winaot" = "xdefault"; then
1328 with_winaot=$with_winaot_default
1330 if test "x$with_orbis" = "xdefault"; then
1331 with_orbis=$with_orbis_default
1333 if test "x$with_unreal" = "xdefault"; then
1334 with_unreal=$with_unreal_default
1336 if test "x$with_wasm" = "xdefault"; then
1337 with_wasm=$with_wasm_default
1341 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1342 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1343 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1344 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1345 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1346 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1347 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1348 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1349 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1350 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1351 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1352 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1353 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1354 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"])
1355 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1357 default_profile=net_4_x
1358 if test -z "$INSTALL_MONODROID_TRUE"; then :
1359 default_profile=monodroid
1361 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1362 default_profile=monotouch
1364 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1365 default_profile=xammac
1367 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1368 default_profile=testing_aot_hybrid
1370 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1371 default_profile=testing_aot_full
1373 if test -z "$INSTALL_WINAOT_TRUE"; then :
1374 default_profile=winaot
1376 if test -z "$INSTALL_ORBIS_TRUE"; then :
1377 default_profile=orbis
1379 if test -z "$INSTALL_UNREAL_TRUE"; then :
1380 default_profile=unreal
1382 if test -z "$INSTALL_WASM_TRUE"; then :
1383 default_profile=wasm
1385 if test -z "$INSTALL_4_x_TRUE"; then :
1386 default_profile=net_4_x
1388 DEFAULT_PROFILE=$default_profile
1389 AC_SUBST(DEFAULT_PROFILE)
1392 # End build profile configuration
1395 if test x$USE_NLS = xprofile_default; then
1397 AC_MSG_CHECKING([NLS used])
1399 # We make the default value for USE_NLS
1400 # "no" on OSX because it isn't available on most
1401 # default OSX installs. The most common configurations will
1402 # all disable it, so this saves us typing.
1403 if test x$host_darwin = xyes; then
1410 AC_MSG_RESULT([$USE_NLS])
1413 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1414 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1415 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1416 security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1418 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1419 eval "mono_feature_disable_$feature='yes'"
1421 DISABLED_FEATURES=$enable_minimal
1422 disabled="Disabled: $enable_minimal"
1425 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1427 if test "x$mono_feature_disable_aot" = "xyes"; then
1428 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1429 enable_system_aot=no
1430 AC_MSG_NOTICE([Disabled AOT compiler])
1433 if test "x$mono_feature_disable_profiler" = "xyes"; then
1434 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1435 AC_MSG_NOTICE([Disabled support for the profiler])
1437 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1439 if test "x$mono_feature_disable_decimal" = "xyes"; then
1440 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1441 AC_MSG_NOTICE([Disabled support for decimal])
1444 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1445 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1446 AC_MSG_NOTICE([Disabled support for P/Invoke])
1449 if test "x$mono_feature_disable_debug" = "xyes"; then
1450 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1451 AC_MSG_NOTICE([Disabled support for runtime debugging])
1454 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1455 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1456 mono_feature_disable_reflection_emit_save=yes
1457 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1460 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1461 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1462 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1465 if test "x$mono_feature_disable_large_code" = "xyes"; then
1466 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1467 AC_MSG_NOTICE([Disabled support for large assemblies])
1470 if test "x$mono_feature_disable_logging" = "xyes"; then
1471 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1472 AC_MSG_NOTICE([Disabled support for logging])
1475 if test "x$mono_feature_disable_com" = "xyes"; then
1476 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1477 AC_MSG_NOTICE([Disabled COM support])
1480 if test "x$mono_feature_disable_ssa" = "xyes"; then
1481 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1482 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1485 if test "x$mono_feature_disable_generics" = "xyes"; then
1486 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1487 AC_MSG_NOTICE([Disabled Generics Support])
1490 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1491 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1492 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1495 if test "x$mono_feature_disable_portability" = "xyes"; then
1496 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1497 AC_MSG_NOTICE([Disabled IO Portability layer])
1500 if test "x$mono_feature_disable_attach" = "xyes"; then
1501 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1502 AC_MSG_NOTICE([Disabled agent attach])
1505 if test "x$mono_feature_disable_verifier" = "xyes"; then
1506 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1507 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1510 if test "x$mono_feature_disable_jit" = "xyes"; then
1511 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1512 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1515 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1517 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1518 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1519 AC_MSG_NOTICE([Disabled the interpreter])
1522 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1524 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1525 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1528 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1530 if test "x$mono_feature_disable_simd" = "xyes"; then
1531 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1532 AC_MSG_NOTICE([Disabled SIMD support])
1535 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1536 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1537 AC_MSG_NOTICE([Disabled Soft Debugger.])
1540 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1542 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1543 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1544 AC_MSG_NOTICE([Disabled Performance Counters.])
1546 if test "x$mono_feature_disable_normalization" = "xyes"; then
1547 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1548 AC_MSG_NOTICE([Disabled String normalization support.])
1551 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1552 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1553 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1554 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1557 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1558 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1559 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1562 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1563 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1564 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1567 if test "x$mono_feature_disable_remoting" = "xyes"; then
1568 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1569 AC_MSG_NOTICE([Disabled remoting])
1572 if test "x$mono_feature_disable_security" = "xyes"; then
1573 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1574 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1577 if test "x$mono_feature_disable_lldb" = "xyes"; then
1578 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1579 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1582 if test "x$mono_feature_disable_mdb" = "xyes"; then
1583 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1584 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1587 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1588 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1589 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1593 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1594 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1595 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1598 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1599 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1600 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1603 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1604 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1605 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1608 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1609 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1611 has_extension_module=no
1612 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1614 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1615 if test x$extension = xdefault ; then
1616 has_extension_module=yes;
1619 if test x$enable_extension_module = xyes; then
1620 has_extension_module=yes;
1624 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1626 if test x$has_extension_module != xno ; then
1627 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1628 AC_MSG_NOTICE([Enabling mono extension module.])
1632 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1634 AC_MSG_CHECKING(for visibility __attribute__)
1637 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1638 int main () { doit (); return 0; }
1641 have_visibility_hidden=yes
1644 have_visibility_hidden=no
1649 dnl Boehm GC configuration
1652 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1654 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1655 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1657 if test "x$support_boehm" = "xyes"; then
1659 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1660 if test x$enable_parallel_mark = xyes; then
1661 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1671 if test "x$support_boehm" = "xyes"; then
1675 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1676 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1677 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1679 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1681 if test x$target_win32 = xyes; then
1682 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1683 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1686 gc_msg="Included Boehm GC with typed GC"
1687 if test x$enable_parallel_mark = xyes; then
1688 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1689 gc_msg="$gc_msg and parallel mark"
1691 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1696 AC_MSG_WARN("External Boehm is no longer supported")
1700 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1704 AC_MSG_WARN("Compiling mono without GC.")
1705 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1706 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1710 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1714 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])
1715 if test "x$large_heap" = "xyes"; then
1716 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1719 AC_SUBST(LIBGC_CPPFLAGS)
1720 AC_SUBST(LIBGC_LIBS)
1721 AC_SUBST(LIBGC_STATIC_LIBS)
1723 AC_SUBST(BOEHM_DEFINES)
1726 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1729 dnl End of Boehm GC Configuration
1732 dnl *************************************
1733 dnl *** Checks for zero length arrays ***
1734 dnl *************************************
1735 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1743 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1746 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1749 dnl ***********************************
1750 dnl *** Checks for signals
1751 dnl ***********************************
1752 AC_CHECK_HEADERS(signal.h)
1753 AC_CHECK_FUNCS(sigaction)
1754 AC_CHECK_FUNCS(kill)
1755 AC_CHECK_FUNCS(signal)
1757 # signal() is declared inline in Android headers
1758 # so we need to workaround it by overriding the check.
1759 if test x$platform_android = xyes; then
1760 AC_DEFINE(HAVE_SIGNAL,1)
1763 dnl ***********************************
1764 dnl *** Checks for availability of GSS dependencies (krb5, gss.framework, etc)
1765 dnl ***********************************
1767 AC_MSG_CHECKING(for GSS/GSS.h)
1769 #include <GSS/GSS.h>
1773 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
1774 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1780 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
1782 #include <gssapi/gssapi_ext.h>
1791 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
1793 #include <gssapi/gssapi_ext.h>
1794 #include <gssapi/gssapi_krb5.h>
1795 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
1799 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1804 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
1806 if test x$host_win32 = xno; then
1807 dnl *************************************
1808 dnl *** Checks for time capabilities ***
1809 dnl *************************************
1811 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1812 AC_TRY_COMPILE([#include <time.h>], [
1813 const int foo = CLOCK_MONOTONIC;
1816 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1821 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1822 AC_TRY_COMPILE([#include <time.h>], [
1823 const int foo = CLOCK_MONOTONIC_COARSE;
1826 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1831 AC_MSG_CHECKING(for CLOCK_REALTIME)
1832 AC_TRY_COMPILE([#include <time.h>], [
1833 const int foo = CLOCK_REALTIME;
1836 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1841 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1842 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1843 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1844 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1845 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1846 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1848 dnl hires monotonic clock support
1849 AC_SEARCH_LIBS(clock_gettime, rt)
1850 AC_CHECK_FUNCS(clock_nanosleep)
1852 dnl dynamic loader support
1853 AC_CHECK_FUNC(dlopen, DL_LIB="",
1854 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1856 if test x$dl_support = xno; then
1857 AC_MSG_WARN([No dynamic loading support available])
1859 LIBS="$LIBS $DL_LIB"
1860 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1861 dnl from glib's configure.ac
1862 AC_CACHE_CHECK([for preceeding underscore in symbols],
1864 AC_TRY_RUN([#include <dlfcn.h>
1865 int mono_underscore_test (void) { return 42; }
1867 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1868 handle = dlopen ((void*)0, 0);
1870 f1 = dlsym (handle, "mono_underscore_test");
1871 f2 = dlsym (handle, "_mono_underscore_test");
1872 } return (!f2 || f1);
1874 [mono_cv_uscore=yes],
1875 [mono_cv_uscore=no],
1878 if test "x$mono_cv_uscore" = "xyes"; then
1879 MONO_DL_NEED_USCORE=1
1881 MONO_DL_NEED_USCORE=0
1883 AC_SUBST(MONO_DL_NEED_USCORE)
1884 AC_CHECK_FUNC(dlerror)
1887 dnl ******************************************************************
1888 dnl *** Checks for the IKVM JNI interface library ***
1889 dnl ******************************************************************
1890 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])
1893 if test x$with_ikvm_native = xyes; then
1894 ikvm_native_dir=ikvm-native
1895 jdk_headers_found="IKVM Native"
1898 AC_SUBST(ikvm_native_dir)
1900 AC_CHECK_HEADERS(execinfo.h)
1902 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1904 AC_CHECK_FUNCS(getgrgid_r)
1905 AC_CHECK_FUNCS(getgrnam_r)
1906 AC_CHECK_FUNCS(getresuid)
1907 AC_CHECK_FUNCS(setresuid)
1908 AC_CHECK_FUNCS(kqueue)
1909 AC_CHECK_FUNCS(backtrace_symbols)
1910 AC_CHECK_FUNCS(mkstemp)
1911 AC_CHECK_FUNCS(mmap)
1912 AC_CHECK_FUNCS(madvise)
1913 AC_CHECK_FUNCS(getrusage)
1914 AC_CHECK_FUNCS(getpriority)
1915 AC_CHECK_FUNCS(setpriority)
1916 AC_CHECK_FUNCS(dl_iterate_phdr)
1917 AC_CHECK_FUNCS(dladdr)
1918 AC_CHECK_FUNCS(sysconf)
1919 AC_CHECK_FUNCS(getrlimit)
1920 AC_CHECK_FUNCS(prctl)
1921 AC_CHECK_FUNCS(arc4random)
1922 AC_CHECK_FUNCS(nl_langinfo)
1924 AC_CHECK_FUNCS(sched_getaffinity)
1925 AC_CHECK_FUNCS(sched_setaffinity)
1926 AC_CHECK_FUNCS(sched_getcpu)
1928 if test x$platform_android != xyes; then
1929 AC_CHECK_FUNCS(getpwnam_r)
1930 AC_CHECK_FUNCS(getpwuid_r)
1933 AC_FUNC_STRERROR_R()
1935 dnl ****************************************************************
1936 dnl *** Check for sched_setaffinity from glibc versions before ***
1937 dnl *** 2.3.4. The older versions of the function only take 2 ***
1938 dnl *** parameters, not 3. ***
1940 dnl *** Because the interface change was not made in a minor ***
1941 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1942 dnl *** won't always indicate the interface sched_affinity has. ***
1943 dnl ****************************************************************
1944 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1945 AC_TRY_COMPILE([#include <sched.h>], [
1947 sched_setaffinity(0, &mask);
1949 # Yes, we have it...
1951 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1953 # We have the new, three-parameter version
1956 AC_TRY_COMPILE([#include <sched.h>], [
1957 CPU_COUNT((void *) 0);
1960 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1962 # We have the new, three-parameter version
1966 dnl ******************************************************************
1967 dnl *** Check for large file support ***
1968 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1969 dnl ******************************************************************
1971 # Check that off_t can represent 2**63 - 1 correctly, working around
1972 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1973 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1975 AC_DEFUN([LARGE_FILES], [
1976 large_CPPFLAGS=$CPPFLAGS
1977 CPPFLAGS="$CPPFLAGS $1"
1979 #include <sys/types.h>
1982 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1983 #define COMPILE_TIME_ASSERT(pred) \
1984 switch(0){case 0:case pred:;}
1985 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1988 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1989 large_CPPFLAGS="$large_CPPFLAGS $1"
1994 CPPFLAGS=$large_CPPFLAGS
1997 AC_MSG_CHECKING(if off_t is 64 bits wide)
1999 if test $large_offt = no; then
2000 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2001 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2003 if test $large_offt = no; then
2004 AC_MSG_WARN([No 64 bit file size support available])
2007 dnl *****************************
2008 dnl *** Checks for libsocket ***
2009 dnl *****************************
2010 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2014 dnl *****************************
2015 dnl *** Checks for libinotify ***
2016 dnl *****************************
2017 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2020 dnl *******************************
2021 dnl *** Checks for MSG_NOSIGNAL ***
2022 dnl *******************************
2023 AC_MSG_CHECKING(for MSG_NOSIGNAL)
2024 AC_TRY_COMPILE([#include <sys/socket.h>], [
2025 int f = MSG_NOSIGNAL;
2027 # Yes, we have it...
2029 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2031 # We'll have to use signals
2035 dnl *****************************
2036 dnl *** Checks for IPPROTO_IP ***
2037 dnl *****************************
2038 AC_MSG_CHECKING(for IPPROTO_IP)
2039 AC_TRY_COMPILE([#include <netinet/in.h>], [
2040 int level = IPPROTO_IP;
2042 # Yes, we have it...
2044 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2046 # We'll have to use getprotobyname
2050 dnl *******************************
2051 dnl *** Checks for IPPROTO_IPV6 ***
2052 dnl *******************************
2053 AC_MSG_CHECKING(for IPPROTO_IPV6)
2054 AC_TRY_COMPILE([#include <netinet/in.h>], [
2055 int level = IPPROTO_IPV6;
2057 # Yes, we have it...
2059 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2061 # We'll have to use getprotobyname
2065 dnl ******************************
2066 dnl *** Checks for IPPROTO_TCP ***
2067 dnl ******************************
2068 AC_MSG_CHECKING(for IPPROTO_TCP)
2069 AC_TRY_COMPILE([#include <netinet/in.h>], [
2070 int level = IPPROTO_TCP;
2072 # Yes, we have it...
2074 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2076 # We'll have to use getprotobyname
2080 dnl *****************************
2081 dnl *** Checks for SOL_IP ***
2082 dnl *****************************
2083 AC_MSG_CHECKING(for SOL_IP)
2084 AC_TRY_COMPILE([#include <netdb.h>], [
2087 # Yes, we have it...
2089 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2091 # We'll have to use getprotobyname
2095 dnl *****************************
2096 dnl *** Checks for SOL_IPV6 ***
2097 dnl *****************************
2098 AC_MSG_CHECKING(for SOL_IPV6)
2099 AC_TRY_COMPILE([#include <netdb.h>], [
2100 int level = SOL_IPV6;
2102 # Yes, we have it...
2104 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2106 # We'll have to use getprotobyname
2110 dnl *****************************
2111 dnl *** Checks for SOL_TCP ***
2112 dnl *****************************
2113 AC_MSG_CHECKING(for SOL_TCP)
2114 AC_TRY_COMPILE([#include <netdb.h>], [
2115 int level = SOL_TCP;
2117 # Yes, we have it...
2119 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2121 # We'll have to use getprotobyname
2125 dnl *****************************
2126 dnl *** Checks for IP_PKTINFO ***
2127 dnl *****************************
2128 AC_MSG_CHECKING(for IP_PKTINFO)
2129 AC_TRY_COMPILE([#include <linux/in.h>], [
2130 int level = IP_PKTINFO;
2132 # Yes, we have it...
2134 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2139 dnl *****************************
2140 dnl *** Checks for IPV6_PKTINFO ***
2141 dnl *****************************
2142 AC_MSG_CHECKING(for IPV6_PKTINFO)
2143 AC_TRY_COMPILE([#include <netdb.h>], [
2144 int level = IPV6_PKTINFO;
2146 # Yes, we have it...
2148 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2153 dnl **********************************
2154 dnl *** Checks for IP_DONTFRAG ***
2155 dnl **********************************
2156 AC_MSG_CHECKING(for IP_DONTFRAG)
2157 AC_TRY_COMPILE([#include <netinet/in.h>], [
2158 int level = IP_DONTFRAG;
2160 # Yes, we have it...
2162 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2167 dnl **********************************
2168 dnl *** Checks for IP_DONTFRAGMENT ***
2169 dnl **********************************
2170 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2171 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2172 int level = IP_DONTFRAGMENT;
2174 # Yes, we have it...
2176 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2181 dnl **********************************
2182 dnl *** Checks for IP_MTU_DISCOVER ***
2183 dnl **********************************
2184 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2185 AC_TRY_COMPILE([#include <linux/in.h>], [
2186 int level = IP_MTU_DISCOVER;
2188 # Yes, we have it...
2190 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2195 dnl **********************************
2196 dnl *** Checks for IP_PMTUDISC_DO ***
2197 dnl **********************************
2198 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2199 AC_TRY_COMPILE([#include <linux/in.h>], [
2200 int level = IP_PMTUDISC_DO;
2202 # Yes, we have it...
2204 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2209 dnl *********************************
2210 dnl *** Check for struct ip_mreqn ***
2211 dnl *********************************
2212 AC_MSG_CHECKING(for struct ip_mreqn)
2213 AC_TRY_COMPILE([#include <netinet/in.h>], [
2214 struct ip_mreqn mreq;
2215 mreq.imr_address.s_addr = 0;
2217 # Yes, we have it...
2219 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2221 # We'll just have to try and use struct ip_mreq
2223 AC_MSG_CHECKING(for struct ip_mreq)
2224 AC_TRY_COMPILE([#include <netinet/in.h>], [
2225 struct ip_mreq mreq;
2226 mreq.imr_interface.s_addr = 0;
2228 # Yes, we have it...
2230 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2232 # No multicast support
2237 dnl **********************************
2238 dnl *** Check for getaddrinfo ***
2239 dnl **********************************
2240 AC_MSG_CHECKING(for getaddrinfo)
2245 getaddrinfo(NULL,NULL,NULL,NULL);
2247 # Yes, we have it...
2249 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2254 dnl **********************************
2255 dnl *** Check for gethostbyname2_r ***
2256 dnl **********************************
2257 AC_MSG_CHECKING(for gethostbyname2_r)
2263 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2265 # Yes, we have it...
2267 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2272 dnl **********************************
2273 dnl *** Check for gethostbyname2 ***
2274 dnl **********************************
2275 AC_MSG_CHECKING(for gethostbyname2)
2280 gethostbyname2(NULL,0);
2282 # Yes, we have it...
2284 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2289 dnl **********************************
2290 dnl *** Check for gethostbyname ***
2291 dnl **********************************
2292 AC_MSG_CHECKING(for gethostbyname)
2297 gethostbyname(NULL);
2299 # Yes, we have it...
2301 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2306 dnl **********************************
2307 dnl *** Check for getprotobyname ***
2308 dnl **********************************
2309 AC_MSG_CHECKING(for getprotobyname)
2314 getprotobyname(NULL);
2316 # Yes, we have it...
2318 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2323 dnl **********************************
2324 dnl *** Check for getprotobyname_r ***
2325 dnl **********************************
2326 AC_MSG_CHECKING(for getprotobyname_r)
2331 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2333 # Yes, we have it...
2335 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2340 dnl **********************************
2341 dnl *** Check for getnameinfo ***
2342 dnl **********************************
2343 AC_MSG_CHECKING(for getnameinfo)
2348 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2350 # Yes, we have it...
2352 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2358 dnl **********************************
2359 dnl *** Check for inet_ntop ***
2360 dnl **********************************
2361 AC_MSG_CHECKING(for inet_ntop)
2364 #include <arpa/inet.h>
2366 inet_ntop (0, NULL, NULL, 0);
2368 # Yes, we have it...
2370 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2375 dnl *****************************
2376 dnl *** Checks for libnsl ***
2377 dnl *****************************
2378 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2380 AC_CHECK_FUNCS(inet_pton inet_aton)
2382 dnl *****************************
2383 dnl *** Checks for libxnet ***
2384 dnl *****************************
2387 AC_MSG_CHECKING(for Solaris XPG4 support)
2388 if test -f /usr/lib/libxnet.so; then
2389 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2390 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2391 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2398 if test "$GCC" = "yes"; then
2399 CFLAGS="$CFLAGS -Wno-char-subscripts"
2404 dnl *****************************
2405 dnl *** Checks for libpthread ***
2406 dnl *****************************
2407 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2408 # and libpthread does not exist
2412 dnl Haiku has pthread in libroot (libc equiv)
2413 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2416 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2419 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2422 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2425 AC_CHECK_HEADERS(pthread.h)
2426 AC_CHECK_HEADERS(pthread_np.h)
2427 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2428 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2429 AC_CHECK_FUNCS(pthread_kill)
2430 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2431 AC_TRY_COMPILE([ #include <pthread.h>], [
2432 pthread_mutexattr_t attr;
2433 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2438 AC_ERROR(Posix system lacks support for recursive mutexes)
2440 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2441 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2442 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2443 AC_CHECK_FUNCS(mincore mlock munlock)
2445 dnl ***********************************
2446 dnl *** Checks for working __thread ***
2447 dnl ***********************************
2448 AC_MSG_CHECKING(for working __thread)
2449 if test "x$with_tls" != "x__thread"; then
2450 AC_MSG_RESULT(disabled)
2451 elif test "x$cross_compiling" = "xyes"; then
2452 AC_MSG_RESULT(cross compiling, assuming yes)
2455 #if defined(__APPLE__) && defined(__clang__)
2456 #error "__thread does not currently work with clang on Mac OS X"
2459 #include <pthread.h>
2461 static int res1, res2;
2463 void thread_main (void *arg)
2478 pthread_create (&t1, NULL, thread_main, 1);
2479 pthread_create (&t2, NULL, thread_main, 2);
2481 pthread_join (t1, NULL);
2482 pthread_join (t2, NULL);
2484 return !(res1 + res2 == 2);
2494 dnl **************************************
2495 dnl *** Checks for working sigaltstack ***
2496 dnl **************************************
2497 AC_MSG_CHECKING(for working sigaltstack)
2498 if test "x$with_sigaltstack" != "xyes"; then
2499 AC_MSG_RESULT(disabled)
2500 elif test "x$cross_compiling" = "xyes"; then
2501 AC_MSG_RESULT(cross compiling, assuming yes)
2508 #include <pthread.h>
2509 #include <sys/wait.h>
2510 #if defined(__FreeBSD__) || defined(__NetBSD__)
2511 #define SA_STACK SA_ONSTACK
2514 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2519 volatile char*__ptr = NULL;
2521 loop (void *ignored)
2530 struct sigaction sa;
2533 pthread_attr_t attr;
2535 sa.sa_sigaction = sigsegv_signal_handler;
2536 sigemptyset (&sa.sa_mask);
2537 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2538 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2539 perror ("sigaction");
2543 /* x86 darwin deliver segfaults using SIGBUS */
2544 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2545 perror ("sigaction");
2548 sas.ss_sp = malloc (SIGSTKSZ);
2549 sas.ss_size = SIGSTKSZ;
2551 if (sigaltstack (&sas, NULL) == -1) {
2552 perror ("sigaltstack");
2556 pthread_attr_init (&attr);
2557 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2558 printf ("pthread_create\n");
2582 for (i = 0; i < 300; ++i) {
2583 waitpid (son, &status, WNOHANG);
2584 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2589 kill (son, SIGKILL);
2595 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2602 dnl ********************************
2603 dnl *** Checks for semaphore lib ***
2604 dnl ********************************
2605 # 'Real Time' functions on Solaris
2606 # posix4 on Solaris 2.6
2607 # pthread (first!) on Linux
2608 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2610 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2611 AC_CHECK_FUNCS(shm_open)
2613 dnl ********************************
2614 dnl *** Checks for timezone stuff **
2615 dnl ********************************
2616 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2622 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2623 if test $ac_cv_struct_tm_gmtoff = yes; then
2624 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2626 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2631 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2632 if test $ac_cv_var_timezone = yes; then
2633 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2635 AC_ERROR(unable to find a way to determine timezone)
2639 dnl *********************************
2640 dnl *** Checks for math functions ***
2641 dnl *********************************
2642 AC_SEARCH_LIBS(sqrtf, m)
2644 dnl ****************************************************************
2645 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2646 dnl *** have it in the library (duh)) ***
2647 dnl ****************************************************************
2648 AC_CHECK_FUNCS(poll)
2650 dnl **********************************
2652 dnl **********************************
2653 AC_CHECK_HEADERS(sys/epoll.h)
2655 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2656 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2657 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2662 AC_CHECK_HEADERS(sys/event.h)
2663 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2665 dnl **************************************
2666 dnl * Darwin has a race that prevents us from using reliably:
2667 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2668 dnl * Since kqueue is mostly used for scaling large web servers,
2669 dnl * and very few folks run Mono on large web servers on OSX, falling
2671 dnl **************************************
2672 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2673 if test "x$host_darwin" = "xno"; then
2674 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2678 dnl ******************************
2679 dnl *** Checks for SIOCGIFCONF ***
2680 dnl ******************************
2681 AC_CHECK_HEADERS(sys/ioctl.h)
2682 AC_CHECK_HEADERS(net/if.h, [], [],
2684 #ifdef HAVE_SYS_TYPES_H
2685 # include <sys/types.h>
2687 #ifdef HAVE_SYS_SOCKET_H
2688 # include <sys/socket.h>
2691 AC_MSG_CHECKING(for ifreq)
2694 #include <sys/ioctl.h>
2702 x = (void *) &ifr->ifr_addr;
2705 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2709 dnl **********************************
2710 dnl *** Checks for sin_len ***
2711 dnl **********************************
2712 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2714 #include <netinet/in.h>
2716 struct sockaddr_in saddr;
2717 saddr.sin_len = sizeof (saddr);
2720 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2724 dnl **********************************
2725 dnl *** Checks for sin6_len ***
2726 dnl **********************************
2727 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2729 #include <netinet/in.h>
2731 struct sockaddr_in6 saddr6;
2732 saddr6.sin6_len = sizeof (saddr6);
2735 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2739 dnl **********************************
2740 dnl *** Check for getifaddrs ***
2741 dnl **********************************
2742 AC_MSG_CHECKING(for getifaddrs)
2745 #include <sys/types.h>
2746 #include <sys/socket.h>
2747 #include <ifaddrs.h>
2751 # Yes, we have it...
2753 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2757 dnl **********************************
2758 dnl *** Check for if_nametoindex ***
2759 dnl **********************************
2760 AC_MSG_CHECKING(for if_nametoindex)
2763 #include <sys/types.h>
2764 #include <sys/socket.h>
2767 if_nametoindex(NULL);
2769 # Yes, we have it...
2771 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2775 dnl **********************************
2776 dnl *** Check for access ***
2777 dnl **********************************
2778 AC_MSG_CHECKING(for access)
2784 # Yes, we have it...
2786 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2791 dnl **********************************
2792 dnl *** Checks for proclib ***
2793 dnl **********************************
2794 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.)])
2795 dnl **********************************
2796 dnl *** Checks for MonoPosixHelper ***
2797 dnl **********************************
2798 AC_CHECK_HEADERS(checklist.h)
2799 AC_CHECK_HEADERS(pathconf.h)
2800 AC_CHECK_HEADERS(fstab.h)
2801 AC_CHECK_HEADERS(attr/xattr.h)
2802 AC_CHECK_HEADERS(sys/extattr.h)
2803 AC_CHECK_HEADERS(sys/sendfile.h)
2804 AC_CHECK_HEADERS(sys/statvfs.h)
2805 AC_CHECK_HEADERS(sys/statfs.h)
2806 AC_CHECK_HEADERS(sys/vfstab.h)
2807 AC_CHECK_HEADERS(sys/xattr.h)
2808 AC_CHECK_HEADERS(sys/mman.h)
2809 AC_CHECK_HEADERS(sys/param.h)
2810 AC_CHECK_HEADERS(sys/mount.h, [], [],
2812 #ifdef HAVE_SYS_PARAM_H
2813 # include <sys/param.h>
2816 AC_CHECK_HEADERS(sys/mount.h)
2817 AC_CHECK_FUNCS(confstr)
2818 AC_CHECK_FUNCS(seekdir telldir)
2819 AC_CHECK_FUNCS(getdomainname)
2820 AC_CHECK_FUNCS(setdomainname)
2821 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2822 AC_CHECK_FUNCS(setgroups)
2823 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2824 AC_CHECK_FUNCS(getfsstat)
2825 AC_CHECK_FUNCS(lutimes futimes)
2826 AC_CHECK_FUNCS(mremap)
2827 AC_CHECK_FUNCS(remap_file_pages)
2828 AC_CHECK_FUNCS(posix_fadvise)
2829 AC_CHECK_FUNCS(posix_fallocate)
2830 AC_CHECK_FUNCS(posix_madvise)
2831 AC_CHECK_FUNCS(vsnprintf)
2832 AC_CHECK_FUNCS(sendfile)
2833 AC_CHECK_FUNCS(gethostid sethostid)
2834 AC_CHECK_FUNCS(sethostname)
2835 AC_CHECK_FUNCS(statfs)
2836 AC_CHECK_FUNCS(fstatfs)
2837 AC_CHECK_FUNCS(statvfs)
2838 AC_CHECK_FUNCS(fstatvfs)
2839 AC_CHECK_FUNCS(stime)
2840 AC_CHECK_FUNCS(ttyname_r)
2841 AC_CHECK_FUNCS(psignal)
2842 AC_CHECK_FUNCS(getlogin_r)
2843 AC_CHECK_FUNCS(lockf)
2844 AC_CHECK_FUNCS(swab)
2845 AC_CHECK_FUNCS(setusershell endusershell)
2846 AC_CHECK_FUNCS(futimens utimensat)
2847 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2848 AC_CHECK_FUNCS(readv writev preadv pwritev)
2849 AC_CHECK_FUNCS(setpgid)
2850 AC_CHECK_FUNCS(system)
2851 AC_CHECK_FUNCS(fork execv execve)
2852 AC_CHECK_FUNCS(accept4)
2853 AC_CHECK_FUNCS(localtime_r)
2854 AC_CHECK_FUNCS(mkdtemp)
2855 AC_CHECK_SIZEOF(size_t)
2856 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2857 [#include <sys/types.h>
2858 #include <sys/stat.h>
2859 #include <unistd.h>])
2860 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2861 [#include <sys/types.h>
2862 #include <sys/stat.h>
2863 #include <unistd.h>])
2864 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2865 [#include <sys/time.h>])
2866 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2867 [#include <sys/socket.h>])
2868 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2869 [#include <unistd.h>
2870 #include <fcntl.h>])
2871 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2872 [#include <sys/uio.h>])
2873 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2874 [#include <sys/socket.h>])
2875 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2876 [#include <sys/poll.h>])
2877 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2878 [#include <sys/socket.h>])
2879 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2880 [#include <sys/socket.h>])
2881 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2882 [#include <netinet/in.h>])
2883 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2884 [#include <netinet/in.h>])
2885 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2886 [#include <sys/un.h>])
2887 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2888 [#include <sys/types.h>
2889 #include <sys/stat.h>
2890 #include <unistd.h>])
2891 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2892 [#include <time.h>])
2893 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2894 [#include <sys/time.h>
2895 #include <sys/types.h>
2896 #include <utime.h>])
2897 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2898 [#include <sys/time.h>])
2899 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2900 [#include <sys/types.h>
2901 #include <utime.h>])
2903 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2904 [#include <sys/types.h>
2905 #include <dirent.h>])
2907 [struct passwd.pw_gecos],,,
2908 [#include <sys/types.h>
2911 [struct statfs.f_flags],,,
2912 [#include <sys/types.h>
2913 #include <sys/vfs.h>])
2915 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2916 [#include <sys/types.h>
2917 #include <sys/stat.h>
2918 #include <unistd.h>])
2920 dnl Favour xattr through glibc, but use libattr if we have to
2921 AC_CHECK_FUNC(lsetxattr, ,
2922 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2926 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2928 [struct kinfo_proc.kp_proc],,,
2929 [#include <sys/types.h>
2930 #include <sys/param.h>
2931 #include <sys/sysctl.h>
2932 #include <sys/proc.h>
2935 dnl *********************************
2936 dnl *** Checks for Windows compilation ***
2937 dnl *********************************
2938 AC_CHECK_HEADERS(sys/time.h)
2939 AC_CHECK_HEADERS(sys/param.h)
2940 AC_CHECK_HEADERS(dirent.h)
2942 dnl ******************************************
2943 dnl *** Checks for OSX and iOS compilation ***
2944 dnl ******************************************
2945 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2947 dnl *********************************
2948 dnl *** Check for Console 2.0 I/O ***
2949 dnl *********************************
2950 AC_CHECK_HEADERS([curses.h])
2951 AC_CHECK_HEADERS([term.h], [], [],
2956 AC_CHECK_HEADERS([termios.h])
2958 dnl *********************************
2959 dnl *** Checks for random ***
2960 dnl *********************************
2961 if test x$host_darwin = xno; then
2962 AC_CHECK_HEADERS(sys/random.h)
2963 AC_CHECK_FUNCS(getrandom getentropy)
2966 dnl *********************************
2967 dnl *** Checks for System.Native ***
2968 dnl *********************************
2970 AC_MSG_CHECKING(for linux/in.h)
2972 #include <sys/socket.h>
2973 #include <linux/in.h>
2977 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
2982 AC_MSG_CHECKING(for struct in_pktinfo)
2984 #ifdef HAVE_LINUX_IN_H
2985 #include <sys/socket.h>
2986 #include <linux/in.h>
2988 #include <netinet/in.h>
2991 struct in_pktinfo pktinfo;
2994 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
2999 AC_MSG_CHECKING(for struct ip_mreqn)
3002 #include <sys/socket.h>
3003 #include <linux/in.h>
3005 #include <netinet/in.h>
3008 struct ip_mreqn mreqn;
3011 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3016 if test x$host_darwin = xno; then
3017 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3020 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3021 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3022 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3023 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3024 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3025 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3026 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3027 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3028 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3029 AC_CHECK_FUNC(posix_fadvise, [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
3030 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3031 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3032 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3033 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3034 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3035 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3036 AC_CHECK_FUNC(arc4random, [AC_DEFINE(HAVE_ARC4RANDOM, 1, [arc4random])])
3037 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3038 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3039 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3041 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3042 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3044 AC_CHECK_MEMBER(struct stat.st_birthtimespec, [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtime])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3045 AC_CHECK_MEMBER(struct stat.st_atimespec, [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3046 AC_CHECK_MEMBER(struct stat.st_atim, [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3047 AC_CHECK_MEMBER(struct stat.st_atimensec, [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3048 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3049 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3050 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3052 AC_MSG_CHECKING(for struct statfs)
3054 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3055 #include <sys/mount.h>
3057 #include <sys/statfs.h>
3063 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3068 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3069 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3072 AC_MSG_CHECKING(for readdir_r)
3077 struct dirent* entry;
3078 struct dirent* result;
3079 readdir_r(dir, entry, &result);
3082 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3087 AC_MSG_CHECKING(for kevent with void *data)
3089 #include <sys/types.h>
3090 #include <sys/event.h>
3092 struct kevent event;
3094 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3097 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3102 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3103 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3105 AC_MSG_CHECKING(for sendfile with 4 arguments)
3107 #include <sys/sendfile.h>
3109 int result = sendfile(0, 0, 0, 0);
3112 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3117 AC_MSG_CHECKING(for sendfile with 6 arguments)
3120 #include <sys/types.h>
3121 #include <sys/socket.h>
3122 #include <sys/uio.h>
3124 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3127 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3132 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3133 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3134 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3135 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3137 ORIG_CFLAGS="$CFLAGS"
3138 CFLAGS="-Werror -Wsign-conversion"
3140 AC_MSG_CHECKING(for getnameinfo with signed flags)
3142 #include <sys/types.h>
3145 const struct sockaddr *addr;
3152 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3155 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3160 CFLAGS="$ORIG_CFLAGS"
3162 if test "x$host_linux" = "xyes"; then
3163 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3165 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3168 ORIG_CFLAGS="$CFLAGS"
3169 CFLAGS="-Werror -Wsign-conversion"
3171 AC_MSG_CHECKING(for bind with unsigned addrlen)
3173 #include <sys/socket.h>
3176 struct sockaddr* addr;
3178 bind(fd, addr, addrLen);
3181 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3186 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3188 #include <netinet/in.h>
3189 #include <netinet/tcp.h>
3191 struct ipv6_mreq opt;
3192 unsigned int index = 0;
3193 opt.ipv6mr_interface = index;
3196 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3201 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3203 #include <sys/inotify.h>
3207 int result = inotify_rm_watch(fd, wd);
3210 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3215 CFLAGS="$ORIG_CFLAGS"
3217 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3218 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3222 #include <sys/mman.h>
3228 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3232 shm_unlink("/mono_configure_shm_open");
3234 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3235 // on at least the current version of Mac OS X
3237 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3244 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3250 AC_MSG_CHECKING(for getpriority with int who)
3252 #include <sys/resource.h>
3256 int result = getpriority(which, who);
3259 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3264 AC_MSG_CHECKING(for kevent with int parameters)
3266 #include <sys/types.h>
3267 #include <sys/event.h>
3270 const struct kevent* chagelist;
3272 struct kevent* eventlist;
3274 const struct timespec* timeout;
3275 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3278 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3283 ORIG_CFLAGS="$CFLAGS"
3284 CFLAGS="-Werror -Wimplicit-function-declaration"
3286 AC_MSG_CHECKING(for mkstemps)
3294 int result = mkstemps(template, suffixlen);
3297 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3303 CFLAGS="$ORIG_CFLAGS"
3305 if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3306 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3309 AC_MSG_CHECKING(for tcp/var.h)
3311 #include <sys/types.h>
3312 #include <sys/socketvar.h>
3313 #include <netinet/ip.h>
3314 #include <netinet/tcp.h>
3315 #include <netinet/tcp_var.h>
3319 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3324 AC_CHECK_HEADERS([sys/cdefs.h])
3326 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3328 #ifdef HAVE_SYS_CDEFS_H
3329 #include <sys/cdefs.h>
3331 #include <netinet/tcp.h>
3333 int result = TCP_ESTABLISHED;
3336 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3341 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3343 AC_MSG_CHECKING(for struct rt_msghdr)
3345 #include <sys/types.h>
3346 #include <net/route.h>
3351 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3356 AC_CHECK_HEADERS([sys/sysctl.h])
3357 AC_CHECK_HEADERS([linux/rtnetlink.h])
3359 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3360 AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3361 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3363 ORIG_CFLAGS="$CFLAGS"
3364 CFLAGS="-Werror -Weverything"
3366 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3370 size_t namelen = 20;
3372 int result = getdomainname(name, namelen);
3375 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3380 CFLAGS="$ORIG_CFLAGS"
3382 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3383 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3384 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3386 if test "x$ac_cv_func_inotify_init" = "xyes" -a "x$ac_cv_func_inotify_add_watch" = "xyes" -a "x$ac_cv_func_inotify_rm_watch" = "xyes"; then
3387 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3388 elif test "x$host_linux" = "xyes"; then
3389 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3392 AC_CHECK_HEADERS([crt_externs.h])
3394 AC_MSG_CHECKING(for _NSGetEnviron)
3396 #include <crt_externs.h>
3398 char **result = *(_NSGetEnviron());
3401 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3406 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3409 dnl *********************************
3410 dnl *** Checks for Windows compilation ***
3411 dnl *********************************
3412 AC_CHECK_HEADERS(winternl.h)
3414 jdk_headers_found=no
3415 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3416 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3417 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3418 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3419 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3420 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3421 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3423 dnl *********************************
3424 dnl *** Check for struct ip_mreqn ***
3425 dnl *********************************
3426 AC_MSG_CHECKING(for struct ip_mreqn)
3427 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3428 struct ip_mreqn mreq;
3429 mreq.imr_address.s_addr = 0;
3431 # Yes, we have it...
3433 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3435 # We'll just have to try and use struct ip_mreq
3437 AC_MSG_CHECKING(for struct ip_mreq)
3438 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3439 struct ip_mreq mreq;
3440 mreq.imr_interface.s_addr = 0;
3442 # Yes, we have it...
3444 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3446 # No multicast support
3451 dnl **********************************
3452 dnl *** Check for getaddrinfo ***
3453 dnl **********************************
3454 AC_MSG_CHECKING(for getaddrinfo)
3457 #include <winsock2.h>
3458 #include <ws2tcpip.h>
3460 getaddrinfo(NULL,NULL,NULL,NULL);
3462 # Yes, we have it...
3464 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3469 dnl **********************************
3470 dnl *** Check for gethostbyname ***
3471 dnl **********************************
3472 AC_MSG_CHECKING(for gethostbyname)
3475 #include <winsock2.h>
3476 #include <ws2tcpip.h>
3478 gethostbyname(NULL);
3480 # Yes, we have it...
3482 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3487 dnl **********************************
3488 dnl *** Check for getprotobyname ***
3489 dnl **********************************
3490 AC_MSG_CHECKING(for getprotobyname)
3493 #include <winsock2.h>
3494 #include <ws2tcpip.h>
3496 getprotobyname(NULL);
3498 # Yes, we have it...
3500 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3505 dnl **********************************
3506 dnl *** Check for getnameinfo ***
3507 dnl **********************************
3508 AC_MSG_CHECKING(for getnameinfo)
3511 #include <winsock2.h>
3512 #include <ws2tcpip.h>
3514 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3516 # Yes, we have it...
3518 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3523 dnl **********************************
3524 dnl *** Check for inet_ntop ***
3525 dnl **********************************
3526 AC_MSG_CHECKING(for inet_ntop)
3529 #include <winsock2.h>
3530 #include <ws2tcpip.h>
3532 inet_ntop (0, NULL, NULL, 0);
3534 # Yes, we have it...
3536 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3541 dnl **********************************
3542 dnl *** Check for inet_pton ***
3543 dnl **********************************
3544 AC_MSG_CHECKING(for inet_pton)
3547 #include <winsock2.h>
3548 #include <ws2tcpip.h>
3553 inet_pton (0, NULL, NULL);
3555 # Yes, we have it...
3557 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3562 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3563 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3564 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3565 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3566 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3567 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3568 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3572 AC_MSG_CHECKING(for socklen_t)
3574 #include <sys/types.h>
3575 #include <sys/socket.h>
3579 ac_cv_c_socklen_t=yes
3580 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3586 AC_CHECK_FUNCS(execvp)
3588 dnl ****************************
3589 dnl *** Look for /dev/random ***
3590 dnl ****************************
3592 AC_MSG_CHECKING([if usage of random device is requested])
3593 AC_ARG_ENABLE(dev-random,
3594 [ --disable-dev-random disable the use of the random device (enabled by default)],
3595 try_dev_random=$enableval, try_dev_random=yes)
3597 AC_MSG_RESULT($try_dev_random)
3601 dnl IBM i does not have /dev/random, use unblocking only
3604 NAME_DEV_RANDOM="/dev/urandom"
3607 dnl Win32 does not have /dev/random, they have their own method...
3609 *-mingw*|*-*-cygwin*)
3610 ac_cv_have_dev_random=no
3613 dnl Everywhere else, it's /dev/random
3616 NAME_DEV_RANDOM="/dev/random"
3620 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3622 dnl Now check if the device actually exists
3624 if test "x$try_dev_random" = "xyes"; then
3625 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3626 [if test -r "$NAME_DEV_RANDOM" ; then
3627 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3628 if test "x$ac_cv_have_dev_random" = "xyes"; then
3629 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3632 AC_MSG_CHECKING(for random device)
3633 ac_cv_have_dev_random=no
3634 AC_MSG_RESULT(has been disabled)
3637 if test "x$host_win32" = "xyes"; then
3638 AC_DEFINE(HAVE_CRYPT_RNG)
3641 if test "x$ac_cv_have_dev_random" = "xno" \
3642 && test "x$host_win32" = "xno"; then
3645 *** A system-provided entropy source was not found on this system.
3646 *** Because of this, the System.Security.Cryptography random number generator
3647 *** will throw a NotImplemented exception.
3649 *** If you are seeing this message, and you know your system DOES have an
3650 *** entropy collection in place, please report an issue on GitHub and
3651 *** provide information about the system and how to access the random device.
3653 *** Otherwise you can install either egd or prngd and set the environment
3654 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3658 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)
3660 AC_MSG_CHECKING([if big-arrays are to be enabled])
3661 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)
3662 if test "x$enable_big_arrays" = "xyes" ; then
3663 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3664 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3666 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3669 AC_MSG_RESULT($enable_big_arrays)
3675 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3677 if test "x$enable_dtrace" = "xyes"; then
3678 if test "x$has_dtrace" = "xno"; then
3679 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3681 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3682 if test "x$DTRACE" = "xno"; then
3683 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3685 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3686 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3692 if test "x$enable_dtrace" = "xyes"; then
3693 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3695 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3698 DTRACEFLAGS="-arch ppc64"
3701 DTRACEFLAGS="-arch x86_64"
3710 DTRACEFLAGS="-arch ppc"
3713 DTRACEFLAGS="-arch i386"
3720 AC_SUBST(DTRACEFLAGS)
3726 AC_CHECK_HEADERS([sys/sdt.h])
3728 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3729 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3731 dnl **************************
3732 dnl *** AOT cross offsets ***
3733 dnl **************************
3735 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3736 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3742 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3743 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3744 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)
3745 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3746 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3748 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3750 if test "x$enable_llvm" = "xdefault"; then
3751 enable_llvm=$enable_llvm_default
3755 if test "x$enable_llvm" = "xyes"; then
3756 if test "x$with_llvm" != "x"; then
3757 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3758 if test x$host_win32 = xyes; then
3759 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
3761 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3762 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3765 if test x$host_win32 = xyes; then
3766 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
3768 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3770 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3775 LLVM_CODEGEN_LIBS="x86codegen"
3778 LLVM_CODEGEN_LIBS="armcodegen"
3781 LLVM_CODEGEN_LIBS="aarch64codegen"
3784 LLVM_CODEGEN_LIBS="powerpccodegen"
3787 if test "x$host" != "x$target"; then
3788 # No need for jit libs
3792 AC_SUBST(LLVM_CODEGEN_LIBS)
3793 AC_SUBST(EXTERNAL_LLVM_CONFIG)
3795 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3798 # AC_DEFINE necessary for correct restore behavior on Linux
3799 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno"])
3800 if test "x$internal_llvm" != "xno"; then
3801 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
3804 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno"])
3805 if test "x$enable_llvm_asserts" != "xno"; then
3806 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
3809 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3811 if test "x$enable_loadedllvm" = "xyes"; then
3812 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3814 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3816 if test "x$enable_llvm" = "xyes"; then
3817 enable_llvm_runtime=yes
3819 if test "x$enable_llvm_runtime" = "xyes"; then
3820 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3822 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3825 ACCESS_UNALIGNED="yes"
3829 SQLITE="libsqlite.so.0"
3830 SQLITE3="libsqlite3.so.0"
3832 GDKX11="libgdk-x11-2.0.so.0"
3833 GTKX11="libgtk-x11-2.0.so.0"
3834 XINERAMA="libXinerama.so.1"
3836 sizeof_register="SIZEOF_VOID_P"
3839 boehm_supported=true
3848 ACCESS_UNALIGNED="no"
3855 ACCESS_UNALIGNED="no"
3857 AC_MSG_CHECKING(for mips n32)
3859 #if _MIPS_SIM != _ABIN32
3876 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3881 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3882 # int astruct __attribute__ ((visibility ("hidden")));
3885 # void *p = &astruct;
3887 # gcc -fPIC --shared -o libfoo.so foo.c
3889 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3890 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3891 have_visibility_hidden=no
3894 have_visibility_hidden=no
3903 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3910 openbsd*|freebsd*|kfreebsd-gnu*)
3917 x86_64-*-* | amd64-*-*)
3920 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3921 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3928 BTLS_PLATFORM=x86_64
3929 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3934 BTLS_PLATFORM=x86_64
3935 boehm_supported=false
3937 openbsd*|freebsd*|kfreebsd-gnu*)
3940 BTLS_PLATFORM=x86_64
3947 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3953 ACCESS_UNALIGNED="no"
3960 if test x"$GCC" = xyes; then
3961 # We don't support v8 cpus
3962 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3964 if test x"$AR" = xfalse; then
3965 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3968 *-mingw*|*-*-cygwin*)
3969 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3970 have_visibility_hidden=no
3973 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3974 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3975 powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
3976 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3978 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3979 if ! (echo $CC | grep -q -- 'clang'); then
3980 CFLAGS="$CFLAGS -mminimal-toc"
3984 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3990 BTLS_PLATFORM=powerpc
3991 dnl on AIX/PASE, shared libraries can be inside archives
3992 dnl if they are, we specify them by lib.a(lib.so)
3993 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3994 LIBC="libc.a(shr_64.o)"
3995 INTL="libintl.a(libintl.so.8)"
3999 BTLS_PLATFORM=powerpc
4008 ACCESS_UNALIGNED="no"
4009 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4015 ACCESS_UNALIGNED="no"
4016 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4021 ACCESS_UNALIGNED="no"
4023 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4026 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4028 arm*-linux*-gnueabi)
4029 BTLS_PLATFORM=armsoft
4036 ACCESS_UNALIGNED="no"
4037 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4040 # https://lkml.org/lkml/2012/7/15/133
4043 boehm_supported=false
4046 BTLS_PLATFORM=aarch64
4047 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4052 ACCESS_UNALIGNED="yes"
4055 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4061 if test "x$host" != "x$target"; then
4062 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4064 enable_support_build=no
4066 # Can't use tls, since it depends on the runtime detection of tls offsets
4067 # in mono-compiler.h
4074 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4078 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4082 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4086 powerpc64-ps3-linux-gnu)
4088 arch_target=powerpc64
4089 AC_DEFINE(TARGET_PS3, 1, [...])
4090 # It would be better to just use TARGET_POWERPC64, but lots of code already
4092 AC_DEFINE(__mono_ppc64__, 1, [...])
4093 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
4095 target_byte_order=G_BIG_ENDIAN
4097 powerpc64-xbox360-linux-gnu)
4099 arch_target=powerpc64
4100 AC_DEFINE(TARGET_XBOX360, 1, [...])
4101 # It would be better to just use TARGET_POWERPC64, but lots of code already
4104 target_byte_order=G_BIG_ENDIAN
4108 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4112 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4125 AC_DEFINE(TARGET_PS4, 1, [...])
4126 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4127 CPPFLAGS="$CPPFLAGS"
4137 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4145 AC_DEFINE(TARGET_ANDROID, 1, [...])
4152 AC_DEFINE(TARGET_WASM, 1, [...])
4154 target_sizeof_void_p=4
4157 AC_DEFINE(TARGET_X86, 1, [...])
4159 target_sizeof_void_p=4
4162 AC_DEFINE(TARGET_AMD64, 1, [...])
4166 AC_DEFINE(TARGET_ARM, 1, [...])
4168 ACCESS_UNALIGNED="no"
4169 target_sizeof_void_p=4
4172 AC_DEFINE(TARGET_ARM64, 1, [...])
4176 AC_DEFINE(TARGET_POWERPC, 1, [...])
4179 AC_DEFINE(TARGET_POWERPC, 1, [...])
4180 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4183 AC_DEFINE(TARGET_S390X, 1, [...])
4186 AC_DEFINE(TARGET_MIPS, 1, [...])
4189 AC_DEFINE(TARGET_SPARC, 1, [...])
4192 AC_DEFINE(TARGET_SPARC64, 1, [...])
4198 AC_DEFINE(HOST_WASM, 1, [...])
4201 AC_DEFINE(HOST_X86, 1, [...])
4204 AC_DEFINE(HOST_AMD64, 1, [...])
4207 AC_DEFINE(HOST_ARM, 1, [...])
4210 AC_DEFINE(HOST_ARM64, 1, [...])
4213 AC_DEFINE(HOST_POWERPC, 1, [...])
4216 AC_DEFINE(HOST_POWERPC, 1, [...])
4217 AC_DEFINE(HOST_POWERPC64, 1, [...])
4220 AC_DEFINE(HOST_S390X, 1, [...])
4223 AC_DEFINE(HOST_MIPS, 1, [...])
4226 AC_DEFINE(HOST_SPARC, 1, [...])
4229 AC_DEFINE(HOST_SPARC64, 1, [...])
4233 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4235 X86 | AMD64 | ARM | ARM64)
4236 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4240 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4241 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4247 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4248 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4250 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4252 if test "x$enable_vtune" = "xyes"; then
4253 if test "x$with_vtune" = "x"; then
4254 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4256 VTUNE_PATH=$with_vtune
4258 VTUNE_INCLUDE=$VTUNE_PATH/include
4261 VTUNE_LIB=$VTUNE_PATH/lib32
4264 VTUNE_LIB=$VTUNE_PATH/lib64
4267 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4270 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4271 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4273 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4274 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4277 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4278 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4280 AC_SUBST(VTUNE_LIBS)
4281 AC_SUBST(VTUNE_CFLAGS)
4283 dnl Use GCC atomic ops if they work on the target.
4284 if test x$GCC = "xyes"; then
4286 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
4287 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4292 if test "x$target_mach" = "xyes"; then
4294 if test "x$TARGET_SYS" = "xWATCHOS"; then
4295 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4296 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4297 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4299 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4300 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4301 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4302 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4305 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4306 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4307 #error fail this for ios
4310 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4311 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4312 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4315 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4316 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4317 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4322 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4325 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4327 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4329 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4330 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4331 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4332 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4334 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4337 if test "x$target_sizeof_void_p" != "x"; then
4338 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4339 # This is true for all the current cross-compiling targets
4340 AC_DEFINE(SIZEOF_REGISTER,TARGET_SIZEOF_VOID_P,[size of target machine integer registers])
4342 AC_DEFINE(TARGET_SIZEOF_VOID_P,SIZEOF_VOID_P,[wordsize of target])
4343 if test "x$sizeof_register" = "x4"; then
4344 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4345 elif test "x$sizeof_register" = "x8"; then
4346 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4348 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of target machine integer registers])
4352 if test "x$have_visibility_hidden" = "xyes"; then
4353 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4356 if test "x$have_deprecated" = "xyes"; then
4357 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4361 dnl Simple Generational checks (sgen)
4364 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4365 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4366 if test x$buildsgen = xyes; then
4367 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4368 SGEN_DEFINES="-DHAVE_SGEN_GC"
4371 if test x$with_sgen_default_concurrent != xno; then
4372 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4373 conc_gc_msg=" (concurrent by default)"
4376 if test "x$gc_msg" = "x"; then
4377 gc_msg="sgen$conc_gc_msg"
4379 gc_msg="sgen$conc_gc_msg and $gc_msg"
4382 AC_SUBST(SGEN_DEFINES)
4383 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4385 jit_status="Building and using the JIT"
4393 INTL="libintl.dylib"
4394 SQLITE="libsqlite.0.dylib"
4395 SQLITE3="libsqlite3.0.dylib"
4397 GDKX11="libgdk-x11-2.0.dylib"
4398 GTKX11="libgtk-x11-2.0.dylib"
4403 SQLITE="libsqlite.so"
4404 SQLITE3="libsqlite3.so"
4414 SQLITE="libsqlite.so"
4415 SQLITE3="libsqlite3.so"
4420 SQLITE="libsqlite.so"
4421 SQLITE3="libsqlite3.so"
4425 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4426 AC_MSG_CHECKING(for the soname of libX11.so)
4427 for i in $x_libraries $dlsearch_path; do
4429 if test -f $i/libX11.so.$r; then
4436 if test "x$X11" = "xlibX11.so"; then
4437 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4445 ######################################
4447 ######################################
4451 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4452 if test x$GCC = xyes; then
4453 GNUC_UNUSED='__attribute__((__unused__))'
4454 GNUC_NORETURN='__attribute__((__noreturn__))'
4456 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4459 AC_SUBST(GNUC_PRETTY)
4460 AC_SUBST(GNUC_UNUSED)
4461 AC_SUBST(GNUC_NORETURN)
4462 AC_SUBST(BREAKPOINT)
4464 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4467 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4483 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4488 arm*-darwin*|aarch64*-*)
4489 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4492 ORDER=G_LITTLE_ENDIAN
4495 LDFLAGS="$LDFLAGS -ltextencoding"
4498 CFLAGS="$CFLAGS -pthread"
4499 LDFLAGS="$LDFLAGS -pthread"
4510 # Defined for all targets/platforms using classic Windows API support.
4511 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4512 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4514 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4515 AC_CHECK_FUNCS(getrlimit)
4516 AC_CHECK_FUNCS(fork execv execve)
4518 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4520 if test x$with_overridable_allocators = xyes; then
4521 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4522 AC_MSG_NOTICE([Overridable allocator support enabled])
4524 AC_MSG_NOTICE([Overridable allocator support disabled])
4528 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4529 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4530 # removed once support for 10.6 is dropped.
4532 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4534 if test x$target_osx = xyes; then
4535 AC_CHECK_FUNCS(getpwuid_r)
4536 elif test x$target_ios = xno; then
4537 AC_CHECK_FUNCS(strndup getpwuid_r)
4540 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4542 AC_SEARCH_LIBS(sqrtf, m)
4544 # nanosleep may not be part of libc, also search it in other libraries
4545 AC_SEARCH_LIBS(nanosleep, rt)
4547 AC_SEARCH_LIBS(dlopen, dl)
4548 old_ldflags="${LDFLAGS}"
4549 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4550 if test $lt_cv_prog_gnu_ld = yes; then
4551 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4554 *-*-aix*|*-*-os400*)
4557 dnl Try to use export-dynamic anyways
4558 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4562 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4563 if test $found_export_dynamic = no; then
4564 LDFLAGS="${old_ldflags}"
4567 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4568 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4569 AC_CHECK_LIB(iconv, iconv_open)
4570 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4571 AC_SUBST(HAVE_ALLOCA_H)
4573 # Get the exact type of size_t, not just its size.
4574 # This is so we can find an exact printf format among u, lu, llu, I64u.
4575 # To avoid warnings about slight mismatches.
4576 # C99 runtime "zu" dependency is being avoided here.
4578 # We have to compile as C++ because C is too lenient
4579 # and lets the wrong thing compile, with warnings.
4581 # Note: "zu" or ifdef <something> have the advantage
4582 # of producing installable "biarch" headers. i.e. one Mac header
4583 # for Mac/x86 and Mac/amd64.
4587 # Check long before int because it is the overwhelming Unix answer,
4588 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4590 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4592 AC_MSG_CHECKING(if size_t is unsigned long)
4593 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4595 unsigned long *a = (size_t*)0;
4598 AC_SUBST(GSIZE_FORMAT, '"%lu"')
4601 AC_MSG_CHECKING(if size_t is unsigned int)
4602 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4604 unsigned *a = (size_t*)0;
4607 AC_SUBST(GSIZE_FORMAT, '"%u"')
4609 # At this point the majority of systems have their answer,
4610 # and we descend into non-standard or new-standard territory.
4612 # Check __int64 first because I64 on some systems predates ll, enabling
4613 # new compiler/old runtime interop, and the types always have the same size.
4615 AC_MSG_CHECKING(if size_t is unsigned __int64)
4616 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4618 unsigned __int64 *a = (size_t*)0;
4621 AC_SUBST(GSIZE_FORMAT, '"%I64u"')
4624 AC_MSG_CHECKING(if size_t is unsigned long long)
4625 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4627 unsigned long long *a = (size_t*)0;
4630 AC_SUBST(GSIZE_FORMAT, '"%llu"')
4633 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4641 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4642 # This provides for an exact match with functions that
4643 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4644 # uintptr_t is not necessarily the same.
4646 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4647 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4649 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4659 AC_SUBST(GSIZE_FORMAT)
4662 # END OF EGLIB CHECKS
4665 AC_ARG_WITH([libgdiplus],
4666 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4667 [], [with_libgdiplus=installed])
4669 # default install location
4670 libgdiplus_install_loc=libgdiplus${libsuffix}
4673 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4677 case $with_libgdiplus in
4684 if test x$cross_compiling = xno; then
4685 if test x$host_darwin = xyes; then
4686 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4688 libgdiplus_install_loc=$a
4696 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4699 /*) # absolute path, assume it is an install location
4700 libgdiplus_loc=$with_libgdiplus
4701 libgdiplus_install_loc=$with_libgdiplus
4705 libgdiplus_loc=`pwd`/$with_libgdiplus
4708 AC_SUBST(libgdiplus_loc)
4709 AC_SUBST(libgdiplus_install_loc)
4711 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)
4712 if test "x$icall_symbol_map" = "xyes"; then
4713 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4716 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4717 if test "x$icall_export" = "xyes"; then
4718 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4721 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4722 if test "x$icall_tables" = "xno"; then
4723 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4726 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4728 if test "x$with_tls" = "x__thread"; then
4729 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
4730 # Pass the information to libgc
4731 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4732 AC_MSG_CHECKING(if the tls_model attribute is supported)
4733 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4736 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4742 if test ${TARGET} = ARM; then
4743 dnl ******************************************
4744 dnl *** Check to see what FPU is available ***
4745 dnl ******************************************
4746 AC_MSG_CHECKING(which FPU to use)
4749 # This is a bit tricky:
4751 # if (__ARM_PCS_VFP) {
4752 # /* mfloat-abi=hard == VFP with hard ABI */
4753 # } elif (!__SOFTFP__) {
4754 # /* mfloat-abi=softfp == VFP with soft ABI */
4756 # /* mfloat-abi=soft == no VFP */
4759 # The exception is iOS (w/ GCC) where none of the above
4760 # are defined (but iOS always uses the 'softfp' ABI).
4762 # No support for FPA.
4767 # iOS GCC always uses the 'softfp' ABI.
4768 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4772 # Are we using the 'hard' ABI?
4773 if test x$fpu = xNONE; then
4774 AC_TRY_COMPILE([], [
4775 #ifndef __ARM_PCS_VFP
4776 #error "Float ABI is not 'hard'"
4785 # No 'hard' ABI. 'soft' or 'softfp'?
4786 if test x$fpu = xNONE; then
4787 AC_TRY_COMPILE([], [
4789 #error "Float ABI is not 'softfp'"
4798 if test x$arm_fpu != x; then
4803 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4806 dnl *********************************************
4807 dnl *** Check which ARM version(s) we can use ***
4808 dnl *********************************************
4809 AC_MSG_CHECKING(which ARM version to use)
4811 AC_TRY_COMPILE([], [
4812 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4813 #error Not on ARM v5.
4821 AC_TRY_COMPILE([], [
4822 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4823 #error Not on ARM v6.
4832 AC_TRY_COMPILE([], [
4833 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4834 #error Not on ARM v7.
4844 AC_MSG_RESULT($arm_ver)
4846 if test x$arm_v5 = xyes; then
4847 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4848 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4851 if test x$arm_v6 = xyes; then
4852 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4853 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4856 if test x$arm_v7 = xyes; then
4857 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4858 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4862 if test ${TARGET} = unknown; then
4863 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4864 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4867 if test "x$platform_android" = "xyes"; then
4868 case "x${TARGET}" in
4873 BTLS_PLATFORM=android-armv5
4877 BTLS_PLATFORM=android-armv6
4881 BTLS_PLATFORM=android-armv7
4890 BTLS_PLATFORM=android-v8a
4894 BTLS_PLATFORM=android-x86
4898 BTLS_PLATFORM=android-x64
4906 if test ${ACCESS_UNALIGNED} = no; then
4907 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4910 if test x$host_darwin = xyes; then
4911 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4913 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4914 [AC_MSG_RESULT([no])],
4916 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4918 RANLIB="$RANLIB -no_warning_for_no_symbols"
4919 AC_MSG_RESULT([yes])
4926 # Pass CPPFLAGS to libgc configure
4927 # We should use a separate variable for this to avoid passing useless and
4928 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4929 # This should be executed late so we pick up the final version of CPPFLAGS
4930 # The problem with this approach, is that during a reconfigure, the main
4931 # configure scripts gets invoked with these arguments, so we use separate
4932 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4933 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4934 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4935 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4937 # Don't pass -finstrument-for-thread-suspension in,
4938 # if these are instrumented it will be very bad news
4939 # (infinite recursion, undefined parking behavior, etc)
4940 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4941 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\""
4942 if test "x$support_boehm" = "xyes"; then
4943 AC_CONFIG_SUBDIRS(libgc)
4949 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4950 if test x$with_malloc_mempools = xyes; then
4952 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4957 DISABLE_MCS_DOCS=default
4958 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4959 if test x$with_mcs_docs != xyes; then
4960 DISABLE_MCS_DOCS=yes
4963 if test -n "$INSTALL_4_x_TRUE"; then :
4964 DISABLE_MCS_DOCS=yes
4966 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4967 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4970 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)],[
4971 if test x$with_lazy_gc_thread_creation != xno ; then
4972 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4974 ], [with_lazy_gc_thread_creation=no])
4976 dnl *****************************
4977 dnl *** Thread suspend policy ***
4978 dnl *****************************
4980 dnl Set a default hybrid or cooperative suspend on some platforms
4982 dnl Coop default is set by the bitcode preset.
4984 dnl If coop isn't on by default, maybe hybrid should be?
4985 if test x$enable_cooperative_suspend_default != xyes; then
4988 dnl Some host/target confusion, there's no host_osx (and
4989 dnl host_darwin would be true on iOS not just macOS).
4990 if test x$target_osx = xyes; then
4991 enable_hybrid_suspend_default=yes
4992 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
4993 enable_hybrid_suspend_default=yes
4999 dnl Now check if there were flags overriding the defaults
5001 AC_ARG_WITH(cooperative_gc, [ --with-cooperative-gc=yes|no Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [AC_MSG_WARN([--with-cooperative-gc is deprecated, use --enable-cooperative-suspend instead])], [with_cooperative_gc=default])
5002 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5004 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5005 enable_cooperative_suspend=$with_cooperative_gc
5008 if test x$enable_cooperative_suspend = xdefault; then
5009 enable_cooperative_suspend=$enable_cooperative_suspend_default
5012 if test x$enable_cooperative_suspend != xno; then
5013 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5016 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5018 AC_ARG_ENABLE(hybrid_suspend, [ --enable-hybrid-suspend Enable hybrid stop-the-world garbage collection (sgen only) - cooperative suspend for threads running managed and runtime code, and preemptive suspend for threads running native and P/Invoke code (defaults to no)], [], [enable_hybrid_suspend=default])
5020 if test x$enable_hybrid_suspend = xdefault; then
5021 enable_hybrid_suspend=$enable_hybrid_suspend_default
5024 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5025 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5028 if test x$enable_hybrid_suspend != xno ; then
5029 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5032 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5034 dnl End of thread suspend policy
5036 dnl **********************
5037 dnl *** checked builds ***
5038 dnl **********************
5040 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],[
5042 if test x$enable_checked_build != x ; then
5043 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5045 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5046 eval "mono_checked_build_test_enable_$feature='yes'"
5049 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5050 eval "mono_checked_build_test_enable_gc='yes'"
5051 eval "mono_checked_build_test_enable_metadata='yes'"
5052 eval "mono_checked_build_test_enable_thread='yes'"
5053 eval "mono_checked_build_test_enable_private_types='yes'"
5056 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5057 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5060 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5061 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5064 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5065 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5068 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5069 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5073 dnl End of checked builds
5075 AC_CHECK_HEADER([malloc.h],
5076 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5077 [Define to 1 if you have /usr/include/malloc.h.])],,)
5079 if test x"$GCC" = xyes; then
5080 # Implicit function declarations are not 64 bit safe
5081 # Do this late, since this causes lots of configure tests to fail
5082 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5083 # jay has a lot of implicit declarations
5084 JAY_CFLAGS="-Wno-implicit-function-declaration"
5087 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5088 # instead of libmono-static.a
5089 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5090 LIBMONO_LA=libmini-static.la
5092 if test x$buildsgen = xyes; then
5093 LIBMONO_LA=libmonosgen-$API_VER.la
5095 LIBMONO_LA=libmonoboehm-$API_VER.la
5098 AC_SUBST(LIBMONO_LA)
5104 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5105 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5106 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5108 if test "x$enable_btls" = "xno"; then
5112 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5115 if test "x$enable_btls" = "xyes"; then
5116 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5117 if test "x$CMAKE" = "xno"; then
5118 AC_MSG_ERROR("cmake not found")
5121 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5128 case "$BTLS_PLATFORM" in
5134 btls_cflags="$btls_cflags -arch i386"
5142 btls_cflags="-DOPENSSL_NO_ASM=1"
5146 btls_cflags="-DOPENSSL_NO_ASM=1"
5150 btls_cflags="-march=armv8-a+crypto"
5159 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5160 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5164 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5167 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5170 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
5173 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
5176 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
5179 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
5182 AC_MSG_ERROR(Invalid BTLS platform)
5185 if test "x$platform_android" = "xyes"; then
5187 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5188 if test "x$with_btls_android_ndk" != "x"; then
5189 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5191 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5195 if test "x$btls_arch" != "x"; then
5196 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5199 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5201 AC_SUBST(BTLS_CFLAGS)
5202 AC_SUBST(BTLS_PLATFORM)
5203 AC_SUBST(BTLS_CMAKE_ARGS)
5205 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5210 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5212 if test x$DISABLE_MCS_DOCS = xyes; then
5219 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5220 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5221 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5223 libmono_ldflags="$libmono_ldflags $LIBS"
5225 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5226 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5227 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5228 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5229 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5230 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5231 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5232 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5233 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5234 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5235 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5236 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5237 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5238 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5239 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5240 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5241 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5242 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5244 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5254 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5255 AC_SUBST(arch_target)
5260 #This must always be defined when building the runtime
5261 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5263 mono_build_root=`pwd`
5264 AC_SUBST(mono_build_root)
5266 mono_runtime=mono/mini/mono
5267 AC_SUBST(mono_runtime)
5269 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5271 if test $csc_compiler = mcs; then
5272 CSC=$mcs_topdir/class/lib/build/mcs.exe
5277 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5279 mono_cfg_root=$mono_build_root/runtime
5280 if test x$host_win32 = xyes; then
5281 if test "x$cross_compiling" = "xno"; then
5282 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5283 CSC=`cygpath -m -a $CSC`
5284 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5286 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5289 mono_cfg_dir=$mono_cfg_root/etc
5291 AC_SUBST(mono_cfg_dir)
5295 AC_CONFIG_FILES([po/mcs/Makefile.in])
5297 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5298 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5300 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5303 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5305 *) reldir=$depth/$srcdir ;;
5307 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5308 cd runtime/etc/mono/1.0
5309 rm -f machine.config
5310 $LN_S $reldir/data/net_1_1/machine.config machine.config
5314 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5317 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5319 *) reldir=$depth/$srcdir ;;
5321 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5322 cd runtime/etc/mono/2.0
5323 rm -f machine.config
5324 $LN_S $reldir/data/net_2_0/machine.config machine.config
5328 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5331 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5333 *) reldir=$depth/$srcdir ;;
5335 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5336 cd runtime/etc/mono/2.0
5338 $LN_S $reldir/data/net_2_0/web.config web.config
5342 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5345 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5347 *) reldir=$depth/$srcdir ;;
5349 $ac_aux_dir/install-sh -d runtime/etc/mono/
5350 cd runtime/etc/mono/
5352 $LN_S $reldir/data/browscap.ini browscap.ini
5356 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5357 [ depth=../../../../..
5359 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5361 *) reldir=$depth/$srcdir ;;
5363 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5364 cd runtime/etc/mono/2.0/Browsers
5365 rm -f Compat.browser
5366 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5370 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5371 [ depth=../../../../..
5373 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5375 *) reldir=$depth/$srcdir ;;
5377 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5378 cd runtime/etc/mono/4.0/Browsers
5379 rm -f Compat.browser
5380 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5384 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5385 [ depth=../../../../..
5387 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5389 *) reldir=$depth/$srcdir ;;
5391 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5392 cd runtime/etc/mono/4.5/Browsers
5393 rm -f Compat.browser
5394 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5398 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5401 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5403 *) reldir=$depth/$srcdir ;;
5405 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5406 cd runtime/etc/mono/4.0
5407 rm -f machine.config
5408 $LN_S $reldir/data/net_4_0/machine.config machine.config
5412 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5415 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5417 *) reldir=$depth/$srcdir ;;
5419 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5420 cd runtime/etc/mono/4.0
5422 $LN_S $reldir/data/net_4_0/web.config web.config
5426 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5429 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5431 *) reldir=$depth/$srcdir ;;
5433 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5434 cd runtime/etc/mono/4.5
5435 rm -f machine.config
5436 $LN_S $reldir/data/net_4_5/machine.config machine.config
5440 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5443 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5445 *) reldir=$depth/$srcdir ;;
5447 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5448 cd runtime/etc/mono/4.5
5450 $LN_S $reldir/data/net_4_5/web.config web.config
5454 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])
5455 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])
5456 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
5458 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
5459 if test x"$GCC" = xyes; then
5461 # incompatible-pointer-types requires gcc circa 5.x
5464 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
5465 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
5469 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
5476 # Update all submodules recursively to ensure everything is checked out
5477 (cd $srcdir && scripts/update_submodules.sh)
5482 acceptance-tests/Makefile
5484 scripts/mono-find-provides
5485 scripts/mono-find-requires
5490 mono/utils/jemalloc/Makefile
5491 mono/metadata/Makefile
5495 mono/arch/x86/Makefile
5496 mono/arch/amd64/Makefile
5497 mono/arch/ppc/Makefile
5498 mono/arch/sparc/Makefile
5499 mono/arch/s390x/Makefile
5500 mono/arch/arm/Makefile
5501 mono/arch/arm64/Makefile
5502 mono/arch/mips/Makefile
5505 mono/tests/assembly-load-reference/Makefile
5506 mono/tests/tests-config
5507 mono/tests/gc-descriptors/Makefile
5508 mono/tests/testing_gac/Makefile
5509 mono/unit-tests/Makefile
5510 mono/benchmark/Makefile
5512 mono/profiler/Makefile
5514 mono/eglib/eglib-config.h
5515 mono/eglib/test/Makefile
5517 ikvm-native/Makefile
5522 data/net_2_0/Makefile
5523 data/net_4_0/Makefile
5524 data/net_4_5/Makefile
5525 data/net_2_0/Browsers/Makefile
5526 data/net_4_0/Browsers/Makefile
5527 data/net_4_5/Browsers/Makefile
5534 data/mono-options.pc
5535 data/mono-lineeditor.pc
5541 data/system.web.extensions_1.0.pc
5542 data/system.web.extensions.design_1.0.pc
5543 data/system.web.mvc.pc
5544 data/system.web.mvc2.pc
5545 data/system.web.mvc3.pc
5546 data/aspnetwebstack.pc
5552 tools/locale-builder/Makefile
5554 tools/monograph/Makefile
5555 tools/pedump/Makefile
5561 if test x$host_win32 = xyes; then
5562 # Get rid of 'cyg' prefixes in library names
5563 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5564 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5565 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5566 # executable doesn't work...
5567 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5570 if test x$host_darwin = xyes; then
5571 # This doesn't seem to be required and it slows down parallel builds
5572 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5577 NONE) prefix=$ac_default_prefix ;;
5579 case $exec_prefix in
5580 NONE) exec_prefix='${prefix}' ;;
5584 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
5585 # any existing config.make. This allows people to share the same source tree
5586 # with different build directories, one native and one cross
5588 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5590 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5592 echo "prefix=$prefix" > $mcs_topdir/build/config.make
5593 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5594 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5595 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5596 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5597 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5598 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5599 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5600 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5603 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5604 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5607 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5610 [myver=$($AWK 'BEGIN {
5611 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5612 if(length(vsplit [1]) > 4) {
5613 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5615 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5618 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5619 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5621 if test x$host_darwin = xyes; then
5622 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
5623 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
5624 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
5625 elif test x$host_win32 = xyes; then
5626 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5627 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5628 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
5629 elif test x$host_linux = xyes; then
5630 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5631 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5632 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5634 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
5635 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
5636 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
5639 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5640 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5643 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5644 enable_system_aot=yes
5647 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5648 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5651 if test x$DISABLE_MCS_DOCS = xyes; then
5652 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5655 if test x$has_extension_module != xno; then
5656 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5659 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5661 if test "x$test_bcl_opt" = "xyes"; then
5662 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5665 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5667 if test $csc_compiler = mcs; then
5668 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5671 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5672 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5673 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5674 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5677 if test "x$AOT_MODE" != "x" ; then
5678 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5681 if test "x$enable_btls" = "xyes"; then
5682 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5689 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5691 btls_platform_string=
5692 if test x$enable_btls = xyes; then
5693 if test x$btls_android = xyes; then
5694 btls_platform_string=" (android:$BTLS_PLATFORM)"
5696 btls_platform_string=" ($BTLS_PLATFORM)"
5701 if test x$buildsgen = xyes; then
5702 if test x$enable_cooperative_suspend != xno; then
5703 thread_suspend_msg="Suspend: Cooperative"
5704 elif test x$enable_hybrid_suspend != xno; then
5705 thread_suspend_msg="Suspend: Hybrid"
5707 thread_suspend_msg="Suspend: Preemptive"
5713 C# Compiler: $csc_compiler
5721 SIGALTSTACK: $with_sigaltstack
5723 BigArrays: $enable_big_arrays
5724 DTrace: $enable_dtrace
5725 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts)
5726 Spectre: $spectre_mitigation_status
5729 .NET 4.x: $with_profile4_x
5730 Xamarin.Android: $with_monodroid
5731 Xamarin.iOS: $with_monotouch
5732 Xamarin.WatchOS: $with_monotouch_watch
5733 Xamarin.TVOS: $with_monotouch_tv
5734 Xamarin.Mac: $with_xammac
5735 Windows AOT: $with_winaot
5737 Unreal: $with_unreal
5738 WebAssembly: $with_wasm
5739 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5740 JNI support: $jdk_headers_found
5741 libgdiplus: $libgdiplus_msg
5743 BTLS: $enable_btls$btls_platform_string
5744 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5745 crash reporting: $crash_reporting
5748 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5749 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)