1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.17.0],
5 [https://github.com/mono/mono/issues/new])
7 AC_CONFIG_SRCDIR([README.md])
8 AC_CONFIG_MACRO_DIR([m4])
12 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
13 # The extra brackets are to foil regex-based scans.
14 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
16 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign subdir-objects]
17 m4_esyscmd([case `automake --version | head -n 1` in # parallel-tests is default in automake 1.13+, we need to explicitly enable it
18 *1.11*|*1.12*) echo parallel-tests;; # for 1.11 and 1.12 but not below as those versions don't recognize the flag
19 esac])) # TODO: remove this hack once we require automake 1.11+
21 AC_CONFIG_HEADERS([config.h])
29 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
31 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
32 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
33 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
35 # This is the version number of the corlib-runtime interface. When
36 # making changes to this interface (by changing the layout
37 # of classes the runtime knows about, changing icall signature or
38 # semantics etc), increment this variable.
40 # This can be reset to 0 when Mono's version number is bumped
41 # since it's part of the corlib version (the prefix '1' in the full
42 # version number is to ensure the number isn't treated as octal in C)
43 MONO_CORLIB_COUNTER=15
44 MONO_CORLIB_VERSION=`printf "1%02d%02d%02d%03d" $MONO_VERSION_MAJOR $MONO_VERSION_MINOR 0 $MONO_CORLIB_COUNTER`
46 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,$MONO_CORLIB_VERSION,[Version of the corlib-runtime interface])
47 AC_SUBST(MONO_CORLIB_VERSION)
51 echo "Run configure using ./configure --host=i686-pc-mingw32"
55 # In case of cygwin, override LN_S, irrespective of what it determines.
56 # The build uses cygwin, but the actual runtime doesn't.
58 *cygwin* ) LN_S='cp -p';;
66 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
67 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
68 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
69 CFLAGS_FOR_LIBGC=$CFLAGS
70 CPPFLAGS_FOR_BTLS=$CPPFLAGS
71 CFLAGS_FOR_BTLS=$CFLAGS
73 # libgc uses some deprecated APIs
74 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
77 # These are the flags that need to be stored in the mono.pc file for
78 # compiling code that will embed Mono
82 AC_SUBST(libmono_cflags)
83 AC_SUBST(libmono_ldflags)
85 # Variable to have relocatable .pc files (lib, or lib64)
86 # realpath isn't always available, and requires that all but the tip of the provided
87 # path exists. Fall back to the old behaviour, but realpath allows depth >1
88 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
89 # too deep for the old method to work
90 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
91 AC_SUBST(reloc_libdir)
93 # Set to yes if Unix sockets cannot be created in an anonymous namespace
96 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
97 extra_runtime_ldflags=""
101 # Current autotools (v1.15) doesn't have a triplet we can use for wasm so the kludge we do is to
102 # work around it by using a feature flag instead
103 AC_ARG_ENABLE(wasm,[ --enable-wasm Hack to set the current runtime to target wasm], enable_wasm=$enableval)
105 # Thread configuration inspired by sleepycat's db
106 AC_MSG_CHECKING([host platform characteristics])
122 if test "x$enable_wasm" = "xyes"; then
123 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
124 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
126 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 Vista or later is required
148 CPPFLAGS="$CPPFLAGS -DWINVER=0x0600 -D_WIN32_WINNT=0x0600 -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
186 if test "x$PTHREAD_CFLAGS" = "x"; then
187 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
190 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
191 libmono_cflags="$PTHREAD_CFLAGS"
193 if test "x$PTHREAD_LIBS" = "x"; then
194 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
195 libmono_ldflags="-pthread"
197 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
198 libmono_ldflags="$PTHREAD_LIBS"
200 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
202 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
204 libgc_threads=pthreads
207 with_sgen_default_concurrent=yes
210 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
211 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
212 if test "x$disable_munmap" != "xyes"; then
213 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
215 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
216 LDFLAGS="$LDFLAGS -pthread"
218 AC_DEFINE(PTHREAD_POINTER_ID)
220 libgc_threads=pthreads
224 with_sgen_default_concurrent=yes
228 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
229 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
231 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
232 if test "x$disable_munmap" != "xyes"; then
233 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
235 libmono_cflags="-D_REENTRANT"
237 libgc_threads=pthreads
244 # Android doesn't support boehm, as it's missing <link.h>
248 # isinf(3) requires -lm; see isinf check below
249 LDFLAGS="$LDFLAGS -lm"
251 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
252 # PAGE_SIZE; breaks mono/io-layer/collection.c
253 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
254 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
255 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
257 # to bypass the underscore linker check, can't work when cross-compiling
263 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
264 if test "x$disable_munmap" != "xyes"; then
265 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
267 libmono_cflags="-D_REENTRANT"
269 libgc_threads=pthreads
271 if test "x$cross_compiling" != "xno"; then
272 # to bypass the underscore linker check, not
273 # available during cross-compilation
287 # https://bugzilla.novell.com/show_bug.cgi?id=504411
291 with_sgen_default_concurrent=yes
294 echo "nacl no longer supported."
298 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
299 # +ESdbgasm only valid on bundled cc on RISC
300 # silently ignored for ia64
301 if test $GCC != "yes"; then
302 CFLAGS="$CFLAGS +ESdbgasm"
303 # Arrange for run-time dereferencing of null
304 # pointers to produce a SIGSEGV signal.
305 LDFLAGS="$LDFLAGS -z"
307 CFLAGS="$CFLAGS +ESdbgasm"
308 LDFLAGS="$LDFLAGS -z"
309 libmono_cflags="-D_REENTRANT"
310 libmono_ldflags="-lpthread"
311 libgc_threads=pthreads
316 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
318 libmono_cflags="-D_REENTRANT"
319 libgc_threads=pthreads
322 enable_solaris_tar_check=yes
325 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
328 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
329 libmono_cflags="-D_THREAD_SAFE"
331 AC_DEFINE(PTHREAD_POINTER_ID)
332 AC_DEFINE(USE_MACH_SEMA, 1, [...])
334 libgc_threads=pthreads
336 if test "x$cross_compiling" = "xyes"; then
337 has_broken_apple_cpp=yes
339 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
340 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
341 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
343 dnl Snow Leopard and newer config.guess reports as this
345 BROKEN_DARWIN_FLAGS="-arch i386"
346 BROKEN_DARWIN_CPPFLAGS=""
347 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
348 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
349 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
350 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
351 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
352 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
353 with_sgen_default_concurrent=yes
356 with_sgen_default_concurrent=yes
368 CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
369 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
371 LIBS="$LIBS -lnetwork -ltextencoding"
373 AC_DEFINE(PTHREAD_POINTER_ID)
374 dnl Haiku does not support static TLS with __thread
376 libgc_threads=pthreads
380 dnl Set up a 64-bit build
381 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
383 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
384 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
385 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
386 dnl specifiy 64-bit mode for tools.
387 AR="/usr/bin/ar -X64"
388 NM="/usr/bin/nm -X64"
389 dnl SGen is the future (changes to Boehm support code would be
390 dnl required if you wish to re-enable Boehm)
395 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
397 dnl use pthread TLS, __thread has issues with the compiler flags we use
399 dnl ppc Linux is the same? test further
403 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
413 if test x$need_link_unlink = xyes; then
414 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
417 if test x$host_win32 = xyes; then
418 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
421 if test x$target_win32 = xyes; then
422 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
425 if test x$host_darwin = xyes; then
426 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
429 # Defined for all targets/platforms using classic Windows API support.
430 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
431 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
433 AC_SUBST(extra_runtime_ldflags)
434 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
435 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
436 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
437 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
438 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
439 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
440 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
441 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
442 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
444 if test -z "$HOST_DARWIN_TRUE"; then :
445 PLATFORM_AOT_SUFFIX=.dylib
448 if test -z "$HOST_LINUX_TRUE"; then :
449 PLATFORM_AOT_SUFFIX=.so
452 if test -z "$HOST_WIN32_TRUE"; then :
453 PLATFORM_AOT_SUFFIX=.dll
456 AC_SUBST(PLATFORM_AOT_SUFFIX)
458 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
460 AC_CHECK_TOOL(CC, gcc, gcc)
462 AC_CHECK_TOOL(CXX, g++, g++)
468 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
470 # Set ASFLAGS if not already set.
471 : ${CCASFLAGS='$(CFLAGS)'}
475 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
476 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
477 if test "x$CXX" = "xg++"; then
478 if test "x$GXX" != "xyes"; then
479 # automake/libtool is so broken, it requires g++ even if the c++ sources
480 # are inside automake conditionals
481 AC_MSG_ERROR([You need to install g++])
485 dnl may require a specific autoconf version
486 dnl AC_PROG_CC_FOR_BUILD
487 dnl CC_FOR_BUILD not automatically detected
489 CFLAGS_FOR_BUILD=$CFLAGS
491 if test "x$cross_compiling" = "xyes"; then
496 AC_SUBST(CC_FOR_BUILD)
497 AC_SUBST(CFLAGS_FOR_BUILD)
499 AC_SUBST(BUILD_EXEEXT)
501 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
502 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
507 # This causes monodis to not link correctly
508 #AC_DISABLE_FAST_INSTALL
510 #lookup makedev() header
514 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
517 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
518 AC_SUBST(export_ldflags)
520 # Test whenever ld supports -version-script
524 AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h sys/prctl.h)
525 AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h sys/inotify.h arpa/inet.h complex.h unwind.h)
526 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
527 [], [], [#include <stddef.h>
528 #include <sys/socket.h>
529 #include <linux/socket.h>])
531 AC_CHECK_HEADERS(sys/user.h, [], [],
533 #ifdef HAVE_SYS_PARAM_H
534 # include <sys/param.h>
538 AC_CHECK_HEADERS(linux/serial.h)
540 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
541 if test x$have_zlib = xyes; then
542 AC_TRY_COMPILE([#include <zlib.h>], [
543 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
545 #error No good zlib found
548 AC_MSG_RESULT(Using system zlib)
549 zlib_msg="system zlib"
550 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
552 AC_MSG_RESULT(Using embedded zlib)
554 zlib_msg="bundled zlib"
558 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
559 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
561 # for mono/metadata/debug-symfile.c
562 AC_CHECK_HEADERS(elf.h)
565 AC_CHECK_HEADERS(poll.h)
566 AC_CHECK_HEADERS(sys/poll.h)
567 AC_CHECK_HEADERS(sys/wait.h)
568 AC_CHECK_HEADERS(grp.h)
569 AC_CHECK_HEADERS(syslog.h)
570 AC_CHECK_FUNCS(vsyslog)
573 AC_CHECK_HEADERS(wchar.h)
574 AC_CHECK_HEADERS(ieeefp.h)
575 AC_MSG_CHECKING(for isinf)
576 AC_TRY_LINK([#include <math.h>], [
580 AC_DEFINE(HAVE_ISINF, 1, [isinf available])
582 # We'll have to use signals
586 AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
587 AC_TRY_LINK([#include <math.h>],
589 AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
592 # for Linux statfs support
593 AC_CHECK_HEADERS(linux/magic.h)
595 # For Android NDK unified headers
596 if test x$platform_android = xyes; then
597 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
598 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
600 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
601 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
602 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
603 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
604 # doesn't contain the required definitions (NDK 14)
605 if test x$have_android_signal_inlines = xyes; then
606 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
608 AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
610 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
614 android_sigrtminmax_work=yes
617 android_sigrtminmax_work=no
621 if test x$android_sigrtminmax_work = xno; then
622 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
626 # Attempt to detect whether we're using Android NDK unified headers
627 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
628 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
630 android_unified_headers=no
631 if test x$have_android_api_level = xyes; then
632 if test x$have_android_versioning = xyes; then
633 AC_MSG_CHECKING([whether using Android NDK unified headers])
635 # Both macros are defined only in the NDK unified headers
638 #include <android/api-level.h>
639 #include <android/versioning.h>
641 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
643 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
647 android_unified_headers=yes
650 android_unified_headers=no
656 if test x$android_unified_headers = xyes; then
657 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
661 # not 64 bit clean in cross-compile
662 if test "x$enable_wasm" = "xyes"; then
663 AC_DEFINE(SIZEOF_VOID_P,4)
664 AC_DEFINE(SIZEOF_LONG,4)
665 ac_cv_sizeof_void_p="4"
666 ac_cv_sizeof_long="4"
668 AC_CHECK_SIZEOF(void *)
669 AC_CHECK_SIZEOF(long)
673 AC_CHECK_SIZEOF(long long)
675 AC_CACHE_CHECK([for clang],
688 AC_ARG_ENABLE(visibility-hidden,
689 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
690 disable_visibility_hidden=yes, disable_visibility_hidden=no)
693 if test x"$GCC" = xyes; then
694 WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes -Wno-format-zero-length'
696 # We require C99 with some GNU extensions, e.g. `linux` macro
697 CFLAGS="$CFLAGS -std=gnu99"
699 # The runtime code does not respect ANSI C strict aliasing rules
700 CFLAGS="$CFLAGS -fno-strict-aliasing"
702 # We rely on signed overflow to behave
703 CFLAGS="$CFLAGS -fwrapv"
705 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
706 if test x"$disable_visibility_hidden" = xno; then
707 # Don't export any symbols by default
708 SHARED_CFLAGS="-fvisibility=hidden"
709 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
713 # Check for the normal version, since gcc ignores unknown -Wno options
714 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
715 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
719 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
725 if test "x$mono_cv_clang" = "xyes"; then
726 # https://bugzilla.samba.org/show_bug.cgi?id=8118
727 WARN="$WARN -Qunused-arguments"
728 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
729 # We rely on zero length arrays in structs
730 WARN="$WARN -Wno-zero-length-array"
733 # The Sun Forte compiler complains about inline functions that access static variables
734 # so disable all inlining.
737 CFLAGS="$CFLAGS -Dinline="
741 CFLAGS="$WARN $CFLAGS -g"
742 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
743 CPPFLAGS="$WARN $CPPFLAGS -g"
745 # Where's the 'mcs' source tree?
746 if test -d $srcdir/mcs; then
752 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
753 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
754 mcsdir=$with_mcs_path
758 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
761 # A sanity check to catch cases where the package was unpacked
762 # with an ancient tar program (Solaris)
764 AC_ARG_ENABLE(solaris-tar-check,
765 [ --disable-solaris-tar-check disable solaris tar check],
766 do_solaris_tar_check=no, do_solaris_tar_check=yes)
768 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
769 AC_MSG_CHECKING(integrity of package)
770 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
774 errorm="Your mono distribution is incomplete; if unpacking from a tar file, make sure you use GNU tar; see http://www.mono-project.com/IncompletePackage for more details"
775 AC_MSG_ERROR([$errorm])
779 if test "x$with_mcs_path" != "x"; then
780 mcs_topdir=$(cd "$mcsdir" && pwd)
781 mcs_topdir_from_srcdir=$mcs_topdir
783 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
784 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
787 # Convert mcs_topdir* paths to Windows syntax.
788 if test x$cross_compiling$host_win32 = xnoyes; then
789 mcs_topdir=$(cygpath -m $mcs_topdir)
790 case $mcs_topdir_from_srcdir in
792 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
797 AC_SUBST([mcs_topdir])
798 AC_SUBST([mcs_topdir_from_srcdir])
800 # gettext: prepare the translation directories.
801 # we do not configure the full gettext, as we consume it dynamically from C#
804 if test "x$USE_NLS" = "xyes"; then
805 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
807 if test "x$HAVE_MSGFMT" = "xno"; then
808 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
812 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
815 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
816 if test x$with_crosspkgdir = "x"; then
817 if test -s $PKG_CONFIG_PATH; then
818 pkg_config_path=$PKG_CONFIG_PATH
821 pkg_config_path=$with_crosspkgdir
822 PKG_CONFIG_PATH=$pkg_config_path
823 export PKG_CONFIG_PATH
827 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
828 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
829 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
831 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
832 if test x$werror_flag = xyes; then
833 WERROR_CFLAGS="-Werror"
835 AC_SUBST([WERROR_CFLAGS])
836 AC_SUBST([SHARED_CFLAGS])
838 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
840 AC_SUBST(GLIB_CFLAGS)
842 # Enable support for fast thread-local storage
843 # Some systems have broken support, so we allow to disable it.
844 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
846 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
847 # This does not work on some platforms (bug #55253)
848 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
850 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
851 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
852 # Same as --with-shared_mono=no
853 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
855 if test "x$enable_static" = "xno"; then
859 if test "x$enable_shared" = "xno"; then
863 if test "x$enable_libraries" = "xno"; then
867 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
869 if test "x$host_win32" = "xyes"; then
870 # Boehm GC requires the runtime to be in its own dll
874 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
875 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
876 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
877 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
879 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
880 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
881 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
883 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
884 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
888 # Pass it to libgc as well
889 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
896 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
898 if test x$enable_small_config = xyes; then
899 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
900 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
903 AC_ARG_ENABLE(system-aot, [ --enable-system-aot Enable the Ahead-Of-Time compilation of system assemblies during the build (on by default on some platforms)], enable_system_aot=$enableval, enable_system_aot=default)
905 DISABLED_FEATURES=none
908 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
909 AC_MSG_CHECKING([CSharp compiler to use])
910 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
911 if test x$withval = xmcs; then
913 elif test x$withval = xroslyn; then
915 elif test x$withval = xdefault; then
918 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
920 ],[csc_compiler=default])
922 if test $csc_compiler = default; then
923 if test $endian = big; then
925 elif test $endian = little; then
927 powerpc*) csc_compiler=mcs ;;
928 *) csc_compiler=roslyn ;;
934 AC_MSG_RESULT($csc_compiler)
936 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
937 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
938 AC_ARG_WITH(jemalloc-assert, [ --with-jemalloc_assert=yes,no If jemalloc performs runtime checks for memory correctness (defaults to no)], [], [with_jemalloc_assert=no])
941 if test x$target_win32 = xyes; then
943 with_jemalloc_assert=no
944 with_jemalloc_always=no
947 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
948 if test "x$with_jemalloc_assert" = "xyes"; then
949 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
950 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
951 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
954 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
955 if test "x$with_jemalloc_always" = "xyes"; then
957 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
958 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
959 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
962 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
963 if test "x$with_jemalloc" = "xyes"; then
964 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
965 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
966 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
968 if test "x$target_mach" = "xyes"; then
969 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
972 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
973 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
975 AC_SUBST(JEMALLOC_CFLAGS)
976 AC_SUBST(JEMALLOC_CPPFLAGS)
977 AC_SUBST(JEMALLOC_LDFLAGS)
978 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
983 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
984 # MERP - The MS telemetry profile. Not for general use.
985 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
987 # 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.
989 #--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.
990 #--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.
991 #--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.
992 #--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.
994 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=no])
995 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])
997 if test "x$with_crash_privacy" = "xno"; then
998 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1001 if test "x$with_structured_crashes" = "xno"; then
1002 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1005 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1006 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1008 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1009 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1011 if test x$enable_monodroid = xyes; then
1012 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1015 if test x$enable_monotouch = xyes; then
1016 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1020 # Set the build profiles and options before things which use them
1023 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])
1024 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1025 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1026 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])
1027 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])
1028 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1029 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1030 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])
1031 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])
1032 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1033 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1034 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1035 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1038 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])
1039 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])
1040 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])
1041 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])
1044 dnl Spectre compiler mitigation flag checks
1046 if test "x$with_spectre_mitigation" = "xyes"; then
1047 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1049 SPECTRE_INDIRECT_BRANCH_KIND=
1050 case "x$with_spectre_indirect_branch_choice" in
1051 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1052 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1053 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1054 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1055 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1058 SPECTRE_FUNCTION_RETURN_KIND=""
1059 case "x$with_spectre_function_return_choice" in
1060 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1061 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1062 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1063 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1064 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1067 AX_CHECK_COMPILE_FLAG(
1068 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1069 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1072 AX_CHECK_COMPILE_FLAG(
1073 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1074 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1077 if test "x$SPECTRE_CFLAGS" != "x" ; then
1078 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1079 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1080 spectre_mitigation_status="mitigation enabled"
1083 spectre_mitigation_status="no mitigation"
1087 dnl Profile defaults
1089 TEST_PROFILE=default
1090 enable_llvm_default=no
1092 with_profile4_x_default=no
1093 with_monodroid_default=no
1094 with_monotouch_default=no
1095 with_monotouch_watch_default=no
1096 with_monotouch_tv_default=no
1097 with_xammac_default=no
1098 with_testing_aot_hybrid_default=no
1099 with_testing_aot_full_default=no
1100 with_winaot_default=no
1101 with_orbis_default=no
1102 with_unreal_default=no
1103 with_wasm_default=no
1105 with_bitcode_default=no
1106 enable_cooperative_suspend_default=no
1107 enable_hybrid_suspend_default=no
1109 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1111 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1113 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1114 DISABLE_MCS_DOCS_default=yes
1115 elif test x$with_runtime_preset = xnet_4_x; then
1116 with_profile4_x_default=yes
1117 elif test x$with_runtime_preset = xall; then
1118 with_profile4_x_default=yes
1119 with_monodroid_default=yes
1120 with_monotouch_default=yes
1121 with_monotouch_watch_default=yes
1122 with_monotouch_tv_default=yes
1123 with_xammac_default=yes
1124 with_winaot_default=yes
1125 with_orbis_default=yes
1126 with_unreal_default=yes
1127 with_wasm_default=yes
1128 with_testing_aot_hybrid_default=yes
1129 with_testing_aot_full_default=yes
1130 elif test x$with_runtime_preset = xbitcode; then
1131 DISABLE_MCS_DOCS_default=yes
1132 with_testing_aot_full_default=yes
1133 with_bitcode_default=yes
1134 enable_cooperative_suspend_default=yes
1135 TEST_PROFILE=testing_aot_full
1136 enable_llvm_default=yes
1138 mono_feature_disable_com='yes'
1139 mono_feature_disable_remoting='yes'
1140 mono_feature_disable_reflection_emit_save='yes'
1141 mono_feature_disable_reflection_emit='yes'
1142 mono_feature_disable_appdomains='yes'
1144 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1145 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1147 elif test x$with_runtime_preset = xfullaot; then
1148 DISABLE_MCS_DOCS_default=yes
1149 with_testing_aot_full_default=yes
1150 TEST_PROFILE=testing_aot_full
1152 mono_feature_disable_com='yes'
1153 mono_feature_disable_remoting='yes'
1154 mono_feature_disable_reflection_emit_save='yes'
1155 mono_feature_disable_reflection_emit='yes'
1156 mono_feature_disable_appdomains='yes'
1158 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1159 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1161 elif test x$with_runtime_preset = xfullaot_llvm; then
1162 DISABLE_MCS_DOCS_default=yes
1163 with_testing_aot_full_default=yes
1164 TEST_PROFILE=testing_aot_full
1166 mono_feature_disable_com='yes'
1167 mono_feature_disable_remoting='yes'
1168 mono_feature_disable_reflection_emit_save='yes'
1169 mono_feature_disable_reflection_emit='yes'
1170 mono_feature_disable_appdomains='yes'
1172 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1173 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1175 elif test x$with_runtime_preset = xhybridaot; then
1176 DISABLE_MCS_DOCS_default=yes
1177 with_testing_aot_hybrid_default=yes
1178 TEST_PROFILE=testing_aot_hybrid
1180 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1181 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1182 elif test x$with_runtime_preset = xhybridaot_llvm; then
1183 DISABLE_MCS_DOCS_default=yes
1184 with_testing_aot_hybrid_default=yes
1185 TEST_PROFILE=testing_aot_hybrid
1187 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1188 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1189 elif test x$with_runtime_preset = xaot; then
1190 with_profile4_x_default=yes
1192 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1195 DISABLE_MCS_DOCS_default=yes
1196 elif test x$with_runtime_preset = xaot_llvm; then
1197 with_profile4_x_default=yes
1199 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1202 DISABLE_MCS_DOCS_default=yes
1203 elif test x$with_runtime_preset = xwinaot; then
1204 DISABLE_MCS_DOCS_default=yes
1205 with_winaot_default=yes
1208 mono_feature_disable_com='yes'
1209 mono_feature_disable_remoting='yes'
1210 mono_feature_disable_reflection_emit_save='yes'
1211 mono_feature_disable_reflection_emit='yes'
1212 mono_feature_disable_appdomains='yes'
1214 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1215 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1217 elif test x$with_runtime_preset = xorbis; then
1218 DISABLE_MCS_DOCS_default=yes
1219 with_orbis_default=yes
1222 mono_feature_disable_com='yes'
1223 mono_feature_disable_remoting='yes'
1224 mono_feature_disable_reflection_emit_save='yes'
1225 mono_feature_disable_reflection_emit='yes'
1226 mono_feature_disable_appdomains='yes'
1228 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1229 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1231 elif test x$with_runtime_preset = xunreal; then
1232 DISABLE_MCS_DOCS_default=yes
1233 with_unreal_default=yes
1236 mono_feature_disable_com='yes'
1237 mono_feature_disable_remoting='yes'
1238 mono_feature_disable_appdomains='no'
1240 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1241 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1242 elif test x$with_runtime_preset = xwasm; then
1243 DISABLE_MCS_DOCS_default=yes
1244 with_wasm_default=yes
1247 mono_feature_disable_com='yes'
1248 mono_feature_disable_remoting='yes'
1249 mono_feature_disable_reflection_emit_save='yes'
1250 mono_feature_disable_reflection_emit='yes'
1251 mono_feature_disable_appdomains='yes'
1253 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1254 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1256 with_profile4_x_default=yes
1259 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1260 AC_SUBST(AOT_BUILD_FLAGS)
1261 AC_SUBST(AOT_RUN_FLAGS)
1262 # For llvmonlycheck + fullaotcheck
1263 AC_SUBST(INVARIANT_AOT_OPTIONS)
1266 AC_SUBST(TEST_PROFILE)
1268 if test "x$with_profile4_x" = "xdefault"; then
1269 with_profile4_x=$with_profile4_x_default
1271 if test "x$with_monodroid" = "xdefault"; then
1272 with_monodroid=$with_monodroid_default
1274 if test "x$with_monotouch" = "xdefault"; then
1275 with_monotouch=$with_monotouch_default
1277 if test "x$with_monotouch_watch" = "xdefault"; then
1278 with_monotouch_watch=$with_monotouch_watch_default
1280 if test "x$with_monotouch_tv" = "xdefault"; then
1281 with_monotouch_tv=$with_monotouch_tv_default
1283 if test "x$with_bitcode" = "xdefault"; then
1284 with_bitcode=$with_bitcode_default
1286 if test "x$with_xammac" = "xdefault"; then
1287 with_xammac=$with_xammac_default
1289 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1290 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1292 if test "x$with_testing_aot_full" = "xdefault"; then
1293 with_testing_aot_full=$with_testing_aot_full_default
1295 if test "x$with_winaot" = "xdefault"; then
1296 with_winaot=$with_winaot_default
1298 if test "x$with_orbis" = "xdefault"; then
1299 with_orbis=$with_orbis_default
1301 if test "x$with_unreal" = "xdefault"; then
1302 with_unreal=$with_unreal_default
1304 if test "x$with_wasm" = "xdefault"; then
1305 with_wasm=$with_wasm_default
1309 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1310 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1311 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1312 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1313 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1314 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1315 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1316 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1317 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1318 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1319 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1320 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1321 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1322 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"])
1323 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1325 default_profile=net_4_x
1326 if test -z "$INSTALL_MONODROID_TRUE"; then :
1327 default_profile=monodroid
1329 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1330 default_profile=monotouch
1332 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1333 default_profile=xammac
1335 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1336 default_profile=testing_aot_hybrid
1338 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1339 default_profile=testing_aot_full
1341 if test -z "$INSTALL_WINAOT_TRUE"; then :
1342 default_profile=winaot
1344 if test -z "$INSTALL_ORBIS_TRUE"; then :
1345 default_profile=orbis
1347 if test -z "$INSTALL_UNREAL_TRUE"; then :
1348 default_profile=unreal
1350 if test -z "$INSTALL_WASM_TRUE"; then :
1351 default_profile=wasm
1353 if test -z "$INSTALL_4_x_TRUE"; then :
1354 default_profile=net_4_x
1356 DEFAULT_PROFILE=$default_profile
1357 AC_SUBST(DEFAULT_PROFILE)
1360 # End build profile configuration
1363 if test x$USE_NLS = xprofile_default; then
1365 AC_MSG_CHECKING([NLS used])
1367 # We make the default value for USE_NLS
1368 # "no" on OSX because it isn't available on most
1369 # default OSX installs. The most common configurations will
1370 # all disable it, so this saves us typing.
1371 if test x$host_darwin = xyes; then
1378 AC_MSG_RESULT([$USE_NLS])
1381 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1382 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1383 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1384 security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1386 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1387 eval "mono_feature_disable_$feature='yes'"
1389 DISABLED_FEATURES=$enable_minimal
1390 disabled="Disabled: $enable_minimal"
1393 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1395 if test "x$mono_feature_disable_aot" = "xyes"; then
1396 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1397 enable_system_aot=no
1398 AC_MSG_NOTICE([Disabled AOT compiler])
1401 if test "x$mono_feature_disable_profiler" = "xyes"; then
1402 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1403 AC_MSG_NOTICE([Disabled support for the profiler])
1405 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1407 if test "x$mono_feature_disable_decimal" = "xyes"; then
1408 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1409 AC_MSG_NOTICE([Disabled support for decimal])
1412 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1413 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1414 AC_MSG_NOTICE([Disabled support for P/Invoke])
1417 if test "x$mono_feature_disable_debug" = "xyes"; then
1418 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1419 AC_MSG_NOTICE([Disabled support for runtime debugging])
1422 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1423 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1424 mono_feature_disable_reflection_emit_save=yes
1425 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1428 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1429 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1430 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1433 if test "x$mono_feature_disable_large_code" = "xyes"; then
1434 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1435 AC_MSG_NOTICE([Disabled support for large assemblies])
1438 if test "x$mono_feature_disable_logging" = "xyes"; then
1439 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1440 AC_MSG_NOTICE([Disabled support for logging])
1443 if test "x$mono_feature_disable_com" = "xyes"; then
1444 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1445 AC_MSG_NOTICE([Disabled COM support])
1448 if test "x$mono_feature_disable_ssa" = "xyes"; then
1449 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1450 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1453 if test "x$mono_feature_disable_generics" = "xyes"; then
1454 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1455 AC_MSG_NOTICE([Disabled Generics Support])
1458 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1459 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1460 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1463 if test "x$mono_feature_disable_portability" = "xyes"; then
1464 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1465 AC_MSG_NOTICE([Disabled IO Portability layer])
1468 if test "x$mono_feature_disable_attach" = "xyes"; then
1469 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1470 AC_MSG_NOTICE([Disabled agent attach])
1473 if test "x$mono_feature_disable_verifier" = "xyes"; then
1474 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1475 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1478 if test "x$mono_feature_disable_jit" = "xyes"; then
1479 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1480 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1483 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1485 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1486 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1487 AC_MSG_NOTICE([Disabled the interpreter])
1490 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1492 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1493 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1496 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1498 if test "x$mono_feature_disable_simd" = "xyes"; then
1499 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1500 AC_MSG_NOTICE([Disabled SIMD support])
1503 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1504 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1505 AC_MSG_NOTICE([Disabled Soft Debugger.])
1508 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1510 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1511 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1512 AC_MSG_NOTICE([Disabled Performance Counters.])
1514 if test "x$mono_feature_disable_normalization" = "xyes"; then
1515 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1516 AC_MSG_NOTICE([Disabled String normalization support.])
1519 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1520 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1521 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1522 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1525 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1526 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1527 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1530 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1531 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1532 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1535 if test "x$mono_feature_disable_remoting" = "xyes"; then
1536 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1537 AC_MSG_NOTICE([Disabled remoting])
1540 if test "x$mono_feature_disable_security" = "xyes"; then
1541 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1542 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1545 if test "x$mono_feature_disable_lldb" = "xyes"; then
1546 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1547 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1550 if test "x$mono_feature_disable_mdb" = "xyes"; then
1551 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1552 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1555 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1556 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1557 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1561 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1562 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1563 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1566 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1567 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1568 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1571 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1572 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1573 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1576 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1577 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1579 has_extension_module=no
1580 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1582 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1583 if test x$extension = xdefault ; then
1584 has_extension_module=yes;
1587 if test x$enable_extension_module = xyes; then
1588 has_extension_module=yes;
1592 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1594 if test x$has_extension_module != xno ; then
1595 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1596 AC_MSG_NOTICE([Enabling mono extension module.])
1600 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1602 AC_MSG_CHECKING(for visibility __attribute__)
1605 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1606 int main () { doit (); return 0; }
1609 have_visibility_hidden=yes
1612 have_visibility_hidden=no
1617 dnl Boehm GC configuration
1620 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1622 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1623 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1625 if test "x$support_boehm" = "xyes"; then
1627 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1628 if test x$enable_parallel_mark = xyes; then
1629 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1639 if test "x$support_boehm" = "xyes"; then
1643 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1644 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1645 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1647 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1649 if test x$target_win32 = xyes; then
1650 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1651 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1654 gc_msg="Included Boehm GC with typed GC"
1655 if test x$enable_parallel_mark = xyes; then
1656 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1657 gc_msg="$gc_msg and parallel mark"
1659 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1664 AC_MSG_WARN("External Boehm is no longer supported")
1668 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1672 AC_MSG_WARN("Compiling mono without GC.")
1673 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1674 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1678 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1682 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])
1683 if test "x$large_heap" = "xyes"; then
1684 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1687 AC_SUBST(LIBGC_CPPFLAGS)
1688 AC_SUBST(LIBGC_LIBS)
1689 AC_SUBST(LIBGC_STATIC_LIBS)
1691 AC_SUBST(BOEHM_DEFINES)
1694 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1697 dnl End of Boehm GC Configuration
1700 dnl *************************************
1701 dnl *** Checks for zero length arrays ***
1702 dnl *************************************
1703 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1711 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1714 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1717 dnl ***********************************
1718 dnl *** Checks for signals
1719 dnl ***********************************
1720 AC_CHECK_HEADERS(signal.h)
1721 AC_CHECK_FUNCS(sigaction)
1722 AC_CHECK_FUNCS(kill)
1723 AC_CHECK_FUNCS(signal)
1725 # signal() is declared inline in Android headers
1726 # so we need to workaround it by overriding the check.
1727 if test x$platform_android = xyes; then
1728 AC_DEFINE(HAVE_SIGNAL,1)
1731 if test x$host_win32 = xno; then
1732 dnl *************************************
1733 dnl *** Checks for time capabilities ***
1734 dnl *************************************
1736 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1737 AC_TRY_COMPILE([#include <time.h>], [
1738 const int foo = CLOCK_MONOTONIC;
1741 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1746 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1747 AC_TRY_COMPILE([#include <time.h>], [
1748 const int foo = CLOCK_MONOTONIC_COARSE;
1751 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1756 AC_MSG_CHECKING(for CLOCK_REALTIME)
1757 AC_TRY_COMPILE([#include <time.h>], [
1758 const int foo = CLOCK_REALTIME;
1761 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1766 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1767 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1768 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1769 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1770 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1771 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1773 dnl hires monotonic clock support
1774 AC_SEARCH_LIBS(clock_gettime, rt)
1775 AC_CHECK_FUNCS(clock_nanosleep)
1777 dnl dynamic loader support
1778 AC_CHECK_FUNC(dlopen, DL_LIB="",
1779 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1781 if test x$dl_support = xno; then
1782 AC_MSG_WARN([No dynamic loading support available])
1784 LIBS="$LIBS $DL_LIB"
1785 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1786 dnl from glib's configure.ac
1787 AC_CACHE_CHECK([for preceeding underscore in symbols],
1789 AC_TRY_RUN([#include <dlfcn.h>
1790 int mono_underscore_test (void) { return 42; }
1792 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1793 handle = dlopen ((void*)0, 0);
1795 f1 = dlsym (handle, "mono_underscore_test");
1796 f2 = dlsym (handle, "_mono_underscore_test");
1797 } return (!f2 || f1);
1799 [mono_cv_uscore=yes],
1800 [mono_cv_uscore=no],
1803 if test "x$mono_cv_uscore" = "xyes"; then
1804 MONO_DL_NEED_USCORE=1
1806 MONO_DL_NEED_USCORE=0
1808 AC_SUBST(MONO_DL_NEED_USCORE)
1809 AC_CHECK_FUNC(dlerror)
1812 dnl ******************************************************************
1813 dnl *** Checks for the IKVM JNI interface library ***
1814 dnl ******************************************************************
1815 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])
1818 if test x$with_ikvm_native = xyes; then
1819 ikvm_native_dir=ikvm-native
1820 jdk_headers_found="IKVM Native"
1823 AC_SUBST(ikvm_native_dir)
1825 AC_CHECK_HEADERS(execinfo.h)
1827 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1829 AC_CHECK_FUNCS(getgrgid_r)
1830 AC_CHECK_FUNCS(getgrnam_r)
1831 AC_CHECK_FUNCS(getresuid)
1832 AC_CHECK_FUNCS(setresuid)
1833 AC_CHECK_FUNCS(kqueue)
1834 AC_CHECK_FUNCS(backtrace_symbols)
1835 AC_CHECK_FUNCS(mkstemp)
1836 AC_CHECK_FUNCS(mmap)
1837 AC_CHECK_FUNCS(madvise)
1838 AC_CHECK_FUNCS(getrusage)
1839 AC_CHECK_FUNCS(getpriority)
1840 AC_CHECK_FUNCS(setpriority)
1841 AC_CHECK_FUNCS(dl_iterate_phdr)
1842 AC_CHECK_FUNCS(dladdr)
1843 AC_CHECK_FUNCS(sysconf)
1844 AC_CHECK_FUNCS(getrlimit)
1845 AC_CHECK_FUNCS(prctl)
1846 AC_CHECK_FUNCS(arc4random)
1848 AC_CHECK_FUNCS(sched_getaffinity)
1849 AC_CHECK_FUNCS(sched_setaffinity)
1850 AC_CHECK_FUNCS(sched_getcpu)
1852 if test x$platform_android != xyes; then
1853 AC_CHECK_FUNCS(getpwnam_r)
1854 AC_CHECK_FUNCS(getpwuid_r)
1857 AC_FUNC_STRERROR_R()
1859 dnl ****************************************************************
1860 dnl *** Check for sched_setaffinity from glibc versions before ***
1861 dnl *** 2.3.4. The older versions of the function only take 2 ***
1862 dnl *** parameters, not 3. ***
1864 dnl *** Because the interface change was not made in a minor ***
1865 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1866 dnl *** won't always indicate the interface sched_affinity has. ***
1867 dnl ****************************************************************
1868 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1869 AC_TRY_COMPILE([#include <sched.h>], [
1871 sched_setaffinity(0, &mask);
1873 # Yes, we have it...
1875 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1877 # We have the new, three-parameter version
1880 AC_TRY_COMPILE([#include <sched.h>], [
1881 CPU_COUNT((void *) 0);
1884 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1886 # We have the new, three-parameter version
1890 dnl ******************************************************************
1891 dnl *** Check for large file support ***
1892 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1893 dnl ******************************************************************
1895 # Check that off_t can represent 2**63 - 1 correctly, working around
1896 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1897 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1899 AC_DEFUN([LARGE_FILES], [
1900 large_CPPFLAGS=$CPPFLAGS
1901 CPPFLAGS="$CPPFLAGS $1"
1903 #include <sys/types.h>
1906 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1907 #define COMPILE_TIME_ASSERT(pred) \
1908 switch(0){case 0:case pred:;}
1909 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1912 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1913 large_CPPFLAGS="$large_CPPFLAGS $1"
1918 CPPFLAGS=$large_CPPFLAGS
1921 AC_MSG_CHECKING(if off_t is 64 bits wide)
1923 if test $large_offt = no; then
1924 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1925 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1927 if test $large_offt = no; then
1928 AC_MSG_WARN([No 64 bit file size support available])
1931 dnl *****************************
1932 dnl *** Checks for libsocket ***
1933 dnl *****************************
1934 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1938 dnl *****************************
1939 dnl *** Checks for libinotify ***
1940 dnl *****************************
1941 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1944 dnl *******************************
1945 dnl *** Checks for MSG_NOSIGNAL ***
1946 dnl *******************************
1947 AC_MSG_CHECKING(for MSG_NOSIGNAL)
1948 AC_TRY_COMPILE([#include <sys/socket.h>], [
1949 int f = MSG_NOSIGNAL;
1951 # Yes, we have it...
1953 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1955 # We'll have to use signals
1959 dnl *****************************
1960 dnl *** Checks for IPPROTO_IP ***
1961 dnl *****************************
1962 AC_MSG_CHECKING(for IPPROTO_IP)
1963 AC_TRY_COMPILE([#include <netinet/in.h>], [
1964 int level = IPPROTO_IP;
1966 # Yes, we have it...
1968 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1970 # We'll have to use getprotobyname
1974 dnl *******************************
1975 dnl *** Checks for IPPROTO_IPV6 ***
1976 dnl *******************************
1977 AC_MSG_CHECKING(for IPPROTO_IPV6)
1978 AC_TRY_COMPILE([#include <netinet/in.h>], [
1979 int level = IPPROTO_IPV6;
1981 # Yes, we have it...
1983 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1985 # We'll have to use getprotobyname
1989 dnl ******************************
1990 dnl *** Checks for IPPROTO_TCP ***
1991 dnl ******************************
1992 AC_MSG_CHECKING(for IPPROTO_TCP)
1993 AC_TRY_COMPILE([#include <netinet/in.h>], [
1994 int level = IPPROTO_TCP;
1996 # Yes, we have it...
1998 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2000 # We'll have to use getprotobyname
2004 dnl *****************************
2005 dnl *** Checks for SOL_IP ***
2006 dnl *****************************
2007 AC_MSG_CHECKING(for SOL_IP)
2008 AC_TRY_COMPILE([#include <netdb.h>], [
2011 # Yes, we have it...
2013 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2015 # We'll have to use getprotobyname
2019 dnl *****************************
2020 dnl *** Checks for SOL_IPV6 ***
2021 dnl *****************************
2022 AC_MSG_CHECKING(for SOL_IPV6)
2023 AC_TRY_COMPILE([#include <netdb.h>], [
2024 int level = SOL_IPV6;
2026 # Yes, we have it...
2028 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2030 # We'll have to use getprotobyname
2034 dnl *****************************
2035 dnl *** Checks for SOL_TCP ***
2036 dnl *****************************
2037 AC_MSG_CHECKING(for SOL_TCP)
2038 AC_TRY_COMPILE([#include <netdb.h>], [
2039 int level = SOL_TCP;
2041 # Yes, we have it...
2043 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2045 # We'll have to use getprotobyname
2049 dnl *****************************
2050 dnl *** Checks for IP_PKTINFO ***
2051 dnl *****************************
2052 AC_MSG_CHECKING(for IP_PKTINFO)
2053 AC_TRY_COMPILE([#include <linux/in.h>], [
2054 int level = IP_PKTINFO;
2056 # Yes, we have it...
2058 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2063 dnl *****************************
2064 dnl *** Checks for IPV6_PKTINFO ***
2065 dnl *****************************
2066 AC_MSG_CHECKING(for IPV6_PKTINFO)
2067 AC_TRY_COMPILE([#include <netdb.h>], [
2068 int level = IPV6_PKTINFO;
2070 # Yes, we have it...
2072 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2077 dnl **********************************
2078 dnl *** Checks for IP_DONTFRAG ***
2079 dnl **********************************
2080 AC_MSG_CHECKING(for IP_DONTFRAG)
2081 AC_TRY_COMPILE([#include <netinet/in.h>], [
2082 int level = IP_DONTFRAG;
2084 # Yes, we have it...
2086 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2091 dnl **********************************
2092 dnl *** Checks for IP_DONTFRAGMENT ***
2093 dnl **********************************
2094 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2095 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2096 int level = IP_DONTFRAGMENT;
2098 # Yes, we have it...
2100 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2105 dnl **********************************
2106 dnl *** Checks for IP_MTU_DISCOVER ***
2107 dnl **********************************
2108 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2109 AC_TRY_COMPILE([#include <linux/in.h>], [
2110 int level = IP_MTU_DISCOVER;
2112 # Yes, we have it...
2114 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2119 dnl **********************************
2120 dnl *** Checks for IP_PMTUDISC_DO ***
2121 dnl **********************************
2122 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2123 AC_TRY_COMPILE([#include <linux/in.h>], [
2124 int level = IP_PMTUDISC_DO;
2126 # Yes, we have it...
2128 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2133 dnl *********************************
2134 dnl *** Check for struct ip_mreqn ***
2135 dnl *********************************
2136 AC_MSG_CHECKING(for struct ip_mreqn)
2137 AC_TRY_COMPILE([#include <netinet/in.h>], [
2138 struct ip_mreqn mreq;
2139 mreq.imr_address.s_addr = 0;
2141 # Yes, we have it...
2143 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2145 # We'll just have to try and use struct ip_mreq
2147 AC_MSG_CHECKING(for struct ip_mreq)
2148 AC_TRY_COMPILE([#include <netinet/in.h>], [
2149 struct ip_mreq mreq;
2150 mreq.imr_interface.s_addr = 0;
2152 # Yes, we have it...
2154 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2156 # No multicast support
2161 dnl **********************************
2162 dnl *** Check for getaddrinfo ***
2163 dnl **********************************
2164 AC_MSG_CHECKING(for getaddrinfo)
2169 getaddrinfo(NULL,NULL,NULL,NULL);
2171 # Yes, we have it...
2173 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2178 dnl **********************************
2179 dnl *** Check for gethostbyname2_r ***
2180 dnl **********************************
2181 AC_MSG_CHECKING(for gethostbyname2_r)
2187 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2189 # Yes, we have it...
2191 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2196 dnl **********************************
2197 dnl *** Check for gethostbyname2 ***
2198 dnl **********************************
2199 AC_MSG_CHECKING(for gethostbyname2)
2204 gethostbyname2(NULL,0);
2206 # Yes, we have it...
2208 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2213 dnl **********************************
2214 dnl *** Check for gethostbyname ***
2215 dnl **********************************
2216 AC_MSG_CHECKING(for gethostbyname)
2221 gethostbyname(NULL);
2223 # Yes, we have it...
2225 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2230 dnl **********************************
2231 dnl *** Check for getprotobyname ***
2232 dnl **********************************
2233 AC_MSG_CHECKING(for getprotobyname)
2238 getprotobyname(NULL);
2240 # Yes, we have it...
2242 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2247 dnl **********************************
2248 dnl *** Check for getnameinfo ***
2249 dnl **********************************
2250 AC_MSG_CHECKING(for getnameinfo)
2255 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2257 # Yes, we have it...
2259 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2265 dnl **********************************
2266 dnl *** Check for inet_ntop ***
2267 dnl **********************************
2268 AC_MSG_CHECKING(for inet_ntop)
2271 #include <arpa/inet.h>
2273 inet_ntop (0, NULL, NULL, 0);
2275 # Yes, we have it...
2277 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2282 dnl *****************************
2283 dnl *** Checks for libnsl ***
2284 dnl *****************************
2285 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2287 AC_CHECK_FUNCS(inet_pton inet_aton)
2289 dnl *****************************
2290 dnl *** Checks for libxnet ***
2291 dnl *****************************
2294 AC_MSG_CHECKING(for Solaris XPG4 support)
2295 if test -f /usr/lib/libxnet.so; then
2296 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2297 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2298 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2305 if test "$GCC" = "yes"; then
2306 CFLAGS="$CFLAGS -Wno-char-subscripts"
2311 dnl *****************************
2312 dnl *** Checks for libpthread ***
2313 dnl *****************************
2314 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2315 # and libpthread does not exist
2319 dnl Haiku has pthread in libroot (libc equiv)
2320 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2323 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2326 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2329 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2332 AC_CHECK_HEADERS(pthread.h)
2333 AC_CHECK_HEADERS(pthread_np.h)
2334 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2335 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2336 AC_CHECK_FUNCS(pthread_kill)
2337 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2338 AC_TRY_COMPILE([ #include <pthread.h>], [
2339 pthread_mutexattr_t attr;
2340 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2345 AC_ERROR(Posix system lacks support for recursive mutexes)
2347 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2348 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2349 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2351 dnl **********************************
2352 dnl *** Check for mincore ***
2353 dnl **********************************
2354 AC_MSG_CHECKING(for mincore)
2357 #include <sys/types.h>
2358 #include <sys/mman.h>
2360 mincore(NULL, 0, NULL);
2362 # Yes, we have it...
2364 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2369 dnl ***********************************
2370 dnl *** Checks for working __thread ***
2371 dnl ***********************************
2372 AC_MSG_CHECKING(for working __thread)
2373 if test "x$with_tls" != "x__thread"; then
2374 AC_MSG_RESULT(disabled)
2375 elif test "x$cross_compiling" = "xyes"; then
2376 AC_MSG_RESULT(cross compiling, assuming yes)
2379 #if defined(__APPLE__) && defined(__clang__)
2380 #error "__thread does not currently work with clang on Mac OS X"
2383 #include <pthread.h>
2385 static int res1, res2;
2387 void thread_main (void *arg)
2402 pthread_create (&t1, NULL, thread_main, 1);
2403 pthread_create (&t2, NULL, thread_main, 2);
2405 pthread_join (t1, NULL);
2406 pthread_join (t2, NULL);
2408 return !(res1 + res2 == 2);
2418 dnl **************************************
2419 dnl *** Checks for working sigaltstack ***
2420 dnl **************************************
2421 AC_MSG_CHECKING(for working sigaltstack)
2422 if test "x$with_sigaltstack" != "xyes"; then
2423 AC_MSG_RESULT(disabled)
2424 elif test "x$cross_compiling" = "xyes"; then
2425 AC_MSG_RESULT(cross compiling, assuming yes)
2432 #include <pthread.h>
2433 #include <sys/wait.h>
2434 #if defined(__FreeBSD__) || defined(__NetBSD__)
2435 #define SA_STACK SA_ONSTACK
2438 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2443 volatile char*__ptr = NULL;
2445 loop (void *ignored)
2454 struct sigaction sa;
2457 pthread_attr_t attr;
2459 sa.sa_sigaction = sigsegv_signal_handler;
2460 sigemptyset (&sa.sa_mask);
2461 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2462 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2463 perror ("sigaction");
2467 /* x86 darwin deliver segfaults using SIGBUS */
2468 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2469 perror ("sigaction");
2472 sas.ss_sp = malloc (SIGSTKSZ);
2473 sas.ss_size = SIGSTKSZ;
2475 if (sigaltstack (&sas, NULL) == -1) {
2476 perror ("sigaltstack");
2480 pthread_attr_init (&attr);
2481 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2482 printf ("pthread_create\n");
2506 for (i = 0; i < 300; ++i) {
2507 waitpid (son, &status, WNOHANG);
2508 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2513 kill (son, SIGKILL);
2519 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2526 dnl ********************************
2527 dnl *** Checks for semaphore lib ***
2528 dnl ********************************
2529 # 'Real Time' functions on Solaris
2530 # posix4 on Solaris 2.6
2531 # pthread (first!) on Linux
2532 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2534 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2535 AC_CHECK_FUNCS(shm_open)
2537 dnl ********************************
2538 dnl *** Checks for timezone stuff **
2539 dnl ********************************
2540 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2546 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2547 if test $ac_cv_struct_tm_gmtoff = yes; then
2548 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2550 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2555 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2556 if test $ac_cv_var_timezone = yes; then
2557 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2559 AC_ERROR(unable to find a way to determine timezone)
2563 dnl *********************************
2564 dnl *** Checks for math functions ***
2565 dnl *********************************
2566 AC_SEARCH_LIBS(sqrtf, m)
2567 if test "x$has_broken_apple_cpp" != "xyes"; then
2568 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2569 AC_TRY_LINK([#include <math.h>],
2571 AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2574 AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2575 AC_TRY_LINK([#include <math.h>],
2577 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2580 dnl ****************************************************************
2581 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2582 dnl *** have it in the library (duh)) ***
2583 dnl ****************************************************************
2584 AC_CHECK_FUNCS(poll)
2586 dnl *************************
2587 dnl *** Check for signbit ***
2588 dnl *************************
2589 AC_MSG_CHECKING(for signbit)
2590 AC_TRY_LINK([#include <math.h>], [
2591 int s = signbit(1.0);
2594 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2599 dnl **********************************
2601 dnl **********************************
2602 AC_CHECK_HEADERS(sys/epoll.h)
2604 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2605 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2606 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2611 AC_CHECK_HEADERS(sys/event.h)
2612 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2614 dnl **************************************
2615 dnl * Darwin has a race that prevents us from using reliably:
2616 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2617 dnl * Since kqueue is mostly used for scaling large web servers,
2618 dnl * and very few folks run Mono on large web servers on OSX, falling
2620 dnl **************************************
2621 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2622 if test "x$host_darwin" = "xno"; then
2623 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2627 dnl ******************************
2628 dnl *** Checks for SIOCGIFCONF ***
2629 dnl ******************************
2630 AC_CHECK_HEADERS(sys/ioctl.h)
2631 AC_CHECK_HEADERS(net/if.h, [], [],
2633 #ifdef HAVE_SYS_TYPES_H
2634 # include <sys/types.h>
2636 #ifdef HAVE_SYS_SOCKET_H
2637 # include <sys/socket.h>
2640 AC_MSG_CHECKING(for ifreq)
2643 #include <sys/ioctl.h>
2651 x = (void *) &ifr->ifr_addr;
2654 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2658 dnl **********************************
2659 dnl *** Checks for sin_len ***
2660 dnl **********************************
2661 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2663 #include <netinet/in.h>
2665 struct sockaddr_in saddr;
2666 saddr.sin_len = sizeof (saddr);
2669 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2673 dnl **********************************
2674 dnl *** Checks for sin6_len ***
2675 dnl **********************************
2676 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2678 #include <netinet/in.h>
2680 struct sockaddr_in6 saddr6;
2681 saddr6.sin6_len = sizeof (saddr6);
2684 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2688 dnl **********************************
2689 dnl *** Check for getifaddrs ***
2690 dnl **********************************
2691 AC_MSG_CHECKING(for getifaddrs)
2694 #include <sys/types.h>
2695 #include <sys/socket.h>
2696 #include <ifaddrs.h>
2700 # Yes, we have it...
2702 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2706 dnl **********************************
2707 dnl *** Check for if_nametoindex ***
2708 dnl **********************************
2709 AC_MSG_CHECKING(for if_nametoindex)
2712 #include <sys/types.h>
2713 #include <sys/socket.h>
2716 if_nametoindex(NULL);
2718 # Yes, we have it...
2720 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2724 dnl **********************************
2725 dnl *** Check for access ***
2726 dnl **********************************
2727 AC_MSG_CHECKING(for access)
2733 # Yes, we have it...
2735 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2740 dnl **********************************
2741 dnl *** Checks for proclib ***
2742 dnl **********************************
2743 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.)])
2744 dnl **********************************
2745 dnl *** Checks for MonoPosixHelper ***
2746 dnl **********************************
2747 AC_CHECK_HEADERS(checklist.h)
2748 AC_CHECK_HEADERS(pathconf.h)
2749 AC_CHECK_HEADERS(fstab.h)
2750 AC_CHECK_HEADERS(attr/xattr.h)
2751 AC_CHECK_HEADERS(sys/extattr.h)
2752 AC_CHECK_HEADERS(sys/sendfile.h)
2753 AC_CHECK_HEADERS(sys/statvfs.h)
2754 AC_CHECK_HEADERS(sys/statfs.h)
2755 AC_CHECK_HEADERS(sys/vfstab.h)
2756 AC_CHECK_HEADERS(sys/xattr.h)
2757 AC_CHECK_HEADERS(sys/mman.h)
2758 AC_CHECK_HEADERS(sys/param.h)
2759 AC_CHECK_HEADERS(sys/mount.h, [], [],
2761 #ifdef HAVE_SYS_PARAM_H
2762 # include <sys/param.h>
2765 AC_CHECK_HEADERS(sys/mount.h)
2766 AC_CHECK_FUNCS(confstr)
2767 AC_CHECK_FUNCS(seekdir telldir)
2768 AC_CHECK_FUNCS(getdomainname)
2769 AC_CHECK_FUNCS(setdomainname)
2770 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2771 AC_CHECK_FUNCS(setgroups)
2772 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2773 AC_CHECK_FUNCS(getfsstat)
2774 AC_CHECK_FUNCS(lutimes futimes)
2775 AC_CHECK_FUNCS(mremap)
2776 AC_CHECK_FUNCS(remap_file_pages)
2777 AC_CHECK_FUNCS(posix_fadvise)
2778 AC_CHECK_FUNCS(posix_fallocate)
2779 AC_CHECK_FUNCS(posix_madvise)
2780 AC_CHECK_FUNCS(vsnprintf)
2781 AC_CHECK_FUNCS(sendfile)
2782 AC_CHECK_FUNCS(gethostid sethostid)
2783 AC_CHECK_FUNCS(sethostname)
2784 AC_CHECK_FUNCS(statfs)
2785 AC_CHECK_FUNCS(fstatfs)
2786 AC_CHECK_FUNCS(statvfs)
2787 AC_CHECK_FUNCS(fstatvfs)
2788 AC_CHECK_FUNCS(stime)
2789 AC_CHECK_FUNCS(ttyname_r)
2790 AC_CHECK_FUNCS(psignal)
2791 AC_CHECK_FUNCS(getlogin_r)
2792 AC_CHECK_FUNCS(lockf)
2793 AC_CHECK_FUNCS(swab)
2794 AC_CHECK_FUNCS(setusershell endusershell)
2795 AC_CHECK_FUNCS(futimens utimensat)
2796 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2797 AC_CHECK_FUNCS(readv writev preadv pwritev)
2798 AC_CHECK_FUNCS(setpgid)
2799 AC_CHECK_FUNCS(system)
2800 AC_CHECK_FUNCS(fork execv execve)
2801 AC_CHECK_FUNCS(accept4)
2802 AC_CHECK_FUNCS(localtime_r)
2803 AC_CHECK_FUNCS(mkdtemp)
2804 AC_CHECK_SIZEOF(size_t)
2805 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2806 [#include <sys/types.h>
2807 #include <sys/stat.h>
2808 #include <unistd.h>])
2809 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2810 [#include <sys/types.h>
2811 #include <sys/stat.h>
2812 #include <unistd.h>])
2813 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2814 [#include <sys/time.h>])
2815 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2816 [#include <sys/socket.h>])
2817 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2818 [#include <unistd.h>
2819 #include <fcntl.h>])
2820 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2821 [#include <sys/uio.h>])
2822 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2823 [#include <sys/socket.h>])
2824 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2825 [#include <sys/poll.h>])
2826 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2827 [#include <sys/socket.h>])
2828 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2829 [#include <sys/socket.h>])
2830 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2831 [#include <netinet/in.h>])
2832 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2833 [#include <netinet/in.h>])
2834 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2835 [#include <sys/un.h>])
2836 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2837 [#include <sys/types.h>
2838 #include <sys/stat.h>
2839 #include <unistd.h>])
2840 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2841 [#include <time.h>])
2842 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2843 [#include <sys/time.h>
2844 #include <sys/types.h>
2845 #include <utime.h>])
2846 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2847 [#include <sys/time.h>])
2848 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2849 [#include <sys/types.h>
2850 #include <utime.h>])
2852 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2853 [#include <sys/types.h>
2854 #include <dirent.h>])
2856 [struct passwd.pw_gecos],,,
2857 [#include <sys/types.h>
2860 [struct statfs.f_flags],,,
2861 [#include <sys/types.h>
2862 #include <sys/vfs.h>])
2864 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2865 [#include <sys/types.h>
2866 #include <sys/stat.h>
2867 #include <unistd.h>])
2869 dnl Favour xattr through glibc, but use libattr if we have to
2870 AC_CHECK_FUNC(lsetxattr, ,
2871 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2875 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2877 [struct kinfo_proc.kp_proc],,,
2878 [#include <sys/types.h>
2879 #include <sys/param.h>
2880 #include <sys/sysctl.h>
2881 #include <sys/proc.h>
2884 dnl *********************************
2885 dnl *** Checks for Windows compilation ***
2886 dnl *********************************
2887 AC_CHECK_HEADERS(sys/time.h)
2888 AC_CHECK_HEADERS(sys/param.h)
2889 AC_CHECK_HEADERS(dirent.h)
2891 dnl ******************************************
2892 dnl *** Checks for OSX and iOS compilation ***
2893 dnl ******************************************
2894 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2896 dnl *********************************
2897 dnl *** Check for Console 2.0 I/O ***
2898 dnl *********************************
2899 AC_CHECK_HEADERS([curses.h])
2900 AC_CHECK_HEADERS([term.h], [], [],
2905 AC_CHECK_HEADERS([termios.h])
2907 dnl *********************************
2908 dnl *** Checks for random ***
2909 dnl *********************************
2910 if test x$host_darwin = xno; then
2911 AC_CHECK_HEADERS(sys/random.h)
2912 AC_CHECK_FUNCS(getrandom getentropy)
2915 dnl *********************************
2916 dnl *** Checks for System.Native ***
2917 dnl *********************************
2919 AC_MSG_CHECKING(for linux/in.h)
2921 #include <sys/socket.h>
2922 #include <linux/in.h>
2926 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
2931 AC_MSG_CHECKING(for struct in_pktinfo)
2933 #ifdef HAVE_LINUX_IN_H
2934 #include <sys/socket.h>
2935 #include <linux/in.h>
2937 #include <netinet/in.h>
2940 struct in_pktinfo pktinfo;
2943 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
2948 AC_MSG_CHECKING(for struct ip_mreqn)
2951 #include <sys/socket.h>
2952 #include <linux/in.h>
2954 #include <netinet/in.h>
2957 struct ip_mreqn mreqn;
2960 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
2965 if test x$host_darwin = xno; then
2966 AC_MSG_CHECKING(for struct flock64)
2973 AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)
2979 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
2980 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
2981 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
2982 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
2983 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
2984 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
2985 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
2986 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
2987 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
2988 AC_CHECK_FUNC(posix_fadvise, [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
2989 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
2990 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
2991 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
2992 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
2993 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
2994 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
2995 AC_CHECK_FUNC(arc4random, [AC_DEFINE(HAVE_ARC4RANDOM, 1, [arc4random])])
2996 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
2997 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
2998 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3000 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3001 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3003 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>]])
3004 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>]])
3005 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>]])
3006 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>]])
3007 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3008 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3009 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3011 AC_MSG_CHECKING(for struct statfs)
3013 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3014 #include <sys/mount.h>
3016 #include <sys/statfs.h>
3022 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3027 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3028 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3031 AC_MSG_CHECKING(for readdir_r)
3036 struct dirent* entry;
3037 struct dirent* result;
3038 readdir_r(dir, entry, &result);
3041 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3046 AC_MSG_CHECKING(for kevent with void *data)
3048 #include <sys/types.h>
3049 #include <sys/event.h>
3051 struct kevent event;
3053 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3056 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3061 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3062 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3064 AC_MSG_CHECKING(for sendfile with 4 arguments)
3066 #include <sys/sendfile.h>
3068 int result = sendfile(0, 0, 0, 0);
3071 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3076 AC_MSG_CHECKING(for sendfile with 6 arguments)
3079 #include <sys/types.h>
3080 #include <sys/socket.h>
3081 #include <sys/uio.h>
3083 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3086 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3091 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3092 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3093 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3094 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3096 ORIG_CFLAGS="$CFLAGS"
3097 CFLAGS="-Werror -Wsign-conversion"
3099 AC_MSG_CHECKING(for getnameinfo with signed flags)
3101 #include <sys/types.h>
3104 const struct sockaddr *addr;
3111 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3114 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3119 CFLAGS="$ORIG_CFLAGS"
3121 if test "x$host_linux" = "xyes"; then
3122 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3124 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3127 ORIG_CFLAGS="$CFLAGS"
3128 CFLAGS="-Werror -Wsign-conversion"
3130 AC_MSG_CHECKING(for bind with unsigned addrlen)
3132 #include <sys/socket.h>
3135 struct sockaddr* addr;
3137 bind(fd, addr, addrLen);
3140 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3145 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3147 #include <netinet/in.h>
3148 #include <netinet/tcp.h>
3150 struct ipv6_mreq opt;
3151 unsigned int index = 0;
3152 opt.ipv6mr_interface = index;
3155 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3160 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3162 #include <sys/inotify.h>
3166 int result = inotify_rm_watch(fd, wd);
3169 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3174 CFLAGS="$ORIG_CFLAGS"
3176 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3177 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3181 #include <sys/mman.h>
3187 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3191 shm_unlink("/mono_configure_shm_open");
3193 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3194 // on at least the current version of Mac OS X
3196 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3203 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3209 AC_MSG_CHECKING(for getpriority with int who)
3211 #include <sys/resource.h>
3215 int result = getpriority(which, who);
3218 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3223 AC_MSG_CHECKING(for kevent with int parameters)
3225 #include <sys/types.h>
3226 #include <sys/event.h>
3229 const struct kevent* chagelist;
3231 struct kevent* eventlist;
3233 const struct timespec* timeout;
3234 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3237 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3242 ORIG_CFLAGS="$CFLAGS"
3243 CFLAGS="-Werror -Wimplicit-function-declaration"
3245 AC_MSG_CHECKING(for mkstemps)
3253 int result = mkstemps(template, suffixlen);
3256 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3262 CFLAGS="$ORIG_CFLAGS"
3264 if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3265 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3268 AC_MSG_CHECKING(for tcp/var.h)
3270 #include <sys/types.h>
3271 #include <sys/socketvar.h>
3272 #include <netinet/ip.h>
3273 #include <netinet/tcp.h>
3274 #include <netinet/tcp_var.h>
3278 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3283 AC_CHECK_HEADERS([sys/cdefs.h])
3285 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3287 #ifdef HAVE_SYS_CDEFS_H
3288 #include <sys/cdefs.h>
3290 #include <netinet/tcp.h>
3292 int result = TCP_ESTABLISHED;
3295 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3300 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3302 AC_MSG_CHECKING(for struct rt_msghdr)
3304 #include <sys/types.h>
3305 #include <net/route.h>
3310 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3315 AC_CHECK_HEADERS([sys/sysctl.h])
3316 AC_CHECK_HEADERS([linux/rtnetlink.h])
3318 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3319 AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3320 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3322 ORIG_CFLAGS="$CFLAGS"
3323 CFLAGS="-Werror -Weverything"
3325 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3329 size_t namelen = 20;
3331 int result = getdomainname(name, namelen);
3334 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3339 CFLAGS="$ORIG_CFLAGS"
3341 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3342 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3343 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3345 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
3346 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3347 elif test "x$host_linux" = "xyes"; then
3348 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3351 AC_CHECK_HEADERS([crt_externs.h])
3353 AC_MSG_CHECKING(for _NSGetEnviron)
3355 #include <crt_externs.h>
3357 char **result = *(_NSGetEnviron());
3360 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3365 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3368 dnl *********************************
3369 dnl *** Checks for Windows compilation ***
3370 dnl *********************************
3371 AC_CHECK_HEADERS(winternl.h)
3373 jdk_headers_found=no
3374 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3375 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3376 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3377 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3378 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3379 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3380 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3382 dnl *********************************
3383 dnl *** Check for struct ip_mreqn ***
3384 dnl *********************************
3385 AC_MSG_CHECKING(for struct ip_mreqn)
3386 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3387 struct ip_mreqn mreq;
3388 mreq.imr_address.s_addr = 0;
3390 # Yes, we have it...
3392 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3394 # We'll just have to try and use struct ip_mreq
3396 AC_MSG_CHECKING(for struct ip_mreq)
3397 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3398 struct ip_mreq mreq;
3399 mreq.imr_interface.s_addr = 0;
3401 # Yes, we have it...
3403 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3405 # No multicast support
3410 dnl **********************************
3411 dnl *** Check for getaddrinfo ***
3412 dnl **********************************
3413 AC_MSG_CHECKING(for getaddrinfo)
3416 #include <winsock2.h>
3417 #include <ws2tcpip.h>
3419 getaddrinfo(NULL,NULL,NULL,NULL);
3421 # Yes, we have it...
3423 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3428 dnl **********************************
3429 dnl *** Check for gethostbyname ***
3430 dnl **********************************
3431 AC_MSG_CHECKING(for gethostbyname)
3434 #include <winsock2.h>
3435 #include <ws2tcpip.h>
3437 gethostbyname(NULL);
3439 # Yes, we have it...
3441 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3446 dnl **********************************
3447 dnl *** Check for getprotobyname ***
3448 dnl **********************************
3449 AC_MSG_CHECKING(for getprotobyname)
3452 #include <winsock2.h>
3453 #include <ws2tcpip.h>
3455 getprotobyname(NULL);
3457 # Yes, we have it...
3459 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3464 dnl **********************************
3465 dnl *** Check for getnameinfo ***
3466 dnl **********************************
3467 AC_MSG_CHECKING(for getnameinfo)
3470 #include <winsock2.h>
3471 #include <ws2tcpip.h>
3473 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3475 # Yes, we have it...
3477 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3482 dnl **********************************
3483 dnl *** Check for inet_ntop ***
3484 dnl **********************************
3485 AC_MSG_CHECKING(for inet_ntop)
3488 #include <winsock2.h>
3489 #include <ws2tcpip.h>
3491 inet_ntop (0, NULL, NULL, 0);
3493 # Yes, we have it...
3495 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3500 dnl **********************************
3501 dnl *** Check for inet_pton ***
3502 dnl **********************************
3503 AC_MSG_CHECKING(for inet_pton)
3506 #include <winsock2.h>
3507 #include <ws2tcpip.h>
3512 inet_pton (0, NULL, NULL);
3514 # Yes, we have it...
3516 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3521 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3522 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3523 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3524 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3525 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3526 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3527 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3531 AC_MSG_CHECKING(for socklen_t)
3533 #include <sys/types.h>
3534 #include <sys/socket.h>
3538 ac_cv_c_socklen_t=yes
3539 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3545 AC_MSG_CHECKING(for array element initializer support)
3546 AC_TRY_COMPILE([#include <sys/socket.h>], [
3547 const int array[] = {[1] = 2,};
3549 # Yes, we have it...
3551 AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
3553 # We'll have to use signals
3557 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
3558 # Simply calling trunc (0.0) is no good since gcc will optimize the call away
3559 AC_TRY_LINK([#include <math.h>],
3560 [ static void *p = &trunc; ],
3562 AC_DEFINE(HAVE_TRUNC)
3568 if test "x$ac_cv_truncl" != "xyes"; then
3569 AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
3572 AC_CHECK_FUNCS(execvp)
3574 dnl ****************************
3575 dnl *** Look for /dev/random ***
3576 dnl ****************************
3578 AC_MSG_CHECKING([if usage of random device is requested])
3579 AC_ARG_ENABLE(dev-random,
3580 [ --disable-dev-random disable the use of the random device (enabled by default)],
3581 try_dev_random=$enableval, try_dev_random=yes)
3583 AC_MSG_RESULT($try_dev_random)
3587 dnl IBM i does not have /dev/random, use unblocking only
3590 NAME_DEV_RANDOM="/dev/urandom"
3593 dnl Win32 does not have /dev/random, they have their own method...
3595 *-mingw*|*-*-cygwin*)
3596 ac_cv_have_dev_random=no
3599 dnl Everywhere else, it's /dev/random
3602 NAME_DEV_RANDOM="/dev/random"
3606 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3608 dnl Now check if the device actually exists
3610 if test "x$try_dev_random" = "xyes"; then
3611 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3612 [if test -r "$NAME_DEV_RANDOM" ; then
3613 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3614 if test "x$ac_cv_have_dev_random" = "xyes"; then
3615 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3618 AC_MSG_CHECKING(for random device)
3619 ac_cv_have_dev_random=no
3620 AC_MSG_RESULT(has been disabled)
3623 if test "x$host_win32" = "xyes"; then
3624 AC_DEFINE(HAVE_CRYPT_RNG)
3627 if test "x$ac_cv_have_dev_random" = "xno" \
3628 && test "x$host_win32" = "xno"; then
3631 *** A system-provided entropy source was not found on this system.
3632 *** Because of this, the System.Security.Cryptography random number generator
3633 *** will throw a NotImplemented exception.
3635 *** If you are seeing this message, and you know your system DOES have an
3636 *** entropy collection in place, please report an issue on GitHub and
3637 *** provide information about the system and how to access the random device.
3639 *** Otherwise you can install either egd or prngd and set the environment
3640 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3644 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)
3646 AC_MSG_CHECKING([if big-arrays are to be enabled])
3647 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)
3648 if test "x$enable_big_arrays" = "xyes" ; then
3649 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3650 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3652 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3655 AC_MSG_RESULT($enable_big_arrays)
3661 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3663 if test "x$enable_dtrace" = "xyes"; then
3664 if test "x$has_dtrace" = "xno"; then
3665 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3667 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3668 if test "x$DTRACE" = "xno"; then
3669 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3671 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3672 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3678 if test "x$enable_dtrace" = "xyes"; then
3679 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3681 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3684 DTRACEFLAGS="-arch ppc64"
3687 DTRACEFLAGS="-arch x86_64"
3696 DTRACEFLAGS="-arch ppc"
3699 DTRACEFLAGS="-arch i386"
3706 AC_SUBST(DTRACEFLAGS)
3712 AC_CHECK_HEADERS([sys/sdt.h])
3714 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3715 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3717 dnl **************************
3718 dnl *** AOT cross offsets ***
3719 dnl **************************
3721 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3722 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3728 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3729 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3730 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)
3731 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3732 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3734 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3736 if test "x$enable_llvm" = "xdefault"; then
3737 enable_llvm=$enable_llvm_default
3741 if test "x$enable_llvm" = "xyes"; then
3742 if test "x$with_llvm" != "x"; then
3743 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3744 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3745 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3748 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3749 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3752 with_llvm=`$EXTERNAL_LLVM_CONFIG --prefix`
3756 if test "x$host_win32" != "xyes"; then
3757 LLVM_CODEGEN_LIBS="x86codegen"
3760 LLVM_CODEGEN_LIBS="armcodegen"
3763 LLVM_CODEGEN_LIBS="aarch64codegen"
3766 LLVM_CODEGEN_LIBS="powerpccodegen"
3769 if test "x$host" != "x$target"; then
3770 # No need for jit libs
3774 AC_SUBST(LLVM_CODEGEN_LIBS)
3775 AC_SUBST(EXTERNAL_LLVM_CONFIG)
3777 AC_MSG_ERROR([LLVM for Windows only supported using Visual Studio build mono runtime, see http://www.mono-project.com/docs/advanced/mono-llvm/ for more details.])
3780 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3783 # AC_DEFINE necessary for correct restore behavior on Linux
3784 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno"])
3785 if test "x$internal_llvm" != "xno"; then
3786 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
3789 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno"])
3790 if test "x$internal_llvm_asserts" != "xno"; then
3791 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
3794 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3796 if test "x$enable_loadedllvm" = "xyes"; then
3797 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3799 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3801 if test "x$enable_llvm" = "xyes"; then
3802 enable_llvm_runtime=yes
3804 if test "x$enable_llvm_runtime" = "xyes"; then
3805 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3807 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3810 ACCESS_UNALIGNED="yes"
3814 SQLITE="libsqlite.so.0"
3815 SQLITE3="libsqlite3.so.0"
3817 GDKX11="libgdk-x11-2.0.so.0"
3818 GTKX11="libgtk-x11-2.0.so.0"
3819 XINERAMA="libXinerama.so.1"
3821 sizeof_register="SIZEOF_VOID_P"
3824 boehm_supported=true
3828 if test "x$enable_wasm" = "xyes"; then
3832 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3833 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3845 ACCESS_UNALIGNED="no"
3847 AC_MSG_CHECKING(for mips n32)
3849 #if _MIPS_SIM != _ABIN32
3866 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3871 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3872 # int astruct __attribute__ ((visibility ("hidden")));
3875 # void *p = &astruct;
3877 # gcc -fPIC --shared -o libfoo.so foo.c
3879 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3880 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3881 have_visibility_hidden=no
3884 have_visibility_hidden=no
3893 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3900 openbsd*|freebsd*|kfreebsd-gnu*)
3907 x86_64-*-* | amd64-*-*)
3910 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3911 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3918 BTLS_PLATFORM=x86_64
3919 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3924 BTLS_PLATFORM=x86_64
3925 boehm_supported=false
3927 openbsd*|freebsd*|kfreebsd-gnu*)
3930 BTLS_PLATFORM=x86_64
3937 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3943 ACCESS_UNALIGNED="no"
3950 if test x"$GCC" = xyes; then
3951 # We don't support v8 cpus
3952 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3954 if test x"$AR" = xfalse; then
3955 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3958 *-mingw*|*-*-cygwin*)
3959 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3960 have_visibility_hidden=no
3963 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3964 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3965 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3966 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3968 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3969 if ! (echo $CC | grep -q -- 'clang'); then
3970 CFLAGS="$CFLAGS -mminimal-toc"
3974 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3980 BTLS_PLATFORM=powerpc
3981 dnl on AIX/PASE, shared libraries can be inside archives
3982 dnl if they are, we specify them by lib.a(lib.so)
3983 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3984 LIBC="libc.a(shr_64.o)"
3985 INTL="libintl.a(libintl.so.8)"
3989 BTLS_PLATFORM=powerpc
3998 ACCESS_UNALIGNED="no"
3999 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4005 ACCESS_UNALIGNED="no"
4006 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4011 ACCESS_UNALIGNED="no"
4013 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4016 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4018 arm*-linux*-gnueabi)
4019 BTLS_PLATFORM=armsoft
4026 ACCESS_UNALIGNED="no"
4027 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4030 # https://lkml.org/lkml/2012/7/15/133
4033 boehm_supported=false
4036 BTLS_PLATFORM=aarch64
4037 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4042 ACCESS_UNALIGNED="yes"
4045 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4051 if test "x$host" != "x$target"; then
4052 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4054 enable_support_build=no
4060 ACCESS_UNALIGNED="no"
4061 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4062 # Can't use tls, since it depends on the runtime detection of tls offsets
4063 # in mono-compiler.h
4068 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4072 powerpc64-ps3-linux-gnu)
4074 arch_target=powerpc64
4075 AC_DEFINE(TARGET_PS3, 1, [...])
4076 # It would be better to just use TARGET_POWERPC64, but lots of code already
4078 AC_DEFINE(__mono_ppc64__, 1, [...])
4079 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
4081 target_byte_order=G_BIG_ENDIAN
4083 powerpc64-xbox360-linux-gnu)
4085 arch_target=powerpc64
4086 AC_DEFINE(TARGET_XBOX360, 1, [...])
4087 # It would be better to just use TARGET_POWERPC64, but lots of code already
4090 target_byte_order=G_BIG_ENDIAN
4095 AC_DEFINE(TARGET_ARM, 1, [...])
4096 ACCESS_UNALIGNED="no"
4097 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4098 # Can't use tls, since it depends on the runtime detection of tls offsets
4099 # in mono-compiler.h
4103 armv7l-unknown-linux-gnueabi*)
4105 CPPFLAGS="$CPPFLAGS"
4107 armv5-*-linux-androideabi*)
4108 AC_DEFINE(TARGET_ANDROID, 1, [...])
4109 CPPFLAGS="$CPPFLAGS"
4111 *-linux-androideabi*)
4112 AC_DEFINE(TARGET_ANDROID, 1, [...])
4113 CPPFLAGS="$CPPFLAGS"
4120 AC_DEFINE(TARGET_ARM, 1, [...])
4121 ACCESS_UNALIGNED="no"
4122 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4123 # Can't use tls, since it depends on the runtime detection of tls offsets
4124 # in mono-compiler.h
4131 AC_DEFINE(TARGET_X86, 1, [...])
4132 CPPFLAGS="$CPPFLAGS"
4133 # Can't use tls, since it depends on the runtime detection of tls offsets
4134 # in mono-compiler.h
4140 AC_DEFINE(TARGET_ANDROID, 1, [...])
4147 AC_DEFINE(TARGET_AMD64, 1, [...])
4148 CPPFLAGS="$CPPFLAGS"
4149 # Can't use tls, since it depends on the runtime detection of tls offsets
4150 # in mono-compiler.h
4156 AC_DEFINE(TARGET_ANDROID, 1, [...])
4163 AC_DEFINE(TARGET_AMD64, 1, [...])
4164 AC_DEFINE(TARGET_PS4, 1, [...])
4165 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4166 CPPFLAGS="$CPPFLAGS"
4167 # Can't use tls, since it depends on the runtime detection of tls offsets
4168 # in mono-compiler.h
4176 AC_DEFINE(TARGET_ARM64, 1, [...])
4177 CPPFLAGS="$CPPFLAGS"
4178 # Can't use tls, since it depends on the runtime detection of tls offsets
4179 # in mono-compiler.h
4184 AC_DEFINE(TARGET_ANDROID, 1, [...])
4192 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4198 AC_DEFINE(TARGET_X86, 1, [...])
4201 AC_DEFINE(TARGET_AMD64, 1, [...])
4204 AC_DEFINE(TARGET_ARM, 1, [...])
4207 AC_DEFINE(TARGET_ARM64, 1, [...])
4210 AC_DEFINE(TARGET_POWERPC, 1, [...])
4213 AC_DEFINE(TARGET_POWERPC, 1, [...])
4214 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4217 AC_DEFINE(TARGET_S390X, 1, [...])
4220 AC_DEFINE(TARGET_MIPS, 1, [...])
4223 AC_DEFINE(TARGET_SPARC, 1, [...])
4226 AC_DEFINE(TARGET_SPARC64, 1, [...])
4232 AC_DEFINE(HOST_X86, 1, [...])
4235 AC_DEFINE(HOST_AMD64, 1, [...])
4238 AC_DEFINE(HOST_ARM, 1, [...])
4241 AC_DEFINE(HOST_ARM64, 1, [...])
4244 AC_DEFINE(HOST_POWERPC, 1, [...])
4247 AC_DEFINE(HOST_POWERPC, 1, [...])
4248 AC_DEFINE(HOST_POWERPC64, 1, [...])
4251 AC_DEFINE(HOST_S390X, 1, [...])
4254 AC_DEFINE(HOST_MIPS, 1, [...])
4257 AC_DEFINE(HOST_SPARC, 1, [...])
4260 AC_DEFINE(HOST_SPARC64, 1, [...])
4272 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4273 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4275 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4277 if test "x$enable_vtune" = "xyes"; then
4278 if test "x$with_vtune" = "x"; then
4279 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4281 VTUNE_PATH=$with_vtune
4283 VTUNE_INCLUDE=$VTUNE_PATH/include
4286 VTUNE_LIB=$VTUNE_PATH/lib32
4289 VTUNE_LIB=$VTUNE_PATH/lib64
4292 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4295 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4296 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4298 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4299 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4302 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4303 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4305 AC_SUBST(VTUNE_LIBS)
4306 AC_SUBST(VTUNE_CFLAGS)
4308 dnl Use GCC atomic ops if they work on the target.
4309 if test x$GCC = "xyes"; then
4311 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
4312 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4317 if test "x$target_mach" = "xyes"; then
4319 if test "x$TARGET_SYS" = "xWATCHOS"; then
4320 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4321 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4322 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4324 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4325 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4326 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4327 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4330 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4331 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4332 #error fail this for ios
4335 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4336 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4337 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4340 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4341 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4342 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4347 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4350 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4352 if test "x$sizeof_register" = "x4"; then
4353 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
4354 elif test "x$sizeof_register" = "x8"; then
4355 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
4357 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
4360 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4362 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4363 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4364 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4365 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4367 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4370 if test "x$have_visibility_hidden" = "xyes"; then
4371 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4374 if test "x$have_deprecated" = "xyes"; then
4375 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4379 dnl Simple Generational checks (sgen)
4382 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4383 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4384 if test x$buildsgen = xyes; then
4385 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4386 SGEN_DEFINES="-DHAVE_SGEN_GC"
4389 if test x$with_sgen_default_concurrent != xno; then
4390 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4391 conc_gc_msg=" (concurrent by default)"
4394 if test "x$gc_msg" = "x"; then
4395 gc_msg="sgen$conc_gc_msg"
4397 gc_msg="sgen$conc_gc_msg and $gc_msg"
4400 AC_SUBST(SGEN_DEFINES)
4401 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4403 jit_status="Building and using the JIT"
4411 INTL="libintl.dylib"
4412 SQLITE="libsqlite.0.dylib"
4413 SQLITE3="libsqlite3.0.dylib"
4415 GDKX11="libgdk-x11-2.0.dylib"
4416 GTKX11="libgtk-x11-2.0.dylib"
4421 SQLITE="libsqlite.so"
4422 SQLITE3="libsqlite3.so"
4432 SQLITE="libsqlite.so"
4433 SQLITE3="libsqlite3.so"
4438 SQLITE="libsqlite.so"
4439 SQLITE3="libsqlite3.so"
4443 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4444 AC_MSG_CHECKING(for the soname of libX11.so)
4445 for i in $x_libraries $dlsearch_path; do
4447 if test -f $i/libX11.so.$r; then
4454 if test "x$X11" = "xlibX11.so"; then
4455 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4463 ######################################
4465 ######################################
4469 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4470 if test x$GCC = xyes; then
4471 GNUC_UNUSED='__attribute__((__unused__))'
4472 GNUC_NORETURN='__attribute__((__noreturn__))'
4474 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4477 AC_SUBST(GNUC_PRETTY)
4478 AC_SUBST(GNUC_UNUSED)
4479 AC_SUBST(GNUC_NORETURN)
4480 AC_SUBST(BREAKPOINT)
4482 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4485 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4501 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4506 arm*-darwin*|aarch64*-*)
4507 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4510 ORDER=G_LITTLE_ENDIAN
4513 LDFLAGS="$LDFLAGS -ltextencoding"
4516 CFLAGS="$CFLAGS -pthread"
4517 LDFLAGS="$LDFLAGS -pthread"
4528 # Defined for all targets/platforms using classic Windows API support.
4529 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4530 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4532 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4533 AC_CHECK_FUNCS(getrlimit)
4534 AC_CHECK_FUNCS(fork execv execve)
4536 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4538 if test x$with_overridable_allocators = xyes; then
4539 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4540 AC_MSG_NOTICE([Overridable allocator support enabled])
4542 AC_MSG_NOTICE([Overridable allocator support disabled])
4546 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4547 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4548 # removed once support for 10.6 is dropped.
4550 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4552 if test x$target_osx = xyes; then
4553 AC_CHECK_FUNCS(getpwuid_r)
4554 elif test x$target_ios = xno; then
4555 AC_CHECK_FUNCS(strndup getpwuid_r)
4558 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4560 AC_SEARCH_LIBS(sqrtf, m)
4562 # nanosleep may not be part of libc, also search it in other libraries
4563 AC_SEARCH_LIBS(nanosleep, rt)
4565 AC_SEARCH_LIBS(dlopen, dl)
4566 old_ldflags="${LDFLAGS}"
4567 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4568 if test $lt_cv_prog_gnu_ld = yes; then
4569 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4572 *-*-aix*|*-*-os400*)
4575 dnl Try to use export-dynamic anyways
4576 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4580 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4581 if test $found_export_dynamic = no; then
4582 LDFLAGS="${old_ldflags}"
4585 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h localcharset.h sys/types.h sys/resource.h)
4586 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4587 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4588 AC_SUBST(HAVE_ALLOCA_H)
4590 # Get the exact type of size_t, not just its size.
4591 # This is so we can find an exact printf format among u, lu, llu, I64u.
4592 # To avoid warnings about slight mismatches.
4593 # C99 runtime "zu" dependency is being avoided here.
4595 # We have to compile as C++ because C is too lenient
4596 # and lets the wrong thing compile, with warnings.
4598 # Note: "zu" or ifdef <something> have the advantage
4599 # of producing installable "biarch" headers. i.e. one Mac header
4600 # for Mac/x86 and Mac/amd64.
4604 # Check long before int because it is the overwhelming Unix answer,
4605 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4607 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4609 AC_MSG_CHECKING(if size_t is unsigned long)
4610 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4612 unsigned long *a = (size_t*)0;
4615 AC_SUBST(GSIZE_FORMAT, '"%lu"')
4618 AC_MSG_CHECKING(if size_t is unsigned int)
4619 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4621 unsigned *a = (size_t*)0;
4624 AC_SUBST(GSIZE_FORMAT, '"%u"')
4626 # At this point the majority of systems have their answer,
4627 # and we descend into non-standard or new-standard territory.
4629 # Check __int64 first because I64 on some systems predates ll, enabling
4630 # new compiler/old runtime interop, and the types always have the same size.
4632 AC_MSG_CHECKING(if size_t is unsigned __int64)
4633 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4635 unsigned __int64 *a = (size_t*)0;
4638 AC_SUBST(GSIZE_FORMAT, '"%I64u"')
4641 AC_MSG_CHECKING(if size_t is unsigned long long)
4642 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4644 unsigned long long *a = (size_t*)0;
4647 AC_SUBST(GSIZE_FORMAT, '"%llu"')
4650 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4658 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4659 # This provides for an exact match with functions that
4660 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4661 # uintptr_t is not necessarily the same.
4663 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4664 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4666 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4676 AC_SUBST(GSIZE_FORMAT)
4679 # END OF EGLIB CHECKS
4682 AC_ARG_WITH([libgdiplus],
4683 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4684 [], [with_libgdiplus=installed])
4686 # default install location
4687 libgdiplus_install_loc=libgdiplus${libsuffix}
4690 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4694 case $with_libgdiplus in
4701 if test x$cross_compiling = xno; then
4702 if test x$host_darwin = xyes; then
4703 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4705 libgdiplus_install_loc=$a
4713 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4716 /*) # absolute path, assume it is an install location
4717 libgdiplus_loc=$with_libgdiplus
4718 libgdiplus_install_loc=$with_libgdiplus
4722 libgdiplus_loc=`pwd`/$with_libgdiplus
4725 AC_SUBST(libgdiplus_loc)
4726 AC_SUBST(libgdiplus_install_loc)
4728 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)
4729 if test "x$icall_symbol_map" = "xyes"; then
4730 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4733 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4734 if test "x$icall_export" = "xyes"; then
4735 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4738 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4739 if test "x$icall_tables" = "xno"; then
4740 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4743 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4745 if test "x$with_tls" = "x__thread"; then
4746 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4747 # Pass the information to libgc
4748 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4749 AC_MSG_CHECKING(if the tls_model attribute is supported)
4750 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4753 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4759 if test ${TARGET} = ARM; then
4760 dnl ******************************************
4761 dnl *** Check to see what FPU is available ***
4762 dnl ******************************************
4763 AC_MSG_CHECKING(which FPU to use)
4766 # This is a bit tricky:
4768 # if (__ARM_PCS_VFP) {
4769 # /* mfloat-abi=hard == VFP with hard ABI */
4770 # } elif (!__SOFTFP__) {
4771 # /* mfloat-abi=softfp == VFP with soft ABI */
4773 # /* mfloat-abi=soft == no VFP */
4776 # The exception is iOS (w/ GCC) where none of the above
4777 # are defined (but iOS always uses the 'softfp' ABI).
4779 # No support for FPA.
4784 # iOS GCC always uses the 'softfp' ABI.
4785 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4789 # Are we using the 'hard' ABI?
4790 if test x$fpu = xNONE; then
4791 AC_TRY_COMPILE([], [
4792 #ifndef __ARM_PCS_VFP
4793 #error "Float ABI is not 'hard'"
4802 # No 'hard' ABI. 'soft' or 'softfp'?
4803 if test x$fpu = xNONE; then
4804 AC_TRY_COMPILE([], [
4806 #error "Float ABI is not 'softfp'"
4815 if test x$arm_fpu != x; then
4820 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4823 dnl *********************************************
4824 dnl *** Check which ARM version(s) we can use ***
4825 dnl *********************************************
4826 AC_MSG_CHECKING(which ARM version to use)
4828 AC_TRY_COMPILE([], [
4829 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4830 #error Not on ARM v5.
4838 AC_TRY_COMPILE([], [
4839 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4840 #error Not on ARM v6.
4849 AC_TRY_COMPILE([], [
4850 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4851 #error Not on ARM v7.
4861 AC_MSG_RESULT($arm_ver)
4863 if test x$arm_v5 = xyes; then
4864 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4865 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4868 if test x$arm_v6 = xyes; then
4869 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4870 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4873 if test x$arm_v7 = xyes; then
4874 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4875 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4879 if test ${TARGET} = unknown; then
4880 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4881 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4884 if test "x$platform_android" = "xyes"; then
4885 case "x${TARGET}" in
4890 BTLS_PLATFORM=android-armv5
4894 BTLS_PLATFORM=android-armv6
4898 BTLS_PLATFORM=android-armv7
4907 BTLS_PLATFORM=android-v8a
4911 BTLS_PLATFORM=android-x86
4915 BTLS_PLATFORM=android-x64
4923 if test ${ACCESS_UNALIGNED} = no; then
4924 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4927 if test x$host_darwin = xyes; then
4928 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4930 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4931 [AC_MSG_RESULT([no])],
4933 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4935 RANLIB="$RANLIB -no_warning_for_no_symbols"
4936 AC_MSG_RESULT([yes])
4943 # Pass CPPFLAGS to libgc configure
4944 # We should use a separate variable for this to avoid passing useless and
4945 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4946 # This should be executed late so we pick up the final version of CPPFLAGS
4947 # The problem with this approach, is that during a reconfigure, the main
4948 # configure scripts gets invoked with these arguments, so we use separate
4949 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4950 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4951 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4952 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4954 # Don't pass -finstrument-for-thread-suspension in,
4955 # if these are instrumented it will be very bad news
4956 # (infinite recursion, undefined parking behavior, etc)
4957 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4958 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\""
4959 if test "x$support_boehm" = "xyes"; then
4960 AC_CONFIG_SUBDIRS(libgc)
4966 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4967 if test x$with_malloc_mempools = xyes; then
4969 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4974 DISABLE_MCS_DOCS=default
4975 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4976 if test x$with_mcs_docs != xyes; then
4977 DISABLE_MCS_DOCS=yes
4980 if test -n "$INSTALL_4_x_TRUE"; then :
4981 DISABLE_MCS_DOCS=yes
4983 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4984 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4987 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)],[
4988 if test x$with_lazy_gc_thread_creation != xno ; then
4989 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4991 ], [with_lazy_gc_thread_creation=no])
4993 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])
4994 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
4996 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
4997 enable_cooperative_suspend=$with_cooperative_gc
5000 if test x$enable_cooperative_suspend = xdefault; then
5001 enable_cooperative_suspend=$enable_cooperative_suspend_default
5004 if test x$enable_cooperative_suspend != xno; then
5005 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5008 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5010 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])
5012 if test x$enable_hybrid_suspend = xdefault; then
5013 enable_hybrid_suspend=$enable_hybrid_suspend_default
5016 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5017 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5020 if test x$enable_hybrid_suspend != xno ; then
5021 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5024 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5026 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],[
5028 if test x$enable_checked_build != x ; then
5029 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5031 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5032 eval "mono_checked_build_test_enable_$feature='yes'"
5035 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5036 eval "mono_checked_build_test_enable_gc='yes'"
5037 eval "mono_checked_build_test_enable_metadata='yes'"
5038 eval "mono_checked_build_test_enable_thread='yes'"
5039 eval "mono_checked_build_test_enable_private_types='yes'"
5042 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5043 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5046 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5047 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5050 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5051 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5054 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5055 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5059 AC_CHECK_HEADER([malloc.h],
5060 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5061 [Define to 1 if you have /usr/include/malloc.h.])],,)
5063 if test x"$GCC" = xyes; then
5064 # Implicit function declarations are not 64 bit safe
5065 # Do this late, since this causes lots of configure tests to fail
5066 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5067 # jay has a lot of implicit declarations
5068 JAY_CFLAGS="-Wno-implicit-function-declaration"
5071 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5072 # instead of libmono-static.a
5073 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5074 LIBMONO_LA=libmini-static.la
5076 if test x$buildsgen = xyes; then
5077 LIBMONO_LA=libmonosgen-$API_VER.la
5079 LIBMONO_LA=libmonoboehm-$API_VER.la
5082 AC_SUBST(LIBMONO_LA)
5088 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5089 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5090 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5092 if test "x$enable_btls" = "xno"; then
5096 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5099 if test "x$enable_btls" = "xyes"; then
5100 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5101 if test "x$CMAKE" = "xno"; then
5102 AC_MSG_ERROR("cmake not found")
5105 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5112 case "$BTLS_PLATFORM" in
5118 btls_cflags="$btls_cflags -arch i386"
5126 btls_cflags="-DOPENSSL_NO_ASM=1"
5130 btls_cflags="-DOPENSSL_NO_ASM=1"
5134 btls_cflags="-march=armv8-a+crypto"
5143 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5144 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5148 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5151 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
5154 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
5157 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
5160 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
5163 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
5166 AC_MSG_ERROR(Invalid BTLS platform)
5169 if test "x$platform_android" = "xyes"; then
5171 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5172 if test "x$with_btls_android_ndk" != "x"; then
5173 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5175 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5179 if test "x$btls_arch" != "x"; then
5180 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5183 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5185 AC_SUBST(BTLS_CFLAGS)
5186 AC_SUBST(BTLS_PLATFORM)
5187 AC_SUBST(BTLS_CMAKE_ARGS)
5189 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5194 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5196 if test x$DISABLE_MCS_DOCS = xyes; then
5203 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5204 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5205 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5207 libmono_ldflags="$libmono_ldflags $LIBS"
5209 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5210 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5211 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5212 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5213 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5214 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5215 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5216 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5217 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5218 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5219 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5220 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5221 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5222 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5223 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5224 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5225 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5226 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5228 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5238 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5239 AC_SUBST(arch_target)
5244 #This must always be defined when building the runtime
5245 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5247 mono_build_root=`pwd`
5248 AC_SUBST(mono_build_root)
5250 mono_runtime=mono/mini/mono
5251 AC_SUBST(mono_runtime)
5253 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5255 if test $csc_compiler = mcs; then
5256 CSC=$mcs_topdir/class/lib/build/mcs.exe
5261 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5263 mono_cfg_root=$mono_build_root/runtime
5264 if test x$host_win32 = xyes; then
5265 if test "x$cross_compiling" = "xno"; then
5266 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5267 CSC=`cygpath -m -a $CSC`
5268 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5270 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5273 mono_cfg_dir=$mono_cfg_root/etc
5275 AC_SUBST(mono_cfg_dir)
5279 AC_CONFIG_FILES([po/mcs/Makefile.in])
5281 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5282 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5284 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5287 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5289 *) reldir=$depth/$srcdir ;;
5291 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5292 cd runtime/etc/mono/1.0
5293 rm -f machine.config
5294 $LN_S $reldir/data/net_1_1/machine.config machine.config
5298 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5301 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5303 *) reldir=$depth/$srcdir ;;
5305 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5306 cd runtime/etc/mono/2.0
5307 rm -f machine.config
5308 $LN_S $reldir/data/net_2_0/machine.config machine.config
5312 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5315 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5317 *) reldir=$depth/$srcdir ;;
5319 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5320 cd runtime/etc/mono/2.0
5322 $LN_S $reldir/data/net_2_0/web.config web.config
5326 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5329 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5331 *) reldir=$depth/$srcdir ;;
5333 $ac_aux_dir/install-sh -d runtime/etc/mono/
5334 cd runtime/etc/mono/
5336 $LN_S $reldir/data/browscap.ini browscap.ini
5340 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5341 [ depth=../../../../..
5343 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5345 *) reldir=$depth/$srcdir ;;
5347 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5348 cd runtime/etc/mono/2.0/Browsers
5349 rm -f Compat.browser
5350 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5354 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5355 [ depth=../../../../..
5357 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5359 *) reldir=$depth/$srcdir ;;
5361 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5362 cd runtime/etc/mono/4.0/Browsers
5363 rm -f Compat.browser
5364 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5368 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5369 [ depth=../../../../..
5371 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5373 *) reldir=$depth/$srcdir ;;
5375 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5376 cd runtime/etc/mono/4.5/Browsers
5377 rm -f Compat.browser
5378 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5382 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5385 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5387 *) reldir=$depth/$srcdir ;;
5389 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5390 cd runtime/etc/mono/4.0
5391 rm -f machine.config
5392 $LN_S $reldir/data/net_4_0/machine.config machine.config
5396 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5399 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5401 *) reldir=$depth/$srcdir ;;
5403 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5404 cd runtime/etc/mono/4.0
5406 $LN_S $reldir/data/net_4_0/web.config web.config
5410 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5413 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5415 *) reldir=$depth/$srcdir ;;
5417 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5418 cd runtime/etc/mono/4.5
5419 rm -f machine.config
5420 $LN_S $reldir/data/net_4_5/machine.config machine.config
5424 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5427 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5429 *) reldir=$depth/$srcdir ;;
5431 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5432 cd runtime/etc/mono/4.5
5434 $LN_S $reldir/data/net_4_5/web.config web.config
5438 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])
5439 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])
5441 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
5442 if test x"$GCC" = xyes; then
5444 # incompatible-pointer-types requires gcc circa 5.x
5447 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
5448 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
5452 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
5462 acceptance-tests/Makefile
5464 scripts/mono-find-provides
5465 scripts/mono-find-requires
5470 mono/utils/jemalloc/Makefile
5471 mono/metadata/Makefile
5475 mono/arch/x86/Makefile
5476 mono/arch/amd64/Makefile
5477 mono/arch/ppc/Makefile
5478 mono/arch/sparc/Makefile
5479 mono/arch/s390x/Makefile
5480 mono/arch/arm/Makefile
5481 mono/arch/arm64/Makefile
5482 mono/arch/mips/Makefile
5485 mono/tests/tests-config
5486 mono/tests/gc-descriptors/Makefile
5487 mono/tests/testing_gac/Makefile
5488 mono/unit-tests/Makefile
5489 mono/benchmark/Makefile
5491 mono/profiler/Makefile
5493 mono/eglib/eglib-config.h
5495 ikvm-native/Makefile
5500 data/net_2_0/Makefile
5501 data/net_4_0/Makefile
5502 data/net_4_5/Makefile
5503 data/net_2_0/Browsers/Makefile
5504 data/net_4_0/Browsers/Makefile
5505 data/net_4_5/Browsers/Makefile
5512 data/mono-options.pc
5513 data/mono-lineeditor.pc
5519 data/system.web.extensions_1.0.pc
5520 data/system.web.extensions.design_1.0.pc
5521 data/system.web.mvc.pc
5522 data/system.web.mvc2.pc
5523 data/system.web.mvc3.pc
5524 data/aspnetwebstack.pc
5530 tools/locale-builder/Makefile
5532 tools/monograph/Makefile
5533 tools/pedump/Makefile
5539 # Update all submodules recursively to ensure everything is checked out
5540 $srcdir/scripts/update_submodules.sh
5542 if test x$host_win32 = xyes; then
5543 # Get rid of 'cyg' prefixes in library names
5544 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5545 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5546 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5547 # executable doesn't work...
5548 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5551 if test x$host_darwin = xyes; then
5552 # This doesn't seem to be required and it slows down parallel builds
5553 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5558 NONE) prefix=$ac_default_prefix ;;
5560 case $exec_prefix in
5561 NONE) exec_prefix='${prefix}' ;;
5565 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
5566 # any existing config.make. This allows people to share the same source tree
5567 # with different build directories, one native and one cross
5569 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5571 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5573 echo "prefix=$prefix" > $mcs_topdir/build/config.make
5574 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5575 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5576 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5577 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5578 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5579 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5580 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5581 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5584 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5585 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5588 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5591 [myver=$($AWK 'BEGIN {
5592 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5593 if(length(vsplit [1]) > 4) {
5594 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5596 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5599 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5600 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5602 if test x$host_darwin = xyes; then
5603 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
5604 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
5605 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
5606 elif test x$host_win32 = xyes; then
5607 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5608 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5609 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
5610 elif test x$host_linux = xyes; then
5611 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5612 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5613 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5615 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
5616 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
5617 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
5620 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5621 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5624 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5625 enable_system_aot=yes
5628 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5629 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5632 if test x$DISABLE_MCS_DOCS = xyes; then
5633 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5636 if test x$has_extension_module != xno; then
5637 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5640 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5642 if test "x$test_bcl_opt" = "xyes"; then
5643 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5646 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5648 if test $csc_compiler = mcs; then
5649 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5652 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5653 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5654 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5655 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5658 if test "x$AOT_MODE" != "x" ; then
5659 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5662 if test "x$enable_btls" = "xyes"; then
5663 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5670 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5672 btls_platform_string=
5673 if test x$enable_btls = xyes; then
5674 if test x$btls_android = xyes; then
5675 btls_platform_string=" (android:$BTLS_PLATFORM)"
5677 btls_platform_string=" ($BTLS_PLATFORM)"
5682 if test x$buildsgen = xyes; then
5683 if test x$enable_cooperative_suspend = xyes; then
5684 thread_suspend_msg="Suspend: Cooperative"
5685 elif test x$enable_hybrid_suspend = xyes; then
5686 thread_suspend_msg="Suspend: Hybrid"
5688 thread_suspend_msg="Suspend: Preemptive"
5694 C# Compiler: $csc_compiler
5702 SIGALTSTACK: $with_sigaltstack
5704 BigArrays: $enable_big_arrays
5705 DTrace: $enable_dtrace
5706 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts)
5707 Spectre: $spectre_mitigation_status
5710 .NET 4.x: $with_profile4_x
5711 Xamarin.Android: $with_monodroid
5712 Xamarin.iOS: $with_monotouch
5713 Xamarin.WatchOS: $with_monotouch_watch
5714 Xamarin.TVOS: $with_monotouch_tv
5715 Xamarin.Mac: $with_xammac
5716 Windows AOT: $with_winaot
5718 Unreal: $with_unreal
5719 WebAssembly: $with_wasm
5720 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5721 JNI support: $jdk_headers_found
5722 libgdiplus: $libgdiplus_msg
5724 BTLS: $enable_btls$btls_platform_string
5725 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5728 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5729 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)