[jit] Decompose CEE_BOX later, to enable more optimization opportunities. Optimize...
[mono-project.git] / configure.ac
blob41737d55b91e507e355affc9d3d07dfe87d15436
1 # Process this file with autoconf to produce a configure script.
2 #AC_PREREQ([2.62])
4 AC_INIT(mono, [5.15.0],
5         [https://github.com/mono/mono/issues/new])
7 AC_CONFIG_SRCDIR([README.md])
8 AC_CONFIG_MACRO_DIR([m4])
9 AC_CANONICAL_SYSTEM
10 AC_CANONICAL_HOST
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])
22 AM_MAINTAINER_MODE
24 API_VER=2.0
25 AC_SUBST(API_VER)
27 AC_PROG_LN_S
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=5
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)
49 case $host_os in
50 *cygwin* )
51                  echo "Run configure using ./configure --host=i686-pc-mingw32"
52                  exit 1
53 esac
55 # In case of cygwin, override LN_S, irrespective of what it determines.
56 # The build uses cygwin, but the actual runtime doesn't.
57 case $host_os in
58 *cygwin* ) LN_S='cp -p';;
59 esac
62 # libgc defaults
64 libgc_configure_args=
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
80 libmono_cflags=""
81 libmono_ldflags=""
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
94 need_link_unlink=no
96 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
97 extra_runtime_ldflags=""
100 # Hack for WASM
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])
108 libgc_threads=no
109 has_dtrace=no
110 parallel_mark=yes
111 ikvm_native=yes
113 host_win32=no
114 target_win32=no
115 platform_android=no
116 platform_tizen=no
117 platform_ios=no
118 host_darwin=no
121 if test "x$enable_wasm" = "xyes"; then
122 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
123 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
124 libdl="-ldl"
125 libgc_threads=pthreads
126 platform_wasm=yes
128 else
130 case "$host" in
131         *-mingw*|*-*-cygwin*)
132                 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
133                 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
134                 host_win32=yes
135                 mono_cv_clang=no
136                 if test "x$cross_compiling" = "xno"; then
137                         if test "x$host" = "x$build" -a "x$host" = "x$target"; then
138                                 target_win32=yes
139                         fi
140                 else
141                         if test "x$host" = "x$target"; then
142                                 target_win32=yes
143                         fi
144                 fi
145                 HOST_CC="gcc"
146                 # Windows Vista or later is required
147                 CPPFLAGS="$CPPFLAGS -DWINVER=0x0600 -D_WIN32_WINNT=0x0600 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
148                 LDFLAGS="$LDFLAGS -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
149                 libmono_cflags="-mms-bitfields -mwindows"
150                 libmono_ldflags="-mms-bitfields -mwindows"
151                 libdl=
152                 libgc_threads=win32
153                 with_sigaltstack=no
154                 with_tls=pthread
155                 with_sgen_default_concurrent=yes
156                 LN_S=cp
157                 # This forces libgc to use the DllMain based thread registration code on win32
158                 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
159                 ;;
160         *-*-*netbsd*)
161                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
162                 libmono_cflags="-D_REENTRANT"
163                 LDFLAGS="$LDFLAGS -pthread"
164                 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
165                 libmono_ldflags="-pthread"
166                 need_link_unlink=yes
167                 libdl="-ldl"
168                 libgc_threads=pthreads
169                 with_sigaltstack=no
170                 use_sigposix=yes
171                 with_sgen_default_concurrent=yes
172                 ;;
173         *-*-kfreebsd*-gnu)
174                 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
175                 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
176                 libmono_ldflags="-lpthread -pthread"
177                 libdl="-ldl"
178                 libgc_threads=pthreads
179                 need_link_unlink=yes
180                 with_sigaltstack=no
181                 use_sigposix=yes
182                 with_sgen_default_concurrent=yes
183                 ;;
184         *-*-*freebsd*)
185                 if test "x$PTHREAD_CFLAGS" = "x"; then
186                         CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
187                         libmono_cflags=
188                 else
189                         CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
190                         libmono_cflags="$PTHREAD_CFLAGS"
191                 fi
192                 if test "x$PTHREAD_LIBS" = "x"; then
193                         LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
194                         libmono_ldflags="-pthread"
195                 else
196                         LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
197                         libmono_ldflags="$PTHREAD_LIBS"
198                 fi
199                 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
200                 need_link_unlink=yes
201                 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
202                 libdl=
203                 libgc_threads=pthreads
204                 use_sigposix=yes
205                 has_dtrace=yes
206                 with_sgen_default_concurrent=yes
207                 ;;
208         *-*-*openbsd*)
209                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
210                 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
211                 if test "x$disable_munmap" != "xyes"; then
212                 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
213                 fi
214                 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
215                 LDFLAGS="$LDFLAGS -pthread"
216                 need_link_unlink=yes
217                 AC_DEFINE(PTHREAD_POINTER_ID)
218                 libdl=
219                 libgc_threads=pthreads
220                 with_tls=pthread
221                 with_sigaltstack=no
222                 use_sigposix=yes
223                 with_sgen_default_concurrent=yes
224                 ;;
225         *-*-linux-android*)
226                 platform_android=yes
227                 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
228                 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
230                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
231                 if test "x$disable_munmap" != "xyes"; then
232                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
233                 fi
234                 libmono_cflags="-D_REENTRANT"
235                 libdl="-ldl"
236                 libgc_threads=pthreads
237                 use_sigposix=yes
239                 with_tls=pthread
240                 with_sigaltstack=no
241                 with_static_mono=no
243                 # Android doesn't support boehm, as it's missing <link.h>
244                 support_boehm=no
245                 with_gc=sgen
247                 # isinf(3) requires -lm; see isinf check below
248                 LDFLAGS="$LDFLAGS -lm"
250                 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
251                 # PAGE_SIZE; breaks mono/io-layer/collection.c
252                 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
253                 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
254                 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
256                 # to bypass the underscore linker check, can't work when cross-compiling
257                 mono_cv_uscore=yes
258                 mono_cv_clang=no
259                 ;;
260         *-*-linux*)
261                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
262                 if test "x$disable_munmap" != "xyes"; then
263                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
264                 fi
265                 libmono_cflags="-D_REENTRANT"
266                 libdl="-ldl"
267                 libgc_threads=pthreads
268                 use_sigposix=yes
269                 if test "x$cross_compiling" != "xno"; then
270                         # to bypass the underscore linker check, not
271                         # available during cross-compilation
272                         mono_cv_uscore=no
273                 fi
274                 case "$host" in
275                 *-tizen-linux-*)
276                         platform_tizen=yes
277                         ;;
278                 esac
279                 case "$host" in
280                 aarch64-*)
281                         support_boehm=no
282                         with_gc=sgen
283                         ;;
284                 powerpc*-*-linux*)
285                         # https://bugzilla.novell.com/show_bug.cgi?id=504411
286                         disable_munmap=yes
287                         ;;
288                 esac
289                 with_sgen_default_concurrent=yes
290                 ;;
291         *-*-nacl*)
292                 echo "nacl no longer supported."
293                 exit 1
294                 ;;
295         *-*-hpux*)
296                 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
297                 # +ESdbgasm only valid on bundled cc on RISC
298                 # silently ignored for ia64
299                 if test $GCC != "yes"; then
300                         CFLAGS="$CFLAGS +ESdbgasm"
301                         # Arrange for run-time dereferencing of null
302                         # pointers to produce a SIGSEGV signal.
303                         LDFLAGS="$LDFLAGS -z"
304                 fi
305                 CFLAGS="$CFLAGS +ESdbgasm"
306                 LDFLAGS="$LDFLAGS -z"
307                 libmono_cflags="-D_REENTRANT"
308                 libmono_ldflags="-lpthread"
309                 libgc_threads=pthreads
310                 need_link_unlink=yes
311                 use_sigposix=yes
312                 ;;
313         *-*-solaris*)
314                 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
315                 need_link_unlink=yes
316                 libmono_cflags="-D_REENTRANT"
317                 libgc_threads=pthreads
318                 has_dtrace=yes
319                 use_sigposix=yes
320                 enable_solaris_tar_check=yes
321                 ;;
322         *-*-darwin*)
323                 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
324                 host_darwin=yes
325                 target_mach=yes
326                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
327                 libmono_cflags="-D_THREAD_SAFE"
328                 need_link_unlink=yes
329                 AC_DEFINE(PTHREAD_POINTER_ID)
330                 AC_DEFINE(USE_MACH_SEMA, 1, [...])
331                 libdl=
332                 libgc_threads=pthreads
333                 has_dtrace=yes
334                 if test "x$cross_compiling" = "xyes"; then
335                         has_broken_apple_cpp=yes
336                 fi
337                 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
338                 dnl its gcc defaults to 64-bit mode.  They have also deprecated the usage of ucontext
339                 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
340                 case "$host" in
341                         dnl Snow Leopard and newer config.guess reports as this
342                         i*86-*-darwin*)
343                                 BROKEN_DARWIN_FLAGS="-arch i386 -D_XOPEN_SOURCE"
344                                 BROKEN_DARWIN_CPPFLAGS="-D_XOPEN_SOURCE"
345                                 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
346                                 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
347                                 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
348                                 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
349                                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
350                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
351                                 with_sgen_default_concurrent=yes
352                                 ;;
353                         x*64-*-darwin*)
354                                 with_sgen_default_concurrent=yes
355                                 ;;
356                         arm*-darwin*)
357                                 platform_ios=yes
358                                 has_dtrace=no
359                                 ;;
360                         aarch64*-darwin*)
361                                 platform_ios=yes
362                                 ;;
363                 esac
364                 ;;
365         *-*-haiku*)
366                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
367                 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
368                 libdl=
369                 LIBS="$LIBS -lnetwork -ltextencoding"
370                 need_link_unlink=yes
371                 AC_DEFINE(PTHREAD_POINTER_ID)
372                 dnl Haiku does not support static TLS with __thread
373                 with_tls=pthread
374                 libgc_threads=pthreads
375                 use_sigposix=yes
376                 ;;
377         *-*-aix*|*-*-os400*)
378                 dnl Set up a 64-bit build
379                 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
380                 LDFLAGS="-maix64"
381                 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
382                 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
383                 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
384                 dnl specifiy 64-bit mode for tools.
385                 AR="/usr/bin/ar -X64"
386                 NM="/usr/bin/nm -X64"
387                 dnl SGen is the future (changes to Boehm support code would be
388                 dnl required if you wish to re-enable Boehm)
389                 support_boehm=no
390                 with_gc=sgen
391                 need_link_unlink=yes
392                 use_sigposix=yes
393                 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
394                 with_sigaltstack=no
395                 dnl use pthread TLS, __thread has issues with the compiler flags we use
396                 with_tls=pthread
397                 dnl ppc Linux is the same? test further
398                 disable_munmap=yes
399                 ;;
400         *)
401                 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
402                 libdl="-ldl"
403                 ;;
404 esac
406 # WASM hack
409 AC_MSG_RESULT(ok)
411 if test x$need_link_unlink = xyes; then
412    AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
415 if test x$host_win32 = xyes; then
416    AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
419 if test x$target_win32 = xyes; then
420    AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
423 if test x$host_darwin = xyes; then
424    AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
427 # Defined for all targets/platforms using classic Windows API support.
428 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
429 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
431 AC_SUBST(extra_runtime_ldflags)
432 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
433 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
434 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
435 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
436 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
437 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
438 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
439 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
440 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
442 if test -z "$HOST_DARWIN_TRUE"; then :
443 PLATFORM_AOT_SUFFIX=.dylib
446 if test -z "$HOST_LINUX_TRUE"; then :
447 PLATFORM_AOT_SUFFIX=.so
450 if test -z "$HOST_WIN32_TRUE"; then :
451 PLATFORM_AOT_SUFFIX=.dll
454 AC_SUBST(PLATFORM_AOT_SUFFIX)
456 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
458 AC_CHECK_TOOL(CC, gcc, gcc)
459 AC_PROG_CC
460 AC_CHECK_TOOL(CXX, g++, g++)
461 AC_PROG_CXX
462 AM_PROG_AS
463 AC_PROG_INSTALL
464 AC_PROG_AWK
465 AM_PROG_CC_C_O
466 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
467 : ${CCAS='$(CC)'}
468 # Set ASFLAGS if not already set.
469 : ${CCASFLAGS='$(CFLAGS)'}
470 AC_SUBST(CCAS)
471 AC_SUBST(CCASFLAGS)
473 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
474 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
475 if test "x$CXX" = "xg++"; then
476         if test "x$GXX" != "xyes"; then
477                 # automake/libtool is so broken, it requires g++ even if the c++ sources
478                 # are inside automake conditionals
479                 AC_MSG_ERROR([You need to install g++])
480         fi
483 dnl may require a specific autoconf version
484 dnl AC_PROG_CC_FOR_BUILD
485 dnl CC_FOR_BUILD not automatically detected
486 CC_FOR_BUILD=$CC
487 CFLAGS_FOR_BUILD=$CFLAGS
488 BUILD_EXEEXT=
489 if test "x$cross_compiling" = "xyes"; then
490         CC_FOR_BUILD=cc
491         CFLAGS_FOR_BUILD=
492         BUILD_EXEEXT=""
494 AC_SUBST(CC_FOR_BUILD)
495 AC_SUBST(CFLAGS_FOR_BUILD)
496 AC_SUBST(HOST_CC)
497 AC_SUBST(BUILD_EXEEXT)
499 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
500 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
502 # Set STDC_HEADERS
503 AC_HEADER_STDC
504 AC_LIBTOOL_WIN32_DLL
505 # This causes monodis to not link correctly
506 #AC_DISABLE_FAST_INSTALL
508 #lookup makedev() header
509 AC_HEADER_MAJOR
511 AM_PROG_LIBTOOL
512 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
513 DOLT
515 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
516 AC_SUBST(export_ldflags)
518 # Test whenever ld supports -version-script
519 AC_PROG_LD
520 AC_PROG_LD_GNU
522 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)
523 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)
524 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
525                   [], [], [#include <stddef.h>
526                   #include <sys/socket.h>
527                   #include <linux/socket.h>])
529 AC_CHECK_HEADERS(sys/user.h, [], [],
531 #ifdef HAVE_SYS_PARAM_H
532 # include <sys/param.h>
533 #endif
536 AC_CHECK_HEADERS(linux/serial.h)
538 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
539 if test x$have_zlib = xyes; then
540    AC_TRY_COMPILE([#include <zlib.h>], [
541    #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
542    #else
543    #error No good zlib found
544    #endif
545    ],[
546         AC_MSG_RESULT(Using system zlib)
547         zlib_msg="system zlib"
548         AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
549    ],[
550         AC_MSG_RESULT(Using embedded zlib)
551         have_zlib=no
552         zlib_msg="bundled zlib"
553    ])
556 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
557 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
559 # for mono/metadata/debug-symfile.c
560 AC_CHECK_HEADERS(elf.h)
562 # for support
563 AC_CHECK_HEADERS(poll.h)
564 AC_CHECK_HEADERS(sys/poll.h)
565 AC_CHECK_HEADERS(sys/wait.h)
566 AC_CHECK_HEADERS(grp.h)
567 AC_CHECK_HEADERS(syslog.h)
568 AC_CHECK_FUNCS(vsyslog)
570 # for mono/dis
571 AC_CHECK_HEADERS(wchar.h)
572 AC_CHECK_HEADERS(ieeefp.h)
573 AC_MSG_CHECKING(for isinf)
574 AC_TRY_LINK([#include <math.h>], [
575         int f = isinf (1.0);
576 ], [
577         AC_MSG_RESULT(yes)
578         AC_DEFINE(HAVE_ISINF, 1, [isinf available])
579 ], [
580         # We'll have to use signals
581         AC_MSG_RESULT(no)
583 # mingw
584 AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
585         AC_TRY_LINK([#include <math.h>], 
586         [ _finite(0.0); ], 
587         AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
588         AC_MSG_RESULT(no)))
590 # for Linux statfs support
591 AC_CHECK_HEADERS(linux/magic.h)
593 # For Android NDK unified headers
594 if test x$platform_android = xyes; then
595         AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
596         AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
598         # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
599         # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
600         # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
601         # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
602         # doesn't contain the required definitions (NDK 14)
603         if test x$have_android_signal_inlines = xyes; then
604                 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
605                 AC_COMPILE_IFELSE([
606                         AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
607                                 int i;
608                                 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
609                                 }
610                         ])],[
611                                 AC_MSG_RESULT(yes)
612                                 android_sigrtminmax_work=yes
613                         ],[
614                                 AC_MSG_RESULT(no)
615                                 android_sigrtminmax_work=no
616                         ]
617                 )
619                 if test x$android_sigrtminmax_work = xno; then
620                         AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
621                 fi
622         fi
624         # Attempt to detect whether we're using Android NDK unified headers
625         AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
626         AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
628         android_unified_headers=no
629         if test x$have_android_api_level = xyes; then
630                 if test x$have_android_versioning = xyes; then
631                         AC_MSG_CHECKING([whether using Android NDK unified headers])
633                         # Both macros are defined only in the NDK unified headers
634                         AC_COMPILE_IFELSE([
635                                 AC_LANG_PROGRAM([
636                                         #include <android/api-level.h>
637                                         #include <android/versioning.h>
638                                 ],[
639                                         #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
640                                         #else
641                                                 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
642                                         #endif
643                                 ])],[
644                                         AC_MSG_RESULT(yes)
645                                         android_unified_headers=yes
646                                 ],[
647                                         AC_MSG_RESULT(no)
648                                         android_unified_headers=no
649                                 ]
650                         )
651                 fi
652         fi
654         if test x$android_unified_headers = xyes; then
655                 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
656         fi
657 fi # Android
659 # not 64 bit clean in cross-compile
660 if test "x$enable_wasm" = "xyes"; then
661 AC_DEFINE(SIZEOF_VOID_P,4)
662 AC_DEFINE(SIZEOF_LONG,4)
663 ac_cv_sizeof_void_p="4"
664 ac_cv_sizeof_long="4"
665 else
666 AC_CHECK_SIZEOF(void *)
667 AC_CHECK_SIZEOF(long)
670 AC_CHECK_SIZEOF(int)
671 AC_CHECK_SIZEOF(long long)
673 AC_CACHE_CHECK([for clang],
674         mono_cv_clang,[
675         AC_TRY_COMPILE([], [
676                 #ifdef __clang__
677                 #else
678                 #error "FAILED"
679                 #endif
680         ],
681         [mono_cv_clang=yes],
682         [mono_cv_clang=no],
683         [])
686 AC_ARG_ENABLE(visibility-hidden,
687 [  --disable-visibility-hidden    disable usage of -fvisiblity=hidden],
688    disable_visibility_hidden=yes, disable_visibility_hidden=no)
690 WARN=''
691 if test x"$GCC" = xyes; then
692         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'
694                 # We require C99 with some GNU extensions, e.g. `linux` macro
695                 CFLAGS="$CFLAGS -std=gnu99"
697                 # The runtime code does not respect ANSI C strict aliasing rules
698                 CFLAGS="$CFLAGS -fno-strict-aliasing"
700                 # We rely on signed overflow to behave
701                 CFLAGS="$CFLAGS -fwrapv"
703                 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
704                 if test x"$disable_visibility_hidden" = xno; then
705                    # Don't export any symbols by default
706                    SHARED_CFLAGS="-fvisibility=hidden"
707                    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
708                 fi
710                 ORIG_CFLAGS=$CFLAGS
711                 # Check for the normal version, since gcc ignores unknown -Wno options
712                 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
713                 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
714                 AC_TRY_COMPILE([],[
715                 ], [
716                    AC_MSG_RESULT(yes)
717                    CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
718                 ], [
719                    AC_MSG_RESULT(no)
720                    CFLAGS=$ORIG_CFLAGS
721                 ])
723                 if test "x$mono_cv_clang" = "xyes"; then
724                    # https://bugzilla.samba.org/show_bug.cgi?id=8118
725                    WARN="$WARN -Qunused-arguments"
726                    WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
727                    # We rely on zero length arrays in structs
728                    WARN="$WARN -Wno-zero-length-array"
729                 fi
730 else
731         # The Sun Forte compiler complains about inline functions that access static variables
732         # so disable all inlining.
733         case "$host" in
734         *-*-solaris*)
735                 CFLAGS="$CFLAGS -Dinline="
736                 ;;
737         esac
739 CFLAGS="$CFLAGS -g $WARN"
740 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
741 CPPFLAGS="$CPPFLAGS -g $WARN"
743 # Where's the 'mcs' source tree?
744 if test -d $srcdir/mcs; then
745   mcsdir=mcs
746 else
747   mcsdir=../mcs
750 AC_ARG_WITH(mcs-path, [  --with-mcs-path=/path/to/mcs      Specify an alternate mcs source tree],
751         if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
752                 mcsdir=$with_mcs_path
753         fi
756 AC_ARG_WITH(jumptables, [  --with-jumptables=yes,no      enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
759 # A sanity check to catch cases where the package was unpacked
760 # with an ancient tar program (Solaris)
762 AC_ARG_ENABLE(solaris-tar-check,
763 [  --disable-solaris-tar-check    disable solaris tar check],
764    do_solaris_tar_check=no, do_solaris_tar_check=yes)
766 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
767         AC_MSG_CHECKING(integrity of package)
768         if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
769         then
770                 AC_MSG_RESULT(ok)
771         else
772                 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"
773                 AC_MSG_ERROR([$errorm])
774         fi
777 if test "x$with_mcs_path" != "x"; then
778 mcs_topdir=$(cd "$mcsdir" && pwd)
779 mcs_topdir_from_srcdir=$mcs_topdir
780 else
781 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
782 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
785 # Convert mcs_topdir* paths to Windows syntax.
786 if test x$cross_compiling$host_win32 = xnoyes; then
787   mcs_topdir=$(cygpath -m $mcs_topdir)
788   case $mcs_topdir_from_srcdir in
789     /cygdrive/*)
790         mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
791         ;;
792   esac
795 AC_SUBST([mcs_topdir])
796 AC_SUBST([mcs_topdir_from_srcdir])
798 # gettext: prepare the translation directories. 
799 # we do not configure the full gettext, as we consume it dynamically from C#
800 AM_PO_SUBDIRS
802 if test "x$USE_NLS" = "xyes"; then
803    AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
805    if test "x$HAVE_MSGFMT" = "xno"; then
806           AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
807    fi
810 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
812 pkg_config_path=
813 AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir],
814         if test x$with_crosspkgdir = "x"; then
815                 if test -s $PKG_CONFIG_PATH; then
816                         pkg_config_path=$PKG_CONFIG_PATH
817                 fi
818         else
819                 pkg_config_path=$with_crosspkgdir
820                 PKG_CONFIG_PATH=$pkg_config_path
821                 export PKG_CONFIG_PATH
822         fi
825 AC_ARG_ENABLE(ninja,[  --enable-ninja    Enable using ninja where available], enable_ninja=$enableval)
826 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
827 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
829 AC_ARG_ENABLE(werror, [  --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
830 if test x$werror_flag = xyes; then
831         WERROR_CFLAGS="-Werror"
833 AC_SUBST([WERROR_CFLAGS])
834 AC_SUBST([SHARED_CFLAGS])
836 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
837   
838 AC_SUBST(GLIB_CFLAGS)
840 # Enable support for fast thread-local storage
841 # Some systems have broken support, so we allow to disable it.
842 AC_ARG_WITH(tls, [  --with-tls=__thread,pthread    select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
844 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
845 # This does not work on some platforms (bug #55253)
846 AC_ARG_WITH(sigaltstack, [  --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
848 AC_ARG_WITH(static_mono, [  --with-static_mono=yes,no      link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
849 AC_ARG_WITH(shared_mono, [  --with-shared_mono=yes,no      build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
850 # Same as --with-shared_mono=no
851 AC_ARG_ENABLE(libraries, [  --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
853 if test "x$enable_static" = "xno"; then
854    with_static_mono=no
857 if test "x$enable_shared" = "xno"; then
858    with_shared_mono=no
861 if test "x$enable_libraries" = "xno"; then
862    with_shared_mono=no
865 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
867 if test "x$host_win32" = "xyes"; then
868    # Boehm GC requires the runtime to be in its own dll
869    with_static_mono=no
872 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
873 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
874 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
875 AC_ARG_ENABLE(support-build, [  --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
877 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
878 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
879         AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
880         ORIG_CFLAGS=$CFLAGS
881         CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
882         AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
883         AC_TRY_COMPILE([], [
884         ], [
885            AC_MSG_RESULT(yes)
886            # Pass it to libgc as well
887            CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
888         ], [
889            AC_MSG_RESULT(no)
890            CFLAGS=$ORIG_CFLAGS
891         ])
894 AC_ARG_ENABLE(small-config, [  --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
896 if test x$enable_small_config = xyes; then
897         AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
898         CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
901 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)
903 DISABLED_FEATURES=none
904 csc_compiler=default
905 endian=unknown
906 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
907 AC_MSG_CHECKING([CSharp compiler to use])
908 AC_ARG_WITH(csc, [  --with-csc=mcs,roslyn,default      Configures the CSharp compiler to use],[
909    if test x$withval = xmcs; then
910        csc_compiler=mcs
911    elif test x$withval = xroslyn; then
912        csc_compiler=roslyn
913    elif test x$withval = xdefault; then
914        :
915    else
916        AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
917    fi
918 ],[csc_compiler=default])
920 if test $csc_compiler = default; then
921    if test $endian = big; then
922       csc_compiler=mcs
923    elif test $endian = little; then
924       case "$host" in
925         powerpc*) csc_compiler=mcs ;;
926         *) csc_compiler=roslyn ;;
927       esac
928    else
929       csc_compiler=mcs
930    fi
932 AC_MSG_RESULT($csc_compiler)
934 AC_ARG_WITH(jemalloc,             [  --with-jemalloc=yes,no               If jemalloc is enabled (defaults to no)],                                     [], [with_jemalloc=no])
935 AC_ARG_WITH(jemalloc-always,      [  --with-jemalloc_always=yes,no        If jemalloc is enabled and always used (defaults to yes)],                    [], [with_jemalloc_always=no])
936 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])
939 if test x$target_win32 = xyes; then
940 with_jemalloc=no
941 with_jemalloc_assert=no
942 with_jemalloc_always=no
945 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
946 if test "x$with_jemalloc_assert" = "xyes"; then
947 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
948 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
949 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
952 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
953 if test "x$with_jemalloc_always" = "xyes"; then
954 with_jemalloc=yes
955 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
956 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
957 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
960 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
961 if test "x$with_jemalloc" = "xyes"; then
962 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
963 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
964 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
966 if test "x$target_mach" = "xyes"; then
967         JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
970 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
971 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
973 AC_SUBST(JEMALLOC_CFLAGS)
974 AC_SUBST(JEMALLOC_CPPFLAGS)
975 AC_SUBST(JEMALLOC_LDFLAGS)
976 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
980 # Terminology:
981 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
982 # MERP - The MS telemetry profile. Not for general use.
983 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
985 # 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.
987 #--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.
988 #--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.
989 #--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.
990 #--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.
992 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])
993 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])
995 if test "x$with_crash_privacy" = "xno"; then
996 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
999 if test "x$with_structured_crashes" = "xno"; then
1000 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1004 # Set the build profiles and options before things which use them
1007 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])
1008 AC_ARG_WITH(monodroid,           [  --with-monodroid=yes,no             If you want to build the MonoDroid assemblies (defaults to no)],            [], [with_monodroid=default])
1009 AC_ARG_WITH(monotouch,           [  --with-monotouch=yes,no             If you want to build the Xamarin.iOS assemblies (defaults to no)],          [], [with_monotouch=default])
1010 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])
1011 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])
1012 AC_ARG_WITH(bitcode,             [  --with-bitcode=yes,no               If bitcode is enabled (defaults to no)],                                    [], [with_bitcode=default])
1013 AC_ARG_WITH(xammac,              [  --with-xammac=yes,no                If you want to build the Xamarin.Mac assemblies (defaults to no)],          [], [with_xammac=default])
1014 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])
1015 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])
1016 AC_ARG_WITH(winaot,              [  --with-winaot=yes,no                If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1017 AC_ARG_WITH(orbis,               [  --with-orbis=yes,no                 If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1018 AC_ARG_WITH(unreal,              [  --with-unreal=yes,no                If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1019 AC_ARG_WITH(wasm,                [  --with-wasm=yes,no                  If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1022 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])
1023 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])
1024 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])
1025 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])
1028 dnl Spectre compiler mitigation flag checks
1030 if test "x$with_spectre_mitigation" = "xyes"; then
1031    AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1032    SPECTRE_CFLAGS=
1033    SPECTRE_INDIRECT_BRANCH_KIND=
1034    case "x$with_spectre_indirect_branch_choice" in
1035        xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1036        xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1037        xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1038        xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1039        *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1040    esac
1042    SPECTRE_FUNCTION_RETURN_KIND=""
1043    case "x$with_spectre_function_return_choice" in
1044        xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1045        xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1046        xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1047        xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1048        *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1049    esac
1051    AX_CHECK_COMPILE_FLAG(
1052         [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1053         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1054    )
1056    AX_CHECK_COMPILE_FLAG(
1057         [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1058         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1059    )
1061    if test "x$SPECTRE_CFLAGS" != "x" ; then
1062         CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1063         CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1064         spectre_mitigation_status="mitigation enabled"
1065    fi
1066 else
1067         spectre_mitigation_status="no mitigation"
1071 dnl Profile defaults
1073 TEST_PROFILE=default
1074 enable_llvm_default=no
1076 with_profile4_x_default=no
1077 with_monodroid_default=no
1078 with_monotouch_default=no
1079 with_monotouch_watch_default=no
1080 with_monotouch_tv_default=no
1081 with_xammac_default=no
1082 with_testing_aot_hybrid_default=no
1083 with_testing_aot_full_default=no
1084 with_winaot_default=no
1085 with_orbis_default=no
1086 with_unreal_default=no
1087 with_wasm_default=no
1089 with_bitcode_default=no
1090 enable_cooperative_suspend_default=no
1092 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1094 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1096 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1097    DISABLE_MCS_DOCS_default=yes
1098 elif test x$with_runtime_preset = xnet_4_x; then
1099    with_profile4_x_default=yes
1100 elif test x$with_runtime_preset = xall; then
1101    with_profile4_x_default=yes
1102    with_monodroid_default=yes
1103    with_monotouch_default=yes
1104    with_monotouch_watch_default=yes
1105    with_monotouch_tv_default=yes
1106    with_xammac_default=yes
1107    with_winaot_default=yes
1108    with_orbis_default=yes
1109    with_unreal_default=yes
1110    with_wasm_default=yes
1111    with_testing_aot_hybrid_default=yes
1112    with_testing_aot_full_default=yes
1113 elif test x$with_runtime_preset = xbitcode; then
1114    DISABLE_MCS_DOCS_default=yes
1115    with_testing_aot_full_default=yes
1116    with_bitcode_default=yes
1117    enable_cooperative_suspend_default=yes
1118    TEST_PROFILE=testing_aot_full
1119    enable_llvm_default=yes
1121    mono_feature_disable_com='yes'
1122    mono_feature_disable_remoting='yes'
1123    mono_feature_disable_reflection_emit_save='yes'
1124    mono_feature_disable_reflection_emit='yes'
1125    mono_feature_disable_appdomains='yes'
1127    AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1128    AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1129    AOT_MODE="llvmonly"
1130 elif test x$with_runtime_preset = xfullaot; then
1131    DISABLE_MCS_DOCS_default=yes
1132    with_testing_aot_full_default=yes
1133    TEST_PROFILE=testing_aot_full
1135    mono_feature_disable_com='yes'
1136    mono_feature_disable_remoting='yes'
1137    mono_feature_disable_reflection_emit_save='yes'
1138    mono_feature_disable_reflection_emit='yes'
1139    mono_feature_disable_appdomains='yes'
1141    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1142    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1143    AOT_MODE="full"
1144 elif test x$with_runtime_preset = xfullaot_llvm; then
1145    DISABLE_MCS_DOCS_default=yes
1146    with_testing_aot_full_default=yes
1147    TEST_PROFILE=testing_aot_full
1149    mono_feature_disable_com='yes'
1150    mono_feature_disable_remoting='yes'
1151    mono_feature_disable_reflection_emit_save='yes'
1152    mono_feature_disable_reflection_emit='yes'
1153    mono_feature_disable_appdomains='yes'
1155    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1156    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1157    AOT_MODE="full"
1158 elif test x$with_runtime_preset = xhybridaot; then
1159    DISABLE_MCS_DOCS_default=yes
1160    with_testing_aot_hybrid_default=yes
1161    TEST_PROFILE=testing_aot_hybrid 
1163    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1164    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1165 elif test x$with_runtime_preset = xhybridaot_llvm; then
1166    DISABLE_MCS_DOCS_default=yes
1167    with_testing_aot_hybrid_default=yes
1168    TEST_PROFILE=testing_aot_hybrid
1170    AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1171    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1172 elif test x$with_runtime_preset = xaot; then
1173    with_profile4_x_default=yes
1175    AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1176    AOT_RUN_FLAGS=""
1178    DISABLE_MCS_DOCS_default=yes
1179 elif test x$with_runtime_preset = xaot_llvm; then
1180    with_profile4_x_default=yes
1182    AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1183    AOT_RUN_FLAGS=""
1185    DISABLE_MCS_DOCS_default=yes
1186 elif test x$with_runtime_preset = xwinaot; then
1187    DISABLE_MCS_DOCS_default=yes
1188    with_winaot_default=yes
1189    TEST_PROFILE=winaot
1191    mono_feature_disable_com='yes'
1192    mono_feature_disable_remoting='yes'
1193    mono_feature_disable_reflection_emit_save='yes'
1194    mono_feature_disable_reflection_emit='yes'
1195    mono_feature_disable_appdomains='yes'
1197    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1198    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1199    AOT_MODE="llvmonly"
1200 elif test x$with_runtime_preset = xorbis; then
1201    DISABLE_MCS_DOCS_default=yes
1202    with_orbis_default=yes
1203    TEST_PROFILE=orbis
1205    mono_feature_disable_com='yes'
1206    mono_feature_disable_remoting='yes'
1207    mono_feature_disable_reflection_emit_save='yes'
1208    mono_feature_disable_reflection_emit='yes'
1209    mono_feature_disable_appdomains='yes'
1211    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1212    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1213    AOT_MODE="full"
1214 elif test x$with_runtime_preset = xunreal; then
1215    DISABLE_MCS_DOCS_default=yes
1216    with_unreal_default=yes
1217    TEST_PROFILE=unreal
1219    mono_feature_disable_com='yes'
1220    mono_feature_disable_remoting='yes'
1221    mono_feature_disable_appdomains='no'
1223    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1224    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1225 elif test x$with_runtime_preset = xwasm; then
1226    DISABLE_MCS_DOCS_default=yes
1227    with_wasm_default=yes
1228    TEST_PROFILE=wasm
1230    mono_feature_disable_com='yes'
1231    mono_feature_disable_remoting='yes'
1232    mono_feature_disable_reflection_emit_save='yes'
1233    mono_feature_disable_reflection_emit='yes'
1234    mono_feature_disable_appdomains='yes'
1236    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1237    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1238 else
1239    with_profile4_x_default=yes
1242 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1243    AC_SUBST(AOT_BUILD_FLAGS)
1244    AC_SUBST(AOT_RUN_FLAGS)
1245    # For llvmonlycheck + fullaotcheck
1246    AC_SUBST(INVARIANT_AOT_OPTIONS)
1249 AC_SUBST(TEST_PROFILE)
1251 if test "x$with_profile4_x" = "xdefault"; then
1252    with_profile4_x=$with_profile4_x_default
1254 if test "x$with_monodroid" = "xdefault"; then
1255    with_monodroid=$with_monodroid_default
1257 if test "x$with_monotouch" = "xdefault"; then
1258    with_monotouch=$with_monotouch_default
1260 if test "x$with_monotouch_watch" = "xdefault"; then
1261    with_monotouch_watch=$with_monotouch_watch_default
1263 if test "x$with_monotouch_tv" = "xdefault"; then
1264    with_monotouch_tv=$with_monotouch_tv_default
1266 if test "x$with_bitcode" = "xdefault"; then
1267    with_bitcode=$with_bitcode_default
1269 if test "x$with_xammac" = "xdefault"; then
1270    with_xammac=$with_xammac_default
1272 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1273    with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1275 if test "x$with_testing_aot_full" = "xdefault"; then
1276    with_testing_aot_full=$with_testing_aot_full_default
1278 if test "x$with_winaot" = "xdefault"; then
1279    with_winaot=$with_winaot_default
1281 if test "x$with_orbis" = "xdefault"; then
1282    with_orbis=$with_orbis_default
1284 if test "x$with_unreal" = "xdefault"; then
1285    with_unreal=$with_unreal_default
1287 if test "x$with_wasm" = "xdefault"; then
1288    with_wasm=$with_wasm_default
1292 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1293 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1294 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1295 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1296 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1297 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1298 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1299 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1300 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1301 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1302 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1303 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1304 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1305 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"])
1306 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1308 default_profile=net_4_x
1309 if test -z "$INSTALL_MONODROID_TRUE"; then :
1310    default_profile=monodroid
1312 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1313    default_profile=monotouch
1315 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1316    default_profile=xammac
1318 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1319    default_profile=testing_aot_hybrid
1321 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1322    default_profile=testing_aot_full
1324 if test -z "$INSTALL_WINAOT_TRUE"; then :
1325    default_profile=winaot
1327 if test -z "$INSTALL_ORBIS_TRUE"; then :
1328    default_profile=orbis
1330 if test -z "$INSTALL_UNREAL_TRUE"; then :
1331    default_profile=unreal
1333 if test -z "$INSTALL_WASM_TRUE"; then :
1334    default_profile=wasm
1336 if test -z "$INSTALL_4_x_TRUE"; then :
1337    default_profile=net_4_x
1339 DEFAULT_PROFILE=$default_profile
1340 AC_SUBST(DEFAULT_PROFILE)
1343 # End build profile configuration
1346 if test x$USE_NLS = xprofile_default; then
1348         AC_MSG_CHECKING([NLS used])
1350         # We make the default value for USE_NLS
1351         # "no" on OSX because it isn't available on most
1352         # default OSX installs. The most common configurations will
1353         # all disable it, so this saves us typing.
1354         if test x$host_darwin = xyes; then
1355                 USE_NLS=no;
1356         else
1357                 USE_NLS=yes;
1358         fi
1360         AC_SUBST([USE_NLS])
1361         AC_MSG_RESULT([$USE_NLS])
1364 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
1365      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, 
1366      reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1367          security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1369         for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1370                 eval "mono_feature_disable_$feature='yes'"
1371         done
1372         DISABLED_FEATURES=$enable_minimal
1373         disabled="Disabled:      $enable_minimal"
1374 ],[])
1376 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1378 if test "x$mono_feature_disable_aot" = "xyes"; then
1379         AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1380         enable_system_aot=no
1381         AC_MSG_NOTICE([Disabled AOT compiler])
1384 if test "x$mono_feature_disable_profiler" = "xyes"; then
1385         AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1386         AC_MSG_NOTICE([Disabled support for the profiler])
1388 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1390 if test "x$mono_feature_disable_decimal" = "xyes"; then
1391         AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1392         AC_MSG_NOTICE([Disabled support for decimal])
1395 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1396         AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1397         AC_MSG_NOTICE([Disabled support for P/Invoke])
1400 if test "x$mono_feature_disable_debug" = "xyes"; then
1401         AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1402         AC_MSG_NOTICE([Disabled support for runtime debugging])
1405 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1406         AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1407         mono_feature_disable_reflection_emit_save=yes
1408         AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1411 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1412         AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1413         AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1416 if test "x$mono_feature_disable_large_code" = "xyes"; then
1417         AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1418         AC_MSG_NOTICE([Disabled support for large assemblies])
1421 if test "x$mono_feature_disable_logging" = "xyes"; then
1422         AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1423         AC_MSG_NOTICE([Disabled support for logging])
1426 if test "x$mono_feature_disable_com" = "xyes"; then
1427         AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1428         AC_MSG_NOTICE([Disabled COM support])
1431 if test "x$mono_feature_disable_ssa" = "xyes"; then
1432         AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1433         AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1436 if test "x$mono_feature_disable_generics" = "xyes"; then
1437         AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1438         AC_MSG_NOTICE([Disabled Generics Support])
1441 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1442         AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1443         AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1446 if test "x$mono_feature_disable_portability" = "xyes"; then
1447         AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1448         AC_MSG_NOTICE([Disabled IO Portability layer])
1451 if test "x$mono_feature_disable_attach" = "xyes"; then
1452         AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1453         AC_MSG_NOTICE([Disabled agent attach])
1456 if test "x$mono_feature_disable_verifier" = "xyes"; then
1457         AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1458         AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1461 if test "x$mono_feature_disable_jit" = "xyes"; then
1462         AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1463         AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1466 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1468 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1469         AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1470         AC_MSG_NOTICE([Disabled the interpreter])
1473 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1475 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1476         AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1479 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1481 if test "x$mono_feature_disable_simd" = "xyes"; then
1482         AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1483         AC_MSG_NOTICE([Disabled SIMD support])
1486 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1487         AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1488         AC_MSG_NOTICE([Disabled Soft Debugger.])
1491 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1493 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1494         AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1495         AC_MSG_NOTICE([Disabled Performance Counters.])
1497 if test "x$mono_feature_disable_normalization" = "xyes"; then
1498         AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1499         AC_MSG_NOTICE([Disabled String normalization support.])
1502 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1503 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1504         AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1505         AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1508 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1509         AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1510         AC_MSG_NOTICE([Disabled Shared perfcounters.])
1513 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1514         AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1515         AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1518 if test "x$mono_feature_disable_remoting" = "xyes"; then
1519         AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1520         AC_MSG_NOTICE([Disabled remoting])
1523 if test "x$mono_feature_disable_security" = "xyes"; then
1524         AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1525         AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1528 if test "x$mono_feature_disable_lldb" = "xyes"; then
1529         AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1530         AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1533 if test "x$mono_feature_disable_mdb" = "xyes"; then
1534         AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1535         AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1538 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1539         AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1540         AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1544 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1545         AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1546         AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1549 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1550         AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1551         AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1554 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1555         AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1556         AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1559 AC_ARG_ENABLE(executables, [  --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1560 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1562 has_extension_module=no
1563 AC_ARG_ENABLE(extension-module, [  --enable-extension-module=LIST enable the core-extensions from LIST],
1565         for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1566                 if test x$extension = xdefault ; then
1567                         has_extension_module=yes;
1568                 fi
1569         done
1570         if test x$enable_extension_module = xyes; then
1571                 has_extension_module=yes;
1572         fi
1573 ], [])
1575 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1577 if test x$has_extension_module != xno ; then
1578         AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1579         AC_MSG_NOTICE([Enabling mono extension module.])
1582 # Deprecated
1583 AC_ARG_ENABLE(gsharedvt, [  --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1585 AC_MSG_CHECKING(for visibility __attribute__)
1586 AC_COMPILE_IFELSE([
1587         AC_LANG_SOURCE([[
1588                 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1589                 int main () { doit (); return 0; }
1590         ]])
1591 ], [
1592    have_visibility_hidden=yes
1593    AC_MSG_RESULT(yes)
1594 ], [
1595    have_visibility_hidden=no
1596    AC_MSG_RESULT(no)
1600 dnl Boehm GC configuration
1603 AC_ARG_WITH(libgc,   [  --with-libgc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1605 AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1606 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1608 if test "x$support_boehm" = "xyes"; then
1610         AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1611         if test x$enable_parallel_mark = xyes; then
1612                 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1613         fi
1615         gc_msg=""
1616         LIBGC_CPPFLAGS=
1617         LIBGC_LIBS=
1618         LIBGC_STATIC_LIBS=
1619         libgc_dir=
1620         case "x$libgc" in
1621                 xincluded)
1622                         if test "x$support_boehm" = "xyes"; then
1623                                 libgc_dir=libgc
1624                         fi
1626                         LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1627                         LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1628                         LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1630                         BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1632                         if test x$target_win32 = xyes; then
1633                                 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1634                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1635                         fi
1637                         gc_msg="Included Boehm GC with typed GC"
1638                         if test x$enable_parallel_mark = xyes; then
1639                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1640                                 gc_msg="$gc_msg and parallel mark"
1641                         else
1642                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1643                         fi
1644                         ;;
1646                 xboehm|xbohem|xyes)
1647                         AC_MSG_WARN("External Boehm is no longer supported")
1648                         ;;
1650                 xsgen)
1651                         AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1652                         ;;
1654                 xnone)
1655                         AC_MSG_WARN("Compiling mono without GC.")
1656                         AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1657                         AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1658                         gc_msg="none"
1659                         ;;
1660                 *)
1661                         AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1662                         ;;
1663         esac
1665         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])
1666         if test "x$large_heap" = "xyes"; then
1667            CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1668         fi
1670         AC_SUBST(LIBGC_CPPFLAGS)
1671         AC_SUBST(LIBGC_LIBS)
1672         AC_SUBST(LIBGC_STATIC_LIBS)
1673         AC_SUBST(libgc_dir)
1674         AC_SUBST(BOEHM_DEFINES)
1677 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1680 dnl End of Boehm GC Configuration
1683 dnl *************************************
1684 dnl *** Checks for zero length arrays ***
1685 dnl *************************************
1686 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1687 AC_TRY_COMPILE([
1688         struct s {
1689                 int  length;
1690                 char data [0];
1691         };
1692 ], [], [
1693         AC_MSG_RESULT(yes)
1694         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1695 ], [
1696         AC_MSG_RESULT(no)
1697         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1700 dnl ***********************************
1701 dnl *** Checks for signals
1702 dnl ***********************************
1703 AC_CHECK_HEADERS(signal.h)
1704 AC_CHECK_FUNCS(sigaction)
1705 AC_CHECK_FUNCS(kill)
1706 AC_CHECK_FUNCS(signal)
1708 # signal() is declared inline in Android headers
1709 # so we need to workaround it by overriding the check.
1710 if test x$platform_android = xyes; then
1711         AC_DEFINE(HAVE_SIGNAL,1)
1714 if test x$host_win32 = xno; then
1715         dnl *************************************
1716         dnl *** Checks for time capabilities ***
1717         dnl *************************************
1719         AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1720         AC_TRY_COMPILE([#include <time.h>], [
1721                 const int foo = CLOCK_MONOTONIC;
1722         ],[
1723                 AC_MSG_RESULT(yes)
1724                 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1725         ], [
1726                 AC_MSG_RESULT(no)
1727         ])
1729         AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1730         AC_TRY_COMPILE([#include <time.h>], [
1731                 const int foo = CLOCK_MONOTONIC_COARSE;
1732         ],[
1733                 AC_MSG_RESULT(yes)
1734                 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1735         ], [
1736                 AC_MSG_RESULT(no)
1737         ])
1739         AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1740         AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1741         AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1743         dnl hires monotonic clock support
1744         AC_SEARCH_LIBS(clock_gettime, rt)
1745         AC_CHECK_FUNCS(clock_nanosleep)
1747         dnl dynamic loader support
1748         AC_CHECK_FUNC(dlopen, DL_LIB="",
1749                 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1750         )
1751         if test x$dl_support = xno; then
1752                 AC_MSG_WARN([No dynamic loading support available])
1753         else
1754                 LIBS="$LIBS $DL_LIB"
1755                 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1756                 dnl from glib's configure.ac
1757                 AC_CACHE_CHECK([for preceeding underscore in symbols],
1758                         mono_cv_uscore,[
1759                         AC_TRY_RUN([#include <dlfcn.h>
1760                         int mono_underscore_test (void) { return 42; }
1761                         int main() {
1762                           void *f1 = (void*)0, *f2 = (void*)0, *handle;
1763                           handle = dlopen ((void*)0, 0);
1764                           if (handle) {
1765                             f1 = dlsym (handle, "mono_underscore_test");
1766                             f2 = dlsym (handle, "_mono_underscore_test");
1767                           } return (!f2 || f1);
1768                         }],
1769                                 [mono_cv_uscore=yes],
1770                                 [mono_cv_uscore=no],
1771                         [])
1772                 ])
1773                 if test "x$mono_cv_uscore" = "xyes"; then
1774                         MONO_DL_NEED_USCORE=1
1775                 else
1776                         MONO_DL_NEED_USCORE=0
1777                 fi
1778                 AC_SUBST(MONO_DL_NEED_USCORE)
1779                 AC_CHECK_FUNC(dlerror)
1780         fi
1782         dnl ******************************************************************
1783         dnl *** Checks for the IKVM JNI interface library                  ***
1784         dnl ******************************************************************
1785         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])
1787         ikvm_native_dir=
1788         if test x$with_ikvm_native = xyes; then
1789                 ikvm_native_dir=ikvm-native
1790                 jdk_headers_found="IKVM Native"
1791         fi
1793         AC_SUBST(ikvm_native_dir)
1795         AC_CHECK_HEADERS(execinfo.h)
1797         AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1799         AC_CHECK_FUNCS(getgrgid_r)
1800         AC_CHECK_FUNCS(getgrnam_r)
1801         AC_CHECK_FUNCS(getresuid)
1802         AC_CHECK_FUNCS(setresuid)
1803         AC_CHECK_FUNCS(kqueue)
1804         AC_CHECK_FUNCS(backtrace_symbols)
1805         AC_CHECK_FUNCS(mkstemp)
1806         AC_CHECK_FUNCS(mmap)
1807         AC_CHECK_FUNCS(madvise)
1808         AC_CHECK_FUNCS(getrusage)
1809         AC_CHECK_FUNCS(getpriority)
1810         AC_CHECK_FUNCS(setpriority)
1811         AC_CHECK_FUNCS(dl_iterate_phdr)
1812         AC_CHECK_FUNCS(dladdr)
1813         AC_CHECK_FUNCS(sysconf)
1814         AC_CHECK_FUNCS(getrlimit)
1815         AC_CHECK_FUNCS(prctl)
1817         AC_CHECK_FUNCS(sched_getaffinity)
1818         AC_CHECK_FUNCS(sched_setaffinity)
1819         AC_CHECK_FUNCS(sched_getcpu)
1821         if test x$platform_android != xyes; then
1822                 AC_CHECK_FUNCS(getpwnam_r)
1823                 AC_CHECK_FUNCS(getpwuid_r)
1824         fi
1826         AC_FUNC_STRERROR_R()
1828         dnl ****************************************************************
1829         dnl *** Check for sched_setaffinity from glibc versions before   ***
1830         dnl *** 2.3.4. The older versions of the function only take 2    ***
1831         dnl *** parameters, not 3.                                       ***
1832         dnl ***                                                          ***
1833         dnl *** Because the interface change was not made in a minor     ***
1834         dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros    ***
1835         dnl *** won't always indicate the interface sched_affinity has.  ***
1836         dnl ****************************************************************
1837         AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1838         AC_TRY_COMPILE([#include <sched.h>], [
1839             int mask = 1; 
1840             sched_setaffinity(0, &mask);
1841         ], [
1842                 # Yes, we have it...
1843                 AC_MSG_RESULT(yes)
1844                 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1845         ], [
1846                 # We have the new, three-parameter version
1847                 AC_MSG_RESULT(no)
1848         ])
1849         AC_TRY_COMPILE([#include <sched.h>], [
1850              CPU_COUNT((void *) 0);
1851         ], [
1852                 AC_MSG_RESULT(yes)
1853                 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1854         ], [
1855                 # We have the new, three-parameter version
1856                 AC_MSG_RESULT(no)
1857         ])
1859         dnl ******************************************************************
1860         dnl *** Check for large file support                               ***
1861         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1862         dnl ******************************************************************
1863         
1864         # Check that off_t can represent 2**63 - 1 correctly, working around
1865         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
1866         # CPPFLAGS and sets $large_offt to yes if the test succeeds
1867         large_offt=no
1868         AC_DEFUN([LARGE_FILES], [
1869                 large_CPPFLAGS=$CPPFLAGS
1870                 CPPFLAGS="$CPPFLAGS $1"
1871                 AC_TRY_COMPILE([
1872                         #include <sys/types.h>
1873                         #include <limits.h>
1874                 ], [
1875                         /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1876                         #define COMPILE_TIME_ASSERT(pred) \
1877                                 switch(0){case 0:case pred:;}
1878                         COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1879                 ], [
1880                         AC_MSG_RESULT(ok)
1881                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1882                         large_CPPFLAGS="$large_CPPFLAGS $1"
1883                         large_offt=yes
1884                 ], [
1885                         AC_MSG_RESULT(no)
1886                 ])
1887                 CPPFLAGS=$large_CPPFLAGS
1888         ])
1890         AC_MSG_CHECKING(if off_t is 64 bits wide)
1891         LARGE_FILES("")
1892         if test $large_offt = no; then
1893                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1894                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1895         fi
1896         if test $large_offt = no; then
1897                 AC_MSG_WARN([No 64 bit file size support available])
1898         fi
1899         
1900         dnl *****************************
1901         dnl *** Checks for libsocket  ***
1902         dnl *****************************
1903         AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1905         case "$host" in
1906                 *-*-*freebsd*)
1907                         dnl *****************************
1908                         dnl *** Checks for libinotify ***
1909                         dnl *****************************
1910                         AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1911         esac
1913         dnl *******************************
1914         dnl *** Checks for MSG_NOSIGNAL ***
1915         dnl *******************************
1916         AC_MSG_CHECKING(for MSG_NOSIGNAL)
1917         AC_TRY_COMPILE([#include <sys/socket.h>], [
1918                 int f = MSG_NOSIGNAL;
1919         ], [
1920                 # Yes, we have it...
1921                 AC_MSG_RESULT(yes)
1922                 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1923         ], [
1924                 # We'll have to use signals
1925                 AC_MSG_RESULT(no)
1926         ])
1928         dnl *****************************
1929         dnl *** Checks for IPPROTO_IP ***
1930         dnl *****************************
1931         AC_MSG_CHECKING(for IPPROTO_IP)
1932         AC_TRY_COMPILE([#include <netinet/in.h>], [
1933                 int level = IPPROTO_IP;
1934         ], [
1935                 # Yes, we have it...
1936                 AC_MSG_RESULT(yes)
1937                 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1938         ], [
1939                 # We'll have to use getprotobyname
1940                 AC_MSG_RESULT(no)
1941         ])
1943         dnl *******************************
1944         dnl *** Checks for IPPROTO_IPV6 ***
1945         dnl *******************************
1946         AC_MSG_CHECKING(for IPPROTO_IPV6)
1947         AC_TRY_COMPILE([#include <netinet/in.h>], [
1948                 int level = IPPROTO_IPV6;
1949         ], [
1950                 # Yes, we have it...
1951                 AC_MSG_RESULT(yes)
1952                 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1953         ], [
1954                 # We'll have to use getprotobyname
1955                 AC_MSG_RESULT(no)
1956         ])
1958         dnl ******************************
1959         dnl *** Checks for IPPROTO_TCP ***
1960         dnl ******************************
1961         AC_MSG_CHECKING(for IPPROTO_TCP)
1962         AC_TRY_COMPILE([#include <netinet/in.h>], [
1963                 int level = IPPROTO_TCP;
1964         ], [
1965                 # Yes, we have it...
1966                 AC_MSG_RESULT(yes)
1967                 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1968         ], [
1969                 # We'll have to use getprotobyname
1970                 AC_MSG_RESULT(no)
1971         ])
1973         dnl *****************************
1974         dnl *** Checks for SOL_IP     ***
1975         dnl *****************************
1976         AC_MSG_CHECKING(for SOL_IP)
1977         AC_TRY_COMPILE([#include <netdb.h>], [
1978                 int level = SOL_IP;
1979         ], [
1980                 # Yes, we have it...
1981                 AC_MSG_RESULT(yes)
1982                 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
1983         ], [
1984                 # We'll have to use getprotobyname
1985                 AC_MSG_RESULT(no)
1986         ])
1988         dnl *****************************
1989         dnl *** Checks for SOL_IPV6     ***
1990         dnl *****************************
1991         AC_MSG_CHECKING(for SOL_IPV6)
1992         AC_TRY_COMPILE([#include <netdb.h>], [
1993                 int level = SOL_IPV6;
1994         ], [
1995                 # Yes, we have it...
1996                 AC_MSG_RESULT(yes)
1997                 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
1998         ], [
1999                 # We'll have to use getprotobyname
2000                 AC_MSG_RESULT(no)
2001         ])
2003         dnl *****************************
2004         dnl *** Checks for SOL_TCP    ***
2005         dnl *****************************
2006         AC_MSG_CHECKING(for SOL_TCP)
2007         AC_TRY_COMPILE([#include <netdb.h>], [
2008                 int level = SOL_TCP;
2009         ], [
2010                 # Yes, we have it...
2011                 AC_MSG_RESULT(yes)
2012                 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2013         ], [
2014                 # We'll have to use getprotobyname
2015                 AC_MSG_RESULT(no)
2016         ])
2018         dnl *****************************
2019         dnl *** Checks for IP_PKTINFO ***
2020         dnl *****************************
2021         AC_MSG_CHECKING(for IP_PKTINFO)
2022         AC_TRY_COMPILE([#include <linux/in.h>], [
2023                 int level = IP_PKTINFO;
2024         ], [
2025                 # Yes, we have it...
2026                 AC_MSG_RESULT(yes)
2027                 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2028         ], [
2029                 AC_MSG_RESULT(no)
2030         ])
2032         dnl *****************************
2033         dnl *** Checks for IPV6_PKTINFO ***
2034         dnl *****************************
2035         AC_MSG_CHECKING(for IPV6_PKTINFO)
2036         AC_TRY_COMPILE([#include <netdb.h>], [
2037                 int level = IPV6_PKTINFO;
2038         ], [
2039                 # Yes, we have it...
2040                 AC_MSG_RESULT(yes)
2041                 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2042         ], [
2043                 AC_MSG_RESULT(no)
2044         ])
2046         dnl **********************************
2047         dnl *** Checks for IP_DONTFRAG     ***
2048         dnl **********************************
2049         AC_MSG_CHECKING(for IP_DONTFRAG)
2050         AC_TRY_COMPILE([#include <netinet/in.h>], [
2051                 int level = IP_DONTFRAG;
2052         ], [
2053                 # Yes, we have it...
2054                 AC_MSG_RESULT(yes)
2055                 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2056         ], [
2057                 AC_MSG_RESULT(no)
2058         ])
2060         dnl **********************************
2061         dnl *** Checks for IP_DONTFRAGMENT ***
2062         dnl **********************************
2063         AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2064         AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2065                 int level = IP_DONTFRAGMENT;
2066         ], [
2067                 # Yes, we have it...
2068                 AC_MSG_RESULT(yes)
2069                 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2070         ], [
2071                 AC_MSG_RESULT(no)
2072         ])
2074         dnl **********************************
2075         dnl *** Checks for IP_MTU_DISCOVER ***
2076         dnl **********************************
2077         AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2078         AC_TRY_COMPILE([#include <linux/in.h>], [
2079                 int level = IP_MTU_DISCOVER;
2080         ], [
2081                 # Yes, we have it...
2082                 AC_MSG_RESULT(yes)
2083                 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2084         ], [
2085                 AC_MSG_RESULT(no)
2086         ])
2088         dnl **********************************
2089         dnl *** Checks for  IP_PMTUDISC_DO ***
2090         dnl **********************************
2091         AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2092         AC_TRY_COMPILE([#include <linux/in.h>], [
2093                 int level = IP_PMTUDISC_DO;
2094         ], [
2095                 # Yes, we have it...
2096                 AC_MSG_RESULT(yes)
2097                 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2098         ], [
2099                 AC_MSG_RESULT(no)
2100         ])
2102         dnl *********************************
2103         dnl *** Check for struct ip_mreqn ***
2104         dnl *********************************
2105         AC_MSG_CHECKING(for struct ip_mreqn)
2106         AC_TRY_COMPILE([#include <netinet/in.h>], [
2107                 struct ip_mreqn mreq;
2108                 mreq.imr_address.s_addr = 0;
2109         ], [
2110                 # Yes, we have it...
2111                 AC_MSG_RESULT(yes)
2112                 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2113         ], [
2114                 # We'll just have to try and use struct ip_mreq
2115                 AC_MSG_RESULT(no)
2116                 AC_MSG_CHECKING(for struct ip_mreq)
2117                 AC_TRY_COMPILE([#include <netinet/in.h>], [
2118                         struct ip_mreq mreq;
2119                         mreq.imr_interface.s_addr = 0;
2120                 ], [
2121                         # Yes, we have it...
2122                         AC_MSG_RESULT(yes)
2123                         AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2124                 ], [
2125                         # No multicast support
2126                         AC_MSG_RESULT(no)
2127                 ])
2128         ])
2129         
2130         dnl **********************************
2131         dnl *** Check for getaddrinfo ***
2132         dnl **********************************
2133         AC_MSG_CHECKING(for getaddrinfo)
2134                 AC_TRY_LINK([
2135                 #include <stdio.h>
2136                 #include <netdb.h>
2137         ], [
2138                 getaddrinfo(NULL,NULL,NULL,NULL);
2139         ], [
2140                 # Yes, we have it...
2141                 AC_MSG_RESULT(yes)
2142                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2143         ], [
2144                 AC_MSG_RESULT(no)
2145         ])
2147         dnl **********************************
2148         dnl *** Check for gethostbyname2_r ***
2149         dnl **********************************
2150         AC_MSG_CHECKING(for gethostbyname2_r)
2151                 AC_TRY_LINK([
2152                 #include <stdio.h>
2153                 #include <netdb.h>
2154         ], [
2156                 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2157         ], [
2158                 # Yes, we have it...
2159                 AC_MSG_RESULT(yes)
2160                 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2161         ], [
2162                 AC_MSG_RESULT(no)
2163         ])
2165         dnl **********************************
2166         dnl *** Check for gethostbyname2 ***
2167         dnl **********************************
2168         AC_MSG_CHECKING(for gethostbyname2)
2169                 AC_TRY_LINK([
2170                 #include <stdio.h>
2171                 #include <netdb.h>
2172         ], [
2173                 gethostbyname2(NULL,0);
2174         ], [
2175                 # Yes, we have it...
2176                 AC_MSG_RESULT(yes)
2177                 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2178         ], [
2179                 AC_MSG_RESULT(no)
2180         ])
2182         dnl **********************************
2183         dnl *** Check for gethostbyname ***
2184         dnl **********************************
2185         AC_MSG_CHECKING(for gethostbyname)
2186                 AC_TRY_LINK([
2187                 #include <stdio.h>
2188                 #include <netdb.h>
2189         ], [
2190                 gethostbyname(NULL);
2191         ], [
2192                 # Yes, we have it...
2193                 AC_MSG_RESULT(yes)
2194                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2195         ], [
2196                 AC_MSG_RESULT(no)
2197         ])
2199         dnl **********************************
2200         dnl *** Check for getprotobyname ***
2201         dnl **********************************
2202         AC_MSG_CHECKING(for getprotobyname)
2203                 AC_TRY_LINK([
2204                 #include <stdio.h>
2205                 #include <netdb.h>
2206         ], [
2207                 getprotobyname(NULL);
2208         ], [
2209                 # Yes, we have it...
2210                 AC_MSG_RESULT(yes)
2211                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2212         ], [
2213                 AC_MSG_RESULT(no)
2214         ])
2216         dnl **********************************
2217         dnl *** Check for getnameinfo ***
2218         dnl **********************************
2219         AC_MSG_CHECKING(for getnameinfo)
2220                 AC_TRY_LINK([
2221                 #include <stdio.h>
2222                 #include <netdb.h>
2223         ], [
2224                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2225         ], [
2226                 # Yes, we have it...
2227                 AC_MSG_RESULT(yes)
2228                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2229         ], [
2230                 AC_MSG_RESULT(no)
2231         ])
2234         dnl **********************************
2235         dnl *** Check for inet_ntop ***
2236         dnl **********************************
2237         AC_MSG_CHECKING(for inet_ntop)
2238                 AC_TRY_LINK([
2239                 #include <stdio.h>
2240                 #include <arpa/inet.h>
2241         ], [
2242                 inet_ntop (0, NULL, NULL, 0);
2243         ], [
2244                 # Yes, we have it...
2245                 AC_MSG_RESULT(yes)
2246                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2247         ], [
2248                 AC_MSG_RESULT(no)
2249         ])
2251         dnl *****************************
2252         dnl *** Checks for libnsl     ***
2253         dnl *****************************
2254         AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2256         AC_CHECK_FUNCS(inet_pton inet_aton)
2258         dnl *****************************
2259         dnl *** Checks for libxnet    ***
2260         dnl *****************************
2261         case "${host}" in
2262                 *solaris* )
2263                         AC_MSG_CHECKING(for Solaris XPG4 support)
2264                         if test -f /usr/lib/libxnet.so; then
2265                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2266                                 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2267                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2268                                 LIBS="$LIBS -lxnet"
2269                                 AC_MSG_RESULT(yes)
2270                         else
2271                                 AC_MSG_RESULT(no)
2272                         fi
2274                         if test "$GCC" = "yes"; then
2275                                 CFLAGS="$CFLAGS -Wno-char-subscripts"
2276                         fi
2277                 ;;
2278         esac
2280         dnl *****************************
2281         dnl *** Checks for libpthread ***
2282         dnl *****************************
2283 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2284 # and libpthread does not exist
2286         case "${host}" in
2287                 *-*-*haiku*)
2288                         dnl Haiku has pthread in libroot (libc equiv)
2289                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2290                 ;;
2291                 *-*-*freebsd*)
2292                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2293                 ;;
2294                 *-*-*openbsd*)
2295                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2296                 ;;
2297                 *)
2298                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2299                 ;;
2300         esac
2301         AC_CHECK_HEADERS(pthread.h)
2302         AC_CHECK_HEADERS(pthread_np.h)
2303         AC_CHECK_FUNCS(pthread_mutex_timedlock)
2304         AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2305         AC_CHECK_FUNCS(pthread_kill)
2306         AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2307         AC_TRY_COMPILE([ #include <pthread.h>], [
2308                 pthread_mutexattr_t attr;
2309                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2310         ], [
2311                 AC_MSG_RESULT(ok)
2312         ], [
2313                 AC_MSG_RESULT(no)
2314                 AC_ERROR(Posix system lacks support for recursive mutexes)
2315         ])
2316         AC_CHECK_FUNCS(pthread_attr_setstacksize)
2317         AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2318         AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2320         dnl **********************************
2321         dnl *** Check for mincore ***
2322         dnl **********************************
2323         AC_MSG_CHECKING(for mincore)
2324                 AC_TRY_LINK([
2325                 #include <stdio.h>
2326                 #include <sys/types.h>
2327                 #include <sys/mman.h>
2328         ], [
2329                 mincore(NULL, 0, NULL);
2330         ], [
2331                 # Yes, we have it...
2332                 AC_MSG_RESULT(yes)
2333                 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2334         ], [
2335                 AC_MSG_RESULT(no)
2336         ])
2338         dnl ***********************************
2339         dnl *** Checks for working __thread ***
2340         dnl ***********************************
2341         AC_MSG_CHECKING(for working __thread)
2342         if test "x$with_tls" != "x__thread"; then
2343                 AC_MSG_RESULT(disabled)
2344         elif test "x$cross_compiling" = "xyes"; then
2345                 AC_MSG_RESULT(cross compiling, assuming yes)
2346         else
2347                 AC_TRY_RUN([
2348                         #if defined(__APPLE__) && defined(__clang__)
2349                         #error "__thread does not currently work with clang on Mac OS X"
2350                         #endif
2351                         
2352                         #include <pthread.h>
2353                         __thread int i;
2354                         static int res1, res2;
2356                         void thread_main (void *arg)
2357                         {
2358                                 i = arg;
2359                                 sleep (1);
2360                                 if (arg == 1)
2361                                         res1 = (i == arg);
2362                                 else
2363                                         res2 = (i == arg);
2364                         }
2366                         int main () {
2367                                 pthread_t t1, t2;
2369                                 i = 5;
2371                                 pthread_create (&t1, NULL, thread_main, 1);
2372                                 pthread_create (&t2, NULL, thread_main, 2);
2374                                 pthread_join (t1, NULL);
2375                                 pthread_join (t2, NULL);
2377                                 return !(res1 + res2 == 2);
2378                         }
2379                 ], [
2380                                 AC_MSG_RESULT(yes)
2381                 ], [
2382                                 AC_MSG_RESULT(no)
2383                                 with_tls=pthread
2384                 ])
2385         fi
2387         dnl **************************************
2388         dnl *** Checks for working sigaltstack ***
2389         dnl **************************************
2390         AC_MSG_CHECKING(for working sigaltstack)
2391         if test "x$with_sigaltstack" != "xyes"; then
2392                 AC_MSG_RESULT(disabled)
2393         elif test "x$cross_compiling" = "xyes"; then
2394                 AC_MSG_RESULT(cross compiling, assuming yes)
2395         else
2396                 AC_TRY_RUN([
2397                         #include <stdio.h>
2398                         #include <stdlib.h>
2399                         #include <unistd.h>
2400                         #include <signal.h>
2401                         #include <pthread.h>
2402                         #include <sys/wait.h>
2403                         #if defined(__FreeBSD__) || defined(__NetBSD__)
2404                         #define SA_STACK SA_ONSTACK
2405                         #endif
2406                         static void
2407                         sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2408                         {
2409                                 exit (0);
2410                         }
2412                         volatile char*__ptr = NULL;
2413                         static void *
2414                         loop (void *ignored)
2415                         {
2416                                 *__ptr = 0;
2417                                 return NULL;
2418                         }
2420                         static void
2421                         child ()
2422                         {
2423                                 struct sigaction sa;
2424                                 stack_t sas;
2425                                 pthread_t id;
2426                                 pthread_attr_t attr;
2428                                 sa.sa_sigaction = sigsegv_signal_handler;
2429                                 sigemptyset (&sa.sa_mask);
2430                                 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2431                                 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2432                                         perror ("sigaction");
2433                                         return;
2434                                 }
2436                                 /* x86 darwin deliver segfaults using SIGBUS */
2437                                 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2438                                         perror ("sigaction");
2439                                         return;
2440                                 }
2441                                 sas.ss_sp = malloc (SIGSTKSZ);
2442                                 sas.ss_size = SIGSTKSZ;
2443                                 sas.ss_flags = 0;
2444                                 if (sigaltstack (&sas, NULL) == -1) {
2445                                         perror ("sigaltstack");
2446                                         return;
2447                                 }
2449                                 pthread_attr_init (&attr);
2450                                 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2451                                         printf ("pthread_create\n");
2452                                         return;
2453                                 }
2455                                 sleep (100);
2456                         }
2458                         int
2459                         main ()
2460                         {
2461                                 pid_t son;
2462                                 int status;
2463                                 int i;
2465                                 son = fork ();
2466                                 if (son == -1) {
2467                                         return 1;
2468                                 }
2470                                 if (son == 0) {
2471                                         child ();
2472                                         return 0;
2473                                 }
2475                                 for (i = 0; i < 300; ++i) {
2476                                         waitpid (son, &status, WNOHANG);
2477                                         if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2478                                                 return 0;
2479                                         usleep (10000);
2480                                 }
2482                                 kill (son, SIGKILL);
2483                                 return 1;
2484                         }
2486                 ], [
2487                                 AC_MSG_RESULT(yes)
2488                                 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2489                 ], [
2490                                 with_sigaltstack=no
2491                                 AC_MSG_RESULT(no)
2492                 ])
2493         fi
2495         dnl ********************************
2496         dnl *** Checks for semaphore lib ***
2497         dnl ********************************
2498         # 'Real Time' functions on Solaris
2499         # posix4 on Solaris 2.6
2500         # pthread (first!) on Linux
2501         AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
2503         AC_SEARCH_LIBS(shm_open, pthread rt posix4) 
2504         AC_CHECK_FUNCS(shm_open)
2506         dnl ********************************
2507         dnl *** Checks for timezone stuff **
2508         dnl ********************************
2509         AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2510                 AC_TRY_COMPILE([
2511                         #include <time.h>
2512                         ], [
2513                         struct tm tm;
2514                         tm.tm_gmtoff = 1;
2515                         ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2516         if test $ac_cv_struct_tm_gmtoff = yes; then
2517                 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2518         else
2519                 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2520                         AC_TRY_COMPILE([
2521                                 #include <time.h>
2522                         ], [
2523                                 timezone = 1;
2524                         ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2525                 if test $ac_cv_var_timezone = yes; then
2526                         AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2527                 else
2528                         AC_ERROR(unable to find a way to determine timezone)
2529                 fi
2530         fi
2532         dnl *********************************
2533         dnl *** Checks for math functions ***
2534         dnl *********************************
2535         AC_SEARCH_LIBS(sqrtf, m)
2536         if test "x$has_broken_apple_cpp" != "xyes"; then
2537                 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2538                         AC_TRY_LINK([#include <math.h>], 
2539                         [ finite(0.0); ], 
2540                         AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2541                         AC_MSG_RESULT(no)))
2542         fi
2543         AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2544                 AC_TRY_LINK([#include <math.h>], 
2545                 [ isfinite(0.0); ], 
2546                 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2547                 AC_MSG_RESULT(no)))
2549         dnl ****************************************************************
2550         dnl *** Checks for working poll() (macosx defines it but doesn't ***
2551         dnl *** have it in the library (duh))                            ***
2552         dnl ****************************************************************
2553         AC_CHECK_FUNCS(poll)
2555         dnl *************************
2556         dnl *** Check for signbit ***
2557         dnl *************************
2558         AC_MSG_CHECKING(for signbit)
2559         AC_TRY_LINK([#include <math.h>], [
2560                 int s = signbit(1.0);
2561         ], [
2562                 AC_MSG_RESULT(yes)
2563                 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2564         ], [
2565                 AC_MSG_RESULT(no)
2566         ]) 
2568         dnl **********************************
2569         dnl *** epoll                      ***
2570         dnl **********************************
2571         AC_CHECK_HEADERS(sys/epoll.h)
2572         haveepoll=no
2573         AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2574         if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2575                 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2576         fi
2578         havekqueue=no
2580         AC_CHECK_HEADERS(sys/event.h)
2581         AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2583         dnl **************************************
2584         dnl * Darwin has a race that prevents us from using reliably:
2585         dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2586         dnl * Since kqueue is mostly used for scaling large web servers, 
2587         dnl * and very few folks run Mono on large web servers on OSX, falling
2588         dnl * back 
2589         dnl **************************************
2590         if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2591                 if test "x$host_darwin" = "xno"; then
2592                         AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2593                 fi
2594         fi
2596         dnl ******************************
2597         dnl *** Checks for SIOCGIFCONF ***
2598         dnl ******************************
2599         AC_CHECK_HEADERS(sys/ioctl.h)
2600         AC_CHECK_HEADERS(net/if.h, [], [],
2601            [
2602            #ifdef HAVE_SYS_TYPES_H
2603            # include <sys/types.h>
2604            #endif
2605            #ifdef HAVE_SYS_SOCKET_H
2606            # include <sys/socket.h>
2607            #endif
2608            ])
2609         AC_MSG_CHECKING(for ifreq)
2610         AC_TRY_COMPILE([
2611                 #include <stdio.h>
2612                 #include <sys/ioctl.h>
2613                 #include <net/if.h>
2614                 ], [
2615                 struct ifconf ifc;
2616                 struct ifreq *ifr;
2617                 void *x;
2618                 ifc.ifc_len = 0;
2619                 ifc.ifc_buf = NULL;
2620                 x = (void *) &ifr->ifr_addr;
2621                 ],[
2622                         AC_MSG_RESULT(yes)
2623                         AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2624                 ], [
2625                         AC_MSG_RESULT(no)
2626                 ])
2627         dnl **********************************
2628         dnl ***     Checks for sin_len     ***
2629         dnl **********************************
2630         AC_MSG_CHECKING(for sockaddr_in.sin_len)
2631         AC_TRY_COMPILE([
2632                 #include <netinet/in.h>
2633                 ], [
2634                 struct sockaddr_in saddr;
2635                 saddr.sin_len = sizeof (saddr);
2636                 ],[
2637                         AC_MSG_RESULT(yes)
2638                         AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2639                 ], [
2640                         AC_MSG_RESULT(no)
2641                 ])      
2642         dnl **********************************
2643         dnl ***    Checks for sin6_len     ***
2644         dnl **********************************
2645         AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2646         AC_TRY_COMPILE([
2647                 #include <netinet/in.h>
2648                 ], [
2649                 struct sockaddr_in6 saddr6;
2650                 saddr6.sin6_len = sizeof (saddr6);
2651                 ],[
2652                         AC_MSG_RESULT(yes)
2653                         AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2654                 ], [
2655                         AC_MSG_RESULT(no)
2656                 ])
2657         dnl **********************************
2658         dnl *** Check for getifaddrs       ***
2659         dnl **********************************
2660         AC_MSG_CHECKING(for getifaddrs)
2661                 AC_TRY_LINK([
2662                 #include <stdio.h>
2663                 #include <sys/types.h>
2664                 #include <sys/socket.h>
2665                 #include <ifaddrs.h>
2666         ], [
2667                 getifaddrs(NULL);
2668         ], [
2669                 # Yes, we have it...
2670                 AC_MSG_RESULT(yes)
2671                 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2672         ], [
2673                 AC_MSG_RESULT(no)
2674         ])
2675         dnl **********************************
2676         dnl *** Check for if_nametoindex   ***
2677         dnl **********************************
2678         AC_MSG_CHECKING(for if_nametoindex)
2679                 AC_TRY_LINK([
2680                 #include <stdio.h>
2681                 #include <sys/types.h>
2682                 #include <sys/socket.h>
2683                 #include <net/if.h>
2684         ], [
2685                 if_nametoindex(NULL);
2686         ], [
2687                 # Yes, we have it...
2688                 AC_MSG_RESULT(yes)
2689                 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2690         ], [
2691                 AC_MSG_RESULT(no)
2692         ])
2693         dnl **********************************
2694         dnl *** Check for access ***
2695         dnl **********************************
2696         AC_MSG_CHECKING(for access)
2697                 AC_TRY_LINK([
2698                 #include <unistd.h>
2699         ], [
2700                 access(NULL,0);
2701         ], [
2702                 # Yes, we have it...
2703                 AC_MSG_RESULT(yes)
2704                 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2705         ], [
2706                 AC_MSG_RESULT(no)
2707         ])
2708                         
2709         dnl **********************************
2710         dnl *** Checks for proclib         ***
2711         dnl **********************************
2712         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.)])
2713         dnl **********************************
2714         dnl *** Checks for MonoPosixHelper ***
2715         dnl **********************************
2716         AC_CHECK_HEADERS(checklist.h)
2717         AC_CHECK_HEADERS(pathconf.h)
2718         AC_CHECK_HEADERS(fstab.h)
2719         AC_CHECK_HEADERS(attr/xattr.h)
2720         AC_CHECK_HEADERS(sys/extattr.h)
2721         AC_CHECK_HEADERS(sys/sendfile.h)
2722         AC_CHECK_HEADERS(sys/statvfs.h)
2723         AC_CHECK_HEADERS(sys/statfs.h)
2724         AC_CHECK_HEADERS(sys/vfstab.h)
2725         AC_CHECK_HEADERS(sys/xattr.h)
2726         AC_CHECK_HEADERS(sys/mman.h)
2727         AC_CHECK_HEADERS(sys/param.h)
2728         AC_CHECK_HEADERS(sys/mount.h, [], [],
2729                 [
2730                 #ifdef HAVE_SYS_PARAM_H
2731                 # include <sys/param.h>
2732                 #endif
2733                 ])
2734         AC_CHECK_HEADERS(sys/mount.h)
2735         AC_CHECK_FUNCS(confstr)
2736         AC_CHECK_FUNCS(seekdir telldir)
2737         AC_CHECK_FUNCS(getdomainname)
2738         AC_CHECK_FUNCS(setdomainname)
2739         AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2740         AC_CHECK_FUNCS(setgroups)
2741         AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2742         AC_CHECK_FUNCS(getfsstat)
2743         AC_CHECK_FUNCS(lutimes futimes)
2744         AC_CHECK_FUNCS(mremap)
2745         AC_CHECK_FUNCS(remap_file_pages)
2746         AC_CHECK_FUNCS(posix_fadvise)
2747         AC_CHECK_FUNCS(posix_fallocate)
2748         AC_CHECK_FUNCS(posix_madvise)
2749         AC_CHECK_FUNCS(vsnprintf)
2750         AC_CHECK_FUNCS(sendfile)
2751         AC_CHECK_FUNCS(gethostid sethostid)
2752         AC_CHECK_FUNCS(sethostname)
2753         AC_CHECK_FUNCS(statfs)
2754         AC_CHECK_FUNCS(fstatfs)
2755         AC_CHECK_FUNCS(statvfs)
2756         AC_CHECK_FUNCS(fstatvfs)
2757         AC_CHECK_FUNCS(stime)
2758         AC_CHECK_FUNCS(strerror_r)
2759         AC_CHECK_FUNCS(ttyname_r)
2760         AC_CHECK_FUNCS(psignal)
2761         AC_CHECK_FUNCS(getlogin_r)
2762         AC_CHECK_FUNCS(lockf)
2763         AC_CHECK_FUNCS(swab)
2764         AC_CHECK_FUNCS(setusershell endusershell)
2765         AC_CHECK_FUNCS(futimens utimensat)
2766         AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2767         AC_CHECK_FUNCS(readv writev preadv pwritev)
2768         AC_CHECK_FUNCS(setpgid)
2769         AC_CHECK_FUNCS(system)
2770         AC_CHECK_FUNCS(fork execv execve)
2771         AC_CHECK_FUNCS(accept4)
2772         AC_CHECK_FUNCS(localtime_r)
2773         AC_CHECK_FUNCS(mkdtemp)
2774         AC_CHECK_SIZEOF(size_t)
2775         AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
2776                 [#include <sys/types.h>
2777                  #include <sys/stat.h>
2778                  #include <unistd.h>])
2779         AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2780                 [#include <sys/types.h>
2781                  #include <sys/stat.h>
2782                  #include <unistd.h>])
2783         AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2784                 [#include <sys/time.h>])
2785         AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2786                 [#include <sys/socket.h>])
2787         AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2788                 [#include <unistd.h>
2789                  #include <fcntl.h>])
2790         AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2791                 [#include <sys/uio.h>])
2792         AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2793                 [#include <sys/socket.h>])
2794         AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2795                 [#include <sys/poll.h>])
2796         AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2797                 [#include <sys/socket.h>])
2798         AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2799                 [#include <sys/socket.h>])
2800         AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2801                 [#include <netinet/in.h>])
2802         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2803                 [#include <netinet/in.h>])
2804         AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2805                 [#include <sys/un.h>])
2806         AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2807                 [#include <sys/types.h>
2808                  #include <sys/stat.h>
2809                  #include <unistd.h>])
2810         AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2811                 [#include <time.h>])
2812         AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2813                 [#include <sys/time.h>
2814                  #include <sys/types.h>
2815                  #include <utime.h>])
2816         AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2817                 [#include <sys/time.h>])
2818         AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2819                 [#include <sys/types.h>
2820                  #include <utime.h>])
2821         AC_CHECK_MEMBERS(
2822                 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,, 
2823                 [#include <sys/types.h>
2824                  #include <dirent.h>])
2825         AC_CHECK_MEMBERS(
2826                 [struct passwd.pw_gecos],,, 
2827                 [#include <sys/types.h>
2828                  #include <pwd.h>])
2829         AC_CHECK_MEMBERS(
2830                 [struct statfs.f_flags],,, 
2831                 [#include <sys/types.h>
2832                  #include <sys/vfs.h>])
2833         AC_CHECK_MEMBERS(
2834                 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,, 
2835                 [#include <sys/types.h>
2836                  #include <sys/stat.h>
2837                  #include <unistd.h>])
2839         dnl Favour xattr through glibc, but use libattr if we have to
2840         AC_CHECK_FUNC(lsetxattr, ,
2841                 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2842         )
2843         AC_SUBST(XATTR_LIB)
2845         dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2846         AC_CHECK_MEMBERS(
2847                 [struct kinfo_proc.kp_proc],,, 
2848                 [#include <sys/types.h>
2849                  #include <sys/param.h>
2850                  #include <sys/sysctl.h>
2851                  #include <sys/proc.h>
2852                  ])
2854         dnl *********************************
2855         dnl *** Checks for Windows compilation ***
2856         dnl *********************************
2857         AC_CHECK_HEADERS(sys/time.h)
2858         AC_CHECK_HEADERS(sys/param.h)
2859         AC_CHECK_HEADERS(dirent.h)
2861         dnl ******************************************
2862         dnl *** Checks for OSX and iOS compilation ***
2863         dnl ******************************************
2864         AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2866         dnl *********************************
2867         dnl *** Check for Console 2.0 I/O ***
2868         dnl *********************************
2869         AC_CHECK_HEADERS([curses.h])
2870         AC_CHECK_HEADERS([term.h], [], [],
2871         [#if HAVE_CURSES_H
2872          #include <curses.h>
2873          #endif
2874         ])
2875         AC_CHECK_HEADERS([termios.h])
2877         dnl *********************************
2878         dnl *** Checks for random         ***
2879         dnl *********************************
2880         if test x$host_darwin = xno; then
2881                 AC_CHECK_HEADERS(sys/random.h)
2882                 AC_CHECK_FUNCS(getrandom getentropy)
2883         fi
2884 else
2885         dnl *********************************
2886         dnl *** Checks for Windows compilation ***
2887         dnl *********************************
2888         AC_CHECK_HEADERS(winternl.h)
2890         jdk_headers_found=no
2891         AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
2892         AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
2893         AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
2894         AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
2895         AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
2896         AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
2897         AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
2899         dnl *********************************
2900         dnl *** Check for struct ip_mreqn ***
2901         dnl *********************************
2902         AC_MSG_CHECKING(for struct ip_mreqn)
2903         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2904                 struct ip_mreqn mreq;
2905                 mreq.imr_address.s_addr = 0;
2906         ], [
2907                 # Yes, we have it...
2908                 AC_MSG_RESULT(yes)
2909                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
2910         ], [
2911                 # We'll just have to try and use struct ip_mreq
2912                 AC_MSG_RESULT(no)
2913                 AC_MSG_CHECKING(for struct ip_mreq)
2914                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2915                         struct ip_mreq mreq;
2916                         mreq.imr_interface.s_addr = 0;
2917                 ], [
2918                         # Yes, we have it...
2919                         AC_MSG_RESULT(yes)
2920                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
2921                 ], [
2922                         # No multicast support
2923                         AC_MSG_RESULT(no)
2924                 ])
2925         ])
2927         dnl **********************************
2928         dnl *** Check for getaddrinfo ***
2929         dnl **********************************
2930         AC_MSG_CHECKING(for getaddrinfo)
2931                 AC_TRY_LINK([
2932                 #include <stdio.h>
2933                 #include <winsock2.h>
2934                 #include <ws2tcpip.h>
2935         ], [
2936                 getaddrinfo(NULL,NULL,NULL,NULL);
2937         ], [
2938                 # Yes, we have it...
2939                 AC_MSG_RESULT(yes)
2940                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2941         ], [
2942                 AC_MSG_RESULT(no)
2943         ])
2945         dnl **********************************
2946         dnl *** Check for gethostbyname ***
2947         dnl **********************************
2948         AC_MSG_CHECKING(for gethostbyname)
2949                 AC_TRY_LINK([
2950                 #include <stdio.h>
2951                 #include <winsock2.h>
2952                 #include <ws2tcpip.h>
2953         ], [
2954                 gethostbyname(NULL);
2955         ], [
2956                 # Yes, we have it...
2957                 AC_MSG_RESULT(yes)
2958                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2959         ], [
2960                 AC_MSG_RESULT(no)
2961         ])
2963         dnl **********************************
2964         dnl *** Check for getprotobyname ***
2965         dnl **********************************
2966         AC_MSG_CHECKING(for getprotobyname)
2967                 AC_TRY_LINK([
2968                 #include <stdio.h>
2969                 #include <winsock2.h>
2970                 #include <ws2tcpip.h>
2971         ], [
2972                 getprotobyname(NULL);
2973         ], [
2974                 # Yes, we have it...
2975                 AC_MSG_RESULT(yes)
2976                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2977         ], [
2978                 AC_MSG_RESULT(no)
2979         ])
2981         dnl **********************************
2982         dnl *** Check for getnameinfo ***
2983         dnl **********************************
2984         AC_MSG_CHECKING(for getnameinfo)
2985                 AC_TRY_LINK([
2986                 #include <stdio.h>
2987                 #include <winsock2.h>
2988                 #include <ws2tcpip.h>
2989         ], [
2990                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2991         ], [
2992                 # Yes, we have it...
2993                 AC_MSG_RESULT(yes)
2994                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2995         ], [
2996                 AC_MSG_RESULT(no)
2997         ])
2999         dnl **********************************
3000         dnl *** Check for inet_ntop ***
3001         dnl **********************************
3002         AC_MSG_CHECKING(for inet_ntop)
3003                 AC_TRY_LINK([
3004                 #include <stdio.h>
3005                 #include <winsock2.h>
3006                 #include <ws2tcpip.h>
3007         ], [
3008                 inet_ntop (0, NULL, NULL, 0);
3009         ], [
3010                 # Yes, we have it...
3011                 AC_MSG_RESULT(yes)
3012                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3013         ], [
3014                 AC_MSG_RESULT(no)
3015         ])
3017         dnl **********************************
3018         dnl *** Check for inet_pton ***
3019         dnl **********************************
3020         AC_MSG_CHECKING(for inet_pton)
3021                 AC_TRY_LINK([
3022                 #include <stdio.h>
3023                 #include <winsock2.h>
3024                 #include <ws2tcpip.h>
3025         ], [
3026                 #ifndef inet_pton
3027                 (void) inet_pton;
3028                 #endif
3029                 inet_pton (0, NULL, NULL);
3030         ], [
3031                 # Yes, we have it...
3032                 AC_MSG_RESULT(yes)
3033                 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3034         ], [
3035                 AC_MSG_RESULT(no)
3036         ])
3038         AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3039         AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3040         AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3041         AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3042         AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3043         AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3044         AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3047 dnl socklen_t check
3048 AC_MSG_CHECKING(for socklen_t)
3049 AC_TRY_COMPILE([
3050 #include <sys/types.h>
3051 #include <sys/socket.h>
3053   socklen_t foo;
3055 ac_cv_c_socklen_t=yes
3056         AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3057         AC_MSG_RESULT(yes)
3059         AC_MSG_RESULT(no)
3062 AC_MSG_CHECKING(for array element initializer support)
3063 AC_TRY_COMPILE([#include <sys/socket.h>], [
3064         const int array[] = {[1] = 2,};
3065 ], [
3066         # Yes, we have it...
3067         AC_MSG_RESULT(yes)
3068         AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
3069 ], [
3070         # We'll have to use signals
3071         AC_MSG_RESULT(no)
3074 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
3075         # Simply calling trunc (0.0) is no good since gcc will optimize the call away
3076         AC_TRY_LINK([#include <math.h>], 
3077         [ static void *p = &trunc; ],
3078         [
3079                 AC_DEFINE(HAVE_TRUNC) 
3080                 AC_MSG_RESULT(yes)
3081                 ac_cv_trunc=yes
3082         ],
3083         AC_MSG_RESULT(no)))
3085 if test "x$ac_cv_truncl" != "xyes"; then
3086    AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
3089 AC_CHECK_FUNCS(execvp)
3091 dnl ****************************
3092 dnl *** Look for /dev/random ***
3093 dnl ****************************
3095 AC_MSG_CHECKING([if usage of random device is requested])
3096 AC_ARG_ENABLE(dev-random,
3097 [  --disable-dev-random    disable the use of the random device (enabled by default)],
3098 try_dev_random=$enableval, try_dev_random=yes)
3100 AC_MSG_RESULT($try_dev_random)
3102 case "{$build}" in
3104 dnl IBM i does not have /dev/random, use unblocking only
3106     *-*-os400*)
3107     NAME_DEV_RANDOM="/dev/urandom"
3108     ;;
3110 dnl Win32 does not have /dev/random, they have their own method...
3112     *-mingw*|*-*-cygwin*)
3113     ac_cv_have_dev_random=no
3114     ;;
3116 dnl Everywhere else, it's /dev/random
3118     *)
3119     NAME_DEV_RANDOM="/dev/random"
3120     ;;
3121 esac
3123 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3125 dnl Now check if the device actually exists
3127 if test "x$try_dev_random" = "xyes"; then
3128     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3129     [if test -r "$NAME_DEV_RANDOM" ; then
3130         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3131     if test "x$ac_cv_have_dev_random" = "xyes"; then
3132         AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3133     fi
3134 else
3135     AC_MSG_CHECKING(for random device)
3136     ac_cv_have_dev_random=no
3137     AC_MSG_RESULT(has been disabled)
3140 if test "x$host_win32" = "xyes"; then
3141     AC_DEFINE(HAVE_CRYPT_RNG)
3144 if test "x$ac_cv_have_dev_random" = "xno" \
3145     && test "x$host_win32" = "xno"; then
3146     AC_MSG_WARN([[
3148 *** A system-provided entropy source was not found on this system.
3149 *** Because of this, the System.Security.Cryptography random number generator
3150 *** will throw a NotImplemented exception.
3152 *** If you are seeing this message, and you know your system DOES have an
3153 *** entropy collection in place, please report an issue on GitHub and
3154 *** provide information about the system and how to access the random device.
3156 *** Otherwise you can install either egd or prngd and set the environment
3157 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3158 ***]])
3161 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)
3163 AC_MSG_CHECKING([if big-arrays are to be enabled])
3164 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)
3165 if test "x$enable_big_arrays" = "xyes" ; then
3166     if  test "x$ac_cv_sizeof_void_p" = "x8"; then
3167         AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3168     else
3169         AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3170     fi
3172 AC_MSG_RESULT($enable_big_arrays)
3174 dnl **************
3175 dnl *** DTRACE ***
3176 dnl **************
3178 AC_ARG_ENABLE(dtrace,[  --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3180 if test "x$enable_dtrace" = "xyes"; then
3181    if test "x$has_dtrace" = "xno"; then
3182           AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3183    fi
3184    AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3185    if test "x$DTRACE" = "xno"; then
3186           AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3187           enable_dtrace=no
3188    elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3189           AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3190           enable_dtrace=no
3191    fi
3194 dtrace_g=no
3195 if test "x$enable_dtrace" = "xyes"; then
3196         AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3197         DTRACEFLAGS=
3198         if test "x$ac_cv_sizeof_void_p" = "x8"; then
3199                 case "$host" in
3200                         powerpc-*-darwin*)
3201                         DTRACEFLAGS="-arch ppc64"
3202                         ;;
3203                         i*86-*-darwin*)
3204                         DTRACEFLAGS="-arch x86_64"
3205                         ;;
3206                         *)
3207                         DTRACEFLAGS=-64
3208                         ;;
3209                 esac
3210         else
3211                 case "$host" in
3212                         powerpc-*-darwin*)
3213                         DTRACEFLAGS="-arch ppc"
3214                         ;;
3215                         i*86-*-darwin*)
3216                         DTRACEFLAGS="-arch i386"
3217                         ;;
3218                         *)
3219                         DTRACEFLAGS=-32
3220                         ;;
3221                 esac
3222         fi
3223         AC_SUBST(DTRACEFLAGS)
3224         case "$host" in
3225                 *-*-solaris*)
3226                 dtrace_g=yes
3227                 ;;
3228         esac
3229         AC_CHECK_HEADERS([sys/sdt.h])
3231 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3232 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3234 dnl **************************
3235 dnl *** AOT cross offsets  ***
3236 dnl **************************
3238 AC_ARG_WITH(cross-offsets, [  --with-cross-offsets=<offsets file path>    Explicit AOT cross offsets file],
3239     AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3241 dnl **************
3242 dnl ***  LLVM  ***
3243 dnl **************
3245 AC_ARG_ENABLE(llvm,[  --enable-llvm     Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3246 AC_ARG_ENABLE(loadedllvm,[  --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3247 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)
3248 AC_ARG_ENABLE(llvm-runtime,[  --enable-llvm-runtime     Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3250 AC_ARG_WITH(llvm, [  --with-llvm=<llvm prefix>    Enable the LLVM back-end], enable_llvm=yes,)
3252 if test "x$enable_llvm" = "xdefault"; then
3253    enable_llvm=$enable_llvm_default
3256 if test "x$enable_llvm" = "xyes"; then
3257    if test "x$with_llvm" != "x"; then
3258           LLVM_CONFIG=$with_llvm/bin/llvm-config
3259           if test x$host_win32 = xyes; then
3260                 LLVM_CONFIG=$LLVM_CONFIG.exe
3261           fi
3262           if test ! -x $LLVM_CONFIG; then
3263                  AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3264       fi
3265    else
3266       AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3267       if test "x$LLVM_CONFIG" = "xno"; then
3268              AC_MSG_ERROR([llvm-config not found.])
3269       fi
3270    fi
3272    llvm_codegen="x86codegen"
3273    LLVM_ARCH_LIBS="-lLLVMX86Disassembler -lLLVMX86CodeGen -lLLVMX86AsmParser -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils"
3274    case "$target" in
3275    arm*)
3276                 llvm_codegen="armcodegen"
3277                 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3278                 ;;
3279    aarch64*)
3280                 llvm_codegen="aarch64codegen"
3281                 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3282                 ;;
3283    powerpc*)
3284                 llvm_codegen="powerpccodegen"
3285                 LLVM_ARCH_LIBS="-lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter"
3286                 ;;
3287    esac
3289    if test "x$host_win32" = "xno"; then
3291    # Should be something like '2.6' or '2.7svn'
3292    llvm_version=`$LLVM_CONFIG --version`
3293    llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3294    AC_MSG_CHECKING(LLVM version)
3295    AC_MSG_RESULT($llvm_version $llvm_api_version)
3296    if echo $llvm_version | grep -q 'mono'; then
3297           if test "x$enable_llvm_version_check" = "xyes"; then
3298                  if test "$llvm_version" != "$expected_llvm_version"; then
3299                         AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3300                  fi
3301           fi
3302    else
3303           AC_MSG_ERROR([Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm, with the GIT branch which matches this version of mono, i.e. 'mono-2-10' for Mono 2.10.])
3304    fi
3306    # The output of --cflags seems to include optimizations flags too
3307    if test $llvm_api_version -gt 100; then
3308           # The --cflags argument includes all kinds of warnings -pendantic etc.
3309           LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3310           LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3311    else
3312           LLVM_CFLAGS=`$LLVM_CONFIG --cflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
3313       LLVM_CXXFLAGS=`$LLVM_CONFIG --cxxflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
3314    fi
3315    # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3316    # from LLVM classes.
3317    LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3318    LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3319    # This might include empty lines
3320    LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3321    llvm_jit_supported=yes
3322    llvm_jit_libs="jit mcjit $llvm_codegen"
3323    if test "x$host" != "x$target"; then
3324       # No need for jit libs
3325           llvm_jit_supported=no
3326       llvm_jit_libs=""
3327    elif test $llvm_api_version -gt 100; then
3328       llvm_jit_libs="orcjit $llvm_codegen"
3329    fi
3330    LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3331    if test "x$LLVM_LIBS" = "x"; then
3332           echo "$LLVM_CONFIG --libs failed."
3333           exit 1
3334    fi
3335    LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3336    # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3337    if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3338       LLVM_LIBS="$LLVM_LIBS -lc++"
3339    else
3340       LLVM_LIBS="$LLVM_LIBS -lstdc++"
3341    fi
3343    expected_llvm_version="3.4svn-mono-mono/e656cac"
3345    else
3346        LLVM_CFLAGS="-I$with_llvm/include -DNDEBUG -D__NO_CTYPE_INLINE -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3347        LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3348        LLVM_LDFLAGS="-L$with_llvm/lib"
3349        LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3350        LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3351          -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMSelectionDAG -lLLVMAsmPrinter \
3352          -lLLVMMCDisassembler -lLLVMJIT -lLLVMAnalysis -lLLVMTarget \
3353          -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3354          -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3355          -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3356          -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3357          -lLLVMSupport -lstdc++"
3358        LLVM_LIBS="$LLVM_LIBS $LLVM_ARCH_LIBS $LLVM_SYSTEM_LIBS"
3360        llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3361        llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3362    fi  
3364    if test "x$llvm_api_version" = "x"; then
3365           LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3366           LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3367    else
3368           LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3369           LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3370    fi   
3372    AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3374    AC_SUBST(LLVM_CFLAGS)
3375    AC_SUBST(LLVM_CXXFLAGS)
3376    AC_SUBST(LLVM_LIBS)
3377    AC_SUBST(LLVM_LDFLAGS)
3378    AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3381 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3382 if test "x$enable_loadedllvm" = "xyes"; then
3383    AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3385 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3387 if test "x$enable_llvm" = "xyes"; then
3388    enable_llvm_runtime=yes
3390 if test "x$enable_llvm_runtime" = "xyes"; then
3391    AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3393 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3395 TARGET="unknown"
3396 ACCESS_UNALIGNED="yes"
3398 LIBC="libc.so.6"
3399 INTL="libc.so.6"
3400 SQLITE="libsqlite.so.0"
3401 SQLITE3="libsqlite3.so.0"
3402 X11="libX11.so"
3403 GDKX11="libgdk-x11-2.0.so.0"
3404 GTKX11="libgtk-x11-2.0.so.0"
3405 XINERAMA="libXinerama.so.1"
3407 sizeof_register="SIZEOF_VOID_P"
3409 jit_wanted=true
3410 boehm_supported=true
3411 BTLS_SUPPORTED=no
3412 BTLS_PLATFORM=
3414 if test "x$enable_wasm" = "xyes"; then
3415 TARGET=WASM
3416 HOST=WASM
3417 arch_target=wasm
3418 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3419 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3420 BTLS_SUPPORTED=no
3421 with_tls=pthread
3422 target_mach=no
3424 else
3426 case "$host" in
3427         mips*)
3428                 TARGET=MIPS;
3429                 arch_target=mips;
3430                 with_tls=pthread;
3431                 ACCESS_UNALIGNED="no"
3433                 AC_MSG_CHECKING(for mips n32)
3434                 AC_TRY_COMPILE([],[
3435                 #if _MIPS_SIM != _ABIN32
3436                 #error Not mips n32
3437                 #endif
3438                 ],[
3439                 AC_MSG_RESULT(yes)
3440                 sizeof_register=8
3441                 ],[
3442                 AC_MSG_RESULT(no)
3443                 ])
3444                 ;;
3445         i*86-*-*)
3446                 TARGET=X86;
3447                 arch_target=x86;
3448                 case $host_os in
3449                   solaris*)
3450                         LIBC="libc.so"
3451                         INTL="libintl.so"
3452                         if test "x$ac_cv_sizeof_void_p" = "x8"; then
3453                                 TARGET=AMD64
3454                                 arch_target=amd64
3455                         fi
3457                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3458                         # int astruct __attribute__ ((visibility ("hidden")));
3459                         # void foo ()
3460                         # {
3461                         #       void *p = &astruct;
3462                         # }
3463                         # gcc -fPIC --shared -o libfoo.so foo.c
3464                         # yields:
3465                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3466                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3467                         have_visibility_hidden=no
3468                         ;;
3469                   mingw*|cygwin*)
3470                         have_visibility_hidden=no                 
3471                         ;;
3472                   haiku*)
3473                         LIBC=libroot.so
3474                         ;;
3475                   linux*)
3476                         AOT_SUPPORTED="yes"
3477                         BTLS_SUPPORTED=yes
3478                         BTLS_PLATFORM=i386
3479                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3480                         ;;
3481                   darwin*)
3482                         AOT_SUPPORTED="yes"
3483                         BTLS_SUPPORTED=yes
3484                         BTLS_PLATFORM=i386
3485                         ;;
3486                   openbsd*|freebsd*|kfreebsd-gnu*)
3487                         AOT_SUPPORTED="yes"
3488                         BTLS_SUPPORTED=yes
3489                         BTLS_PLATFORM=i386
3490                         ;;
3491                 esac
3492                 ;;
3493         x86_64-*-* | amd64-*-*)
3494                 TARGET=AMD64;
3495                 arch_target=amd64;
3496                 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3497                         AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3498                         sizeof_register=8
3499                 fi
3500                 case $host_os in
3501                   linux*)
3502                         AOT_SUPPORTED="yes"
3503                         BTLS_SUPPORTED=yes
3504                         BTLS_PLATFORM=x86_64
3505                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3506                         ;;
3507                   darwin*)
3508                         AOT_SUPPORTED="yes"
3509                         BTLS_SUPPORTED=yes
3510                         BTLS_PLATFORM=x86_64
3511                         boehm_supported=false
3512                         ;;
3513                   openbsd*|freebsd*|kfreebsd-gnu*)
3514                         AOT_SUPPORTED="yes"
3515                         BTLS_SUPPORTED=yes
3516                         BTLS_PLATFORM=x86_64
3517                         ;;
3518                   mingw*)
3519                         ;;
3520                 esac
3521                 ;;
3522         sparc*-*-*)
3523                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3524                    TARGET=SPARC64
3525                 else
3526                         TARGET=SPARC
3527                 fi
3528                 arch_target=sparc;
3529                 ACCESS_UNALIGNED="no"
3530                 case $host_os in
3531                   linux*) ;;
3532                   *)
3533                         LIBC="libc.so"
3534                         INTL="libintl.so"
3535                 esac
3536                 if test x"$GCC" = xyes; then
3537                         # We don't support v8 cpus
3538                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3539                 fi
3540                 if test x"$AR" = xfalse; then
3541                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3542                 fi
3543                 ;;
3544         *-mingw*|*-*-cygwin*)
3545                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3546                 have_visibility_hidden=no
3547                 INTL="intl"
3548                 ;;
3549         macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3550         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3551         powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3552                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3553                         TARGET=POWERPC64;
3554                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3555                         if ! (echo $CC | grep -q -- 'clang'); then
3556                                 CFLAGS="$CFLAGS -mminimal-toc"
3557                         fi
3558                 else
3559                         TARGET=POWERPC;
3560                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3561                 fi
3562                 arch_target=ppc;
3563                 case $host_os in
3564                   aix*|os400*)
3565                         BTLS_SUPPORTED=yes
3566                         BTLS_PLATFORM=powerpc
3567                         dnl on AIX/PASE, shared libraries can be inside archives
3568                         dnl if they are, we specify them by lib.a(lib.so)
3569                         dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3570                         LIBC="libc.a(shr_64.o)"
3571                         INTL="libintl.a(libintl.so.8)"
3572                         ;;
3573                   linux*)
3574                         BTLS_SUPPORTED=yes
3575                         BTLS_PLATFORM=powerpc
3576                         ;;
3577                 esac
3578                 ;;
3579         armv7k-*-darwin*)
3580                 TARGET=ARM;
3581                 TARGET_SYS=WATCHOS
3582                 arch_target=arm;
3583                 arm_fpu=VFP_HARD
3584                 ACCESS_UNALIGNED="no"
3585                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3586                 ;;
3588         arm*-darwin*)
3589                 TARGET=ARM;
3590                 arch_target=arm;
3591                 ACCESS_UNALIGNED="no"
3592                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3593                 ;;
3594         arm*-linux*)
3595                 TARGET=ARM;
3596                 arch_target=arm;
3597                 ACCESS_UNALIGNED="no"
3598                 AOT_SUPPORTED="yes"
3599                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3600                 BTLS_SUPPORTED=yes
3601                 BTLS_PLATFORM=arm
3602                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3603                 case "$target" in
3604                 arm*-linux*-gnueabi)
3605                         BTLS_PLATFORM=armsoft
3606                         ;;
3607                 esac
3608                 ;;
3609         arm*-netbsd*-eabi*)
3610                 TARGET=ARM;
3611                 arch_target=arm;
3612                 ACCESS_UNALIGNED="no"
3613                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3614                 ;;
3615         aarch64-*)
3616                 # https://lkml.org/lkml/2012/7/15/133
3617                 TARGET=ARM64
3618                 arch_target=arm64
3619                 boehm_supported=false
3620                 AOT_SUPPORTED="yes"
3621                 BTLS_SUPPORTED=yes
3622                 BTLS_PLATFORM=aarch64
3623                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3624                 ;;
3625         s390x-*-linux*)
3626                 TARGET=S390X;
3627                 arch_target=s390x;
3628                 ACCESS_UNALIGNED="yes"
3629                 BTLS_SUPPORTED=yes
3630                 BTLS_PLATFORM=s390x
3631                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
3632                 ;;
3633 esac
3635 HOST=$TARGET
3637 if test "x$host" != "x$target"; then
3638    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
3639    enable_mcs_build=no
3640    enable_support_build=no
3641    BTLS_SUPPORTED=no
3642    case "$target" in
3643    arm*-darwin*)
3644                 TARGET=ARM;
3645                 arch_target=arm;
3646                 ACCESS_UNALIGNED="no"
3647                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3648                 # Can't use tls, since it depends on the runtime detection of tls offsets
3649                 # in mono-compiler.h
3650                 with_tls=pthread
3651                 case "$target" in
3652                 armv7k-*)
3653                         arm_fpu=VFP_HARD
3654                         AC_DEFINE(TARGET_WATCHOS, 1, [...])
3655                         ;;
3656                 esac            
3657                 ;;
3658    powerpc64-ps3-linux-gnu)
3659                 TARGET=POWERPC64
3660                 arch_target=powerpc64
3661                 AC_DEFINE(TARGET_PS3, 1, [...])
3662                 # It would be better to just use TARGET_POWERPC64, but lots of code already
3663                 # uses this define
3664                 AC_DEFINE(__mono_ppc64__, 1, [...])
3665                 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3666                 sizeof_register=8
3667                 target_byte_order=G_BIG_ENDIAN
3668                 ;;
3669    powerpc64-xbox360-linux-gnu)
3670                 TARGET=POWERPC64
3671                 arch_target=powerpc64
3672                 AC_DEFINE(TARGET_XBOX360, 1, [...])
3673                 # It would be better to just use TARGET_POWERPC64, but lots of code already
3674                 # uses this define
3675                 sizeof_register=8
3676                 target_byte_order=G_BIG_ENDIAN
3677                 ;;
3678    arm*-linux-*)
3679                 TARGET=ARM;
3680                 arch_target=arm;
3681                 AC_DEFINE(TARGET_ARM, 1, [...])
3682                 ACCESS_UNALIGNED="no"
3683                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3684                 # Can't use tls, since it depends on the runtime detection of tls offsets
3685                 # in mono-compiler.h
3686                 with_tls=pthread
3687                 target_mach=no
3688                 case "$target" in
3689                 armv7l-unknown-linux-gnueabi*)
3690                         # TEGRA
3691                         CPPFLAGS="$CPPFLAGS"
3692                         ;;
3693                 armv5-*-linux-androideabi*)
3694                         AC_DEFINE(TARGET_ANDROID, 1, [...])
3695                         CPPFLAGS="$CPPFLAGS"
3696                         ;;
3697                 *-linux-androideabi*)
3698                         AC_DEFINE(TARGET_ANDROID, 1, [...])
3699                         CPPFLAGS="$CPPFLAGS"
3700                         ;;
3701                 esac
3702                 ;;
3703    arm*-netbsd*-eabi*)
3704                 TARGET=ARM;
3705                 arch_target=arm;
3706                 AC_DEFINE(TARGET_ARM, 1, [...])
3707                 ACCESS_UNALIGNED="no"
3708                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3709                 # Can't use tls, since it depends on the runtime detection of tls offsets
3710                 # in mono-compiler.h
3711                 with_tls=pthread
3712                 target_mach=no
3713                 ;;
3714    i686*-linux-*)
3715                 TARGET=X86;
3716                 arch_target=x86;
3717                 AC_DEFINE(TARGET_X86, 1, [...])
3718                 CPPFLAGS="$CPPFLAGS"
3719                 # Can't use tls, since it depends on the runtime detection of tls offsets
3720                 # in mono-compiler.h            
3721                 with_tls=pthread
3722                 target_mach=no
3724                 case "$target" in
3725                 *-linux-android*)
3726                         AC_DEFINE(TARGET_ANDROID, 1, [...])
3727                         ;;
3728                 esac
3729                 ;;
3730    x86_64*-linux-*)
3731                 TARGET=AMD64;
3732                 arch_target=amd64;
3733                 AC_DEFINE(TARGET_AMD64, 1, [...])
3734                 CPPFLAGS="$CPPFLAGS"
3735                 # Can't use tls, since it depends on the runtime detection of tls offsets
3736                 # in mono-compiler.h
3737                 with_tls=pthread
3738                 target_mach=no
3740                 case "$target" in
3741                 *-linux-android*)
3742                         AC_DEFINE(TARGET_ANDROID, 1, [...])
3743                         ;;
3744                 esac
3745                 ;;
3746    x86_64-ps4-freebsd)
3747                 TARGET=AMD64;
3748                 arch_target=amd64;
3749                 AC_DEFINE(TARGET_AMD64, 1, [...])
3750                 AC_DEFINE(TARGET_PS4, 1, [...])
3751                 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
3752                 CPPFLAGS="$CPPFLAGS"
3753                 # Can't use tls, since it depends on the runtime detection of tls offsets
3754                 # in mono-compiler.h
3755                 with_tls=pthread
3756                 target_mach=no
3757                 target_win32=no
3758                 ;;
3759    aarch64*-linux-*)
3760                 TARGET=ARM64;
3761                 arch_target=arm64;
3762                 AC_DEFINE(TARGET_ARM64, 1, [...])
3763                 CPPFLAGS="$CPPFLAGS"
3764                 # Can't use tls, since it depends on the runtime detection of tls offsets
3765                 # in mono-compiler.h
3766                 with_tls=pthread
3767                 target_mach=no
3768                 case "$target" in
3769                 *-linux-android*)
3770                         AC_DEFINE(TARGET_ANDROID, 1, [...])
3771                         ;;
3772                 esac
3773                 ;;
3774         aarch64-*)
3775                 TARGET=ARM64
3776                 ;;
3777         *)
3778                 AC_MSG_ERROR([Cross compiling is not supported for target $target])
3779         esac
3782 case "$TARGET" in
3783 X86)
3784         AC_DEFINE(TARGET_X86, 1, [...])
3785         ;;
3786 AMD64)
3787         AC_DEFINE(TARGET_AMD64, 1, [...])
3788         ;;
3789 ARM)
3790         AC_DEFINE(TARGET_ARM, 1, [...])
3791         ;;
3792 ARM64)
3793         AC_DEFINE(TARGET_ARM64, 1, [...])
3794         ;;
3795 POWERPC)
3796         AC_DEFINE(TARGET_POWERPC, 1, [...])
3797         ;;
3798 POWERPC64)
3799         AC_DEFINE(TARGET_POWERPC, 1, [...])
3800         AC_DEFINE(TARGET_POWERPC64, 1, [...])
3801         ;;
3802 S390X)
3803         AC_DEFINE(TARGET_S390X, 1, [...])
3804         ;;
3805 MIPS)
3806         AC_DEFINE(TARGET_MIPS, 1, [...])
3807         ;;
3808 SPARC)
3809         AC_DEFINE(TARGET_SPARC, 1, [...])
3810         ;;
3811 SPARC64)
3812         AC_DEFINE(TARGET_SPARC64, 1, [...])
3813         ;;
3814 esac
3816 case "$HOST" in
3817 X86)
3818         AC_DEFINE(HOST_X86, 1, [...])
3819         ;;
3820 AMD64)
3821         AC_DEFINE(HOST_AMD64, 1, [...])
3822         ;;
3823 ARM)
3824         AC_DEFINE(HOST_ARM, 1, [...])
3825         ;;
3826 ARM64)
3827         AC_DEFINE(HOST_ARM64, 1, [...])
3828         ;;
3829 POWERPC)
3830         AC_DEFINE(HOST_POWERPC, 1, [...])
3831         ;;
3832 POWERPC64)
3833         AC_DEFINE(HOST_POWERPC, 1, [...])
3834         AC_DEFINE(HOST_POWERPC64, 1, [...])
3835         ;;
3836 S390X)
3837         AC_DEFINE(HOST_S390X, 1, [...])
3838         ;;
3839 MIPS)
3840         AC_DEFINE(HOST_MIPS, 1, [...])
3841         ;;
3842 SPARC)
3843         AC_DEFINE(HOST_SPARC, 1, [...])
3844         ;;
3845 SPARC64)
3846         AC_DEFINE(HOST_SPARC64, 1, [...])
3847         ;;
3848 esac
3850 #WASM hack
3854 dnl *************
3855 dnl *** VTUNE ***
3856 dnl *************
3858 AC_ARG_ENABLE(vtune,[  --enable-vtune   Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
3859 AC_ARG_WITH(vtune, [  --with-vtune=<vtune prefix>       Enable jit vtune profiling], enable_vtune=yes,)
3861 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
3863 if test "x$enable_vtune" = "xyes"; then
3864         if test "x$with_vtune" = "x"; then
3865                 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
3866         else
3867                 VTUNE_PATH=$with_vtune
3868         fi
3869         VTUNE_INCLUDE=$VTUNE_PATH/include
3870         case "$TARGET" in
3871         X86)
3872                 VTUNE_LIB=$VTUNE_PATH/lib32
3873                 ;;
3874         AMD64)
3875                 VTUNE_LIB=$VTUNE_PATH/lib64
3876                 ;;
3877         *)
3878                 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
3879                 ;;
3880         esac
3881         if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
3882                 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
3883         fi
3884         if test ! -f $VTUNE_LIB/libjitprofiling.a; then
3885                 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
3886         fi
3888         VTUNE_CFLAGS=-I$VTUNE_INCLUDE
3889         VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
3891         AC_SUBST(VTUNE_LIBS)
3892         AC_SUBST(VTUNE_CFLAGS)
3894 dnl Use GCC atomic ops if they work on the target.
3895 if test x$GCC = "xyes"; then
3896         case $TARGET in
3897         X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
3898                 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
3899                 ;;
3900         esac
3903 if test "x$target_mach" = "xyes"; then
3905    if test "x$TARGET_SYS" = "xWATCHOS"; then
3906           AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
3907           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3908           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3909           BTLS_SUPPORTED=no
3910    elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
3911           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3912           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3913           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3914           BTLS_SUPPORTED=no
3915    else
3916        AC_TRY_COMPILE([#include "TargetConditionals.h"],[
3917        #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
3918        #error fail this for ios
3919        #endif
3920        ], [
3921                   AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
3922           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
3923           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
3924           target_osx=yes
3925        ], [
3926           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3927           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3928           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3929           BTLS_SUPPORTED=no
3930                   target_ios=yes
3931        ])
3932         fi
3933    AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
3936 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
3938 if test "x$sizeof_register" = "x4"; then
3939    AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
3940 elif test "x$sizeof_register" = "x8"; then
3941    AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
3942 else
3943    AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
3946 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
3948 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
3949    AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
3950 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
3951    AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
3952 else
3953    AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
3956 if test "x$have_visibility_hidden" = "xyes"; then
3957    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
3960 if test "x$have_deprecated" = "xyes"; then
3961    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
3964 dnl 
3965 dnl Simple Generational checks (sgen)
3967 SGEN_DEFINES=
3968 AC_ARG_WITH(sgen,                    [  --with-sgen=yes,no             Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
3969 AC_ARG_WITH(sgen-default-concurrent, [  --with-sgen-default-concurrent=yes,no             Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
3970 if test x$buildsgen = xyes; then
3971    AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
3972    SGEN_DEFINES="-DHAVE_SGEN_GC"
3974         conc_gc_msg=""
3975    if test x$with_sgen_default_concurrent != xno; then
3976        AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
3977            conc_gc_msg=" (concurrent by default)"
3978    fi
3980    if test "x$gc_msg" = "x"; then
3981       gc_msg="sgen$conc_gc_msg"
3982    else
3983       gc_msg="sgen$conc_gc_msg and $gc_msg"
3984    fi
3986 AC_SUBST(SGEN_DEFINES)
3987 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
3989 jit_status="Building and using the JIT"
3991 libsuffix=".so"
3993 case "$host" in
3994      *-*-darwin*)
3995         libsuffix=".dylib"
3996         LIBC="libc.dylib"
3997         INTL="libintl.dylib"
3998         SQLITE="libsqlite.0.dylib"
3999         SQLITE3="libsqlite3.0.dylib"
4000         X11="libX11.dylib"
4001         GDKX11="libgdk-x11-2.0.dylib"
4002         GTKX11="libgtk-x11-2.0.dylib"
4003         ;;
4004      *-*-*netbsd*)
4005         LIBC="libc.so"
4006         INTL="libintl.so"
4007         SQLITE="libsqlite.so"
4008         SQLITE3="libsqlite3.so"
4009         ;;
4010      *-*-kfreebsd*-gnu)
4011         LIBC="libc.so.0.1"
4012         INTL="libc.so.0.1"
4013         X11="libX11.so.6"
4014         ;;
4015     *-*-*freebsd*)
4016         LIBC="libc.so.7"
4017         INTL="libintl.so"
4018         SQLITE="libsqlite.so"
4019         SQLITE3="libsqlite3.so"
4020         ;;
4021     *-*-*openbsd*)
4022         LIBC="libc.so"
4023         INTL="libintl.so"
4024         SQLITE="libsqlite.so"
4025         SQLITE3="libsqlite3.so"
4026         ;;
4027     *-*-*linux*)
4028         AC_PATH_X
4029         dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4030         AC_MSG_CHECKING(for the soname of libX11.so)
4031         for i in $x_libraries $dlsearch_path; do
4032                 for r in 4 5 6; do
4033                         if test -f $i/libX11.so.$r; then
4034                                 X11=libX11.so.$r
4035                                 AC_MSG_RESULT($X11)
4036                         fi
4037                 done
4038         done
4039         
4040         if test "x$X11" = "xlibX11.so"; then
4041                 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4042                 X11=libX11.so.6
4043         fi
4044         ;;
4045 esac
4047 AC_SUBST(libsuffix)
4049 ######################################
4050 # EGLIB CHECKS
4051 ######################################
4053 GNUC_PRETTY=
4054 GNUC_UNUSED=
4055 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4056 if test x$GCC = xyes; then
4057    GNUC_UNUSED='__attribute__((__unused__))'
4058    GNUC_NORETURN='__attribute__((__noreturn__))'
4059    case $host_cpu in
4060      i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4061    esac
4063 AC_SUBST(GNUC_PRETTY)
4064 AC_SUBST(GNUC_UNUSED)
4065 AC_SUBST(GNUC_NORETURN)
4066 AC_SUBST(BREAKPOINT)
4068 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4070 case $host in
4071 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4072     PATHSEP='\\'
4073     SEARCHSEP=';'
4074     OS="WIN32"
4075     PIDTYPE='void *'
4076     ;;
4078     PATHSEP='/'
4079     SEARCHSEP=':'
4080     OS="UNIX"
4081     PIDTYPE='int'
4082     ;;
4083 esac
4085 case $host in
4086         *-*-solaris*)
4087         CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4088         ;;
4089 esac
4091 case $target in
4092 arm*-darwin*|aarch64*-*)
4093     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4094     ;;
4095 i*86-*-darwin*)
4096     ORDER=G_LITTLE_ENDIAN
4097     ;;
4098 *-*-haiku*)
4099     LDFLAGS="$LDFLAGS -ltextencoding"
4100     ;;
4101 *-*-openbsd*)
4102     CFLAGS="$CFLAGS -pthread"
4103     LDFLAGS="$LDFLAGS -pthread"
4104     ;;
4105 esac
4107 AC_SUBST(ORDER)
4108 AC_SUBST(CFLAGS)
4109 AC_SUBST(PATHSEP)
4110 AC_SUBST(SEARCHSEP)
4111 AC_SUBST(OS)
4112 AC_SUBST(PIDTYPE)
4114 # Defined for all targets/platforms using classic Windows API support.
4115 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4116 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4118 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf strerror_r)
4119 AC_CHECK_FUNCS(getrlimit)
4120 AC_CHECK_FUNCS(fork execv execve)
4122 AC_ARG_WITH([overridable-allocators], [  --with-overridable-allocators  allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4124 if test x$with_overridable_allocators = xyes; then
4125         AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4126   AC_MSG_NOTICE([Overridable allocator support enabled])
4127 else
4128   AC_MSG_NOTICE([Overridable allocator support disabled])
4132 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4133 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4134 # removed once support for 10.6 is dropped.
4136 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4138 if test x$target_osx = xyes; then
4139 AC_CHECK_FUNCS(getpwuid_r)
4140 elif test x$target_ios = xno; then
4141 AC_CHECK_FUNCS(strndup getpwuid_r)
4144 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4146 AC_SEARCH_LIBS(sqrtf, m)
4148 # nanosleep may not be part of libc, also search it in other libraries
4149 AC_SEARCH_LIBS(nanosleep, rt)
4151 AC_SEARCH_LIBS(dlopen, dl)
4152 old_ldflags="${LDFLAGS}"
4153 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4154 if test $lt_cv_prog_gnu_ld = yes; then
4155         LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4156 else
4157         case $host in
4158         *-*-aix*|*-*-os400*)
4159                 ;;
4160         *)
4161                 dnl Try to use export-dynamic anyways
4162                 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4163                 ;;
4164         esac
4166 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4167 if test $found_export_dynamic = no; then
4168         LDFLAGS="${old_ldflags}"
4171 AC_MSG_CHECKING(for varargs macros)
4172 AC_TRY_COMPILE([],[
4173 int foo (int i, int j);
4174 #define bar(...) foo (1, __VA_ARGS__)
4175 void main () {
4176          bar (2);
4178 ],have_iso_varargs=yes,have_iso_varargs=no)
4179 AC_MSG_RESULT($have_iso_varargs)
4180 G_HAVE_ISO_VARARGS=0
4181 if test "x$have_iso_varargs" = "xyes"; then
4182    G_HAVE_ISO_VARARGS=1
4184 AC_SUBST(G_HAVE_ISO_VARARGS)
4186 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)
4187 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4188 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4189 AC_SUBST(HAVE_ALLOCA_H)
4191 # Get the exact type of size_t, not just its size.
4192 # This is so we can find an exact printf format among u, lu, llu, I64u.
4193 # To avoid warnings about slight mismatches.
4194 # C99 runtime "zu" dependency is being avoided here.
4196 # We have to compile as C++ because C is too lenient
4197 # and lets the wrong thing compile, with warnings.
4199 # Note: "zu" or ifdef <something> have the advantage
4200 # of producing installable "biarch" headers. i.e. one Mac header
4201 # for Mac/x86 and Mac/amd64.
4203 AC_LANG_PUSH(C++)
4205 # Check long before int because it is the overwhelming Unix answer,
4206 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4208 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4210 AC_MSG_CHECKING(if size_t is unsigned long)
4211 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4212         #include <stddef.h>
4213         unsigned long *a = (size_t*)0;
4214 ])], [
4215         AC_MSG_RESULT(yes)
4216         AC_SUBST(GSIZE_FORMAT, '"%lu"')
4217 ], [
4218         AC_MSG_RESULT(no)
4219         AC_MSG_CHECKING(if size_t is unsigned int)
4220         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4221                 #include <stddef.h>
4222                 unsigned *a = (size_t*)0;
4223         ])], [
4224                 AC_MSG_RESULT(yes)
4225                 AC_SUBST(GSIZE_FORMAT, '"%u"')
4226         ], [
4227 # At this point the majority of systems have their answer,
4228 # and we descend into non-standard or new-standard territory.
4230 # Check __int64 first because I64 on some systems predates ll, enabling
4231 # new compiler/old runtime interop, and the types always have the same size.
4232                 AC_MSG_RESULT(no)
4233                 AC_MSG_CHECKING(if size_t is unsigned __int64)
4234                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4235                         #include <stddef.h>
4236                         unsigned __int64 *a = (size_t*)0;
4237                 ])], [
4238                         AC_MSG_RESULT(yes)
4239                         AC_SUBST(GSIZE_FORMAT, '"%I64u"')
4240                 ], [
4241                         AC_MSG_RESULT(no)
4242                         AC_MSG_CHECKING(if size_t is unsigned long long)
4243                         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4244                                 #include <stddef.h>
4245                                 unsigned long long *a = (size_t*)0;
4246                         ])], [
4247                                 AC_MSG_RESULT(yes)
4248                                 AC_SUBST(GSIZE_FORMAT, '"%llu"')
4249                         ], [
4250                                 AC_MSG_RESULT(no)
4251                                 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4252                         ] )
4253                 ] )
4254         ] )
4255 ] )
4257 AC_LANG_POP
4259 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4260 # This provides for an exact match with functions that
4261 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4262 # uintptr_t is not necessarily the same.
4264 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4265 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4267 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4268    GSIZE="size_t"
4269    GSSIZE="ptrdiff_t"
4270 else
4271    GSIZE="uintptr_t"
4272    GSSIZE="intptr_t"
4275 AC_SUBST(GSIZE)
4276 AC_SUBST(GSSIZE)
4277 AC_SUBST(GSIZE_FORMAT)
4280 # END OF EGLIB CHECKS
4283 AC_ARG_WITH([libgdiplus],
4284         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4285         [], [with_libgdiplus=installed])
4287 # default install location
4288 libgdiplus_install_loc=libgdiplus${libsuffix}
4289 case "$host" in
4290     *-*-*linux*)
4291     libgdiplus_install_loc=libgdiplus${libsuffix}.0
4292     ;;
4293 esac
4295 case $with_libgdiplus in
4296     no)
4297     libgdiplus_loc=
4298     ;;
4300     installed)
4301     libgdiplus_loc=
4302     if test x$cross_compiling = xno; then
4303         if test x$host_darwin = xyes; then
4304             a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4305             if test -x $a; then
4306               libgdiplus_install_loc=$a
4307               libgdiplus_loc=$a
4308             fi
4309         fi
4310     fi
4311     ;;
4313     yes|sibling)
4314     libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4315     ;;
4317     /*) # absolute path, assume it is an install location
4318     libgdiplus_loc=$with_libgdiplus
4319     libgdiplus_install_loc=$with_libgdiplus
4320     ;;
4322     *)
4323     libgdiplus_loc=`pwd`/$with_libgdiplus
4324     ;;
4325 esac
4326 AC_SUBST(libgdiplus_loc)
4327 AC_SUBST(libgdiplus_install_loc)
4329 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)
4330 if test "x$icall_symbol_map" = "xyes"; then
4331    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4334 AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4335 if test "x$icall_export" = "xyes"; then
4336    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4339 AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4340 if test "x$icall_tables" = "xno"; then
4341    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4344 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4346 if test "x$with_tls" = "x__thread"; then
4347         AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4348         # Pass the information to libgc
4349         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4350         AC_MSG_CHECKING(if the tls_model attribute is supported)
4351         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4352                 ], [
4353                         AC_MSG_RESULT(yes)
4354                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4355                 ], [
4356                         AC_MSG_RESULT(no)
4357         ])
4360 if test ${TARGET} = ARM; then
4361         dnl ******************************************
4362         dnl *** Check to see what FPU is available ***
4363         dnl ******************************************
4364         AC_MSG_CHECKING(which FPU to use)
4366         #
4367         # This is a bit tricky:
4368         #
4369         # if (__ARM_PCS_VFP) {
4370         #       /* mfloat-abi=hard == VFP with hard ABI */
4371         # } elif (!__SOFTFP__) {
4372         #       /* mfloat-abi=softfp == VFP with soft ABI */
4373         # } else {
4374         #       /* mfloat-abi=soft == no VFP */
4375         # }
4376         #
4377         # The exception is iOS (w/ GCC) where none of the above
4378         # are defined (but iOS always uses the 'softfp' ABI).
4379         #
4380         # No support for FPA.
4381         #
4383         fpu=NONE
4385         # iOS GCC always uses the 'softfp' ABI.
4386         if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4387                 fpu=VFP
4388         fi
4390         # Are we using the 'hard' ABI?
4391         if test x$fpu = xNONE; then
4392                 AC_TRY_COMPILE([], [
4393                         #ifndef __ARM_PCS_VFP
4394                         #error "Float ABI is not 'hard'"
4395                         #endif
4396                 ], [
4397                         fpu=VFP_HARD
4398                 ], [
4399                         fpu=NONE
4400                 ])
4401         fi
4403         # No 'hard' ABI. 'soft' or 'softfp'?
4404         if test x$fpu = xNONE; then
4405                 AC_TRY_COMPILE([], [
4406                         #ifdef __SOFTFP__
4407                         #error "Float ABI is not 'softfp'"
4408                         #endif
4409                 ], [
4410                         fpu=VFP
4411                 ], [
4412                         fpu=NONE
4413                 ])
4414         fi
4416         if test x$arm_fpu != x; then
4417            fpu=$arm_fpu
4418         fi
4420         AC_MSG_RESULT($fpu)
4421         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4422         unset fpu
4424         dnl *********************************************
4425         dnl *** Check which ARM version(s) we can use ***
4426         dnl *********************************************
4427         AC_MSG_CHECKING(which ARM version to use)
4429         AC_TRY_COMPILE([], [
4430                 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4431                 #error Not on ARM v5.
4432                 #endif
4433         ], [
4434                 arm_v5=yes
4436                 arm_ver=ARMv5
4437         ], [])
4439         AC_TRY_COMPILE([], [
4440                 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4441                 #error Not on ARM v6.
4442                 #endif
4443         ], [
4444                 arm_v5=yes
4445                 arm_v6=yes
4447                 arm_ver=ARMv6
4448         ], [])
4450         AC_TRY_COMPILE([], [
4451                 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4452                 #error Not on ARM v7.
4453                 #endif
4454         ], [
4455                 arm_v5=yes
4456                 arm_v6=yes
4457                 arm_v7=yes
4459                 arm_ver=ARMv7
4460         ], [])
4462         AC_MSG_RESULT($arm_ver)
4464         if test x$arm_v5 = xyes; then
4465                 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4466                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4467         fi
4469         if test x$arm_v6 = xyes; then
4470                 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4471                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4472         fi
4474         if test x$arm_v7 = xyes; then
4475                 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4476                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4477         fi
4480 if test ${TARGET} = unknown; then
4481         CPPFLAGS="$CPPFLAGS -DNO_PORT"
4482         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4485 if test "x$platform_android" = "xyes"; then
4486         case "x${TARGET}" in
4487         xARM)
4488                 case "x$arm_ver" in
4489                 xARMv5)
4490                         BTLS_SUPPORTED=yes
4491                         BTLS_PLATFORM=android-armv5
4492                         ;;
4493                 xARMv6)
4494                         BTLS_SUPPORTED=yes
4495                         BTLS_PLATFORM=android-armv6
4496                         ;;
4497                 xARMv7)
4498                         BTLS_SUPPORTED=yes
4499                         BTLS_PLATFORM=android-armv7
4500                         ;;
4501                 *)
4502                         BTLS_SUPPORTED=no
4503                         ;;
4504                 esac
4505                 ;;
4506         xARM64)
4507                 BTLS_SUPPORTED=yes
4508                 BTLS_PLATFORM=android-v8a
4509                 ;;
4510         xX86)
4511                 BTLS_SUPPORTED=yes
4512                 BTLS_PLATFORM=android-x86
4513                 ;;
4514         xAMD64)
4515                 BTLS_SUPPORTED=yes
4516                 BTLS_PLATFORM=android-x64
4517                 ;;
4518         *)
4519                 BTLS_SUPPORTED=no
4520                 ;;
4521         esac
4524 if test ${ACCESS_UNALIGNED} = no; then
4525         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4528 if test x$host_darwin = xyes; then
4529         AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4530         AS_IF(
4531                 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4532                 [AC_MSG_RESULT([no])],
4533                 [
4534                         # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4535                         AR_FLAGS="Scru"
4536                         RANLIB="$RANLIB -no_warning_for_no_symbols"
4537                         AC_MSG_RESULT([yes])
4538                 ]
4539         )
4542 case "x$libgc" in
4543         xincluded)
4544                 # Pass CPPFLAGS to libgc configure
4545                 # We should use a separate variable for this to avoid passing useless and
4546                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4547                 # This should be executed late so we pick up the final version of CPPFLAGS
4548                 # The problem with this approach, is that during a reconfigure, the main
4549                 # configure scripts gets invoked with these arguments, so we use separate
4550                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4551                 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4552                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4553                         TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4554                 fi
4555                 # Don't pass -finstrument-for-thread-suspension in, 
4556                 # if these are instrumented it will be very bad news 
4557                 # (infinite recursion, undefined parking behavior, etc)
4558                 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4559                 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\""
4560                 if test "x$support_boehm" = "xyes"; then
4561                         AC_CONFIG_SUBDIRS(libgc)
4562                 fi
4563                 ;;
4564 esac
4566 MALLOC_MEMPOOLS=no
4567 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4568         if test x$with_malloc_mempools = xyes; then
4569                 MALLOC_MEMPOOLS=yes
4570                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4571         fi
4575 DISABLE_MCS_DOCS=default
4576 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
4577         if test x$with_mcs_docs != xyes; then
4578                 DISABLE_MCS_DOCS=yes
4579         fi
4581 if test -n "$INSTALL_4_x_TRUE"; then :
4582         DISABLE_MCS_DOCS=yes
4584 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4585    DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4588 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)],[
4589         if test x$with_lazy_gc_thread_creation != xno ; then
4590                 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4591         fi
4592 ], [with_lazy_gc_thread_creation=no])
4594 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])
4595 AC_ARG_ENABLE(cooperative_suspend, [  --enable-cooperative-suspend      Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
4597 if test x$enable_cooperative_suspend = xdefault -a test x$with_cooperative_gc != xdefault; then
4598         enable_cooperative_suspend=$with_cooperative_gc
4601 if test x$enable_cooperative_suspend = xdefault; then
4602         enable_cooperative_suspend=$enable_cooperative_suspend_default
4605 if test x$enable_cooperative_suspend != xno; then
4606         AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
4609 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
4611 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=no])
4613 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
4614         AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
4617 if test x$enable_hybrid_suspend != xno ; then
4618         AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
4621 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
4623 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],[
4625         if test x$enable_checked_build != x ; then
4626                 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4627         fi
4628         for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4629                 eval "mono_checked_build_test_enable_$feature='yes'"
4630         done
4632         if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4633                 eval "mono_checked_build_test_enable_gc='yes'"
4634                 eval "mono_checked_build_test_enable_metadata='yes'"
4635                 eval "mono_checked_build_test_enable_thread='yes'"
4636                 eval "mono_checked_build_test_enable_private_types='yes'"
4637         fi
4639         if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4640                 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4641         fi
4643         if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4644                 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4645         fi
4647         if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4648                 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4649         fi
4651         if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4652                 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4653         fi
4654 ], [])
4656 AC_CHECK_HEADER([malloc.h], 
4657                 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
4658                         [Define to 1 if you have /usr/include/malloc.h.])],,)
4660 if test x"$GCC" = xyes; then
4661         # Implicit function declarations are not 64 bit safe
4662         # Do this late, since this causes lots of configure tests to fail
4663         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4664         # jay has a lot of implicit declarations
4665         JAY_CFLAGS="-Wno-implicit-function-declaration"
4668 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4669 # instead of libmono-static.a
4670 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4671    LIBMONO_LA=libmini-static.la
4672 else
4673    if test x$buildsgen = xyes; then
4674       LIBMONO_LA=libmonosgen-$API_VER.la
4675    else
4676       LIBMONO_LA=libmonoboehm-$API_VER.la
4677    fi
4679 AC_SUBST(LIBMONO_LA)
4681 dnl **************
4682 dnl ***  Btls  ***
4683 dnl **************
4685 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4686 AC_ARG_ENABLE(btls-lib, [  --disable-btls-lib             Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
4687 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
4689 if test "x$enable_btls" = "xno"; then
4690    enable_btls_lib=no
4693 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
4695 btls_android=no
4696 if test "x$enable_btls" = "xyes"; then
4697         AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4698         if test "x$CMAKE" = "xno"; then
4699                 AC_MSG_ERROR("cmake not found")
4700         fi
4702         BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4703         AC_SUBST(BTLS_ROOT)
4705         btls_arch=
4706         btls_cflags=
4707         BTLS_CMAKE_ARGS=
4709         case "$BTLS_PLATFORM" in
4710         i386)
4711                 btls_arch=i386
4712                 btls_cflags="-m32"
4713                 case $host_os in
4714                         darwin*)
4715                                 btls_cflags="$btls_cflags -arch i386"
4716                 esac
4717                 ;;
4718         x86_64)
4719                 btls_arch=x86_64
4720                 ;;
4721         arm)
4722                 btls_arch=arm
4723                 btls_cflags="-DOPENSSL_NO_ASM=1"
4724                 ;;
4725         armsoft)
4726                 btls_arch=arm
4727                 btls_cflags="-DOPENSSL_NO_ASM=1"
4728                 ;;
4729         aarch64)
4730                 btls_arch=aarch64
4731                 btls_cflags="-march=armv8-a+crypto"
4732                 ;;
4733         s390x)
4734                 btls_arch=s390x
4735                 ;;
4736         powerpc)
4737                 btls_arch=powerpc
4738                 case $host_os in
4739                         aix*|os400*)
4740                                 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
4741                                 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
4742                 esac
4743                 ;;
4744         android-armv5)
4745                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4746                 ;;
4747         android-armv6)
4748                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4749                 ;;
4750         android-armv7)
4751                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4752                 ;;
4753         android-v8a)
4754                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4755                 ;;
4756         android-x86)
4757                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4758                 ;;
4759         android-x64)
4760                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4761                 ;;
4762         *)
4763                 AC_MSG_ERROR(Invalid BTLS platform)
4764         esac
4766         if test "x$platform_android" = "xyes"; then
4767                 btls_android=yes
4768                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4769                 if test "x$with_btls_android_ndk" != "x"; then
4770                         BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4771                 else
4772                         AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4773                 fi
4774         fi
4776         if test "x$btls_arch" != "x"; then
4777                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4778         fi
4780         BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4781         AC_SUBST(BTLS_ARCH)
4782         AC_SUBST(BTLS_CFLAGS)
4783         AC_SUBST(BTLS_PLATFORM)
4784         AC_SUBST(BTLS_CMAKE_ARGS)
4786         AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4787 else
4788         enable_btls=no
4791 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4793 if test x$DISABLE_MCS_DOCS = xyes; then
4794    docs_dir=""
4795 else
4796    docs_dir=docs
4798 AC_SUBST(docs_dir)
4800 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
4801 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4802 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4804 libmono_ldflags="$libmono_ldflags $LIBS"
4806 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4807 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4808 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4809 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4810 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4811 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4812 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4813 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4814 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4815 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4816 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4817 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4818 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4819 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4820 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4821 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4822 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4823 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4825 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4827 AC_SUBST(LIBC)
4828 AC_SUBST(INTL)
4829 AC_SUBST(SQLITE)
4830 AC_SUBST(SQLITE3)
4831 AC_SUBST(X11)
4832 AC_SUBST(GDKX11)
4833 AC_SUBST(GTKX11)
4834 AC_SUBST(XINERAMA)
4835 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4836 AC_SUBST(arch_target)
4837 AC_SUBST(CFLAGS)
4838 AC_SUBST(CPPFLAGS)
4839 AC_SUBST(LDFLAGS)
4841 #This must always be defined when building the runtime
4842 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4844 mono_build_root=`pwd`
4845 AC_SUBST(mono_build_root)
4847 mono_runtime=mono/mini/mono
4848 AC_SUBST(mono_runtime)
4850 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.7.0/tools/csc.exe
4852 if test $csc_compiler = mcs; then
4853   CSC=$mcs_topdir/class/lib/build/mcs.exe
4854 else
4855   CSC=$CSC_LOCATION
4858 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
4860 mono_cfg_root=$mono_build_root/runtime
4861 if test x$host_win32 = xyes; then
4862   if test "x$cross_compiling" = "xno"; then
4863     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4864     CSC=`cygpath -m -a $CSC`
4865     CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4866   else
4867     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4868   fi
4869 else
4870   mono_cfg_dir=$mono_cfg_root/etc
4872 AC_SUBST(mono_cfg_dir)
4874 AC_SUBST(CSC)
4876 AC_CONFIG_FILES([po/mcs/Makefile.in])
4878 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4879 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4881 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4882 [   depth=../../../..
4883     case $srcdir in
4884     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4885     .) reldir=$depth ;;
4886     *) reldir=$depth/$srcdir ;;
4887     esac
4888     $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4889     cd runtime/etc/mono/1.0
4890     rm -f machine.config
4891     $LN_S $reldir/data/net_1_1/machine.config machine.config
4892     cd $depth
4893 ],[LN_S='$LN_S'])
4895 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4896 [   depth=../../../..
4897     case $srcdir in
4898     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4899     .) reldir=$depth ;;
4900     *) reldir=$depth/$srcdir ;;
4901     esac
4902     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4903     cd runtime/etc/mono/2.0
4904     rm -f machine.config
4905     $LN_S $reldir/data/net_2_0/machine.config machine.config
4906     cd $depth
4907 ],[LN_S='$LN_S'])
4909 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4910 [   depth=../../../..
4911     case $srcdir in
4912     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4913     .) reldir=$depth ;;
4914     *) reldir=$depth/$srcdir ;;
4915     esac
4916     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4917     cd runtime/etc/mono/2.0
4918     rm -f web.config
4919     $LN_S $reldir/data/net_2_0/web.config web.config
4920     cd $depth
4921 ],[LN_S='$LN_S'])
4923 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4924 [   depth=../../..
4925     case $srcdir in
4926     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4927     .) reldir=$depth ;;
4928     *) reldir=$depth/$srcdir ;;
4929     esac
4930     $ac_aux_dir/install-sh -d runtime/etc/mono/
4931     cd runtime/etc/mono/
4932     rm -f browscap.ini
4933     $LN_S $reldir/data/browscap.ini browscap.ini
4934     cd $depth
4935 ],[LN_S='$LN_S'])
4937 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4938 [   depth=../../../../..
4939     case $srcdir in
4940     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4941     .) reldir=$depth ;;
4942     *) reldir=$depth/$srcdir ;;
4943     esac
4944     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4945     cd runtime/etc/mono/2.0/Browsers
4946     rm -f Compat.browser
4947     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4948     cd $depth
4949 ],[LN_S='$LN_S'])
4951 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4952 [   depth=../../../../..
4953     case $srcdir in
4954     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4955     .) reldir=$depth ;;
4956     *) reldir=$depth/$srcdir ;;
4957     esac
4958     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4959     cd runtime/etc/mono/4.0/Browsers
4960     rm -f Compat.browser
4961     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4962     cd $depth
4963 ],[LN_S='$LN_S'])
4965 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4966 [   depth=../../../../..
4967     case $srcdir in
4968     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4969     .) reldir=$depth ;;
4970     *) reldir=$depth/$srcdir ;;
4971     esac
4972     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4973     cd runtime/etc/mono/4.5/Browsers
4974     rm -f Compat.browser
4975     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4976     cd $depth
4977 ],[LN_S='$LN_S'])
4979 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4980 [   depth=../../../..
4981     case $srcdir in
4982     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4983     .) reldir=$depth ;;
4984     *) reldir=$depth/$srcdir ;;
4985     esac
4986     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4987     cd runtime/etc/mono/4.0
4988     rm -f machine.config
4989     $LN_S $reldir/data/net_4_0/machine.config machine.config
4990     cd $depth
4991 ],[LN_S='$LN_S'])
4993 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4994 [   depth=../../../..
4995     case $srcdir in
4996     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4997     .) reldir=$depth ;;
4998     *) reldir=$depth/$srcdir ;;
4999     esac
5000     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5001     cd runtime/etc/mono/4.0
5002     rm -f web.config
5003     $LN_S $reldir/data/net_4_0/web.config web.config
5004     cd $depth
5005 ],[LN_S='$LN_S'])
5007 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5008 [   depth=../../../..
5009     case $srcdir in
5010     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5011     .) reldir=$depth ;;
5012     *) reldir=$depth/$srcdir ;;
5013     esac
5014     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5015     cd runtime/etc/mono/4.5
5016     rm -f machine.config
5017     $LN_S $reldir/data/net_4_5/machine.config machine.config
5018     cd $depth
5019 ],[LN_S='$LN_S'])
5021 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5022 [   depth=../../../..
5023     case $srcdir in
5024     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5025     .) reldir=$depth ;;
5026     *) reldir=$depth/$srcdir ;;
5027     esac
5028     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5029     cd runtime/etc/mono/4.5
5030     rm -f web.config
5031     $LN_S $reldir/data/net_4_5/web.config web.config
5032     cd $depth
5033 ],[LN_S='$LN_S'])
5035 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])
5036 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])
5038 AC_OUTPUT([
5039 Makefile
5040 mono-uninstalled.pc
5041 acceptance-tests/Makefile
5042 llvm/Makefile
5043 scripts/mono-find-provides
5044 scripts/mono-find-requires
5045 mk/Makefile
5046 mono/Makefile
5047 mono/btls/Makefile
5048 mono/utils/Makefile
5049 mono/utils/jemalloc/Makefile
5050 mono/metadata/Makefile
5051 mono/dis/Makefile
5052 mono/cil/Makefile
5053 mono/arch/Makefile
5054 mono/arch/x86/Makefile
5055 mono/arch/amd64/Makefile
5056 mono/arch/ppc/Makefile
5057 mono/arch/sparc/Makefile
5058 mono/arch/s390x/Makefile
5059 mono/arch/arm/Makefile
5060 mono/arch/arm64/Makefile
5061 mono/arch/mips/Makefile
5062 mono/sgen/Makefile
5063 mono/tests/Makefile
5064 mono/tests/tests-config
5065 mono/tests/gc-descriptors/Makefile
5066 mono/tests/testing_gac/Makefile
5067 mono/unit-tests/Makefile
5068 mono/benchmark/Makefile
5069 mono/mini/Makefile
5070 mono/profiler/Makefile
5071 mono/eglib/Makefile
5072 mono/eglib/eglib-config.h
5073 m4/Makefile
5074 ikvm-native/Makefile
5075 scripts/Makefile
5076 man/Makefile
5077 docs/Makefile
5078 data/Makefile
5079 data/net_2_0/Makefile
5080 data/net_4_0/Makefile
5081 data/net_4_5/Makefile
5082 data/net_2_0/Browsers/Makefile
5083 data/net_4_0/Browsers/Makefile
5084 data/net_4_5/Browsers/Makefile
5085 data/mint.pc
5086 data/mono-2.pc
5087 data/monosgen-2.pc
5088 data/mono.pc
5089 data/mono-cairo.pc
5090 data/mono-nunit.pc
5091 data/mono-options.pc
5092 data/mono-lineeditor.pc
5093 data/monodoc.pc
5094 data/dotnet.pc
5095 data/dotnet35.pc
5096 data/wcf.pc
5097 data/cecil.pc
5098 data/system.web.extensions_1.0.pc
5099 data/system.web.extensions.design_1.0.pc
5100 data/system.web.mvc.pc
5101 data/system.web.mvc2.pc
5102 data/system.web.mvc3.pc
5103 data/aspnetwebstack.pc
5104 data/reactive.pc
5105 samples/Makefile
5106 support/Makefile
5107 data/config
5108 tools/Makefile
5109 tools/locale-builder/Makefile
5110 tools/sgen/Makefile
5111 tools/monograph/Makefile
5112 tools/pedump/Makefile
5113 runtime/Makefile
5114 msvc/Makefile
5115 po/Makefile
5118 # Update all submodules recursively to ensure everything is checked out
5119 $srcdir/scripts/update_submodules.sh
5121 if test x$host_win32 = xyes; then
5122    # Get rid of 'cyg' prefixes in library names
5123    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5124    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5125    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5126    # executable doesn't work...
5127    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5130 if test x$host_darwin = xyes; then
5131    # This doesn't seem to be required and it slows down parallel builds
5132    sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5136   case $prefix in
5137   NONE) prefix=$ac_default_prefix ;;
5138   esac
5139   case $exec_prefix in
5140   NONE) exec_prefix='${prefix}' ;;
5141   esac
5143   #
5144   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
5145   # any existing config.make.  This allows people to share the same source tree
5146   # with different build directories, one native and one cross
5147   #
5148   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5150     test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5152     echo "prefix=$prefix" > $mcs_topdir/build/config.make
5153     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5154     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5155     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5156     echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5157     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5158     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5159     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5160     echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5162     case $INSTALL in
5163     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5164     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5165     esac
5167     echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5169     export VERSION
5170     [myver=$($AWK 'BEGIN {
5171       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5172       if(length(vsplit [1]) > 4) {
5173         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5174       }
5175       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5176     }')]
5178     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5179     echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5181     if test x$host_darwin = xyes; then
5182       echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
5183       echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
5184       echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
5185     elif test x$host_win32 = xyes; then
5186       echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5187       echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5188       echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
5189     else
5190       echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5191       echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5192       echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5193     fi
5195     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5196       echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5197     fi
5199         if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5200            enable_system_aot=yes
5201         fi
5203     if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5204       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5205     fi
5207     if test x$DISABLE_MCS_DOCS = xyes; then
5208       echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5209     fi
5211     if test x$has_extension_module != xno; then
5212         echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5213     fi
5214     
5215     echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5216     
5217     if test "x$test_bcl_opt" = "xyes"; then    
5218       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5219     fi
5221     echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5223     if test $csc_compiler = mcs; then
5224       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5225     fi
5227     if test "x$AOT_BUILD_FLAGS" != "x" ; then
5228       echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5229       echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5230       echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5231     fi
5233     if test "x$AOT_MODE" != "x" ; then
5234       echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5235     fi
5237     if test "x$enable_btls" = "xyes"; then
5238       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5239     fi
5241   fi
5245 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5247 btls_platform_string=
5248 if test x$enable_btls = xyes; then
5249         if test x$btls_android = xyes; then
5250                 btls_platform_string=" (android:$BTLS_PLATFORM)"
5251         else
5252                 btls_platform_string=" ($BTLS_PLATFORM)"
5253         fi
5256 echo "
5257         mcs source:    $mcsdir
5258         C# Compiler:   $csc_compiler
5260    Engine:
5261         Host:          $host
5262         Target:        $target
5263         GC:            $gc_msg 
5264         TLS:           $with_tls
5265         SIGALTSTACK:   $with_sigaltstack
5266         Engine:        $jit_status
5267         BigArrays:     $enable_big_arrays
5268         DTrace:        $enable_dtrace
5269         LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5270         Spectre:       $spectre_mitigation_status
5272    Libraries:
5273         .NET 4.x:        $with_profile4_x
5274         Xamarin.Android: $with_monodroid
5275         Xamarin.iOS:     $with_monotouch
5276         Xamarin.WatchOS: $with_monotouch_watch
5277         Xamarin.TVOS:    $with_monotouch_tv
5278         Xamarin.Mac:     $with_xammac
5279         Windows AOT:     $with_winaot
5280         Orbis:           $with_orbis
5281         Unreal:          $with_unreal
5282         WebAssembly:     $with_wasm
5283         Test profiles:   AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5284         JNI support:     $jdk_headers_found
5285         libgdiplus:      $libgdiplus_msg
5286         zlib:            $zlib_msg
5287         BTLS:            $enable_btls$btls_platform_string
5288         jemalloc:        $with_jemalloc (always use: $with_jemalloc_always)
5289         $disabled
5291 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5292    AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)