Use guchar instead of unsigned char for brevity/style. (#8717)
[mono-project.git] / configure.ac
blob61f0f1f892fa79b8b63b85808a8eda7f52975d20
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 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
4192    GPOINTER_TO_INT="((gint) (ptr))"
4193    GPOINTER_TO_UINT="((guint) (ptr))"
4194    GINT_TO_POINTER="((gpointer) (v))"
4195    GUINT_TO_POINTER="((gpointer) (v))"
4196    GSIZE="int"
4197    GSIZE_FORMAT='"u"'
4198 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
4199    GPOINTER_TO_INT="((gint)(long) (ptr))"
4200    GPOINTER_TO_UINT="((guint)(long) (ptr))"
4201    GINT_TO_POINTER="((gpointer)(glong) (v))"
4202    GUINT_TO_POINTER="((gpointer)(gulong) (v))"
4203    GSIZE="long"
4204    GSIZE_FORMAT='"lu"'
4205 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
4206    GPOINTER_TO_INT="((gint)(long long) (ptr))"
4207    GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
4208    GINT_TO_POINTER="((gpointer)(long long) (v))"
4209    GUINT_TO_POINTER="((gpointer)(unsigned long long) (v))"
4210    GSIZE="long long"
4211    GSIZE_FORMAT='"I64u"'
4212 else
4213    AC_MSG_ERROR([unsupported pointer size])
4216 AC_SUBST(GPOINTER_TO_INT)
4217 AC_SUBST(GPOINTER_TO_UINT)
4218 AC_SUBST(GINT_TO_POINTER)
4219 AC_SUBST(GUINT_TO_POINTER)
4220 AC_SUBST(GSIZE)
4221 AC_SUBST(GSIZE_FORMAT)
4222 AC_SUBST(G_GUINT64_FORMAT)
4223 AC_SUBST(G_GINT64_FORMAT)
4224 AC_SUBST(G_GUINT32_FORMAT)
4225 AC_SUBST(G_GINT32_FORMAT)
4228 # END OF EGLIB CHECKS
4231 AC_ARG_WITH([libgdiplus],
4232         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4233         [], [with_libgdiplus=installed])
4235 # default install location
4236 libgdiplus_install_loc=libgdiplus${libsuffix}
4237 case "$host" in
4238     *-*-*linux*)
4239     libgdiplus_install_loc=libgdiplus${libsuffix}.0
4240     ;;
4241 esac
4243 case $with_libgdiplus in
4244     no)
4245     libgdiplus_loc=
4246     ;;
4248     installed)
4249     libgdiplus_loc=
4250     if test x$cross_compiling = xno; then
4251         if test x$host_darwin = xyes; then
4252             a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4253             if test -x $a; then
4254               libgdiplus_install_loc=$a
4255               libgdiplus_loc=$a
4256             fi
4257         fi
4258     fi
4259     ;;
4261     yes|sibling)
4262     libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4263     ;;
4265     /*) # absolute path, assume it is an install location
4266     libgdiplus_loc=$with_libgdiplus
4267     libgdiplus_install_loc=$with_libgdiplus
4268     ;;
4270     *)
4271     libgdiplus_loc=`pwd`/$with_libgdiplus
4272     ;;
4273 esac
4274 AC_SUBST(libgdiplus_loc)
4275 AC_SUBST(libgdiplus_install_loc)
4277 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)
4278 if test "x$icall_symbol_map" = "xyes"; then
4279    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4282 AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4283 if test "x$icall_export" = "xyes"; then
4284    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4287 AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4288 if test "x$icall_tables" = "xno"; then
4289    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4292 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4294 if test "x$with_tls" = "x__thread"; then
4295         AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4296         # Pass the information to libgc
4297         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4298         AC_MSG_CHECKING(if the tls_model attribute is supported)
4299         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4300                 ], [
4301                         AC_MSG_RESULT(yes)
4302                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4303                 ], [
4304                         AC_MSG_RESULT(no)
4305         ])
4308 if test ${TARGET} = ARM; then
4309         dnl ******************************************
4310         dnl *** Check to see what FPU is available ***
4311         dnl ******************************************
4312         AC_MSG_CHECKING(which FPU to use)
4314         #
4315         # This is a bit tricky:
4316         #
4317         # if (__ARM_PCS_VFP) {
4318         #       /* mfloat-abi=hard == VFP with hard ABI */
4319         # } elif (!__SOFTFP__) {
4320         #       /* mfloat-abi=softfp == VFP with soft ABI */
4321         # } else {
4322         #       /* mfloat-abi=soft == no VFP */
4323         # }
4324         #
4325         # The exception is iOS (w/ GCC) where none of the above
4326         # are defined (but iOS always uses the 'softfp' ABI).
4327         #
4328         # No support for FPA.
4329         #
4331         fpu=NONE
4333         # iOS GCC always uses the 'softfp' ABI.
4334         if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4335                 fpu=VFP
4336         fi
4338         # Are we using the 'hard' ABI?
4339         if test x$fpu = xNONE; then
4340                 AC_TRY_COMPILE([], [
4341                         #ifndef __ARM_PCS_VFP
4342                         #error "Float ABI is not 'hard'"
4343                         #endif
4344                 ], [
4345                         fpu=VFP_HARD
4346                 ], [
4347                         fpu=NONE
4348                 ])
4349         fi
4351         # No 'hard' ABI. 'soft' or 'softfp'?
4352         if test x$fpu = xNONE; then
4353                 AC_TRY_COMPILE([], [
4354                         #ifdef __SOFTFP__
4355                         #error "Float ABI is not 'softfp'"
4356                         #endif
4357                 ], [
4358                         fpu=VFP
4359                 ], [
4360                         fpu=NONE
4361                 ])
4362         fi
4364         if test x$arm_fpu != x; then
4365            fpu=$arm_fpu
4366         fi
4368         AC_MSG_RESULT($fpu)
4369         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4370         unset fpu
4372         dnl *********************************************
4373         dnl *** Check which ARM version(s) we can use ***
4374         dnl *********************************************
4375         AC_MSG_CHECKING(which ARM version to use)
4377         AC_TRY_COMPILE([], [
4378                 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4379                 #error Not on ARM v5.
4380                 #endif
4381         ], [
4382                 arm_v5=yes
4384                 arm_ver=ARMv5
4385         ], [])
4387         AC_TRY_COMPILE([], [
4388                 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4389                 #error Not on ARM v6.
4390                 #endif
4391         ], [
4392                 arm_v5=yes
4393                 arm_v6=yes
4395                 arm_ver=ARMv6
4396         ], [])
4398         AC_TRY_COMPILE([], [
4399                 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4400                 #error Not on ARM v7.
4401                 #endif
4402         ], [
4403                 arm_v5=yes
4404                 arm_v6=yes
4405                 arm_v7=yes
4407                 arm_ver=ARMv7
4408         ], [])
4410         AC_MSG_RESULT($arm_ver)
4412         if test x$arm_v5 = xyes; then
4413                 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4414                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4415         fi
4417         if test x$arm_v6 = xyes; then
4418                 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4419                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4420         fi
4422         if test x$arm_v7 = xyes; then
4423                 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4424                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4425         fi
4428 if test ${TARGET} = unknown; then
4429         CPPFLAGS="$CPPFLAGS -DNO_PORT"
4430         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4433 if test "x$platform_android" = "xyes"; then
4434         case "x${TARGET}" in
4435         xARM)
4436                 case "x$arm_ver" in
4437                 xARMv5)
4438                         BTLS_SUPPORTED=yes
4439                         BTLS_PLATFORM=android-armv5
4440                         ;;
4441                 xARMv6)
4442                         BTLS_SUPPORTED=yes
4443                         BTLS_PLATFORM=android-armv6
4444                         ;;
4445                 xARMv7)
4446                         BTLS_SUPPORTED=yes
4447                         BTLS_PLATFORM=android-armv7
4448                         ;;
4449                 *)
4450                         BTLS_SUPPORTED=no
4451                         ;;
4452                 esac
4453                 ;;
4454         xARM64)
4455                 BTLS_SUPPORTED=yes
4456                 BTLS_PLATFORM=android-v8a
4457                 ;;
4458         xX86)
4459                 BTLS_SUPPORTED=yes
4460                 BTLS_PLATFORM=android-x86
4461                 ;;
4462         xAMD64)
4463                 BTLS_SUPPORTED=yes
4464                 BTLS_PLATFORM=android-x64
4465                 ;;
4466         *)
4467                 BTLS_SUPPORTED=no
4468                 ;;
4469         esac
4472 if test ${ACCESS_UNALIGNED} = no; then
4473         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4476 if test x$host_darwin = xyes; then
4477         AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4478         AS_IF(
4479                 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4480                 [AC_MSG_RESULT([no])],
4481                 [
4482                         # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4483                         AR_FLAGS="Scru"
4484                         RANLIB="$RANLIB -no_warning_for_no_symbols"
4485                         AC_MSG_RESULT([yes])
4486                 ]
4487         )
4490 case "x$libgc" in
4491         xincluded)
4492                 # Pass CPPFLAGS to libgc configure
4493                 # We should use a separate variable for this to avoid passing useless and
4494                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4495                 # This should be executed late so we pick up the final version of CPPFLAGS
4496                 # The problem with this approach, is that during a reconfigure, the main
4497                 # configure scripts gets invoked with these arguments, so we use separate
4498                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4499                 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4500                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4501                         TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4502                 fi
4503                 # Don't pass -finstrument-for-thread-suspension in, 
4504                 # if these are instrumented it will be very bad news 
4505                 # (infinite recursion, undefined parking behavior, etc)
4506                 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4507                 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\""
4508                 if test "x$support_boehm" = "xyes"; then
4509                         AC_CONFIG_SUBDIRS(libgc)
4510                 fi
4511                 ;;
4512 esac
4514 MALLOC_MEMPOOLS=no
4515 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4516         if test x$with_malloc_mempools = xyes; then
4517                 MALLOC_MEMPOOLS=yes
4518                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4519         fi
4523 DISABLE_MCS_DOCS=default
4524 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
4525         if test x$with_mcs_docs != xyes; then
4526                 DISABLE_MCS_DOCS=yes
4527         fi
4529 if test -n "$INSTALL_4_x_TRUE"; then :
4530         DISABLE_MCS_DOCS=yes
4532 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4533    DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4536 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)],[
4537         if test x$with_lazy_gc_thread_creation != xno ; then
4538                 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4539         fi
4540 ], [with_lazy_gc_thread_creation=no])
4542 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])
4543 AC_ARG_ENABLE(cooperative_suspend, [  --enable-cooperative-suspend      Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
4545 if test x$enable_cooperative_suspend = xdefault -a test x$with_cooperative_gc != xdefault; then
4546         enable_cooperative_suspend=$with_cooperative_gc
4549 if test x$enable_cooperative_suspend = xdefault; then
4550         enable_cooperative_suspend=$enable_cooperative_suspend_default
4553 if test x$enable_cooperative_suspend != xno; then
4554         AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
4557 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
4559 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])
4561 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
4562         AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
4565 if test x$enable_hybrid_suspend != xno ; then
4566         AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
4569 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
4571 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],[
4573         if test x$enable_checked_build != x ; then
4574                 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4575         fi
4576         for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4577                 eval "mono_checked_build_test_enable_$feature='yes'"
4578         done
4580         if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4581                 eval "mono_checked_build_test_enable_gc='yes'"
4582                 eval "mono_checked_build_test_enable_metadata='yes'"
4583                 eval "mono_checked_build_test_enable_thread='yes'"
4584                 eval "mono_checked_build_test_enable_private_types='yes'"
4585         fi
4587         if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4588                 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4589         fi
4591         if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4592                 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4593         fi
4595         if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4596                 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4597         fi
4599         if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4600                 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4601         fi
4602 ], [])
4604 AC_CHECK_HEADER([malloc.h], 
4605                 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
4606                         [Define to 1 if you have /usr/include/malloc.h.])],,)
4608 if test x"$GCC" = xyes; then
4609         # Implicit function declarations are not 64 bit safe
4610         # Do this late, since this causes lots of configure tests to fail
4611         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4612         # jay has a lot of implicit declarations
4613         JAY_CFLAGS="-Wno-implicit-function-declaration"
4616 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4617 # instead of libmono-static.a
4618 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4619    LIBMONO_LA=libmini-static.la
4620 else
4621    if test x$buildsgen = xyes; then
4622       LIBMONO_LA=libmonosgen-$API_VER.la
4623    else
4624       LIBMONO_LA=libmonoboehm-$API_VER.la
4625    fi
4627 AC_SUBST(LIBMONO_LA)
4629 dnl **************
4630 dnl ***  Btls  ***
4631 dnl **************
4633 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4634 AC_ARG_ENABLE(btls-lib, [  --disable-btls-lib             Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
4635 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
4637 if test "x$enable_btls" = "xno"; then
4638    enable_btls_lib=no
4641 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
4643 btls_android=no
4644 if test "x$enable_btls" = "xyes"; then
4645         AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4646         if test "x$CMAKE" = "xno"; then
4647                 AC_MSG_ERROR("cmake not found")
4648         fi
4650         BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4651         AC_SUBST(BTLS_ROOT)
4653         btls_arch=
4654         btls_cflags=
4655         BTLS_CMAKE_ARGS=
4657         case "$BTLS_PLATFORM" in
4658         i386)
4659                 btls_arch=i386
4660                 btls_cflags="-m32"
4661                 case $host_os in
4662                         darwin*)
4663                                 btls_cflags="$btls_cflags -arch i386"
4664                 esac
4665                 ;;
4666         x86_64)
4667                 btls_arch=x86_64
4668                 ;;
4669         arm)
4670                 btls_arch=arm
4671                 btls_cflags="-DOPENSSL_NO_ASM=1"
4672                 ;;
4673         armsoft)
4674                 btls_arch=arm
4675                 btls_cflags="-DOPENSSL_NO_ASM=1"
4676                 ;;
4677         aarch64)
4678                 btls_arch=aarch64
4679                 btls_cflags="-march=armv8-a+crypto"
4680                 ;;
4681         s390x)
4682                 btls_arch=s390x
4683                 ;;
4684         powerpc)
4685                 btls_arch=powerpc
4686                 case $host_os in
4687                         aix*|os400*)
4688                                 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
4689                                 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
4690                 esac
4691                 ;;
4692         android-armv5)
4693                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4694                 ;;
4695         android-armv6)
4696                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4697                 ;;
4698         android-armv7)
4699                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4700                 ;;
4701         android-v8a)
4702                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4703                 ;;
4704         android-x86)
4705                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4706                 ;;
4707         android-x64)
4708                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4709                 ;;
4710         *)
4711                 AC_MSG_ERROR(Invalid BTLS platform)
4712         esac
4714         if test "x$platform_android" = "xyes"; then
4715                 btls_android=yes
4716                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4717                 if test "x$with_btls_android_ndk" != "x"; then
4718                         BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4719                 else
4720                         AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4721                 fi
4722         fi
4724         if test "x$btls_arch" != "x"; then
4725                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4726         fi
4728         BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4729         AC_SUBST(BTLS_ARCH)
4730         AC_SUBST(BTLS_CFLAGS)
4731         AC_SUBST(BTLS_PLATFORM)
4732         AC_SUBST(BTLS_CMAKE_ARGS)
4734         AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4735 else
4736         enable_btls=no
4739 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4741 if test x$DISABLE_MCS_DOCS = xyes; then
4742    docs_dir=""
4743 else
4744    docs_dir=docs
4746 AC_SUBST(docs_dir)
4748 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
4749 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4750 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4752 libmono_ldflags="$libmono_ldflags $LIBS"
4754 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4755 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4756 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4757 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4758 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4759 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4760 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4761 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4762 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4763 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4764 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4765 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4766 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4767 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4768 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4769 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4770 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4771 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4773 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4775 AC_SUBST(LIBC)
4776 AC_SUBST(INTL)
4777 AC_SUBST(SQLITE)
4778 AC_SUBST(SQLITE3)
4779 AC_SUBST(X11)
4780 AC_SUBST(GDKX11)
4781 AC_SUBST(GTKX11)
4782 AC_SUBST(XINERAMA)
4783 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4784 AC_SUBST(arch_target)
4785 AC_SUBST(CFLAGS)
4786 AC_SUBST(CPPFLAGS)
4787 AC_SUBST(LDFLAGS)
4789 #This must always be defined when building the runtime
4790 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4792 mono_build_root=`pwd`
4793 AC_SUBST(mono_build_root)
4795 mono_runtime=mono/mini/mono
4796 AC_SUBST(mono_runtime)
4798 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.7.0/tools/csc.exe
4800 if test $csc_compiler = mcs; then
4801   CSC=$mcs_topdir/class/lib/build/mcs.exe
4802 else
4803   CSC=$CSC_LOCATION
4806 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
4808 mono_cfg_root=$mono_build_root/runtime
4809 if test x$host_win32 = xyes; then
4810   if test "x$cross_compiling" = "xno"; then
4811     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4812     CSC=`cygpath -m -a $CSC`
4813     CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4814   else
4815     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4816   fi
4817 else
4818   mono_cfg_dir=$mono_cfg_root/etc
4820 AC_SUBST(mono_cfg_dir)
4822 AC_SUBST(CSC)
4824 AC_CONFIG_FILES([po/mcs/Makefile.in])
4826 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4827 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4829 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4830 [   depth=../../../..
4831     case $srcdir in
4832     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4833     .) reldir=$depth ;;
4834     *) reldir=$depth/$srcdir ;;
4835     esac
4836     $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4837     cd runtime/etc/mono/1.0
4838     rm -f machine.config
4839     $LN_S $reldir/data/net_1_1/machine.config machine.config
4840     cd $depth
4841 ],[LN_S='$LN_S'])
4843 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4844 [   depth=../../../..
4845     case $srcdir in
4846     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4847     .) reldir=$depth ;;
4848     *) reldir=$depth/$srcdir ;;
4849     esac
4850     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4851     cd runtime/etc/mono/2.0
4852     rm -f machine.config
4853     $LN_S $reldir/data/net_2_0/machine.config machine.config
4854     cd $depth
4855 ],[LN_S='$LN_S'])
4857 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4858 [   depth=../../../..
4859     case $srcdir in
4860     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4861     .) reldir=$depth ;;
4862     *) reldir=$depth/$srcdir ;;
4863     esac
4864     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4865     cd runtime/etc/mono/2.0
4866     rm -f web.config
4867     $LN_S $reldir/data/net_2_0/web.config web.config
4868     cd $depth
4869 ],[LN_S='$LN_S'])
4871 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4872 [   depth=../../..
4873     case $srcdir in
4874     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4875     .) reldir=$depth ;;
4876     *) reldir=$depth/$srcdir ;;
4877     esac
4878     $ac_aux_dir/install-sh -d runtime/etc/mono/
4879     cd runtime/etc/mono/
4880     rm -f browscap.ini
4881     $LN_S $reldir/data/browscap.ini browscap.ini
4882     cd $depth
4883 ],[LN_S='$LN_S'])
4885 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4886 [   depth=../../../../..
4887     case $srcdir in
4888     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4889     .) reldir=$depth ;;
4890     *) reldir=$depth/$srcdir ;;
4891     esac
4892     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4893     cd runtime/etc/mono/2.0/Browsers
4894     rm -f Compat.browser
4895     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4896     cd $depth
4897 ],[LN_S='$LN_S'])
4899 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4900 [   depth=../../../../..
4901     case $srcdir in
4902     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4903     .) reldir=$depth ;;
4904     *) reldir=$depth/$srcdir ;;
4905     esac
4906     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4907     cd runtime/etc/mono/4.0/Browsers
4908     rm -f Compat.browser
4909     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4910     cd $depth
4911 ],[LN_S='$LN_S'])
4913 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4914 [   depth=../../../../..
4915     case $srcdir in
4916     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4917     .) reldir=$depth ;;
4918     *) reldir=$depth/$srcdir ;;
4919     esac
4920     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4921     cd runtime/etc/mono/4.5/Browsers
4922     rm -f Compat.browser
4923     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4924     cd $depth
4925 ],[LN_S='$LN_S'])
4927 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4928 [   depth=../../../..
4929     case $srcdir in
4930     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4931     .) reldir=$depth ;;
4932     *) reldir=$depth/$srcdir ;;
4933     esac
4934     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4935     cd runtime/etc/mono/4.0
4936     rm -f machine.config
4937     $LN_S $reldir/data/net_4_0/machine.config machine.config
4938     cd $depth
4939 ],[LN_S='$LN_S'])
4941 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4942 [   depth=../../../..
4943     case $srcdir in
4944     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4945     .) reldir=$depth ;;
4946     *) reldir=$depth/$srcdir ;;
4947     esac
4948     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4949     cd runtime/etc/mono/4.0
4950     rm -f web.config
4951     $LN_S $reldir/data/net_4_0/web.config web.config
4952     cd $depth
4953 ],[LN_S='$LN_S'])
4955 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
4956 [   depth=../../../..
4957     case $srcdir in
4958     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4959     .) reldir=$depth ;;
4960     *) reldir=$depth/$srcdir ;;
4961     esac
4962     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4963     cd runtime/etc/mono/4.5
4964     rm -f machine.config
4965     $LN_S $reldir/data/net_4_5/machine.config machine.config
4966     cd $depth
4967 ],[LN_S='$LN_S'])
4969 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
4970 [   depth=../../../..
4971     case $srcdir in
4972     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4973     .) reldir=$depth ;;
4974     *) reldir=$depth/$srcdir ;;
4975     esac
4976     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4977     cd runtime/etc/mono/4.5
4978     rm -f web.config
4979     $LN_S $reldir/data/net_4_5/web.config web.config
4980     cd $depth
4981 ],[LN_S='$LN_S'])
4983 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])
4984 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])
4986 AC_OUTPUT([
4987 Makefile
4988 mono-uninstalled.pc
4989 acceptance-tests/Makefile
4990 llvm/Makefile
4991 scripts/mono-find-provides
4992 scripts/mono-find-requires
4993 mk/Makefile
4994 mono/Makefile
4995 mono/btls/Makefile
4996 mono/utils/Makefile
4997 mono/utils/jemalloc/Makefile
4998 mono/metadata/Makefile
4999 mono/dis/Makefile
5000 mono/cil/Makefile
5001 mono/arch/Makefile
5002 mono/arch/x86/Makefile
5003 mono/arch/amd64/Makefile
5004 mono/arch/ppc/Makefile
5005 mono/arch/sparc/Makefile
5006 mono/arch/s390x/Makefile
5007 mono/arch/arm/Makefile
5008 mono/arch/arm64/Makefile
5009 mono/arch/mips/Makefile
5010 mono/sgen/Makefile
5011 mono/tests/Makefile
5012 mono/tests/tests-config
5013 mono/tests/gc-descriptors/Makefile
5014 mono/tests/testing_gac/Makefile
5015 mono/unit-tests/Makefile
5016 mono/benchmark/Makefile
5017 mono/mini/Makefile
5018 mono/profiler/Makefile
5019 mono/eglib/Makefile
5020 mono/eglib/eglib-config.h
5021 m4/Makefile
5022 ikvm-native/Makefile
5023 scripts/Makefile
5024 man/Makefile
5025 docs/Makefile
5026 data/Makefile
5027 data/net_2_0/Makefile
5028 data/net_4_0/Makefile
5029 data/net_4_5/Makefile
5030 data/net_2_0/Browsers/Makefile
5031 data/net_4_0/Browsers/Makefile
5032 data/net_4_5/Browsers/Makefile
5033 data/mint.pc
5034 data/mono-2.pc
5035 data/monosgen-2.pc
5036 data/mono.pc
5037 data/mono-cairo.pc
5038 data/mono-nunit.pc
5039 data/mono-options.pc
5040 data/mono-lineeditor.pc
5041 data/monodoc.pc
5042 data/dotnet.pc
5043 data/dotnet35.pc
5044 data/wcf.pc
5045 data/cecil.pc
5046 data/system.web.extensions_1.0.pc
5047 data/system.web.extensions.design_1.0.pc
5048 data/system.web.mvc.pc
5049 data/system.web.mvc2.pc
5050 data/system.web.mvc3.pc
5051 data/aspnetwebstack.pc
5052 data/reactive.pc
5053 samples/Makefile
5054 support/Makefile
5055 data/config
5056 tools/Makefile
5057 tools/locale-builder/Makefile
5058 tools/sgen/Makefile
5059 tools/monograph/Makefile
5060 tools/pedump/Makefile
5061 runtime/Makefile
5062 msvc/Makefile
5063 po/Makefile
5066 # Update all submodules recursively to ensure everything is checked out
5067 $srcdir/scripts/update_submodules.sh
5069 if test x$host_win32 = xyes; then
5070    # Get rid of 'cyg' prefixes in library names
5071    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5072    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5073    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5074    # executable doesn't work...
5075    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5078 if test x$host_darwin = xyes; then
5079    # This doesn't seem to be required and it slows down parallel builds
5080    sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5084   case $prefix in
5085   NONE) prefix=$ac_default_prefix ;;
5086   esac
5087   case $exec_prefix in
5088   NONE) exec_prefix='${prefix}' ;;
5089   esac
5091   #
5092   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
5093   # any existing config.make.  This allows people to share the same source tree
5094   # with different build directories, one native and one cross
5095   #
5096   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5098     test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5100     echo "prefix=$prefix" > $mcs_topdir/build/config.make
5101     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5102     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5103     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5104     echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5105     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5106     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5107     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5108     echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5110     case $INSTALL in
5111     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5112     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5113     esac
5115     echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5117     export VERSION
5118     [myver=$($AWK 'BEGIN {
5119       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5120       if(length(vsplit [1]) > 4) {
5121         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5122       }
5123       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5124     }')]
5126     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5127     echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5129     if test x$host_darwin = xyes; then
5130       echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
5131       echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
5132       echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
5133     elif test x$host_win32 = xyes; then
5134       echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5135       echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5136       echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
5137     else
5138       echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5139       echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5140       echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5141     fi
5143     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5144       echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5145     fi
5147         if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5148            enable_system_aot=yes
5149         fi
5151     if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5152       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5153     fi
5155     if test x$DISABLE_MCS_DOCS = xyes; then
5156       echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5157     fi
5159     if test x$has_extension_module != xno; then
5160         echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5161     fi
5162     
5163     echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5164     
5165     if test "x$test_bcl_opt" = "xyes"; then    
5166       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5167     fi
5169     echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5171     if test $csc_compiler = mcs; then
5172       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5173     fi
5175     if test "x$AOT_BUILD_FLAGS" != "x" ; then
5176       echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5177       echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5178       echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5179     fi
5181     if test "x$AOT_MODE" != "x" ; then
5182       echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5183     fi
5185     if test "x$enable_btls" = "xyes"; then
5186       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5187     fi
5189   fi
5193 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5195 btls_platform_string=
5196 if test x$enable_btls = xyes; then
5197         if test x$btls_android = xyes; then
5198                 btls_platform_string=" (android:$BTLS_PLATFORM)"
5199         else
5200                 btls_platform_string=" ($BTLS_PLATFORM)"
5201         fi
5204 echo "
5205         mcs source:    $mcsdir
5206         C# Compiler:   $csc_compiler
5208    Engine:
5209         Host:          $host
5210         Target:        $target
5211         GC:            $gc_msg 
5212         TLS:           $with_tls
5213         SIGALTSTACK:   $with_sigaltstack
5214         Engine:        $jit_status
5215         BigArrays:     $enable_big_arrays
5216         DTrace:        $enable_dtrace
5217         LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5218         Spectre:       $spectre_mitigation_status
5220    Libraries:
5221         .NET 4.x:        $with_profile4_x
5222         Xamarin.Android: $with_monodroid
5223         Xamarin.iOS:     $with_monotouch
5224         Xamarin.WatchOS: $with_monotouch_watch
5225         Xamarin.TVOS:    $with_monotouch_tv
5226         Xamarin.Mac:     $with_xammac
5227         Windows AOT:     $with_winaot
5228         Orbis:           $with_orbis
5229         Unreal:          $with_unreal
5230         WebAssembly:     $with_wasm
5231         Test profiles:   AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5232         JNI support:     $jdk_headers_found
5233         libgdiplus:      $libgdiplus_msg
5234         zlib:            $zlib_msg
5235         BTLS:            $enable_btls$btls_platform_string
5236         jemalloc:        $with_jemalloc (always use: $with_jemalloc_always)
5237         $disabled
5239 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5240    AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)