Fix Windows MSI build
[mono-project.git] / configure.ac
bloba57a69a9543c755d1f025259973078137498bc72
1 # Process this file with autoconf to produce a configure script.
2 #AC_PREREQ([2.62])
4 AC_INIT(mono, [6.0.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-xz 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
23 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test]))
24 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test-bundle]))
26 API_VER=2.0
27 AC_SUBST(API_VER)
29 AC_PROG_LN_S
31 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
33 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
34 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
35 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
38 # This is the version of the corlib-runtime interface. When
39 # making changes to this interface (by changing the layout
40 # of classes the runtime knows about, changing icall signature or
41 # semantics etc), change this variable.
43 # This must be unique relative to corlib interface/semantics.
45 # Generate it with uuidgen. For example:
46 # perl -pi.bak -e "s/^MONO_CORLIB_VERSION=\S+/MONO_CORLIB_VERSION=`uuidgen`/" configure.ac
48 # There is no ordering of corlib versions, no old or new,
49 # the runtime expects an exact match.
51 MONO_CORLIB_VERSION=9032116E-BB4E-4ED5-9C71-9E5E0B0230CA
54 # Put a quoted #define in config.h.
55 # Substitute @MONO_CORLIB_VERSION@ unquoted.
57 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
58 AC_SUBST(MONO_CORLIB_VERSION)
60 case $host_os in
61 *cygwin* )
62                  echo "Run configure using ./configure --host=i686-w64-mingw32 or --host=x86_64-w64-mingw32"
63                  exit 1
64 esac
66 # In case of cygwin, override LN_S, irrespective of what it determines.
67 # The build uses cygwin, but the actual runtime doesn't.
68 case $host_os in
69 *cygwin* ) LN_S='cp -p';;
70 esac
73 # libgc defaults
75 libgc_configure_args=
77 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
78 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
79 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
80 CFLAGS_FOR_LIBGC=$CFLAGS
81 CPPFLAGS_FOR_BTLS=$CPPFLAGS
82 CFLAGS_FOR_BTLS=$CFLAGS
84 # libgc uses some deprecated APIs
85 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
88 # These are the flags that need to be stored in the mono.pc file for 
89 # compiling code that will embed Mono
91 libmono_cflags=""
92 libmono_ldflags=""
93 AC_SUBST(libmono_cflags)
94 AC_SUBST(libmono_ldflags)
96 # Variable to have relocatable .pc files (lib, or lib64)
97 # realpath isn't always available, and requires that all but the tip of the provided
98 # path exists. Fall back to the old behaviour, but realpath allows depth >1
99 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
100 # too deep for the old method to work
101 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
102 AC_SUBST(reloc_libdir)
104 # Set to yes if Unix sockets cannot be created in an anonymous namespace
105 need_link_unlink=no
107 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
108 extra_runtime_ldflags=""
110 # Thread configuration inspired by sleepycat's db
111 AC_MSG_CHECKING([host platform characteristics])
113 libgc_threads=no
114 has_dtrace=no
115 parallel_mark=yes
116 ikvm_native=yes
118 host_win32=no
119 target_win32=no
120 target_wasm=no
121 platform_android=no
122 platform_tizen=no
123 platform_ios=no
124 host_darwin=no
125 host_linux=no
127 case "$host" in
128         wasm32*)
129                 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
130                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
131                 libdl="-ldl"
132                 libgc_threads=pthreads
133                 platform_wasm=yes
134                 ;;
135         *-mingw*|*-*-cygwin*)
136                 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
137                 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
138                 host_win32=yes
139                 mono_cv_clang=no
140                 if test "x$cross_compiling" = "xno"; then
141                         if test "x$host" = "x$build" -a "x$host" = "x$target"; then
142                                 target_win32=yes
143                         fi
144                 else
145                         if test "x$host" = "x$target"; then
146                                 target_win32=yes
147                         fi
148                 fi
149                 HOST_CC="gcc"
151                 # Windows 7 or later is required
152                 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
153                 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
154                 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
155                 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
156                 libmono_cflags="-mms-bitfields -mwindows"
157                 libmono_ldflags="-mms-bitfields -mwindows"
158                 libdl=
159                 libgc_threads=win32
160                 with_sigaltstack=no
161                 with_tls=pthread
162                 with_sgen_default_concurrent=yes
163                 LN_S=cp
164                 # This forces libgc to use the DllMain based thread registration code on win32
165                 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
166                 ;;
167         *-*-*netbsd*)
168                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
169                 libmono_cflags="-D_REENTRANT"
170                 LDFLAGS="$LDFLAGS -pthread"
171                 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
172                 libmono_ldflags="-pthread"
173                 need_link_unlink=yes
174                 libdl="-ldl"
175                 libgc_threads=pthreads
176                 with_sigaltstack=no
177                 use_sigposix=yes
178                 with_sgen_default_concurrent=yes
179                 ;;
180         *-*-kfreebsd*-gnu)
181                 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
182                 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
183                 libmono_ldflags="-lpthread -pthread"
184                 libdl="-ldl"
185                 libgc_threads=pthreads
186                 need_link_unlink=yes
187                 with_sigaltstack=no
188                 use_sigposix=yes
189                 with_sgen_default_concurrent=yes
190                 ;;
191         *-*-*freebsd*)
192                 dnl For close_my_fds
193                 LDFLAGS="$LDFLAGS -lutil"
194                 if test "x$PTHREAD_CFLAGS" = "x"; then
195                         CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
196                         libmono_cflags=
197                 else
198                         CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
199                         libmono_cflags="$PTHREAD_CFLAGS"
200                 fi
201                 if test "x$PTHREAD_LIBS" = "x"; then
202                         LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
203                         libmono_ldflags="-pthread"
204                 else
205                         LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
206                         libmono_ldflags="$PTHREAD_LIBS"
207                 fi
208                 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
209                 need_link_unlink=yes
210                 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
211                 libdl=
212                 libgc_threads=pthreads
213                 use_sigposix=yes
214                 has_dtrace=yes
215                 case "$host" in
216                 aarch64-*)
217                         support_boehm=no
218                         with_gc=sgen
219                         ;;
220                 riscv*)
221                         support_boehm=no
222                         with_gc=sgen
223                         ;;
224                 esac
225                 with_sgen_default_concurrent=yes
226                 ;;
227         *-*-*openbsd*)
228                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
229                 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
230                 if test "x$disable_munmap" != "xyes"; then
231                 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
232                 fi
233                 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
234                 LDFLAGS="$LDFLAGS -pthread"
235                 need_link_unlink=yes
236                 AC_DEFINE(PTHREAD_POINTER_ID)
237                 libdl=
238                 libgc_threads=pthreads
239                 with_tls=pthread
240                 with_sigaltstack=no
241                 use_sigposix=yes
242                 with_sgen_default_concurrent=yes
243                 ;;
244         *-*-linux-android*)
245                 platform_android=yes
246                 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
247                 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
249                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
250                 if test "x$disable_munmap" != "xyes"; then
251                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
252                 fi
253                 libmono_cflags="-D_REENTRANT"
254                 libdl="-ldl"
255                 libgc_threads=pthreads
256                 use_sigposix=yes
258                 with_tls=pthread
259                 with_sigaltstack=no
260                 with_static_mono=no
262                 # Android doesn't support boehm, as it's missing <link.h>
263                 support_boehm=no
264                 with_gc=sgen
266                 # isinf(3) requires -lm
267                 LDFLAGS="$LDFLAGS -lm"
269                 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
270                 # PAGE_SIZE; breaks mono/io-layer/collection.c
271                 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
272                 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
273                 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
275                 # to bypass the underscore linker check, can't work when cross-compiling
276                 mono_cv_uscore=yes
277                 mono_cv_clang=no
278                 ;;
279         *-*-linux*)
280                 host_linux=yes
281                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
282                 if test "x$disable_munmap" != "xyes"; then
283                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
284                 fi
285                 libmono_cflags="-D_REENTRANT"
286                 libdl="-ldl"
287                 libgc_threads=pthreads
288                 use_sigposix=yes
289                 if test "x$cross_compiling" != "xno"; then
290                         # to bypass the underscore linker check, not
291                         # available during cross-compilation
292                         mono_cv_uscore=no
293                 fi
294                 case "$host" in
295                 *-tizen-linux-*)
296                         platform_tizen=yes
297                         ;;
298                 esac
299                 case "$host" in
300                 aarch64-*)
301                         support_boehm=no
302                         with_gc=sgen
303                         ;;
304                 powerpc*-*-linux*)
305                         # https://bugzilla.novell.com/show_bug.cgi?id=504411
306                         disable_munmap=yes
307                         ;;
308                 riscv*)
309                         support_boehm=no
310                         with_gc=sgen
311                         ;;
312                 esac
313                 with_sgen_default_concurrent=yes
314                 ;;
315         *-*-nacl*)
316                 echo "nacl no longer supported."
317                 exit 1
318                 ;;
319         *-*-hpux*)
320                 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
321                 # +ESdbgasm only valid on bundled cc on RISC
322                 # silently ignored for ia64
323                 if test $GCC != "yes"; then
324                         CFLAGS="$CFLAGS +ESdbgasm"
325                         # Arrange for run-time dereferencing of null
326                         # pointers to produce a SIGSEGV signal.
327                         LDFLAGS="$LDFLAGS -z"
328                 fi
329                 CFLAGS="$CFLAGS +ESdbgasm"
330                 LDFLAGS="$LDFLAGS -z"
331                 libmono_cflags="-D_REENTRANT"
332                 libmono_ldflags="-lpthread"
333                 libgc_threads=pthreads
334                 need_link_unlink=yes
335                 use_sigposix=yes
336                 ;;
337         *-*-solaris*)
338                 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
339                 need_link_unlink=yes
340                 libmono_cflags="-D_REENTRANT"
341                 libgc_threads=pthreads
342                 has_dtrace=yes
343                 use_sigposix=yes
344                 enable_solaris_tar_check=yes
345                 ;;
346         *-*-darwin*)
347                 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
348                 host_darwin=yes
349                 target_mach=yes
350                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
351                 libmono_cflags="-D_THREAD_SAFE"
352                 need_link_unlink=yes
353                 AC_DEFINE(PTHREAD_POINTER_ID)
354                 AC_DEFINE(USE_MACH_SEMA, 1, [...])
355                 libdl=
356                 libgc_threads=pthreads
357                 has_dtrace=yes
358                 if test "x$cross_compiling" = "xyes"; then
359                         has_broken_apple_cpp=yes
360                 fi
361                 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
362                 dnl its gcc defaults to 64-bit mode.  They have also deprecated the usage of ucontext
363                 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
364                 case "$host" in
365                         dnl Snow Leopard and newer config.guess reports as this
366                         i*86-*-darwin*)
367                                 BROKEN_DARWIN_FLAGS="-arch i386"
368                                 BROKEN_DARWIN_CPPFLAGS=""
369                                 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
370                                 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
371                                 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
372                                 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
373                                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
374                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
375                                 with_sgen_default_concurrent=yes
376                                 ;;
377                         x*64-*-darwin*)
378                                 with_sgen_default_concurrent=yes
379                                 ;;
380                         arm*-darwin*)
381                                 platform_ios=yes
382                                 has_dtrace=no
383                                 ;;
384                         aarch64*-darwin*)
385                                 platform_ios=yes
386                                 ;;
387                 esac
388                 ;;
389         *-*-haiku*)
390                 dnl BSD_SOURCE is for getifaddrs
391                 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
392                 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
393                 libdl=
394                 LIBS="$LIBS -lnetwork -ltextencoding"
395                 need_link_unlink=yes
396                 AC_DEFINE(PTHREAD_POINTER_ID)
397                 dnl Haiku does not support static TLS with __thread
398                 with_tls=pthread
399                 libgc_threads=pthreads
400                 use_sigposix=yes
401                 with_sigaltstack=no
402                 ;;
403         *-*-aix*|*-*-os400*)
404                 dnl Set up a 64-bit build
405                 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
406                 LDFLAGS="-maix64"
407                 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
408                 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
409                 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
410                 dnl specifiy 64-bit mode for tools.
411                 AR="/usr/bin/ar -X64"
412                 NM="/usr/bin/nm -X64"
413                 dnl SGen is the future (changes to Boehm support code would be
414                 dnl required if you wish to re-enable Boehm)
415                 support_boehm=no
416                 with_gc=sgen
417                 need_link_unlink=yes
418                 use_sigposix=yes
419                 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
420                 with_sigaltstack=no
421                 dnl use pthread TLS, __thread has issues with the compiler flags we use
422                 with_tls=pthread
423                 dnl ppc Linux is the same? test further
424                 disable_munmap=yes
425                 ;;
426         *)
427                 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
428                 libdl="-ldl"
429                 ;;
430 esac
432 AC_MSG_RESULT(ok)
434 if test x$need_link_unlink = xyes; then
435    AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
438 if test x$host_win32 = xyes; then
439    AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
442 if test x$target_win32 = xyes; then
443    AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
446 if test x$host_darwin = xyes; then
447    AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
450 # Defined for all targets/platforms using classic Windows API support.
451 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
452 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
454 AC_SUBST(extra_runtime_ldflags)
455 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
456 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
457 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
458 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
459 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
460 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
461 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
462 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
463 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
465 if test -z "$HOST_DARWIN_TRUE"; then :
466 PLATFORM_AOT_SUFFIX=.dylib
469 if test -z "$HOST_LINUX_TRUE"; then :
470 PLATFORM_AOT_SUFFIX=.so
473 if test -z "$HOST_WIN32_TRUE"; then :
474 PLATFORM_AOT_SUFFIX=.dll
477 AC_SUBST(PLATFORM_AOT_SUFFIX)
479 if test -z "$HOST_WASM_TRUE"; then :
480 AC_DEFINE(HAVE_UTIME)
481 AC_DEFINE(HAVE_UTIMES)
484 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
486 AC_CHECK_TOOL(CC, gcc, gcc)
487 AC_PROG_CC
488 AC_CHECK_TOOL(CXX, g++, g++)
489 AC_PROG_CXX
490 AM_PROG_AS
491 AC_PROG_INSTALL
492 AC_PROG_AWK
493 AM_PROG_CC_C_O
494 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
495 : ${CCAS='$(CC)'}
496 # Set ASFLAGS if not already set.
497 : ${CCASFLAGS='$(CFLAGS)'}
498 AC_SUBST(CCAS)
499 AC_SUBST(CCASFLAGS)
501 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
502 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
503 if test "x$CXX" = "xg++"; then
504         if test "x$GXX" != "xyes"; then
505                 # automake/libtool is so broken, it requires g++ even if the c++ sources
506                 # are inside automake conditionals
507                 AC_MSG_ERROR([You need to install g++])
508         fi
511 dnl may require a specific autoconf version
512 dnl AC_PROG_CC_FOR_BUILD
513 dnl CC_FOR_BUILD not automatically detected
514 CC_FOR_BUILD=$CC
515 CFLAGS_FOR_BUILD=$CFLAGS
516 BUILD_EXEEXT=
517 if test "x$cross_compiling" = "xyes"; then
518         CC_FOR_BUILD=cc
519         CFLAGS_FOR_BUILD=
520         BUILD_EXEEXT=""
522 AC_SUBST(CC_FOR_BUILD)
523 AC_SUBST(CFLAGS_FOR_BUILD)
524 AC_SUBST(HOST_CC)
525 AC_SUBST(BUILD_EXEEXT)
527 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
528 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
530 # Set STDC_HEADERS
531 AC_HEADER_STDC
532 AC_LIBTOOL_WIN32_DLL
533 # This causes monodis to not link correctly
534 #AC_DISABLE_FAST_INSTALL
536 #lookup makedev() header
537 AC_HEADER_MAJOR
539 AM_PROG_LIBTOOL
540 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
541 DOLT
543 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
544 AC_SUBST(export_ldflags)
546 # Test whenever ld supports -version-script
547 AC_PROG_LD
548 AC_PROG_LD_GNU
550 AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h sys/prctl.h copyfile.h)
551 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)
552 AC_CHECK_HEADER(unistd.h, [HAVE_UNISTD_H=1], [HAVE_UNISTD_H=0])
553 AC_SUBST(HAVE_UNISTD_H)
554 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
555                   [], [], [#include <stddef.h>
556                   #include <sys/socket.h>
557                   #include <linux/socket.h>])
559 AC_CHECK_HEADERS(sys/user.h, [], [],
561 #ifdef HAVE_SYS_PARAM_H
562 # include <sys/param.h>
563 #endif
566 AC_CHECK_HEADERS(linux/serial.h)
568 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
569 if test x$have_zlib = xyes; then
570    AC_TRY_COMPILE([#include <zlib.h>], [
571    #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
572    #else
573    #error No good zlib found
574    #endif
575    ],[
576         AC_MSG_RESULT(Using system zlib)
577         zlib_msg="system zlib"
578         AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
579    ],[
580         AC_MSG_RESULT(Using embedded zlib)
581         have_zlib=no
582         zlib_msg="bundled zlib"
583    ])
586 AC_ARG_WITH(static-zlib, [  --with-static-zlib=PATH    use the specified static zlib instead of -lz],[STATIC_ZLIB_PATH=$with_static_zlib],[STATIC_ZLIB_PATH=])
587 if test "x$STATIC_ZLIB_PATH" != "x"; then
588         have_static_zlib=yes
589         AC_SUBST(STATIC_ZLIB_PATH)
592 AM_CONDITIONAL(HAVE_STATIC_ZLIB, test x$have_static_zlib = xyes)
593 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
594 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
596 # for mono/metadata/debug-symfile.c
597 AC_CHECK_HEADERS(elf.h)
599 # for support
600 AC_CHECK_HEADERS(poll.h)
601 AC_CHECK_HEADERS(sys/poll.h)
602 AC_CHECK_HEADERS(sys/wait.h)
603 AC_CHECK_HEADERS(grp.h)
604 AC_CHECK_HEADERS(syslog.h)
605 AC_CHECK_FUNCS(vsyslog)
607 # for mono/dis
608 AC_CHECK_HEADERS(wchar.h)
610 # for Linux statfs support
611 AC_CHECK_HEADERS(linux/magic.h)
613 # For Android NDK unified headers
614 if test x$platform_android = xyes; then
615         AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
616         AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
617         AC_CHECK_HEADERS(android/ndk-version.h)
619         # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
620         # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
621         # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
622         # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
623         # doesn't contain the required definitions (NDK 14)
624         if test x$have_android_signal_inlines = xyes; then
625                 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
626                 AC_COMPILE_IFELSE([
627                         AC_LANG_PROGRAM([#include <signal.h>
628                                 #include <android/legacy_signal_inlines.h>],[
629                                 int i;
630                                 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
631                                 }
632                         ])],[
633                                 AC_MSG_RESULT(yes)
634                                 android_sigrtminmax_work=yes
635                         ],[
636                                 AC_MSG_RESULT(no)
637                                 android_sigrtminmax_work=no
638                         ]
639                 )
641                 if test x$android_sigrtminmax_work = xno; then
642                         AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
643                 fi
644         fi
646         # Attempt to detect whether we're using Android NDK unified headers
647         AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
648         AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
650         android_unified_headers=no
651         if test x$have_android_api_level = xyes; then
652                 if test x$have_android_versioning = xyes; then
653                         AC_MSG_CHECKING([whether using Android NDK unified headers])
655                         # Both macros are defined only in the NDK unified headers
656                         AC_COMPILE_IFELSE([
657                                 AC_LANG_PROGRAM([
658                                         #include <android/api-level.h>
659                                         #include <android/versioning.h>
660                                 ],[
661                                         #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
662                                         #else
663                                                 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
664                                         #endif
665                                 ])],[
666                                         AC_MSG_RESULT(yes)
667                                         android_unified_headers=yes
668                                 ],[
669                                         AC_MSG_RESULT(no)
670                                         android_unified_headers=no
671                                 ]
672                         )
673                 fi
674         fi
676         if test x$android_unified_headers = xyes; then
677                 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
678         fi
679 fi # Android
681 # not 64 bit clean in cross-compile
682 AC_CHECK_SIZEOF(void *)
683 AC_CHECK_SIZEOF(long)
685 AC_CHECK_SIZEOF(int)
686 AC_CHECK_SIZEOF(long long)
688 AC_CACHE_CHECK([for clang],
689         mono_cv_clang,[
690         AC_TRY_COMPILE([], [
691                 #ifdef __clang__
692                 #else
693                 #error "FAILED"
694                 #endif
695         ],
696         [mono_cv_clang=yes],
697         [mono_cv_clang=no],
698         [])
701 AC_ARG_ENABLE(visibility-hidden,
702 [  --disable-visibility-hidden    disable usage of -fvisiblity=hidden],
703    disable_visibility_hidden=yes, disable_visibility_hidden=no)
705 WARN=''
706 if test x"$GCC" = xyes; then
707                 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
708                 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
710                 # We require C99 with some GNU extensions, e.g. `linux` macro
711                 CFLAGS="$CFLAGS -std=gnu99"
713                 # The runtime code does not respect ANSI C strict aliasing rules
714                 CFLAGS="$CFLAGS -fno-strict-aliasing"
716                 # We rely on signed overflow to behave
717                 CFLAGS="$CFLAGS -fwrapv"
719                 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
720                 if test x"$disable_visibility_hidden" = xno; then
721                    # Don't export any symbols by default
722                    SHARED_CFLAGS="-fvisibility=hidden"
723                    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
724                 fi
726                 ORIG_CFLAGS=$CFLAGS
727                 # Check for the normal version, since gcc ignores unknown -Wno options
728                 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
729                 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
730                 AC_TRY_COMPILE([],[
731                 ], [
732                    AC_MSG_RESULT(yes)
733                    CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
734                 ], [
735                    AC_MSG_RESULT(no)
736                    CFLAGS=$ORIG_CFLAGS
737                 ])
739                 if test "x$mono_cv_clang" = "xyes"; then
740                    # https://bugzilla.samba.org/show_bug.cgi?id=8118
741                    WARN="$WARN -Qunused-arguments"
742                    WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
743                    # We rely on zero length arrays in structs
744                    WARN="$WARN -Wno-zero-length-array"
745                 fi
746 else
747         # The Sun Forte compiler complains about inline functions that access static variables
748         # so disable all inlining.
749         case "$host" in
750         *-*-solaris*)
751                 CFLAGS="$CFLAGS -Dinline="
752                 ;;
753         esac
755 CFLAGS="$WARN $CFLAGS -g"
756 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
757 CPPFLAGS="$WARN $CPPFLAGS -g"
759 # Where's the 'mcs' source tree?
760 if test -d $srcdir/mcs; then
761   mcsdir=mcs
762 else
763   mcsdir=../mcs
766 AC_ARG_WITH(mcs-path, [  --with-mcs-path=/path/to/mcs      Specify an alternate mcs source tree],
767         if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
768                 mcsdir=$with_mcs_path
769         fi
772 AC_ARG_WITH(jumptables, [  --with-jumptables=yes,no      enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
774 AC_ARG_WITH(core,       [  --with-core=only       controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
775 if test x$with_core = xonly; then
776     AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
777     with_runtime_preset=netcore
779 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
782 # A sanity check to catch cases where the package was unpacked
783 # with an ancient tar program (Solaris)
785 AC_ARG_ENABLE(solaris-tar-check,
786 [  --disable-solaris-tar-check    disable solaris tar check],
787    do_solaris_tar_check=no, do_solaris_tar_check=yes)
789 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
790         AC_MSG_CHECKING(integrity of package)
791         if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
792         then
793                 AC_MSG_RESULT(ok)
794         else
795                 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"
796                 AC_MSG_ERROR([$errorm])
797         fi
800 if test "x$with_mcs_path" != "x"; then
801 mcs_topdir=$(cd "$mcsdir" && pwd)
802 mcs_topdir_from_srcdir=$mcs_topdir
803 else
804 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
805 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
808 # Convert mcs_topdir* paths to Windows syntax.
809 if test x$cross_compiling$host_win32 = xnoyes; then
810   mcs_topdir=$(cygpath -m $mcs_topdir)
811   case $mcs_topdir_from_srcdir in
812     /cygdrive/*)
813         mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
814         ;;
815   esac
818 AC_SUBST([mcs_topdir])
819 AC_SUBST([mcs_topdir_from_srcdir])
821 # gettext: prepare the translation directories. 
822 # we do not configure the full gettext, as we consume it dynamically from C#
823 AM_PO_SUBDIRS
825 if test "x$USE_NLS" = "xyes"; then
826    AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
828    if test "x$HAVE_MSGFMT" = "xno"; then
829           AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
830    fi
833 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
835 pkg_config_path=
836 AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir],
837         if test x$with_crosspkgdir = "x"; then
838                 if test -s $PKG_CONFIG_PATH; then
839                         pkg_config_path=$PKG_CONFIG_PATH
840                 fi
841         else
842                 pkg_config_path=$with_crosspkgdir
843                 PKG_CONFIG_PATH=$pkg_config_path
844                 export PKG_CONFIG_PATH
845         fi
848 AC_ARG_ENABLE(ninja,[  --enable-ninja    Enable using ninja where available], enable_ninja=$enableval)
849 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
850 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
852 AC_ARG_ENABLE(werror, [  --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
853 if test x$werror_flag = xyes; then
854         WERROR_CFLAGS="-Werror"
856 AC_SUBST([WERROR_CFLAGS])
857 AC_SUBST([SHARED_CFLAGS])
859 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
860   
861 AC_SUBST(GLIB_CFLAGS)
863 # Enable support for fast thread-local storage
864 # Some systems have broken support, so we allow to disable it.
865 AC_ARG_WITH(tls, [  --with-tls=__thread,pthread    select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
867 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
868 # This does not work on some platforms (bug #55253)
869 AC_ARG_WITH(sigaltstack, [  --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
871 AC_ARG_WITH(static_mono, [  --with-static_mono=yes,no      link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
872 AC_ARG_WITH(shared_mono, [  --with-shared_mono=yes,no      build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
873 # Same as --with-shared_mono=no
874 AC_ARG_ENABLE(libraries, [  --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
876 if test "x$enable_static" = "xno"; then
877    with_static_mono=no
880 if test "x$enable_shared" = "xno"; then
881    with_shared_mono=no
884 if test "x$enable_libraries" = "xno"; then
885    with_shared_mono=no
888 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
890 if test "x$host_win32" = "xyes"; then
891    # Boehm GC requires the runtime to be in its own dll
892    with_static_mono=no
895 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
896 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
897 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
898 AC_ARG_ENABLE(support-build, [  --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
900 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
901 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
902         AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
903         ORIG_CFLAGS=$CFLAGS
904         CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
905         AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
906         AC_TRY_COMPILE([], [
907         ], [
908            AC_MSG_RESULT(yes)
909            # Pass it to libgc as well
910            CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
911         ], [
912            AC_MSG_RESULT(no)
913            CFLAGS=$ORIG_CFLAGS
914         ])
917 AC_ARG_ENABLE(small-config, [  --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
919 if test x$enable_small_config = xyes; then
920         AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
921         CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
924 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)
926 DISABLED_FEATURES=none
927 csc_compiler=default
928 endian=unknown
929 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
930 AC_MSG_CHECKING([CSharp compiler to use])
931 AC_ARG_WITH(csc, [  --with-csc=mcs,roslyn,default      Configures the CSharp compiler to use],[
932    if test x$withval = xmcs; then
933        csc_compiler=mcs
934    elif test x$withval = xroslyn; then
935        csc_compiler=roslyn
936    elif test x$withval = xdefault; then
937        :
938    else
939        AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
940    fi
941 ],[csc_compiler=default])
943 if test $csc_compiler = default; then
944    if test $endian = big; then
945       csc_compiler=mcs
946    elif test $endian = little; then
947       case "$host" in
948         powerpc*) csc_compiler=mcs ;;
949         *) csc_compiler=roslyn ;;
950       esac
951    else
952       csc_compiler=mcs
953    fi
955 AC_MSG_RESULT($csc_compiler)
957 AC_ARG_WITH(jemalloc,             [  --with-jemalloc=yes,no               If jemalloc is enabled (defaults to no)],                                     [], [with_jemalloc=no])
958 AC_ARG_WITH(jemalloc-always,      [  --with-jemalloc_always=yes,no        If jemalloc is enabled and always used (defaults to yes)],                    [], [with_jemalloc_always=no])
959 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])
962 if test x$target_win32 = xyes; then
963 with_jemalloc=no
964 with_jemalloc_assert=no
965 with_jemalloc_always=no
968 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
969 if test "x$with_jemalloc_assert" = "xyes"; then
970 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
971 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
972 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
975 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
976 if test "x$with_jemalloc_always" = "xyes"; then
977 with_jemalloc=yes
978 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
979 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
980 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
983 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
984 if test "x$with_jemalloc" = "xyes"; then
985 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
986 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
987 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
989 if test "x$target_mach" = "xyes"; then
990         JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
993 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
994 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
996 AC_SUBST(JEMALLOC_CFLAGS)
997 AC_SUBST(JEMALLOC_CPPFLAGS)
998 AC_SUBST(JEMALLOC_LDFLAGS)
999 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1002 # Terminology:
1003 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1004 # MERP - The MS telemetry profile. Not for general use.
1005 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1007 # 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.
1009 #--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.
1010 #--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.
1011 #--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.
1012 #--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.
1014 AC_ARG_WITH(crash-privacy,       [  --with-crash_privacy=yes,no         If you want your crashes to not include names of symbols present in the binary. ], [], [with_crash_privacy=yes])
1015 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])
1016 AC_ARG_ENABLE(crash-reporting,  [  --disable-crash-reporting            Enable or Disable crash reporting subsystem],        [crash_reporting=$enableval], [crash_reporting=yes])
1018 if test "x$with_crash_privacy" = "xyes"; then
1019 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1022 if test "x$with_structured_crashes" = "xno"; then
1023 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1026 case "$host" in
1027         *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1028                 crash_reporting=no
1029                 ;;
1030 esac
1032 if test "x$crash_reporting" != "xyes"; then
1033 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1034 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1037 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1038 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1040 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1041 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1043 if test x$enable_monodroid = xyes; then
1044         AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1047 if test x$enable_monotouch = xyes; then
1048         AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1051 AC_ARG_ENABLE(cxx, [  --enable-cxx   compile some code as C++])
1053 # mono/corefx/native has a lot of invalid C++98 in its headers
1054 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1055 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1056 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1057 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1059 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1060 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1061 # and add it whenever we're running clang on Darwin.
1062 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1063         CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1066 AC_SUBST(CXXFLAGS_COMMON)
1068 if test "x$enable_cxx" = "xyes"; then
1070         CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1072         # -std=gnu99 -xc++ is not allowed and errors.
1073         CXX_REMOVE_CFLAGS=-std=gnu99
1074         # These give warnings and should be removed. They are C-only.
1075         # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1076         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1077         # Likewise with CentOS 6 gcc 4.4.
1078         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1080         # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1081         # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1082         # generates a warning every time we run gcc which is very unsightly.
1083         # The warning is for e.g. sprintf(foo, "") which can just be
1084         # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1085         # and completely legal and valid.
1086         # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1087         # Alternatively, just run $CXX -xc++ -c /dev/null.
1088         AC_LANG_PUSH(C++)
1089         ORIG_CXXFLAGS=$CXXFLAGS
1090         CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1091         AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1092         AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1093                                  [ AC_MSG_RESULT(no)
1094                                    CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1095         CXXFLAGS=$ORIG_CXXFLAGS
1096         AC_LANG_POP(C++)
1098 AC_SUBST(CXX_ADD_CFLAGS)
1099 AC_SUBST(CXX_REMOVE_CFLAGS)
1102 # Set the build profiles and options before things which use them
1105 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])
1106 AC_ARG_WITH(monodroid,           [  --with-monodroid=yes,no             If you want to build the MonoDroid assemblies (defaults to no)],            [], [with_monodroid=default])
1107 AC_ARG_WITH(monotouch,           [  --with-monotouch=yes,no             If you want to build the Xamarin.iOS assemblies (defaults to no)],          [], [with_monotouch=default])
1108 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])
1109 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])
1110 AC_ARG_WITH(bitcode,             [  --with-bitcode=yes,no               If bitcode is enabled (defaults to no)],                                    [], [with_bitcode=default])
1111 AC_ARG_WITH(xammac,              [  --with-xammac=yes,no                If you want to build the Xamarin.Mac assemblies (defaults to no)],          [], [with_xammac=default])
1112 AC_ARG_WITH(testing_aot_full_interp,  [  --with-testing_aot_full_interp=yes,no    If you want to build the testing_aot_full_interp assemblies (defaults to no)],   [], [with_testing_aot_full_interp=default])
1113 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])
1114 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])
1115 AC_ARG_WITH(winaot,              [  --with-winaot=yes,no                If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1116 AC_ARG_WITH(orbis,               [  --with-orbis=yes,no                 If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1117 AC_ARG_WITH(unreal,              [  --with-unreal=yes,no                If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1118 AC_ARG_WITH(wasm,                [  --with-wasm=yes,no                  If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1121 AC_ARG_WITH(runtime-preset, [  --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,winaot,winaot_llvm,bitcode,bitcodeinterp,unreal,fullaotinterp,fullaotinterp_llvm  Which default profile to build (defaults to net_4_x)],  [], [with_runtime_preset=net_4_x])
1122 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])
1123 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])
1124 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])
1127 dnl Spectre compiler mitigation flag checks
1129 if test "x$with_spectre_mitigation" = "xyes"; then
1130    AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1131    SPECTRE_CFLAGS=
1132    SPECTRE_INDIRECT_BRANCH_KIND=
1133    case "x$with_spectre_indirect_branch_choice" in
1134        xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1135        xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1136        xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1137        xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1138        *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1139    esac
1141    SPECTRE_FUNCTION_RETURN_KIND=""
1142    case "x$with_spectre_function_return_choice" in
1143        xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1144        xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1145        xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1146        xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1147        *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1148    esac
1150    AX_CHECK_COMPILE_FLAG(
1151         [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1152         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1153    )
1155    AX_CHECK_COMPILE_FLAG(
1156         [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1157         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1158    )
1160    if test "x$SPECTRE_CFLAGS" != "x" ; then
1161         CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1162         CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1163         spectre_mitigation_status="mitigation enabled"
1164    fi
1165 else
1166         spectre_mitigation_status="no mitigation"
1170 dnl Profile defaults
1172 TEST_PROFILE=default
1173 enable_llvm_default=no
1175 with_profile4_x_default=no
1176 with_monodroid_default=no
1177 with_monotouch_default=no
1178 with_monotouch_watch_default=no
1179 with_monotouch_tv_default=no
1180 with_xammac_default=no
1181 with_testing_aot_full_interp_default=no
1182 with_testing_aot_hybrid_default=no
1183 with_testing_aot_full_default=no
1184 with_winaot_default=no
1185 with_orbis_default=no
1186 with_unreal_default=no
1187 with_wasm_default=no
1189 with_bitcode_default=no
1190 enable_cooperative_suspend_default=no
1191 enable_hybrid_suspend_default=no
1193 # For the sake of clearer error messages, these numbers should all be different from each other.
1194 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4400,nftnptr-arg-trampolines=4000
1196 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1198 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1199    DISABLE_MCS_DOCS_default=yes
1200 elif test x$with_runtime_preset = xnetcore; then
1201    DISABLE_MCS_DOCS_default=yes
1203    mono_feature_disable_remoting='yes'
1204    mono_feature_disable_reflection_emit_save='yes'
1205    mono_feature_disable_appdomains='yes'
1206    disable_mono_native=yes
1207 elif test x$with_runtime_preset = xnet_4_x; then
1208    with_profile4_x_default=yes
1209    TEST_PROFILE=net_4_x
1210 elif test x$with_runtime_preset = xall; then
1211    with_profile4_x_default=yes
1212    with_monodroid_default=yes
1213    with_monotouch_default=yes
1214    with_monotouch_watch_default=yes
1215    with_monotouch_tv_default=yes
1216    with_xammac_default=yes
1217    with_winaot_default=yes
1218    with_orbis_default=yes
1219    with_unreal_default=yes
1220    with_wasm_default=yes
1221    with_testing_aot_full_interp_default=yes
1222    with_testing_aot_hybrid_default=yes
1223    with_testing_aot_full_default=yes
1224    TEST_PROFILE=net_4_x
1225 elif test x$with_runtime_preset = xbitcode; then
1226    DISABLE_MCS_DOCS_default=yes
1227    with_testing_aot_full_default=yes
1228    with_bitcode_default=yes
1229    enable_cooperative_suspend_default=yes
1230    # FIXME: use TEST_PROFILE=testing_aot_full
1231    TEST_PROFILE=testing_aot_bitcode
1232    enable_llvm_default=yes
1234    mono_feature_disable_com='yes'
1235    mono_feature_disable_remoting='yes'
1236    mono_feature_disable_reflection_emit_save='yes'
1237    mono_feature_disable_reflection_emit='yes'
1238    mono_feature_disable_appdomains='yes'
1240    # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1241    AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1242    AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1243    AOT_MODE="llvmonly"
1244 elif test x$with_runtime_preset = xbitcodeinterp; then
1245    with_testing_aot_full_interp_default=yes
1246    with_bitcode_default=yes
1247    enable_cooperative_suspend_default=yes
1248    # FIXME: use TEST_PROFILE=testing_aot_full_interp
1249    TEST_PROFILE=testing_aot_bitcode_interp
1250    enable_llvm_default=yes
1252    # mscorlib.dll aot compilation crashes
1253    mono_feature_disable_com='yes'
1255    # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1256    AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1257    AOT_RUN_FLAGS="--llvmonly-interp"
1258 elif test x$with_runtime_preset = xfullaot; then
1259    DISABLE_MCS_DOCS_default=yes
1260    with_testing_aot_full_default=yes
1261    TEST_PROFILE=testing_aot_full
1263    mono_feature_disable_com='yes'
1264    mono_feature_disable_remoting='yes'
1265    mono_feature_disable_reflection_emit_save='yes'
1266    mono_feature_disable_reflection_emit='yes'
1267    mono_feature_disable_appdomains='yes'
1269    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1270    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1271    AOT_MODE="full"
1272 elif test x$with_runtime_preset = xfullaot_llvm; then
1273    DISABLE_MCS_DOCS_default=yes
1274    with_testing_aot_full_default=yes
1275    TEST_PROFILE=testing_aot_full
1277    mono_feature_disable_com='yes'
1278    mono_feature_disable_remoting='yes'
1279    mono_feature_disable_reflection_emit_save='yes'
1280    mono_feature_disable_reflection_emit='yes'
1281    mono_feature_disable_appdomains='yes'
1283    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1284    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1285    AOT_MODE="full"
1286 elif test x$with_runtime_preset = xhybridaot; then
1287    DISABLE_MCS_DOCS_default=yes
1288    with_testing_aot_hybrid_default=yes
1289    TEST_PROFILE=testing_aot_hybrid 
1291    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1292    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1293 elif test x$with_runtime_preset = xhybridaot_llvm; then
1294    DISABLE_MCS_DOCS_default=yes
1295    with_testing_aot_hybrid_default=yes
1296    TEST_PROFILE=testing_aot_hybrid
1298    AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1299    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1300 elif test x$with_runtime_preset = xfullaotinterp; then
1301    with_testing_aot_full_interp_default=yes
1302    TEST_PROFILE=testing_aot_full_interp
1304    # mscorlib.dll aot compilation crashes
1305    mono_feature_disable_com='yes'
1307    AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1308    AOT_RUN_FLAGS="--full-aot-interp"
1309 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1310    with_testing_aot_full_interp_default=yes
1311    TEST_PROFILE=testing_aot_full_interp_llvm
1313    # mscorlib.dll aot compilation crashes
1314    mono_feature_disable_com='yes'
1316    AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1317    AOT_RUN_FLAGS="--full-aot-interp"
1318 elif test x$with_runtime_preset = xaot; then
1319    with_profile4_x_default=yes
1321    AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1322    AOT_RUN_FLAGS=""
1324    DISABLE_MCS_DOCS_default=yes
1325 elif test x$with_runtime_preset = xaot_llvm; then
1326    with_profile4_x_default=yes
1328    AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1329    AOT_RUN_FLAGS=""
1331    DISABLE_MCS_DOCS_default=yes
1332 elif test x$with_runtime_preset = xwinaot; then
1333    DISABLE_MCS_DOCS_default=yes
1334    with_winaot_default=yes
1335    TEST_PROFILE=winaot
1337    mono_feature_disable_com='yes'
1338    mono_feature_disable_remoting='yes'
1339    mono_feature_disable_reflection_emit_save='yes'
1340    mono_feature_disable_reflection_emit='yes'
1341    mono_feature_disable_appdomains='yes'
1343    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1344    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1345    AOT_MODE="full"
1346 elif test x$with_runtime_preset = xwinaot_llvm; then
1347    DISABLE_MCS_DOCS_default=yes
1348    with_winaot_default=yes
1349    TEST_PROFILE=winaot
1351    mono_feature_disable_com='yes'
1352    mono_feature_disable_remoting='yes'
1353    mono_feature_disable_reflection_emit_save='yes'
1354    mono_feature_disable_reflection_emit='yes'
1355    mono_feature_disable_appdomains='yes'
1357    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1358    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1359    AOT_MODE="full"
1360 elif test x$with_runtime_preset = xorbis; then
1361    DISABLE_MCS_DOCS_default=yes
1362    with_orbis_default=yes
1363    TEST_PROFILE=orbis
1365    mono_feature_disable_com='yes'
1366    mono_feature_disable_remoting='yes'
1367    mono_feature_disable_reflection_emit_save='yes'
1368    mono_feature_disable_reflection_emit='yes'
1369    mono_feature_disable_appdomains='yes'
1371    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1372    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1373    AOT_MODE="full"
1374 elif test x$with_runtime_preset = xunreal; then
1375    DISABLE_MCS_DOCS_default=yes
1376    with_unreal_default=yes
1377    TEST_PROFILE=unreal
1379    mono_feature_disable_com='yes'
1380    mono_feature_disable_remoting='yes'
1381    mono_feature_disable_appdomains='no'
1383    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1384    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1385 elif test x$with_runtime_preset = xwasm; then
1386    DISABLE_MCS_DOCS_default=yes
1387    with_wasm_default=yes
1388    TEST_PROFILE=wasm
1390    mono_feature_disable_com='yes'
1391    mono_feature_disable_remoting='yes'
1392    mono_feature_disable_reflection_emit_save='yes'
1393    mono_feature_disable_reflection_emit='yes'
1394    mono_feature_disable_appdomains='yes'
1396    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1397    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1398 else
1399    TEST_PROFILE=net_4_x
1400    with_profile4_x_default=yes
1403 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1404    AC_SUBST(AOT_BUILD_FLAGS)
1405    AC_SUBST(AOT_RUN_FLAGS)
1406    # For llvmonlycheck + fullaotcheck
1407    AC_SUBST(INVARIANT_AOT_OPTIONS)
1410 AC_SUBST(TEST_PROFILE)
1412 if test "x$with_profile4_x" = "xdefault"; then
1413    with_profile4_x=$with_profile4_x_default
1415 if test "x$with_monodroid" = "xdefault"; then
1416    with_monodroid=$with_monodroid_default
1418 if test "x$with_monotouch" = "xdefault"; then
1419    with_monotouch=$with_monotouch_default
1421 if test "x$with_monotouch_watch" = "xdefault"; then
1422    with_monotouch_watch=$with_monotouch_watch_default
1424 if test "x$with_monotouch_tv" = "xdefault"; then
1425    with_monotouch_tv=$with_monotouch_tv_default
1427 if test "x$with_bitcode" = "xdefault"; then
1428    with_bitcode=$with_bitcode_default
1430 if test "x$with_xammac" = "xdefault"; then
1431    with_xammac=$with_xammac_default
1433 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1434    with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1436 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1437    with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1439 if test "x$with_testing_aot_full" = "xdefault"; then
1440    with_testing_aot_full=$with_testing_aot_full_default
1442 if test "x$with_winaot" = "xdefault"; then
1443    with_winaot=$with_winaot_default
1445 if test "x$with_orbis" = "xdefault"; then
1446    with_orbis=$with_orbis_default
1448 if test "x$with_unreal" = "xdefault"; then
1449    with_unreal=$with_unreal_default
1451 if test "x$with_wasm" = "xdefault"; then
1452    with_wasm=$with_wasm_default
1456 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1457 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1458 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1459 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1460 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1461 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1462 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1463 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1464 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1465 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1466 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1467 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1468 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1469 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1470 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1471 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"])
1472 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1473 AM_CONDITIONAL(AOT_FULL_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"])
1474 AM_CONDITIONAL(AOT_FULL_INTERP_LLVM_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp_llvm"])
1475 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1477 default_profile=net_4_x
1478 if test -z "$INSTALL_MONODROID_TRUE"; then :
1479    default_profile=monodroid
1481 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1482    default_profile=monotouch
1484 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1485    default_profile=xammac
1487 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1488    default_profile=testing_aot_full_interp
1490 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1491    default_profile=testing_aot_hybrid
1493 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1494    default_profile=testing_aot_full
1496 if test -z "$INSTALL_WINAOT_TRUE"; then :
1497    default_profile=winaot
1499 if test -z "$INSTALL_ORBIS_TRUE"; then :
1500    default_profile=orbis
1502 if test -z "$INSTALL_UNREAL_TRUE"; then :
1503    default_profile=unreal
1505 if test -z "$INSTALL_WASM_TRUE"; then :
1506    default_profile=wasm
1508 if test -z "$INSTALL_4_x_TRUE"; then :
1509    default_profile=net_4_x
1511 DEFAULT_PROFILE=$default_profile
1512 AC_SUBST(DEFAULT_PROFILE)
1515 # End build profile configuration
1518 if test x$USE_NLS = xprofile_default; then
1520         AC_MSG_CHECKING([NLS used])
1522         # We make the default value for USE_NLS
1523         # "no" on OSX because it isn't available on most
1524         # default OSX installs. The most common configurations will
1525         # all disable it, so this saves us typing.
1526         if test x$host_darwin = xyes; then
1527                 USE_NLS=no;
1528         else
1529                 USE_NLS=yes;
1530         fi
1532         AC_SUBST([USE_NLS])
1533         AC_MSG_RESULT([$USE_NLS])
1536 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
1537      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, 
1538      reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1539          security, lldb, mdb, assert_messages, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers, sockets.],
1541         for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1542                 eval "mono_feature_disable_$feature='yes'"
1543         done
1544         DISABLED_FEATURES=$enable_minimal
1545         disabled="Disabled:      $enable_minimal"
1546 ],[])
1548 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1550 if test "x$mono_feature_disable_aot" = "xyes"; then
1551         AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1552         enable_system_aot=no
1553         AC_MSG_NOTICE([Disabled AOT compiler])
1556 if test "x$mono_feature_disable_profiler" = "xyes"; then
1557         AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1558         AC_MSG_NOTICE([Disabled support for the profiler])
1560 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1562 if test "x$mono_feature_disable_decimal" = "xyes"; then
1563         AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1564         AC_MSG_NOTICE([Disabled support for decimal])
1567 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1568         AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1569         AC_MSG_NOTICE([Disabled support for P/Invoke])
1572 if test "x$mono_feature_disable_debug" = "xyes"; then
1573         AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1574         AC_MSG_NOTICE([Disabled support for runtime debugging])
1577 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1578         AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1579         mono_feature_disable_reflection_emit_save=yes
1580         AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1583 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1584         AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1585         AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1588 if test "x$mono_feature_disable_large_code" = "xyes"; then
1589         AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1590         AC_MSG_NOTICE([Disabled support for large assemblies])
1593 if test "x$mono_feature_disable_logging" = "xyes"; then
1594         AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1595         AC_MSG_NOTICE([Disabled support for logging])
1598 if test "x$mono_feature_disable_com" = "xyes"; then
1599         AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1600         AC_MSG_NOTICE([Disabled COM support])
1603 if test "x$mono_feature_disable_ssa" = "xyes"; then
1604         AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1605         AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1608 if test "x$mono_feature_disable_generics" = "xyes"; then
1609         AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1610         AC_MSG_NOTICE([Disabled Generics Support])
1613 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1614         AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1615         AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1618 if test "x$mono_feature_disable_portability" = "xyes"; then
1619         AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1620         AC_MSG_NOTICE([Disabled IO Portability layer])
1623 if test "x$mono_feature_disable_attach" = "xyes"; then
1624         AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1625         AC_MSG_NOTICE([Disabled agent attach])
1628 if test "x$mono_feature_disable_verifier" = "xyes"; then
1629         AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1630         AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1633 if test "x$mono_feature_disable_jit" = "xyes"; then
1634         AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1635         AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1638 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1640 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1641         AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1642         AC_MSG_NOTICE([Disabled the interpreter])
1645 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1647 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1648         AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1651 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1653 if test "x$mono_feature_disable_simd" = "xyes"; then
1654         AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1655         AC_MSG_NOTICE([Disabled SIMD support])
1658 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1659         AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1660         AC_MSG_NOTICE([Disabled Soft Debugger.])
1663 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1665 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1666         AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1667         AC_MSG_NOTICE([Disabled Performance Counters.])
1669 if test "x$mono_feature_disable_normalization" = "xyes"; then
1670         AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1671         AC_MSG_NOTICE([Disabled String normalization support.])
1674 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1675 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1676         AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1677         AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1680 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1681         AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1682         AC_MSG_NOTICE([Disabled Shared perfcounters.])
1685 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1686         AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1687         AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1690 if test "x$mono_feature_disable_remoting" = "xyes"; then
1691         AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1692         AC_MSG_NOTICE([Disabled remoting])
1695 if test "x$mono_feature_disable_security" = "xyes"; then
1696         AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1697         AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1700 if test "x$mono_feature_disable_lldb" = "xyes"; then
1701         AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1702         AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1705 if test "x$mono_feature_disable_mdb" = "xyes"; then
1706         AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1707         AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1710 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1711         AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1712         AC_MSG_NOTICE([Disabled assertion messages.])
1715 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1716         AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1717         AC_MSG_NOTICE([Disabled runtime cleanup.])
1720 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1721         AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1722         AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1726 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1727         AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1728         AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1731 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1732         AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1733         AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1736 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1737         AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1738         AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1741 if test "x$mono_feature_disable_sockets" = "xyes"; then
1742         AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
1743         AC_MSG_NOTICE([Disabled sockets])
1746 AC_ARG_ENABLE(executables, [  --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1747 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1749 has_extension_module=no
1750 AC_ARG_ENABLE(extension-module, [  --enable-extension-module=LIST enable the core-extensions from LIST],
1752         for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1753                 if test x$extension = xdefault ; then
1754                         has_extension_module=yes;
1755                 fi
1756         done
1757         if test x$enable_extension_module = xyes; then
1758                 has_extension_module=yes;
1759         fi
1760 ], [])
1762 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1764 if test x$has_extension_module != xno ; then
1765         AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1766         AC_MSG_NOTICE([Enabling mono extension module.])
1769 # Deprecated
1770 AC_ARG_ENABLE(gsharedvt, [  --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1772 AC_MSG_CHECKING(for visibility __attribute__)
1773 AC_COMPILE_IFELSE([
1774         AC_LANG_SOURCE([[
1775                 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1776                 int main () { doit (); return 0; }
1777         ]])
1778 ], [
1779    have_visibility_hidden=yes
1780    AC_MSG_RESULT(yes)
1781 ], [
1782    have_visibility_hidden=no
1783    AC_MSG_RESULT(no)
1787 dnl Boehm GC configuration
1790 AC_ARG_WITH(libgc,   [  --with-libgc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1792 AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1793 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1795 if test "x$support_boehm" = "xyes"; then
1797         AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1798         if test x$enable_parallel_mark = xyes; then
1799                 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1800         fi
1802         gc_msg=""
1803         LIBGC_CPPFLAGS=
1804         LIBGC_LIBS=
1805         LIBGC_STATIC_LIBS=
1806         libgc_dir=
1807         case "x$libgc" in
1808                 xincluded)
1809                         if test "x$support_boehm" = "xyes"; then
1810                                 libgc_dir=libgc
1811                         fi
1813                         LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1814                         LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1815                         LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1817                         BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1819                         if test x$target_win32 = xyes; then
1820                                 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1821                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1822                         fi
1824                         gc_msg="Included Boehm GC with typed GC"
1825                         if test x$enable_parallel_mark = xyes; then
1826                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1827                                 gc_msg="$gc_msg and parallel mark"
1828                         else
1829                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1830                         fi
1831                         ;;
1833                 xboehm|xbohem|xyes)
1834                         AC_MSG_WARN("External Boehm is no longer supported")
1835                         ;;
1837                 xsgen)
1838                         AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1839                         ;;
1841                 xnone)
1842                         AC_MSG_WARN("Compiling mono without GC.")
1843                         AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1844                         AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1845                         gc_msg="none"
1846                         ;;
1847                 *)
1848                         AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1849                         ;;
1850         esac
1852         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])
1853         if test "x$large_heap" = "xyes"; then
1854            CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1855         fi
1857         AC_SUBST(LIBGC_CPPFLAGS)
1858         AC_SUBST(LIBGC_LIBS)
1859         AC_SUBST(LIBGC_STATIC_LIBS)
1860         AC_SUBST(libgc_dir)
1861         AC_SUBST(BOEHM_DEFINES)
1864 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1867 dnl End of Boehm GC Configuration
1870 dnl *************************************
1871 dnl *** Checks for zero length arrays ***
1872 dnl *************************************
1873 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1874 AC_TRY_COMPILE([
1875         struct s {
1876                 int  length;
1877                 char data [0];
1878         };
1879 ], [], [
1880         AC_MSG_RESULT(yes)
1881         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1882 ], [
1883         AC_MSG_RESULT(no)
1884         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1887 dnl ***********************************
1888 dnl *** Checks for signals
1889 dnl ***********************************
1890 AC_CHECK_HEADERS(signal.h)
1891 AC_CHECK_FUNCS(sigaction)
1892 AC_CHECK_FUNCS(kill)
1893 AC_CHECK_FUNCS(signal)
1895 # signal() is declared inline in Android headers
1896 # so we need to workaround it by overriding the check.
1897 if test x$platform_android = xyes; then
1898         AC_DEFINE(HAVE_SIGNAL,1)
1901 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1902 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1904 if test x$host_win32 = xno; then
1905         dnl *************************************
1906         dnl *** Checks for time capabilities ***
1907         dnl *************************************
1909         AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1910         AC_TRY_COMPILE([#include <time.h>], [
1911                 const int foo = CLOCK_MONOTONIC;
1912         ],[
1913                 AC_MSG_RESULT(yes)
1914                 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1915         ], [
1916                 AC_MSG_RESULT(no)
1917         ])
1919         AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1920         AC_TRY_COMPILE([#include <time.h>], [
1921                 const int foo = CLOCK_MONOTONIC_COARSE;
1922         ],[
1923                 AC_MSG_RESULT(yes)
1924                 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1925         ], [
1926                 AC_MSG_RESULT(no)
1927         ])
1929         AC_MSG_CHECKING(for CLOCK_REALTIME)
1930         AC_TRY_COMPILE([#include <time.h>], [
1931                 const int foo = CLOCK_REALTIME;
1932         ],[
1933                 AC_MSG_RESULT(yes)
1934                 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1935         ], [
1936                 AC_MSG_RESULT(no)
1937         ])
1939         AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1940         AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1941         AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1942         AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1943         AC_CHECK_FUNC(futimes,            [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1944         AC_CHECK_FUNC(futimens,           [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1946         dnl hires monotonic clock support
1947         AC_SEARCH_LIBS(clock_gettime, rt)
1948         AC_CHECK_FUNCS(clock_nanosleep)
1950         dnl dynamic loader support
1951         AC_CHECK_FUNC(dlopen, DL_LIB="",
1952                 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1953         )
1954         if test x$dl_support = xno; then
1955                 AC_MSG_WARN([No dynamic loading support available])
1956         else
1957                 LIBS="$LIBS $DL_LIB"
1958                 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1959                 dnl from glib's configure.ac
1960                 AC_CACHE_CHECK([for preceeding underscore in symbols],
1961                         mono_cv_uscore,[
1962                         AC_TRY_RUN([#include <dlfcn.h>
1963                         int mono_underscore_test (void) { return 42; }
1964                         int main() {
1965                           void *f1 = (void*)0, *f2 = (void*)0, *handle;
1966                           handle = dlopen ((void*)0, 0);
1967                           if (handle) {
1968                             f1 = dlsym (handle, "mono_underscore_test");
1969                             f2 = dlsym (handle, "_mono_underscore_test");
1970                           } return (!f2 || f1);
1971                         }],
1972                                 [mono_cv_uscore=yes],
1973                                 [mono_cv_uscore=no],
1974                         [])
1975                 ])
1976                 if test "x$mono_cv_uscore" = "xyes"; then
1977                         MONO_DL_NEED_USCORE=1
1978                 else
1979                         MONO_DL_NEED_USCORE=0
1980                 fi
1981                 AC_SUBST(MONO_DL_NEED_USCORE)
1982                 AC_CHECK_FUNC(dlerror)
1983         fi
1985         dnl ******************************************************************
1986         dnl *** Checks for the IKVM JNI interface library                  ***
1987         dnl ******************************************************************
1988         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])
1990         ikvm_native_dir=
1991         if test x$with_ikvm_native = xyes; then
1992                 ikvm_native_dir=ikvm-native
1993                 jdk_headers_found="IKVM Native"
1994         fi
1996         AC_SUBST(ikvm_native_dir)
1998         AC_CHECK_HEADERS(execinfo.h)
2000         AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2002         AC_CHECK_FUNCS(getgrgid_r)
2003         AC_CHECK_FUNCS(getgrnam_r)
2004         AC_CHECK_FUNCS(getresuid)
2005         AC_CHECK_FUNCS(setresuid)
2006         AC_CHECK_FUNCS(kqueue)
2007         AC_CHECK_FUNCS(backtrace_symbols)
2008         AC_CHECK_FUNCS(mkstemp)
2009         AC_CHECK_FUNCS(mmap)
2010         AC_CHECK_FUNCS(madvise)
2011         AC_CHECK_FUNCS(getrusage)
2012         AC_CHECK_FUNCS(getpriority)
2013         AC_CHECK_FUNCS(setpriority)
2014         AC_CHECK_FUNCS(dl_iterate_phdr)
2015         AC_CHECK_FUNCS(dladdr)
2016         AC_CHECK_FUNCS(sysconf)
2017         AC_CHECK_FUNCS(getrlimit)
2018         AC_CHECK_FUNCS(prctl)
2019         AC_CHECK_FUNCS(arc4random)
2020         AC_CHECK_FUNCS(nl_langinfo)
2022         AC_CHECK_FUNCS(sched_getaffinity)
2023         AC_CHECK_FUNCS(sched_setaffinity)
2024         AC_CHECK_FUNCS(sched_getcpu)
2026         if test x$platform_android != xyes; then
2027                 AC_CHECK_FUNCS(getpwnam_r)
2028                 AC_CHECK_FUNCS(getpwuid_r)
2029         fi
2031         AC_CHECK_FUNCS(readlink)
2032         AC_CHECK_FUNCS(chmod)
2033         AC_CHECK_FUNCS(lstat)
2034         AC_CHECK_FUNCS(getdtablesize)
2036         AC_CHECK_FUNCS(ftruncate)
2037         AC_CHECK_FUNCS(msync)
2039         AC_CHECK_FUNCS(gethostname getpeername)
2040         AC_CHECK_FUNCS(utime utimes)
2042         AC_CHECK_FUNCS(openlog closelog)
2043         AC_CHECK_FUNCS(atexit)
2045         AC_FUNC_STRERROR_R()
2047         dnl ****************************************************************
2048         dnl *** Check for sched_setaffinity from glibc versions before   ***
2049         dnl *** 2.3.4. The older versions of the function only take 2    ***
2050         dnl *** parameters, not 3.                                       ***
2051         dnl ***                                                          ***
2052         dnl *** Because the interface change was not made in a minor     ***
2053         dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros    ***
2054         dnl *** won't always indicate the interface sched_affinity has.  ***
2055         dnl ****************************************************************
2056         AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2057         AC_TRY_COMPILE([#include <sched.h>], [
2058             int mask = 1; 
2059             sched_setaffinity(0, &mask);
2060         ], [
2061                 # Yes, we have it...
2062                 AC_MSG_RESULT(yes)
2063                 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2064         ], [
2065                 # We have the new, three-parameter version
2066                 AC_MSG_RESULT(no)
2067         ])
2068         AC_TRY_COMPILE([#include <sched.h>], [
2069              CPU_COUNT((void *) 0);
2070         ], [
2071                 AC_MSG_RESULT(yes)
2072                 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2073         ], [
2074                 # We have the new, three-parameter version
2075                 AC_MSG_RESULT(no)
2076         ])
2078         dnl ******************************************************************
2079         dnl *** Check for large file support                               ***
2080         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2081         dnl ******************************************************************
2082         
2083         # Check that off_t can represent 2**63 - 1 correctly, working around
2084         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
2085         # CPPFLAGS and sets $large_offt to yes if the test succeeds
2086         large_offt=no
2087         AC_DEFUN([LARGE_FILES], [
2088                 large_CPPFLAGS=$CPPFLAGS
2089                 CPPFLAGS="$CPPFLAGS $1"
2090                 AC_TRY_COMPILE([
2091                         #include <sys/types.h>
2092                         #include <limits.h>
2093                 ], [
2094                         /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2095                         #define COMPILE_TIME_ASSERT(pred) \
2096                                 switch(0){case 0:case pred:;}
2097                         COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2098                 ], [
2099                         AC_MSG_RESULT(ok)
2100                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2101                         large_CPPFLAGS="$large_CPPFLAGS $1"
2102                         large_offt=yes
2103                 ], [
2104                         AC_MSG_RESULT(no)
2105                 ])
2106                 CPPFLAGS=$large_CPPFLAGS
2107         ])
2109         AC_MSG_CHECKING(if off_t is 64 bits wide)
2110         LARGE_FILES("")
2111         if test $large_offt = no; then
2112                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2113                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2114         fi
2115         if test $large_offt = no; then
2116                 AC_MSG_WARN([No 64 bit file size support available])
2117         fi
2118         
2119         dnl *****************************
2120         dnl *** Checks for libsocket  ***
2121         dnl *****************************
2122         AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2124         case "$host" in
2125                 *-*-*freebsd*)
2126                         dnl *****************************
2127                         dnl *** Checks for libinotify ***
2128                         dnl *****************************
2129                         AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2130         esac
2132         dnl *******************************
2133         dnl *** Checks for MSG_NOSIGNAL ***
2134         dnl *******************************
2135         AC_MSG_CHECKING(for MSG_NOSIGNAL)
2136         AC_TRY_COMPILE([#include <sys/socket.h>], [
2137                 int f = MSG_NOSIGNAL;
2138         ], [
2139                 # Yes, we have it...
2140                 AC_MSG_RESULT(yes)
2141                 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2142         ], [
2143                 # We'll have to use signals
2144                 AC_MSG_RESULT(no)
2145         ])
2147         dnl *****************************
2148         dnl *** Checks for IPPROTO_IP ***
2149         dnl *****************************
2150         AC_MSG_CHECKING(for IPPROTO_IP)
2151         AC_TRY_COMPILE([#include <netinet/in.h>], [
2152                 int level = IPPROTO_IP;
2153         ], [
2154                 # Yes, we have it...
2155                 AC_MSG_RESULT(yes)
2156                 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2157         ], [
2158                 # We'll have to use getprotobyname
2159                 AC_MSG_RESULT(no)
2160         ])
2162         dnl *******************************
2163         dnl *** Checks for IPPROTO_IPV6 ***
2164         dnl *******************************
2165         AC_MSG_CHECKING(for IPPROTO_IPV6)
2166         AC_TRY_COMPILE([#include <netinet/in.h>], [
2167                 int level = IPPROTO_IPV6;
2168         ], [
2169                 # Yes, we have it...
2170                 AC_MSG_RESULT(yes)
2171                 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2172         ], [
2173                 # We'll have to use getprotobyname
2174                 AC_MSG_RESULT(no)
2175         ])
2177         dnl ******************************
2178         dnl *** Checks for IPPROTO_TCP ***
2179         dnl ******************************
2180         AC_MSG_CHECKING(for IPPROTO_TCP)
2181         AC_TRY_COMPILE([#include <netinet/in.h>], [
2182                 int level = IPPROTO_TCP;
2183         ], [
2184                 # Yes, we have it...
2185                 AC_MSG_RESULT(yes)
2186                 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2187         ], [
2188                 # We'll have to use getprotobyname
2189                 AC_MSG_RESULT(no)
2190         ])
2192         dnl *****************************
2193         dnl *** Checks for SOL_IP     ***
2194         dnl *****************************
2195         AC_MSG_CHECKING(for SOL_IP)
2196         AC_TRY_COMPILE([#include <netdb.h>], [
2197                 int level = SOL_IP;
2198         ], [
2199                 # Yes, we have it...
2200                 AC_MSG_RESULT(yes)
2201                 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2202         ], [
2203                 # We'll have to use getprotobyname
2204                 AC_MSG_RESULT(no)
2205         ])
2207         dnl *****************************
2208         dnl *** Checks for SOL_IPV6     ***
2209         dnl *****************************
2210         AC_MSG_CHECKING(for SOL_IPV6)
2211         AC_TRY_COMPILE([#include <netdb.h>], [
2212                 int level = SOL_IPV6;
2213         ], [
2214                 # Yes, we have it...
2215                 AC_MSG_RESULT(yes)
2216                 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2217         ], [
2218                 # We'll have to use getprotobyname
2219                 AC_MSG_RESULT(no)
2220         ])
2222         dnl *****************************
2223         dnl *** Checks for SOL_TCP    ***
2224         dnl *****************************
2225         AC_MSG_CHECKING(for SOL_TCP)
2226         AC_TRY_COMPILE([#include <netdb.h>], [
2227                 int level = SOL_TCP;
2228         ], [
2229                 # Yes, we have it...
2230                 AC_MSG_RESULT(yes)
2231                 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2232         ], [
2233                 # We'll have to use getprotobyname
2234                 AC_MSG_RESULT(no)
2235         ])
2237         dnl *****************************
2238         dnl *** Checks for IP_PKTINFO ***
2239         dnl *****************************
2240         AC_MSG_CHECKING(for IP_PKTINFO)
2241         AC_TRY_COMPILE([#include <linux/in.h>], [
2242                 int level = IP_PKTINFO;
2243         ], [
2244                 # Yes, we have it...
2245                 AC_MSG_RESULT(yes)
2246                 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2247         ], [
2248                 AC_MSG_RESULT(no)
2249         ])
2251         dnl *****************************
2252         dnl *** Checks for IPV6_PKTINFO ***
2253         dnl *****************************
2254         AC_MSG_CHECKING(for IPV6_PKTINFO)
2255         AC_TRY_COMPILE([#include <netdb.h>], [
2256                 int level = IPV6_PKTINFO;
2257         ], [
2258                 # Yes, we have it...
2259                 AC_MSG_RESULT(yes)
2260                 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2261         ], [
2262                 AC_MSG_RESULT(no)
2263         ])
2265         dnl **********************************
2266         dnl *** Checks for IP_DONTFRAG     ***
2267         dnl **********************************
2268         AC_MSG_CHECKING(for IP_DONTFRAG)
2269         AC_TRY_COMPILE([#include <netinet/in.h>], [
2270                 int level = IP_DONTFRAG;
2271         ], [
2272                 # Yes, we have it...
2273                 AC_MSG_RESULT(yes)
2274                 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2275         ], [
2276                 AC_MSG_RESULT(no)
2277         ])
2279         dnl **********************************
2280         dnl *** Checks for IP_DONTFRAGMENT ***
2281         dnl **********************************
2282         AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2283         AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2284                 int level = IP_DONTFRAGMENT;
2285         ], [
2286                 # Yes, we have it...
2287                 AC_MSG_RESULT(yes)
2288                 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2289         ], [
2290                 AC_MSG_RESULT(no)
2291         ])
2293         dnl **********************************
2294         dnl *** Checks for IP_MTU_DISCOVER ***
2295         dnl **********************************
2296         AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2297         AC_TRY_COMPILE([#include <linux/in.h>], [
2298                 int level = IP_MTU_DISCOVER;
2299         ], [
2300                 # Yes, we have it...
2301                 AC_MSG_RESULT(yes)
2302                 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2303         ], [
2304                 AC_MSG_RESULT(no)
2305         ])
2307         dnl **********************************
2308         dnl *** Checks for  IP_PMTUDISC_DO ***
2309         dnl **********************************
2310         AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2311         AC_TRY_COMPILE([#include <linux/in.h>], [
2312                 int level = IP_PMTUDISC_DO;
2313         ], [
2314                 # Yes, we have it...
2315                 AC_MSG_RESULT(yes)
2316                 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2317         ], [
2318                 AC_MSG_RESULT(no)
2319         ])
2321         dnl *********************************
2322         dnl *** Check for struct ip_mreqn ***
2323         dnl *********************************
2324         AC_MSG_CHECKING(for struct ip_mreqn)
2325         AC_TRY_COMPILE([#include <netinet/in.h>], [
2326                 struct ip_mreqn mreq;
2327                 mreq.imr_address.s_addr = 0;
2328         ], [
2329                 # Yes, we have it...
2330                 AC_MSG_RESULT(yes)
2331                 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2332         ], [
2333                 # We'll just have to try and use struct ip_mreq
2334                 AC_MSG_RESULT(no)
2335                 AC_MSG_CHECKING(for struct ip_mreq)
2336                 AC_TRY_COMPILE([#include <netinet/in.h>], [
2337                         struct ip_mreq mreq;
2338                         mreq.imr_interface.s_addr = 0;
2339                 ], [
2340                         # Yes, we have it...
2341                         AC_MSG_RESULT(yes)
2342                         AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2343                 ], [
2344                         # No multicast support
2345                         AC_MSG_RESULT(no)
2346                 ])
2347         ])
2348         
2349         dnl **********************************
2350         dnl *** Check for getaddrinfo ***
2351         dnl **********************************
2352         AC_MSG_CHECKING(for getaddrinfo)
2353                 AC_TRY_LINK([
2354                 #include <stdio.h>
2355                 #include <netdb.h>
2356         ], [
2357                 getaddrinfo(NULL,NULL,NULL,NULL);
2358         ], [
2359                 # Yes, we have it...
2360                 AC_MSG_RESULT(yes)
2361                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2362         ], [
2363                 AC_MSG_RESULT(no)
2364         ])
2366         dnl **********************************
2367         dnl *** Check for gethostbyname2_r ***
2368         dnl **********************************
2369         AC_MSG_CHECKING(for gethostbyname2_r)
2370                 AC_TRY_LINK([
2371                 #include <stdio.h>
2372                 #include <netdb.h>
2373         ], [
2375                 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2376         ], [
2377                 # Yes, we have it...
2378                 AC_MSG_RESULT(yes)
2379                 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2380         ], [
2381                 AC_MSG_RESULT(no)
2382         ])
2384         dnl **********************************
2385         dnl *** Check for gethostbyname2 ***
2386         dnl **********************************
2387         AC_MSG_CHECKING(for gethostbyname2)
2388                 AC_TRY_LINK([
2389                 #include <stdio.h>
2390                 #include <netdb.h>
2391         ], [
2392                 gethostbyname2(NULL,0);
2393         ], [
2394                 # Yes, we have it...
2395                 AC_MSG_RESULT(yes)
2396                 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2397         ], [
2398                 AC_MSG_RESULT(no)
2399         ])
2401         dnl **********************************
2402         dnl *** Check for gethostbyname ***
2403         dnl **********************************
2404         AC_MSG_CHECKING(for gethostbyname)
2405                 AC_TRY_LINK([
2406                 #include <stdio.h>
2407                 #include <netdb.h>
2408         ], [
2409                 gethostbyname(NULL);
2410         ], [
2411                 # Yes, we have it...
2412                 AC_MSG_RESULT(yes)
2413                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2414         ], [
2415                 AC_MSG_RESULT(no)
2416         ])
2418         dnl **********************************
2419         dnl *** Check for getprotobyname ***
2420         dnl **********************************
2421         AC_MSG_CHECKING(for getprotobyname)
2422                 AC_TRY_LINK([
2423                 #include <stdio.h>
2424                 #include <netdb.h>
2425         ], [
2426                 getprotobyname(NULL);
2427         ], [
2428                 # Yes, we have it...
2429                 AC_MSG_RESULT(yes)
2430                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2431         ], [
2432                 AC_MSG_RESULT(no)
2433         ])
2435         dnl **********************************
2436         dnl *** Check for getprotobyname_r ***
2437         dnl **********************************
2438         AC_MSG_CHECKING(for getprotobyname_r)
2439                 AC_TRY_LINK([
2440                 #include <stdio.h>
2441                 #include <netdb.h>
2442         ], [
2443                 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2444         ], [
2445                 # Yes, we have it...
2446                 AC_MSG_RESULT(yes)
2447                 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2448         ], [
2449                 AC_MSG_RESULT(no)
2450         ])
2452         dnl **********************************
2453         dnl *** Check for getnameinfo ***
2454         dnl **********************************
2455         AC_MSG_CHECKING(for getnameinfo)
2456                 AC_TRY_LINK([
2457                 #include <stdio.h>
2458                 #include <netdb.h>
2459         ], [
2460                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2461         ], [
2462                 # Yes, we have it...
2463                 AC_MSG_RESULT(yes)
2464                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2465         ], [
2466                 AC_MSG_RESULT(no)
2467         ])
2470         dnl **********************************
2471         dnl *** Check for inet_ntop ***
2472         dnl **********************************
2473         AC_MSG_CHECKING(for inet_ntop)
2474                 AC_TRY_LINK([
2475                 #include <stdio.h>
2476                 #include <arpa/inet.h>
2477         ], [
2478                 inet_ntop (0, NULL, NULL, 0);
2479         ], [
2480                 # Yes, we have it...
2481                 AC_MSG_RESULT(yes)
2482                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2483         ], [
2484                 AC_MSG_RESULT(no)
2485         ])
2487         dnl *****************************
2488         dnl *** Checks for libnsl     ***
2489         dnl *****************************
2490         AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2492         AC_CHECK_FUNCS(inet_pton inet_aton)
2494         dnl *****************************
2495         dnl *** Checks for libxnet    ***
2496         dnl *****************************
2497         case "${host}" in
2498                 *solaris* )
2499                         AC_MSG_CHECKING(for Solaris XPG4 support)
2500                         if test -f /usr/lib/libxnet.so; then
2501                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2502                                 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2503                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2504                                 LIBS="$LIBS -lxnet"
2505                                 AC_MSG_RESULT(yes)
2506                         else
2507                                 AC_MSG_RESULT(no)
2508                         fi
2510                         if test "$GCC" = "yes"; then
2511                                 CFLAGS="$CFLAGS -Wno-char-subscripts"
2512                         fi
2513                 ;;
2514         esac
2516         dnl *****************************
2517         dnl *** Checks for libpthread ***
2518         dnl *****************************
2519 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2520 # and libpthread does not exist
2522         case "${host}" in
2523                 *-*-*haiku*)
2524                         dnl Haiku has pthread in libroot (libc equiv)
2525                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2526                 ;;
2527                 *-*-*freebsd*)
2528                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2529                 ;;
2530                 *-*-*openbsd*)
2531                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2532                 ;;
2533                 *)
2534                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2535                 ;;
2536         esac
2537         AC_CHECK_HEADERS(pthread.h)
2538         AC_CHECK_HEADERS(pthread_np.h)
2539         AC_CHECK_FUNCS(pthread_mutex_timedlock)
2540         AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2541         AC_CHECK_FUNCS(pthread_kill)
2542         AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2543         AC_TRY_COMPILE([ #include <pthread.h>], [
2544                 pthread_mutexattr_t attr;
2545                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2546         ], [
2547                 AC_MSG_RESULT(ok)
2548         ], [
2549                 AC_MSG_RESULT(no)
2550                 AC_ERROR(Posix system lacks support for recursive mutexes)
2551         ])
2552         AC_CHECK_FUNCS(pthread_attr_setstacksize)
2553         AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2554         AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2555         AC_CHECK_FUNCS(mincore mlock munlock)
2557         dnl ***********************************
2558         dnl *** Checks for working __thread ***
2559         dnl ***********************************
2560         AC_MSG_CHECKING(for working __thread)
2561         if test "x$with_tls" != "x__thread"; then
2562                 AC_MSG_RESULT(disabled)
2563         elif test "x$cross_compiling" = "xyes"; then
2564                 AC_MSG_RESULT(cross compiling, assuming yes)
2565         else
2566                 AC_TRY_RUN([
2567                         #if defined(__APPLE__) && defined(__clang__)
2568                         #error "__thread does not currently work with clang on Mac OS X"
2569                         #endif
2570                         
2571                         #include <unistd.h>
2572                         #include <pthread.h>
2573                         __thread int i;
2574                         static int res1, res2;
2576                         void thread_main (void *arg)
2577                         {
2578                                 i = arg;
2579                                 sleep (1);
2580                                 if (arg == 1)
2581                                         res1 = (i == arg);
2582                                 else
2583                                         res2 = (i == arg);
2584                         }
2586                         int main () {
2587                                 pthread_t t1, t2;
2589                                 i = 5;
2591                                 pthread_create (&t1, NULL, thread_main, 1);
2592                                 pthread_create (&t2, NULL, thread_main, 2);
2594                                 pthread_join (t1, NULL);
2595                                 pthread_join (t2, NULL);
2597                                 return !(res1 + res2 == 2);
2598                         }
2599                 ], [
2600                                 AC_MSG_RESULT(yes)
2601                 ], [
2602                                 AC_MSG_RESULT(no)
2603                                 with_tls=pthread
2604                 ])
2605         fi
2607         dnl **************************************
2608         dnl *** Checks for working sigaltstack ***
2609         dnl **************************************
2610         AC_MSG_CHECKING(for working sigaltstack)
2611         if test "x$with_sigaltstack" != "xyes"; then
2612                 AC_MSG_RESULT(disabled)
2613         elif test "x$cross_compiling" = "xyes"; then
2614                 AC_MSG_RESULT(cross compiling, assuming no)
2615                 with_sigaltstack=no
2616         else
2617                 AC_TRY_RUN([
2618                         #include <stdio.h>
2619                         #include <stdlib.h>
2620                         #include <unistd.h>
2621                         #include <signal.h>
2622                         #include <pthread.h>
2623                         #include <sys/wait.h>
2624                         #if defined(__FreeBSD__) || defined(__NetBSD__)
2625                         #define SA_STACK SA_ONSTACK
2626                         #endif
2627                         static void
2628                         sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2629                         {
2630                                 exit (0);
2631                         }
2633                         volatile char*__ptr = NULL;
2634                         static void *
2635                         loop (void *ignored)
2636                         {
2637                                 *__ptr = 0;
2638                                 return NULL;
2639                         }
2641                         static void
2642                         child ()
2643                         {
2644                                 struct sigaction sa;
2645                                 stack_t sas;
2646                                 pthread_t id;
2647                                 pthread_attr_t attr;
2649                                 sa.sa_sigaction = sigsegv_signal_handler;
2650                                 sigemptyset (&sa.sa_mask);
2651                                 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2652                                 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2653                                         perror ("sigaction");
2654                                         return;
2655                                 }
2657                                 /* x86 darwin deliver segfaults using SIGBUS */
2658                                 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2659                                         perror ("sigaction");
2660                                         return;
2661                                 }
2662                                 sas.ss_sp = malloc (SIGSTKSZ);
2663                                 sas.ss_size = SIGSTKSZ;
2664                                 sas.ss_flags = 0;
2665                                 if (sigaltstack (&sas, NULL) == -1) {
2666                                         perror ("sigaltstack");
2667                                         return;
2668                                 }
2670                                 pthread_attr_init (&attr);
2671                                 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2672                                         printf ("pthread_create\n");
2673                                         return;
2674                                 }
2676                                 sleep (100);
2677                         }
2679                         int
2680                         main ()
2681                         {
2682                                 pid_t son;
2683                                 int status;
2684                                 int i;
2686                                 son = fork ();
2687                                 if (son == -1) {
2688                                         return 1;
2689                                 }
2691                                 if (son == 0) {
2692                                         child ();
2693                                         return 0;
2694                                 }
2696                                 for (i = 0; i < 300; ++i) {
2697                                         waitpid (son, &status, WNOHANG);
2698                                         if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2699                                                 return 0;
2700                                         usleep (10000);
2701                                 }
2703                                 kill (son, SIGKILL);
2704                                 return 1;
2705                         }
2707                 ], [
2708                                 AC_MSG_RESULT(yes)
2709                                 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2710                 ], [
2711                                 with_sigaltstack=no
2712                                 AC_MSG_RESULT(no)
2713                 ])
2714         fi
2716         dnl ********************************
2717         dnl *** Checks for semaphore lib ***
2718         dnl ********************************
2719         # 'Real Time' functions on Solaris
2720         # posix4 on Solaris 2.6
2721         # pthread (first!) on Linux
2722         AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
2724         AC_SEARCH_LIBS(shm_open, pthread rt posix4) 
2725         AC_CHECK_FUNCS(shm_open)
2727         dnl ********************************
2728         dnl *** Checks for timezone stuff **
2729         dnl ********************************
2730         AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2731                 AC_TRY_COMPILE([
2732                         #include <time.h>
2733                         ], [
2734                         struct tm tm;
2735                         tm.tm_gmtoff = 1;
2736                         ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2737         if test $ac_cv_struct_tm_gmtoff = yes; then
2738                 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2739         else
2740                 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2741                         AC_TRY_COMPILE([
2742                                 #include <time.h>
2743                         ], [
2744                                 timezone = 1;
2745                         ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2746                 if test $ac_cv_var_timezone = yes; then
2747                         AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2748                 else
2749                         AC_ERROR(unable to find a way to determine timezone)
2750                 fi
2751         fi
2753         dnl *********************************
2754         dnl *** Checks for math functions ***
2755         dnl *********************************
2756         AC_SEARCH_LIBS(sqrtf, m)
2758         dnl ****************************************************************
2759         dnl *** Checks for working poll() (macosx defines it but doesn't ***
2760         dnl *** have it in the library (duh))                            ***
2761         dnl ****************************************************************
2762         AC_CHECK_FUNCS(poll)
2764         dnl **********************************
2765         dnl *** epoll                      ***
2766         dnl **********************************
2767         AC_CHECK_HEADERS(sys/epoll.h)
2768         haveepoll=no
2769         AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2770         if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2771                 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2772         fi
2774         havekqueue=no
2776         AC_CHECK_HEADERS(sys/event.h)
2777         AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2779         dnl **************************************
2780         dnl * Darwin has a race that prevents us from using reliably:
2781         dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2782         dnl * Since kqueue is mostly used for scaling large web servers, 
2783         dnl * and very few folks run Mono on large web servers on OSX, falling
2784         dnl * back 
2785         dnl **************************************
2786         if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2787                 if test "x$host_darwin" = "xno"; then
2788                         AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2789                 fi
2790         fi
2792         dnl ******************************
2793         dnl *** Checks for SIOCGIFCONF ***
2794         dnl ******************************
2795         AC_CHECK_HEADERS(sys/ioctl.h)
2796         AC_CHECK_HEADERS(net/if.h, [], [],
2797            [
2798            #ifdef HAVE_SYS_TYPES_H
2799            # include <sys/types.h>
2800            #endif
2801            #ifdef HAVE_SYS_SOCKET_H
2802            # include <sys/socket.h>
2803            #endif
2804            ])
2805         AC_MSG_CHECKING(for ifreq)
2806         AC_TRY_COMPILE([
2807                 #include <stdio.h>
2808                 #include <sys/ioctl.h>
2809                 #include <net/if.h>
2810                 ], [
2811                 struct ifconf ifc;
2812                 struct ifreq *ifr;
2813                 void *x;
2814                 ifc.ifc_len = 0;
2815                 ifc.ifc_buf = NULL;
2816                 x = (void *) &ifr->ifr_addr;
2817                 ],[
2818                         AC_MSG_RESULT(yes)
2819                         AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2820                 ], [
2821                         AC_MSG_RESULT(no)
2822                 ])
2823         dnl **********************************
2824         dnl ***     Checks for sin_len     ***
2825         dnl **********************************
2826         AC_MSG_CHECKING(for sockaddr_in.sin_len)
2827         AC_TRY_COMPILE([
2828                 #include <netinet/in.h>
2829                 ], [
2830                 struct sockaddr_in saddr;
2831                 saddr.sin_len = sizeof (saddr);
2832                 ],[
2833                         AC_MSG_RESULT(yes)
2834                         AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2835                 ], [
2836                         AC_MSG_RESULT(no)
2837                 ])      
2838         dnl **********************************
2839         dnl ***    Checks for sin6_len     ***
2840         dnl **********************************
2841         AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2842         AC_TRY_COMPILE([
2843                 #include <netinet/in.h>
2844                 ], [
2845                 struct sockaddr_in6 saddr6;
2846                 saddr6.sin6_len = sizeof (saddr6);
2847                 ],[
2848                         AC_MSG_RESULT(yes)
2849                         AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2850                 ], [
2851                         AC_MSG_RESULT(no)
2852                 ])
2853         dnl **********************************
2854         dnl *** Check for getifaddrs       ***
2855         dnl **********************************
2856         AC_MSG_CHECKING(for getifaddrs)
2857                 AC_TRY_LINK([
2858                 #include <stdio.h>
2859                 #include <sys/types.h>
2860                 #include <sys/socket.h>
2861                 #ifdef HAVE_NET_IF_H
2862                 #include <net/if.h>
2863                 #endif
2864                 #include <ifaddrs.h>
2865         ], [
2866                 getifaddrs(NULL);
2867         ], [
2868                 # Yes, we have it...
2869                 AC_MSG_RESULT(yes)
2870                 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2871         ], [
2872                 AC_MSG_RESULT(no)
2873         ])
2874         dnl **********************************
2875         dnl *** Check for if_nametoindex   ***
2876         dnl **********************************
2877         AC_MSG_CHECKING(for if_nametoindex)
2878                 AC_TRY_LINK([
2879                 #include <stdio.h>
2880                 #include <sys/types.h>
2881                 #include <sys/socket.h>
2882                 #include <net/if.h>
2883         ], [
2884                 if_nametoindex(NULL);
2885         ], [
2886                 # Yes, we have it...
2887                 AC_MSG_RESULT(yes)
2888                 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2889         ], [
2890                 AC_MSG_RESULT(no)
2891         ])
2892         dnl **********************************
2893         dnl *** Check for access ***
2894         dnl **********************************
2895         AC_MSG_CHECKING(for access)
2896                 AC_TRY_LINK([
2897                 #include <unistd.h>
2898         ], [
2899                 access(NULL,0);
2900         ], [
2901                 # Yes, we have it...
2902                 AC_MSG_RESULT(yes)
2903                 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2904         ], [
2905                 AC_MSG_RESULT(no)
2906         ])
2907                         
2908         dnl **********************************
2909         dnl *** Checks for proclib         ***
2910         dnl **********************************
2911         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.)])
2912         dnl **********************************
2913         dnl *** Checks for MonoPosixHelper ***
2914         dnl **********************************
2915         AC_CHECK_HEADERS(checklist.h)
2916         AC_CHECK_HEADERS(pathconf.h)
2917         AC_CHECK_HEADERS(fstab.h)
2918         AC_CHECK_HEADERS(attr/xattr.h)
2919         AC_CHECK_HEADERS(sys/extattr.h)
2920         AC_CHECK_HEADERS(sys/sendfile.h)
2921         AC_CHECK_HEADERS(sys/statvfs.h)
2922         AC_CHECK_HEADERS(sys/statfs.h)
2923         AC_CHECK_HEADERS(sys/vfstab.h)
2924         AC_CHECK_HEADERS(sys/xattr.h)
2925         AC_CHECK_HEADERS(sys/mman.h)
2926         AC_CHECK_HEADERS(sys/param.h)
2927         AC_CHECK_HEADERS(sys/mount.h, [], [],
2928                 [
2929                 #ifdef HAVE_SYS_PARAM_H
2930                 # include <sys/param.h>
2931                 #endif
2932                 ])
2933         AC_CHECK_HEADERS(sys/mount.h)
2934         AC_CHECK_FUNCS(confstr)
2935         AC_CHECK_FUNCS(seekdir telldir)
2936         AC_CHECK_FUNCS(getdomainname)
2937         AC_CHECK_FUNCS(setdomainname)
2938         AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2939         AC_CHECK_FUNCS(setgroups)
2940         AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2941         AC_CHECK_FUNCS(getfsstat)
2942         AC_CHECK_FUNCS(lutimes futimes)
2943         AC_CHECK_FUNCS(mremap)
2944         AC_CHECK_FUNCS(remap_file_pages)
2945         AC_CHECK_FUNCS(posix_fadvise)
2946         AC_CHECK_FUNCS(posix_fallocate)
2947         AC_CHECK_FUNCS(posix_madvise)
2948         AC_CHECK_FUNCS(vsnprintf)
2949         AC_CHECK_FUNCS(sendfile)
2950         AC_CHECK_FUNCS(gethostid sethostid)
2951         AC_CHECK_FUNCS(sethostname)
2952         AC_CHECK_FUNCS(statfs)
2953         AC_CHECK_FUNCS(fstatfs)
2954         AC_CHECK_FUNCS(statvfs)
2955         AC_CHECK_FUNCS(fstatvfs)
2956         AC_CHECK_FUNCS(stime)
2957         AC_CHECK_FUNCS(ttyname_r)
2958         AC_CHECK_FUNCS(psignal)
2959         AC_CHECK_FUNCS(getlogin_r)
2960         AC_CHECK_FUNCS(lockf)
2961         AC_CHECK_FUNCS(swab)
2962         AC_CHECK_FUNCS(setusershell endusershell)
2963         AC_CHECK_FUNCS(futimens utimensat)
2964         AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2965         AC_CHECK_FUNCS(readv writev preadv pwritev)
2966         AC_CHECK_FUNCS(setpgid)
2967         AC_CHECK_FUNCS(system)
2968         AC_CHECK_FUNCS(fork execv execve)
2969         AC_CHECK_FUNCS(waitpid)
2970         AC_CHECK_FUNCS(accept4)
2971         AC_CHECK_FUNCS(localtime_r)
2972         AC_CHECK_FUNCS(mkdtemp)
2973         AC_CHECK_SIZEOF(size_t)
2974         AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
2975                 [#include <sys/types.h>
2976                  #include <sys/stat.h>
2977                  #include <unistd.h>])
2978         AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2979                 [#include <sys/types.h>
2980                  #include <sys/stat.h>
2981                  #include <unistd.h>])
2982         AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2983                 [#include <sys/time.h>])
2984         AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2985                 [#include <sys/socket.h>])
2986         AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2987                 [#include <unistd.h>
2988                  #include <fcntl.h>])
2989         AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2990                 [#include <sys/uio.h>])
2991         AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2992                 [#include <sys/socket.h>])
2993         AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2994                 [#include <sys/poll.h>])
2995         AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2996                 [#include <sys/socket.h>])
2997         AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2998                 [#include <sys/socket.h>])
2999         AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
3000                 [#include <netinet/in.h>])
3001         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3002                 [#include <netinet/in.h>])
3003         AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3004                 [#include <sys/un.h>])
3005         AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3006                 [#include <sys/types.h>
3007                  #include <sys/stat.h>
3008                  #include <unistd.h>])
3009         AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3010                 [#include <time.h>])
3011         AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3012                 [#include <sys/time.h>
3013                  #include <sys/types.h>
3014                  #include <utime.h>])
3015         AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3016                 [#include <sys/time.h>])
3017         AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3018                 [#include <sys/types.h>
3019                  #include <utime.h>])
3020         AC_CHECK_MEMBERS(
3021                 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,, 
3022                 [#include <sys/types.h>
3023                  #include <dirent.h>])
3024         AC_CHECK_MEMBERS(
3025                 [struct passwd.pw_gecos],,, 
3026                 [#include <sys/types.h>
3027                  #include <pwd.h>])
3028         AC_CHECK_MEMBERS(
3029                 [struct statfs.f_flags],,, 
3030                 [#include <sys/types.h>
3031                  #include <sys/vfs.h>])
3032         AC_CHECK_MEMBERS(
3033                 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,, 
3034                 [#include <sys/types.h>
3035                  #include <sys/stat.h>
3036                  #include <unistd.h>])
3038         dnl Favour xattr through glibc, but use libattr if we have to
3039         AC_CHECK_FUNC(lsetxattr, ,
3040                 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3041         )
3042         AC_SUBST(XATTR_LIB)
3044         dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3045         AC_CHECK_MEMBERS(
3046                 [struct kinfo_proc.kp_proc],,, 
3047                 [#include <sys/types.h>
3048                  #include <sys/param.h>
3049                  #include <sys/sysctl.h>
3050                  #include <sys/proc.h>
3051                  ])
3053         dnl *********************************
3054         dnl *** Checks for Windows compilation ***
3055         dnl *********************************
3056         AC_CHECK_HEADERS(sys/time.h)
3057         AC_CHECK_HEADERS(sys/param.h)
3058         AC_CHECK_HEADERS(dirent.h)
3060         dnl ******************************************
3061         dnl *** Checks for OSX and iOS compilation ***
3062         dnl ******************************************
3063         AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3065         dnl *********************************
3066         dnl *** Check for Console 2.0 I/O ***
3067         dnl *********************************
3068         AC_CHECK_HEADERS([curses.h])
3069         AC_CHECK_HEADERS([term.h], [], [],
3070         [#if HAVE_CURSES_H
3071          #include <curses.h>
3072          #endif
3073         ])
3074         AC_CHECK_HEADERS([termios.h])
3076         dnl *********************************
3077         dnl *** Checks for random         ***
3078         dnl *********************************
3079         if test x$host_darwin = xno; then
3080                 AC_CHECK_HEADERS(sys/random.h)
3081                 AC_CHECK_FUNCS(getrandom getentropy)
3082         fi
3084         dnl *********************************
3085         dnl *** Checks for Mono.Native    ***
3086         dnl *********************************
3088         # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3089         # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3091         AC_MSG_CHECKING(for linux/in.h)
3092         AC_TRY_COMPILE([
3093                 #include <sys/socket.h>
3094                 #include <linux/in.h>
3095         ], [
3096         ],[
3097                 AC_MSG_RESULT(yes)
3098                 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3099         ], [
3100                 AC_MSG_RESULT(no)
3101         ])
3103         AC_CHECK_HEADERS([linux/if_packet.h])
3105         AC_MSG_CHECKING(for struct in_pktinfo)
3106         AC_TRY_COMPILE([
3107                 #ifdef HAVE_LINUX_IN_H
3108                 #include <sys/socket.h>
3109                 #include <linux/in.h>
3110                 #else
3111                 #include <netinet/in.h>
3112                 #endif
3113         ], [
3114                 struct in_pktinfo pktinfo;
3115         ],[
3116                 AC_MSG_RESULT(yes)
3117                 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3118         ], [
3119                 AC_MSG_RESULT(no)
3120         ])
3122         AC_MSG_CHECKING(for struct ip_mreqn)
3123         AC_TRY_COMPILE([
3124                 #if HAVE_LINUX_IN_H
3125                 #include <sys/socket.h>
3126                 #include <linux/in.h>
3127                 #else
3128                 #include <netinet/in.h>
3129                 #endif
3130         ], [
3131                 struct ip_mreqn mreqn;
3132         ],[
3133                 AC_MSG_RESULT(yes)
3134                 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3135         ], [
3136                 AC_MSG_RESULT(no)
3137         ])
3139         if test x$host_darwin = xno; then
3140                 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3141         fi
3143         AC_CHECK_DECL(O_CLOEXEC,         [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3144         AC_CHECK_DECL(F_DUPFD_CLOEXEC,   [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3146         # AC_CHECK_FUNC(getifaddrs,           [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3148         AC_CHECK_FUNC(lseek64,           [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3149         AC_CHECK_FUNC(mmap64,            [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3150         AC_CHECK_FUNC(ftruncate64,       [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3151         AC_CHECK_FUNC(posix_fadvise64,   [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3153         if test "x$mono_native_platform_ios" = "xno"; then
3154                 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3155                 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3156                 AC_CHECK_FUNC(stat64,            [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3157         fi
3159         AC_CHECK_DECL(pipe2,             [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3160         AC_CHECK_FUNC(getmntinfo,        [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3161         AC_CHECK_FUNC(strcpy_s,          [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3162         AC_CHECK_FUNC(strlcpy,           [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3163         AC_CHECK_FUNC(posix_fadvise,     [AC_DEFINE(HAVE_POSIX_ADVISE, 1, [posix_fadvise])]) # the define is called HAVE_POSIX_ADVISE in corefx, not a typo
3164         AC_CHECK_FUNC(ioctl,             [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3165         AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3166         AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3168         if test "x$platform_android" != "xyes"; then
3169                 AC_CHECK_FUNC(arc4random_buf,    [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3170         fi
3172         AC_CHECK_DECL(TIOCGWINSZ,        [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3173         AC_CHECK_FUNC(tcgetattr,         [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3174         AC_CHECK_FUNC(tcsetattr,         [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3175         AC_CHECK_DECL(ECHO,              [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3176         AC_CHECK_DECL(ICANON,            [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3177         AC_CHECK_DECL(TCSANOW,           [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3179         AC_CHECK_MEMBER(struct stat.st_birthtimespec, [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtime])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3180         AC_CHECK_MEMBER(struct stat.st_atimespec,     [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3181         AC_CHECK_MEMBER(struct stat.st_atim,          [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3182         AC_CHECK_MEMBER(struct stat.st_atimensec,     [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3183         AC_CHECK_MEMBER(struct dirent.d_namlen,       [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3184         AC_CHECK_MEMBER(struct statfs.f_fstypename,   [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3185         AC_CHECK_MEMBER(struct statvfs.f_fstypename,  [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3187         AC_MSG_CHECKING(for struct statfs)
3188         AC_TRY_COMPILE([
3189                 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3190                 #include <sys/mount.h>
3191                 #else
3192                 #include <sys/statfs.h>
3193                 #endif
3194         ], [
3195                 struct statfs;
3196         ],[
3197                 AC_MSG_RESULT(yes)
3198                 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3199         ], [
3200                 AC_MSG_RESULT(no)
3201         ])
3203         if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3204                 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3205         fi
3207         AC_MSG_CHECKING(for readdir_r)
3208         AC_TRY_LINK([
3209                 #include <dirent.h>
3210         ], [
3211                 DIR* dir;
3212                 struct dirent* entry;
3213                 struct dirent* result;
3214                 readdir_r(dir, entry, &result);
3215         ],[
3216                 AC_MSG_RESULT(yes)
3217                 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3218         ], [
3219                 AC_MSG_RESULT(no)
3220         ])
3222         AC_MSG_CHECKING(for kevent with void *data)
3223         AC_TRY_LINK([
3224                 #include <sys/types.h>
3225                 #include <sys/event.h>
3226         ], [
3227                 struct kevent event;
3228                 void* data;
3229                 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3230         ],[
3231                 AC_MSG_RESULT(yes)
3232                 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3233         ], [
3234                 AC_MSG_RESULT(no)
3235         ])
3237         AC_CHECK_MEMBER(struct fd_set.fds_bits,   [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3238         AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3240         AC_MSG_CHECKING(for sendfile with 4 arguments)
3241         AC_TRY_LINK([
3242                 #include <sys/sendfile.h>
3243         ], [
3244                 #if defined(TARGET_ANDROID)
3245                 #if !defined(__ANDROID_API__)
3246                 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3247                 #elif __ANDROID_API__ < 21
3248                 #error sendfile is not supported on this Android API level
3249                 #endif
3250                 #endif
3252                 int result = sendfile(0, 0, 0, 0);
3253         ],[
3254                 AC_MSG_RESULT(yes)
3255                 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3256         ], [
3257                 AC_MSG_RESULT(no)
3258         ])
3260         ORIG_CFLAGS="$CFLAGS"
3261         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3263         AC_MSG_CHECKING(for sendfile with 6 arguments)
3264         AC_TRY_LINK([
3265                 #include <stdlib.h>
3266                 #include <sys/types.h>
3267                 #include <sys/socket.h>
3268                 #include <sys/uio.h>
3269         ], [
3270                 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3271         ],[
3272                 AC_MSG_RESULT(yes)
3273                 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3274         ], [
3275                 AC_MSG_RESULT(no)
3276         ])
3278         CFLAGS="$ORIG_CFLAGS"
3280         AC_CHECK_FUNC(fcopyfile,     [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3281         AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3282         AC_CHECK_FUNC(accept4,       [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3283         AC_CHECK_FUNC(kqueue,        [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3285         ORIG_CFLAGS="$CFLAGS"
3286         CFLAGS="$CFLAGS -Werror=sign-conversion"
3288         AC_MSG_CHECKING(for getnameinfo with signed flags)
3289         AC_TRY_LINK([
3290                 #include <sys/types.h>
3291                 #include <netdb.h>
3292         ], [
3293                 const struct sockaddr *addr;
3294                 socklen_t addrlen;
3295                 char *host;
3296                 socklen_t hostlen;
3297                 char *serv;
3298                 socklen_t servlen;
3299                 int flags;
3300                 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3301         ],[
3302                 AC_MSG_RESULT(yes)
3303                 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3304         ], [
3305                 AC_MSG_RESULT(no)
3306         ])
3308         CFLAGS="$ORIG_CFLAGS"
3310         if test "x$host_linux" = "xyes"; then
3311                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3312         else
3313                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3314         fi
3316         # HAVE_CLOCK_MONOTONIC check already done above
3317         # HAVE_CLOCK_REALTIME check already done above
3318         # HAVE_MACH_ABSOLUTE_TIME check already done above
3319         # HAVE_MACH_TIMEBASE_INFO check already done above
3320         # HAVE_FUTIMES check already done above
3321         # HAVE_FUTIMENS check already done above
3323         ORIG_CFLAGS="$CFLAGS"
3324         CFLAGS="$CFLAGS -Werror=sign-conversion"
3326         AC_MSG_CHECKING(for bind with unsigned addrlen)
3327         AC_TRY_LINK([
3328                 #include <sys/socket.h>
3329         ], [
3330                 int fd;
3331                 struct sockaddr* addr;
3332                 socklen_t addrLen;
3333                 bind(fd, addr, addrLen);
3334         ],[
3335                 AC_MSG_RESULT(yes)
3336                 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3337         ], [
3338                 AC_MSG_RESULT(no)
3339         ])
3341         AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3342         AC_TRY_LINK([
3343                 #include <netinet/in.h>
3344                 #include <netinet/tcp.h>
3345         ], [
3346                 struct ipv6_mreq opt;
3347                 unsigned int index = 0;
3348                 opt.ipv6mr_interface = index;
3349         ],[
3350                 AC_MSG_RESULT(yes)
3351                 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3352         ], [
3353                 AC_MSG_RESULT(no)
3354         ])
3356         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3357         AC_TRY_LINK([
3358                 #include <sys/inotify.h>
3359         ], [
3360                 intptr_t fd;
3361                 uint32_t wd;
3362                 int result = inotify_rm_watch(fd, wd);
3363         ],[
3364                 AC_MSG_RESULT(yes)
3365                 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3366         ], [
3367                 AC_MSG_RESULT(no)
3368         ])
3370         CFLAGS="$ORIG_CFLAGS"
3372         AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3373         if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3374                 AC_MSG_RESULT(no)
3375         elif test "x$cross_compiling" = "xyes"; then
3376                 AC_MSG_RESULT(cross compiling, assuming yes)
3377                 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3378         else
3379                 AC_TRY_RUN([
3380                         #include <sys/mman.h>
3381                         #include <fcntl.h>
3382                         #include <unistd.h>
3384                         int main ()
3385                         {
3386                                 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3387                                 if (fd == -1)
3388                                         return -1;
3390                                 shm_unlink("/mono_configure_shm_open");
3392                                 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3393                                 //       on at least the current version of Mac OS X
3395                                 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3396                                         return -1;
3398                                 return 0;
3399                         }
3400                 ],[
3401                         AC_MSG_RESULT(yes)
3402                         AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3403                 ], [
3404                         AC_MSG_RESULT(no)
3405                 ])
3406         fi
3408         AC_MSG_CHECKING(for getpriority with int who)
3409         AC_TRY_LINK([
3410                 #include <sys/resource.h>
3411         ], [
3412                 int which;
3413                 int who;
3414                 int result = getpriority(which, who);
3415         ],[
3416                 AC_MSG_RESULT(yes)
3417                 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3418         ], [
3419                 AC_MSG_RESULT(no)
3420         ])
3422         AC_MSG_CHECKING(for kevent with int parameters)
3423         AC_TRY_LINK([
3424                 #include <sys/types.h>
3425                 #include <sys/event.h>
3426         ], [
3427                 int kg;
3428                 const struct kevent* chagelist;
3429                 int nchanges;
3430                 struct kevent* eventlist;
3431                 int nevents;
3432                 const struct timespec* timeout;
3433                 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3434         ],[
3435                 AC_MSG_RESULT(yes)
3436                 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3437         ], [
3438                 AC_MSG_RESULT(no)
3439         ])
3441         AC_CHECK_FUNCS(mkstemps)
3442         # AC_CHECK_FUNCS(mkstemp) # already done above
3444         if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3445                 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3446         fi
3448         AC_MSG_CHECKING(for tcp/var.h)
3449         AC_TRY_LINK([
3450                 #include <sys/types.h>
3451                 #include <sys/socketvar.h>
3452                 #include <netinet/ip.h>
3453                 #include <netinet/tcp.h>
3454                 #include <netinet/tcp_var.h>
3455         ], [
3456         ],[
3457                 AC_MSG_RESULT(yes)
3458                 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3459         ], [
3460                 AC_MSG_RESULT(no)
3461         ])
3463         AC_CHECK_HEADERS([sys/cdefs.h])
3465         AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3466         AC_TRY_LINK([
3467                 #ifdef HAVE_SYS_CDEFS_H
3468                 #include <sys/cdefs.h>
3469                 #endif
3470                 #include <netinet/tcp.h>
3471         ], [
3472                 int result = TCP_ESTABLISHED;
3473         ],[
3474                 AC_MSG_RESULT(yes)
3475                 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3476         ], [
3477                 AC_MSG_RESULT(no)
3478         ])
3480         AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3482         AC_MSG_CHECKING(for struct rt_msghdr)
3483         AC_TRY_COMPILE([
3484                 #include <sys/types.h>
3485                 #include <net/route.h>
3486         ], [
3487                 struct rt_msghdr;
3488         ],[
3489                 AC_MSG_RESULT(yes)
3490                 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3491         ], [
3492                 AC_MSG_RESULT(no)
3493         ])
3495         AC_CHECK_HEADERS([sys/sysctl.h])
3496         AC_CHECK_HEADERS([linux/rtnetlink.h])
3498         AC_CHECK_FUNC(getpeereid,    [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3499         #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3500         AC_CHECK_FUNC(uname,         [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3502         ORIG_CFLAGS="$CFLAGS"
3503         CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3505         AC_MSG_CHECKING(for getdomainname with size_t namelen)
3506         AC_TRY_LINK([
3507                 #include <unistd.h>
3508         ], [
3509                 size_t namelen = 20;
3510                 char name[20];
3511                 int result = getdomainname(name, namelen);
3512         ],[
3513                 AC_MSG_RESULT(yes)
3514                 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3515         ], [
3516                 AC_MSG_RESULT(no)
3517         ])
3519         CFLAGS="$ORIG_CFLAGS"
3521         AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3522         AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3523         AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3525         if test "x$ac_cv_func_inotify_init" = "xyes" -a "x$ac_cv_func_inotify_add_watch" = "xyes" -a "x$ac_cv_func_inotify_rm_watch" = "xyes"; then
3526                 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3527         elif test "x$host_linux" = "xyes"; then
3528                 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3529         fi
3531         # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3532         # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3533         # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3534         # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3536         enable_gss=no;
3537         AC_MSG_CHECKING(for GSS/GSS.h)
3538         AC_TRY_COMPILE([
3539                         #include <GSS/GSS.h>
3540         ], [
3541         ],[
3542                         AC_MSG_RESULT(yes)
3543                         AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3544                         AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3545                         enable_gss=yes
3546         ], [
3547                         AC_MSG_RESULT(no)
3548         ])
3550         AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3551         AC_TRY_COMPILE([
3552                         #include <gssapi/gssapi_ext.h>
3553         ], [
3554         ],[
3555                         AC_MSG_RESULT(yes)
3556                         enable_gss=yes
3557         ], [
3558                         AC_MSG_RESULT(no)
3559         ])
3561         AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3562         AC_TRY_COMPILE([
3563                         #include <gssapi/gssapi_ext.h>
3564                         #include <gssapi/gssapi_krb5.h>
3565                         gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3566         ], [
3567         ],[
3568                         AC_MSG_RESULT(yes)
3569                         AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3570         ], [
3571                         AC_MSG_RESULT(no)
3572         ])
3574         AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3576         AC_CHECK_HEADERS([crt_externs.h])
3578         AC_MSG_CHECKING(for _NSGetEnviron)
3579         AC_TRY_LINK([
3580                 #include <crt_externs.h>
3581         ], [
3582                 char **result = *(_NSGetEnviron());
3583         ],[
3584                 AC_MSG_RESULT(yes)
3585                 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3586         ], [
3587                 AC_MSG_RESULT(no)
3588         ])
3590         AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3592         # *** End of Mono.Native checks ***
3593 else
3594         AM_CONDITIONAL(ENABLE_GSS, false)
3596         dnl *********************************
3597         dnl *** Checks for Windows compilation ***
3598         dnl *********************************
3599         AC_CHECK_HEADERS(winternl.h)
3601         jdk_headers_found=no
3602         AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3603         AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3604         AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3605         AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3606         AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3607         AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3608         AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3610         dnl *********************************
3611         dnl *** Check for struct ip_mreqn ***
3612         dnl *********************************
3613         AC_MSG_CHECKING(for struct ip_mreqn)
3614         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3615                 struct ip_mreqn mreq;
3616                 mreq.imr_address.s_addr = 0;
3617         ], [
3618                 # Yes, we have it...
3619                 AC_MSG_RESULT(yes)
3620                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3621         ], [
3622                 # We'll just have to try and use struct ip_mreq
3623                 AC_MSG_RESULT(no)
3624                 AC_MSG_CHECKING(for struct ip_mreq)
3625                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3626                         struct ip_mreq mreq;
3627                         mreq.imr_interface.s_addr = 0;
3628                 ], [
3629                         # Yes, we have it...
3630                         AC_MSG_RESULT(yes)
3631                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3632                 ], [
3633                         # No multicast support
3634                         AC_MSG_RESULT(no)
3635                 ])
3636         ])
3638         dnl **********************************
3639         dnl *** Check for getaddrinfo ***
3640         dnl **********************************
3641         AC_MSG_CHECKING(for getaddrinfo)
3642                 AC_TRY_LINK([
3643                 #include <stdio.h>
3644                 #include <winsock2.h>
3645                 #include <ws2tcpip.h>
3646         ], [
3647                 getaddrinfo(NULL,NULL,NULL,NULL);
3648         ], [
3649                 # Yes, we have it...
3650                 AC_MSG_RESULT(yes)
3651                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3652         ], [
3653                 AC_MSG_RESULT(no)
3654         ])
3656         dnl **********************************
3657         dnl *** Check for gethostbyname ***
3658         dnl **********************************
3659         AC_MSG_CHECKING(for gethostbyname)
3660                 AC_TRY_LINK([
3661                 #include <stdio.h>
3662                 #include <winsock2.h>
3663                 #include <ws2tcpip.h>
3664         ], [
3665                 gethostbyname(NULL);
3666         ], [
3667                 # Yes, we have it...
3668                 AC_MSG_RESULT(yes)
3669                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3670         ], [
3671                 AC_MSG_RESULT(no)
3672         ])
3674         dnl **********************************
3675         dnl *** Check for getprotobyname ***
3676         dnl **********************************
3677         AC_MSG_CHECKING(for getprotobyname)
3678                 AC_TRY_LINK([
3679                 #include <stdio.h>
3680                 #include <winsock2.h>
3681                 #include <ws2tcpip.h>
3682         ], [
3683                 getprotobyname(NULL);
3684         ], [
3685                 # Yes, we have it...
3686                 AC_MSG_RESULT(yes)
3687                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3688         ], [
3689                 AC_MSG_RESULT(no)
3690         ])
3692         dnl **********************************
3693         dnl *** Check for getnameinfo ***
3694         dnl **********************************
3695         AC_MSG_CHECKING(for getnameinfo)
3696                 AC_TRY_LINK([
3697                 #include <stdio.h>
3698                 #include <winsock2.h>
3699                 #include <ws2tcpip.h>
3700         ], [
3701                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3702         ], [
3703                 # Yes, we have it...
3704                 AC_MSG_RESULT(yes)
3705                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3706         ], [
3707                 AC_MSG_RESULT(no)
3708         ])
3710         dnl **********************************
3711         dnl *** Check for inet_ntop ***
3712         dnl **********************************
3713         AC_MSG_CHECKING(for inet_ntop)
3714                 AC_TRY_LINK([
3715                 #include <stdio.h>
3716                 #include <winsock2.h>
3717                 #include <ws2tcpip.h>
3718         ], [
3719                 inet_ntop (0, NULL, NULL, 0);
3720         ], [
3721                 # Yes, we have it...
3722                 AC_MSG_RESULT(yes)
3723                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3724         ], [
3725                 AC_MSG_RESULT(no)
3726         ])
3728         dnl **********************************
3729         dnl *** Check for inet_pton ***
3730         dnl **********************************
3731         AC_MSG_CHECKING(for inet_pton)
3732                 AC_TRY_LINK([
3733                 #include <stdio.h>
3734                 #include <winsock2.h>
3735                 #include <ws2tcpip.h>
3736         ], [
3737                 #ifndef inet_pton
3738                 (void) inet_pton;
3739                 #endif
3740                 inet_pton (0, NULL, NULL);
3741         ], [
3742                 # Yes, we have it...
3743                 AC_MSG_RESULT(yes)
3744                 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3745         ], [
3746                 AC_MSG_RESULT(no)
3747         ])
3749         AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3750         AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3751         AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3752         AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3753         AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3754         AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3755         AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3758 dnl socklen_t check
3759 AC_MSG_CHECKING(for socklen_t)
3760 AC_TRY_COMPILE([
3761 #include <sys/types.h>
3762 #include <sys/socket.h>
3764   socklen_t foo;
3766 ac_cv_c_socklen_t=yes
3767         AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3768         AC_MSG_RESULT(yes)
3770         AC_MSG_RESULT(no)
3773 AC_CHECK_FUNCS(execvp)
3775 dnl ****************************
3776 dnl *** Look for /dev/random ***
3777 dnl ****************************
3779 AC_MSG_CHECKING([if usage of random device is requested])
3780 AC_ARG_ENABLE(dev-random,
3781 [  --disable-dev-random    disable the use of the random device (enabled by default)],
3782 try_dev_random=$enableval, try_dev_random=yes)
3784 AC_MSG_RESULT($try_dev_random)
3786 case "{$build}" in
3788 dnl IBM i does not have /dev/random, use unblocking only
3790     *-*-os400*)
3791     NAME_DEV_RANDOM="/dev/urandom"
3792     ;;
3794 dnl Win32 does not have /dev/random, they have their own method...
3796     *-mingw*|*-*-cygwin*)
3797     ac_cv_have_dev_random=no
3798     ;;
3800 dnl Everywhere else, it's /dev/random
3802     *)
3803     NAME_DEV_RANDOM="/dev/random"
3804     ;;
3805 esac
3807 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3809 dnl Now check if the device actually exists
3811 if test "x$try_dev_random" = "xyes"; then
3812     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3813     [if test -r "$NAME_DEV_RANDOM" ; then
3814         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3815     if test "x$ac_cv_have_dev_random" = "xyes"; then
3816         AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3817     fi
3818 else
3819     AC_MSG_CHECKING(for random device)
3820     ac_cv_have_dev_random=no
3821     AC_MSG_RESULT(has been disabled)
3824 if test "x$host_win32" = "xyes"; then
3825     AC_DEFINE(HAVE_CRYPT_RNG)
3828 if test "x$ac_cv_have_dev_random" = "xno" \
3829     && test "x$host_win32" = "xno"; then
3830     AC_MSG_WARN([[
3832 *** A system-provided entropy source was not found on this system.
3833 *** Because of this, the System.Security.Cryptography random number generator
3834 *** will throw a NotImplemented exception.
3836 *** If you are seeing this message, and you know your system DOES have an
3837 *** entropy collection in place, please report an issue on GitHub and
3838 *** provide information about the system and how to access the random device.
3840 *** Otherwise you can install either egd or prngd and set the environment
3841 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3842 ***]])
3845 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)
3847 AC_MSG_CHECKING([if big-arrays are to be enabled])
3848 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)
3849 if test "x$enable_big_arrays" = "xyes" ; then
3850     if  test "x$ac_cv_sizeof_void_p" = "x8"; then
3851         AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3852     else
3853         AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3854     fi
3856 AC_MSG_RESULT($enable_big_arrays)
3858 dnl **************
3859 dnl *** DTRACE ***
3860 dnl **************
3862 AC_ARG_ENABLE(dtrace,[  --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3864 if test "x$enable_dtrace" = "xyes"; then
3865    if test "x$has_dtrace" = "xno"; then
3866           AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3867    fi
3868    AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3869    if test "x$DTRACE" = "xno"; then
3870           AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3871           enable_dtrace=no
3872    elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3873           AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3874           enable_dtrace=no
3875    fi
3878 dtrace_g=no
3879 if test "x$enable_dtrace" = "xyes"; then
3880         AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3881         DTRACEFLAGS=
3882         if test "x$ac_cv_sizeof_void_p" = "x8"; then
3883                 case "$host" in
3884                         powerpc-*-darwin*)
3885                         DTRACEFLAGS="-arch ppc64"
3886                         ;;
3887                         i*86-*-darwin*)
3888                         DTRACEFLAGS="-arch x86_64"
3889                         ;;
3890                         *)
3891                         DTRACEFLAGS=-64
3892                         ;;
3893                 esac
3894         else
3895                 case "$host" in
3896                         powerpc-*-darwin*)
3897                         DTRACEFLAGS="-arch ppc"
3898                         ;;
3899                         i*86-*-darwin*)
3900                         DTRACEFLAGS="-arch i386"
3901                         ;;
3902                         *)
3903                         DTRACEFLAGS=-32
3904                         ;;
3905                 esac
3906         fi
3907         AC_SUBST(DTRACEFLAGS)
3908         case "$host" in
3909                 *-*-solaris*)
3910                 dtrace_g=yes
3911                 ;;
3912         esac
3913         AC_CHECK_HEADERS([sys/sdt.h])
3915 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3916 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3918 dnl **************************
3919 dnl *** AOT cross offsets  ***
3920 dnl **************************
3922 AC_ARG_WITH(cross-offsets, [  --with-cross-offsets=<offsets file path>    Explicit AOT cross offsets file],
3923     AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3925 dnl **************
3926 dnl ***  LLVM  ***
3927 dnl **************
3929 AC_ARG_ENABLE(llvm,[  --enable-llvm     Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3930 AC_ARG_ENABLE(loadedllvm,[  --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3931 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)
3932 AC_ARG_ENABLE(llvm-runtime,[  --enable-llvm-runtime     Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3933 AC_ARG_ENABLE(llvm-asserts,[  --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3935 AC_ARG_WITH(llvm, [  --with-llvm=<llvm prefix>    Enable the LLVM back-end], enable_llvm=yes,)
3937 if test "x$enable_llvm" = "xdefault"; then
3938    enable_llvm=$enable_llvm_default
3941 enable_llvm_msvc_only="no"
3942 if test "x$enable_llvm" = "xyes"; then
3943         if test "x$host_win32" = "xyes"; then
3944                 if test "x$cross_compiling" = "xno"; then
3945                         case "$target" in
3946                         x86_64*)
3947                                 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
3948                                 enable_llvm_msvc_only="yes"
3949                                 ;;
3950                         i686*)
3951                                 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
3952                                 ;;
3953                         esac
3954                 fi
3955                 if test "x$enable_loadedllvm" = "xyes"; then
3956                         AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
3957                         enable_loadedllvm=no
3958                 fi
3959         fi
3962 internal_llvm="no"
3963 if test "x$enable_llvm" = "xyes"; then
3964         if test "x$with_llvm" != "x"; then
3965                 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3966                 if test x$host_win32 = xyes; then
3967                         EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
3968                 fi
3969                 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3970                         AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3971                 fi
3972         else
3973                 if test x$host_win32 = xyes; then
3974                         AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
3975                 else
3976                         AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3977                 fi
3978                 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3979                         internal_llvm=yes
3980                 fi
3981         fi
3983         LLVM_CODEGEN_LIBS="x86codegen"
3984         case "$target" in
3985         arm*)
3986                 LLVM_CODEGEN_LIBS="armcodegen"
3987                 ;;
3988         aarch64*)
3989                 LLVM_CODEGEN_LIBS="aarch64codegen"
3990                 ;;
3991         powerpc*)
3992                 LLVM_CODEGEN_LIBS="powerpccodegen"
3993                 ;;
3994         esac
3995         if test "x$host" != "x$target"; then
3996                 # No need for jit libs
3997                 LLVM_CODEGEN_LIBS=
3998         fi
4000         AC_SUBST(LLVM_CODEGEN_LIBS)
4001         AC_SUBST(EXTERNAL_LLVM_CONFIG)
4003         if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" &&  test "x$internal_llvm" = "xno"; then
4004                 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4005                 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4006         fi
4007         if test "x$enable_llvm_msvc_only" != "xyes"; then
4008                 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4009         else
4010                 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4011         fi
4012 fi # ENABLE_LLVM
4014 # AC_DEFINE necessary for correct restore behavior on Linux
4015 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4016 if test "x$internal_llvm" != "xno"; then
4017         if test "x$enable_llvm_msvc_only" != "xyes"; then
4018                 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4019         else
4020                 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4021         fi
4024 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4025 if test "x$enable_llvm_asserts" != "xno"; then
4026         if test "x$enable_llvm_msvc_only" != "xyes"; then
4027                 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4028         else
4029                 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4030         fi
4033 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4035 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
4036 if test "x$enable_loadedllvm" = "xyes"; then
4037         if test "x$enable_llvm_msvc_only" != "xyes"; then
4038                 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
4039         fi
4042 if test "x$enable_llvm" = "xyes"; then
4043         enable_llvm_runtime=yes
4046 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4047 if test "x$enable_llvm_runtime" = "xyes"; then
4048         if test "x$enable_llvm_msvc_only" != "xyes"; then
4049                 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4050         else
4051                 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4052         fi
4055 TARGET="unknown"
4056 ACCESS_UNALIGNED="yes"
4058 LIBC="libc.so.6"
4059 INTL="libc.so.6"
4060 SQLITE="libsqlite.so.0"
4061 SQLITE3="libsqlite3.so.0"
4062 X11="libX11.so"
4063 GDKX11="libgdk-x11-2.0.so.0"
4064 GTKX11="libgtk-x11-2.0.so.0"
4065 XINERAMA="libXinerama.so.1"
4067 sizeof_register="SIZEOF_VOID_P"
4069 jit_wanted=true
4070 boehm_supported=true
4071 BTLS_SUPPORTED=no
4072 BTLS_PLATFORM=
4074 case "$host" in
4075         wasm32*)
4076                 TARGET=WASM
4077                 arch_target=wasm
4078                 BTLS_SUPPORTED=no
4079                 ACCESS_UNALIGNED="no"
4080                 with_tls=pthread
4081                 target_wasm=yes
4082                 ;;
4083         mips*)
4084                 TARGET=MIPS;
4085                 arch_target=mips;
4086                 with_tls=pthread;
4087                 ACCESS_UNALIGNED="no"
4089                 AC_MSG_CHECKING(for mips n32)
4090                 AC_TRY_COMPILE([],[
4091                 #if _MIPS_SIM != _ABIN32
4092                 #error Not mips n32
4093                 #endif
4094                 ],[
4095                 AC_MSG_RESULT(yes)
4096                 sizeof_register=8
4097                 ],[
4098                 AC_MSG_RESULT(no)
4099                 ])
4100                 ;;
4101         i*86-*-*)
4102                 TARGET=X86;
4103                 arch_target=x86;
4104                 case $host_os in
4105                   solaris*)
4106                         LIBC="libc.so"
4107                         INTL="libintl.so"
4108                         if test "x$ac_cv_sizeof_void_p" = "x8"; then
4109                                 TARGET=AMD64
4110                                 arch_target=amd64
4111                         fi
4113                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4114                         # int astruct __attribute__ ((visibility ("hidden")));
4115                         # void foo ()
4116                         # {
4117                         #       void *p = &astruct;
4118                         # }
4119                         # gcc -fPIC --shared -o libfoo.so foo.c
4120                         # yields:
4121                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4122                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4123                         have_visibility_hidden=no
4124                         ;;
4125                   mingw*|cygwin*)
4126                         have_visibility_hidden=no
4127                         BTLS_SUPPORTED=no
4128                         BTLS_PLATFORM=i386
4129                         ;;
4130                   haiku*)
4131                         LIBC=libroot.so
4132                         ;;
4133                   linux*)
4134                         AOT_SUPPORTED="yes"
4135                         BTLS_SUPPORTED=yes
4136                         BTLS_PLATFORM=i386
4137                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4138                         ;;
4139                   darwin*)
4140                         AOT_SUPPORTED="yes"
4141                         BTLS_SUPPORTED=yes
4142                         BTLS_PLATFORM=i386
4143                         ;;
4144                   openbsd*|freebsd*|kfreebsd-gnu*)
4145                         AOT_SUPPORTED="yes"
4146                         BTLS_SUPPORTED=yes
4147                         BTLS_PLATFORM=i386
4148                         ;;
4149                 esac
4150                 ;;
4151         x86_64-*-* | amd64-*-*)
4152                 TARGET=AMD64;
4153                 arch_target=amd64;
4154                 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4155                         AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4156                         sizeof_register=8
4157                 fi
4158                 case $host_os in
4159                   linux*)
4160                         AOT_SUPPORTED="yes"
4161                         BTLS_SUPPORTED=yes
4162                         BTLS_PLATFORM=x86_64
4163                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4164                         ;;
4165                   darwin*)
4166                         AOT_SUPPORTED="yes"
4167                         BTLS_SUPPORTED=yes
4168                         BTLS_PLATFORM=x86_64
4169                         boehm_supported=false
4170                         ;;
4171                   openbsd*|freebsd*|kfreebsd-gnu*)
4172                         AOT_SUPPORTED="yes"
4173                         BTLS_SUPPORTED=yes
4174                         BTLS_PLATFORM=x86_64
4175                         ;;
4176                   mingw*|cygwin*)
4177                         BTLS_SUPPORTED=no
4178                         BTLS_PLATFORM=x86_64
4179                         ;;
4180                 esac
4181                 ;;
4182         sparc*-*-*)
4183                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4184                    TARGET=SPARC64
4185                 else
4186                         TARGET=SPARC
4187                 fi
4188                 arch_target=sparc;
4189                 ACCESS_UNALIGNED="no"
4190                 case $host_os in
4191                   linux*) ;;
4192                   *)
4193                         LIBC="libc.so"
4194                         INTL="libintl.so"
4195                 esac
4196                 if test x"$GCC" = xyes; then
4197                         # We don't support v8 cpus
4198                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4199                 fi
4200                 if test x"$AR" = xfalse; then
4201                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4202                 fi
4203                 ;;
4204         *-mingw*|*-*-cygwin*)
4205                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4206                 have_visibility_hidden=no
4207                 INTL="intl"
4208                 case "$host" in
4209                         x86_64*mingw*)
4210                                 # Old Boehm fails to compile for x86_64-mingw.
4211                                 # It is trivial to fix, but just silently drop it.
4212                                 boehm_supported=false
4213                                 ;;
4214                 esac
4215                 ;;
4216         macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4217         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4218         powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4219                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4220                         TARGET=POWERPC64;
4221                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4222                         if ! (echo $CC | grep -q -- 'clang'); then
4223                                 CFLAGS="$CFLAGS -mminimal-toc"
4224                         fi
4225                 else
4226                         TARGET=POWERPC;
4227                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4228                 fi
4229                 arch_target=ppc;
4230                 case $host_os in
4231                   aix*|os400*)
4232                         BTLS_SUPPORTED=yes
4233                         BTLS_PLATFORM=powerpc
4234                         dnl on AIX/PASE, shared libraries can be inside archives
4235                         dnl if they are, we specify them by lib.a(lib.so)
4236                         dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4237                         LIBC="libc.a(shr_64.o)"
4238                         INTL="libintl.a(libintl.so.8)"
4239                         ;;
4240                   linux*)
4241                         BTLS_SUPPORTED=yes
4242                         BTLS_PLATFORM=powerpc
4243                         ;;
4244                 esac
4245                 ;;
4246         armv7k-*-darwin*)
4247                 TARGET=ARM;
4248                 TARGET_SYS=WATCHOS
4249                 arch_target=arm;
4250                 arm_fpu=VFP_HARD
4251                 ACCESS_UNALIGNED="no"
4252                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4253                 ;;
4255         arm*-darwin*)
4256                 TARGET=ARM;
4257                 arch_target=arm;
4258                 ACCESS_UNALIGNED="no"
4259                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4260                 ;;
4261         arm*-linux*)
4262                 TARGET=ARM;
4263                 arch_target=arm;
4264                 ACCESS_UNALIGNED="no"
4265                 AOT_SUPPORTED="yes"
4266                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4267                 BTLS_SUPPORTED=yes
4268                 BTLS_PLATFORM=arm
4269                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4270                 case "$target" in
4271                 arm*-linux*-gnueabi)
4272                         BTLS_PLATFORM=armsoft
4273                         ;;
4274                 esac
4275                 ;;
4276         arm*-netbsd*-eabi*)
4277                 TARGET=ARM;
4278                 arch_target=arm;
4279                 ACCESS_UNALIGNED="no"
4280                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4281                 ;;
4282         aarch64-*darwin*ilp32)
4283                 TARGET=ARM6432
4284                 arch_target=arm64
4285                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4286                 sizeof_register=8
4287                 # assuming no other target other than watchOS is using aarch64*darwin triple
4288                 TARGET_SYS=WATCHOS
4289                 ;;
4290         aarch64-*)
4291                 # https://lkml.org/lkml/2012/7/15/133
4292                 TARGET=ARM64
4293                 arch_target=arm64
4294                 boehm_supported=false
4295                 AOT_SUPPORTED="yes"
4296                 BTLS_SUPPORTED=yes
4297                 BTLS_PLATFORM=aarch64
4298                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4299                 ;;
4300         s390x-*-linux*)
4301                 TARGET=S390X;
4302                 arch_target=s390x;
4303                 ACCESS_UNALIGNED="yes"
4304                 BTLS_SUPPORTED=yes
4305                 BTLS_PLATFORM=s390x
4306                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4307                 ;;
4308         riscv32-*)
4309                 TARGET=RISCV32
4310                 ACCESS_UNALIGNED=no
4311                 AOT_SUPPORTED=no
4312                 BTLS_SUPPORTED=yes
4313                 BTLS_PLATFORM=riscv32
4314                 arch_target=riscv32
4315                 boehm_supported=false
4316                 ;;
4317         riscv64*)
4318                 TARGET=RISCV64
4319                 ACCESS_UNALIGNED=no
4320                 AOT_SUPPORTED=no
4321                 BTLS_SUPPORTED=yes
4322                 BTLS_PLATFORM=riscv64
4323                 arch_target=riscv64
4324                 boehm_supported=false
4325                 ;;
4326 esac
4328 HOST=$TARGET
4330 if test "x$host" != "x$target"; then
4331    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4332    enable_mcs_build=no
4333    enable_support_build=no
4334    BTLS_SUPPORTED=no
4335    # Can't use tls, since it depends on the runtime detection of tls offsets
4336    # in mono-compiler.h
4337    with_tls=pthread
4338    target_mach=no
4339    case "$target" in
4340    wasm32*)
4341                 TARGET=WASM
4342                 arch_target=wasm
4343                 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4344                 ;;
4345    arm*-darwin*)
4346                 TARGET=ARM;
4347                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4348                 case "$target" in
4349                 armv7k-*)
4350                         arm_fpu=VFP_HARD
4351                         AC_DEFINE(TARGET_WATCHOS, 1, [...])
4352                         ;;
4353                 esac            
4354                 ;;
4355    powerpc64-ps3-linux-gnu)
4356                 TARGET=POWERPC64
4357                 arch_target=powerpc64
4358                 AC_DEFINE(TARGET_PS3, 1, [...])
4359                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4360                 # uses this define
4361                 AC_DEFINE(__mono_ppc64__, 1, [...])
4362                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4363                 sizeof_register=8
4364                 target_byte_order=G_BIG_ENDIAN
4365                 ;;
4366    powerpc64-xbox360-linux-gnu)
4367                 TARGET=POWERPC64
4368                 arch_target=powerpc64
4369                 AC_DEFINE(TARGET_XBOX360, 1, [...])
4370                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4371                 # uses this define
4372                 sizeof_register=8
4373                 target_byte_order=G_BIG_ENDIAN
4374                 ;;
4375    arm*-linux-*)
4376                 TARGET=ARM;
4377                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4378                 ;;
4379    arm*-netbsd*-eabi*)
4380                 TARGET=ARM;
4381                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4382                 ;;
4383    i686*-linux-*)
4384                 TARGET=X86;
4385                 ;;
4386    i*86-apple-*)
4387                 TARGET=X86;
4388                 ;;
4389    x86_64*-linux-*)
4390                 TARGET=AMD64;
4391                 ;;
4392    x86_64-ps4-freebsd)
4393                 TARGET=AMD64;
4394                 AC_DEFINE(TARGET_PS4, 1, [...])
4395                 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4396                 CPPFLAGS="$CPPFLAGS"
4397                 target_win32=no
4398                 ;;
4399         aarch64*darwin*_ilp32)
4400                 TARGET=ARM6432;
4401                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4402                 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4403                 ;;
4404         aarch64-*)
4405                 TARGET=ARM64
4406                 ;;
4407         riscv32*)
4408                 TARGET=RISCV32
4409                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4410                 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4411                 arch_target=riscv32
4412                 target_mach=no
4413                 with_tls=pthread
4414                 ;;
4415         riscv64*)
4416                 TARGET=RISCV64
4417                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4418                 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4419                 arch_target=riscv64
4420                 target_mach=no
4421                 with_tls=pthread
4422                 ;;
4423         *)
4424                 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4425         esac
4427         case "$target" in
4428         *-darwin*)
4429                 target_mach=yes
4430                 ;;
4431         *-linux-android*)
4432                 AC_DEFINE(TARGET_ANDROID, 1, [...])
4433                 ;;
4434         esac
4437 case "$TARGET" in
4438 WASM)
4439         AC_DEFINE(TARGET_WASM, 1, [...])
4440         arch_target=wasm
4441         ;;
4442 X86)
4443         AC_DEFINE(TARGET_X86, 1, [...])
4444         arch_target=x86
4445         ;;
4446 AMD64)
4447         AC_DEFINE(TARGET_AMD64, 1, [...])
4448         arch_target=amd64
4449         ;;
4450 ARM)
4451         AC_DEFINE(TARGET_ARM, 1, [...])
4452         arch_target=arm
4453         ACCESS_UNALIGNED="no"
4454         ;;
4455 ARM64|ARM6432)
4456         AC_DEFINE(TARGET_ARM64, 1, [...])
4457         arch_target=arm64
4458         ;;
4459 POWERPC)
4460         AC_DEFINE(TARGET_POWERPC, 1, [...])
4461         ;;
4462 POWERPC64)
4463         AC_DEFINE(TARGET_POWERPC, 1, [...])
4464         AC_DEFINE(TARGET_POWERPC64, 1, [...])
4465         ;;
4466 S390X)
4467         AC_DEFINE(TARGET_S390X, 1, [...])
4468         ;;
4469 MIPS)
4470         AC_DEFINE(TARGET_MIPS, 1, [...])
4471         ;;
4472 SPARC)
4473         AC_DEFINE(TARGET_SPARC, 1, [...])
4474         ;;
4475 SPARC64)
4476         AC_DEFINE(TARGET_SPARC64, 1, [...])
4477         ;;
4478 RISCV32)
4479         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4480         AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4481         ;;
4482 RISCV64)
4483         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4484         AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4485         ;;
4486 esac
4488 case "$TARGET" in
4489 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4490     target_sizeof_void_p=4
4491     ;;
4492 *64* | S390X)
4493     target_sizeof_void_p=8
4494     ;;
4496     AC_MSG_ERROR([unknown target])
4497     ;;
4498 esac
4500 case "$HOST" in
4501 WASM)
4502         AC_DEFINE(HOST_WASM, 1, [...])
4503         ;;
4504 X86)
4505         AC_DEFINE(HOST_X86, 1, [...])
4506         ;;
4507 AMD64)
4508         AC_DEFINE(HOST_AMD64, 1, [...])
4509         ;;
4510 ARM)
4511         AC_DEFINE(HOST_ARM, 1, [...])
4512         ;;
4513 ARM64)
4514         AC_DEFINE(HOST_ARM64, 1, [...])
4515         ;;
4516 POWERPC)
4517         AC_DEFINE(HOST_POWERPC, 1, [...])
4518         ;;
4519 POWERPC64)
4520         AC_DEFINE(HOST_POWERPC, 1, [...])
4521         AC_DEFINE(HOST_POWERPC64, 1, [...])
4522         ;;
4523 S390X)
4524         AC_DEFINE(HOST_S390X, 1, [...])
4525         ;;
4526 MIPS)
4527         AC_DEFINE(HOST_MIPS, 1, [...])
4528         ;;
4529 SPARC)
4530         AC_DEFINE(HOST_SPARC, 1, [...])
4531         ;;
4532 SPARC64)
4533         AC_DEFINE(HOST_SPARC64, 1, [...])
4534         ;;
4535 RISCV32)
4536         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4537         AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4538         ;;
4539 RISCV64)
4540         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4541         AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4542         ;;
4543 esac
4545 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4546 case "$HOST" in
4547 X86 | AMD64 | ARM | ARM64)
4548         MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4549         ;;
4550 esac
4552 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4553 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4555 dnl *************
4556 dnl *** VTUNE ***
4557 dnl *************
4559 AC_ARG_ENABLE(vtune,[  --enable-vtune   Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4560 AC_ARG_WITH(vtune, [  --with-vtune=<vtune prefix>       Enable jit vtune profiling], enable_vtune=yes,)
4562 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4564 if test "x$enable_vtune" = "xyes"; then
4565         if test "x$with_vtune" = "x"; then
4566                 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4567         else
4568                 VTUNE_PATH=$with_vtune
4569         fi
4570         VTUNE_INCLUDE=$VTUNE_PATH/include
4571         case "$TARGET" in
4572         X86)
4573                 VTUNE_LIB=$VTUNE_PATH/lib32
4574                 ;;
4575         AMD64)
4576                 VTUNE_LIB=$VTUNE_PATH/lib64
4577                 ;;
4578         *)
4579                 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4580                 ;;
4581         esac
4582         if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4583                 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4584         fi
4585         if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4586                 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4587         fi
4589         VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4590         VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4592         AC_SUBST(VTUNE_LIBS)
4593         AC_SUBST(VTUNE_CFLAGS)
4595 dnl Use GCC atomic ops if they work on the target.
4596 if test x$GCC = "xyes"; then
4597         case $TARGET in
4598         X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4599                 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4600                 ;;
4601         esac
4604 if test "x$target_mach" = "xyes"; then
4606    if test "x$TARGET_SYS" = "xWATCHOS"; then
4607           AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4608           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4609           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4610           BTLS_SUPPORTED=no
4611    elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64" -o "x$TARGET" = "xARM6432"; then
4612           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4613           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4614           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4615           BTLS_SUPPORTED=no
4616           target_ios=yes
4617    else
4618        AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4619        #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4620        #error fail this for ios
4621        #endif
4622        ], [
4623                   AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4624           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4625           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4626           target_osx=yes
4627        ], [
4628           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4629           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4630           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4631           BTLS_SUPPORTED=no
4632                   target_ios=yes
4633        ])
4634         fi
4635    AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4638 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4640 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4642 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4643    AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4644 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4645    AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4646 else
4647    AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4650 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4652 if test "x$sizeof_register" = "x4"; then
4653   AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4654 elif test "x$sizeof_register" = "x8"; then
4655   AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4656 else
4657   AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4660 if test "x$have_visibility_hidden" = "xyes"; then
4661    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4664 if test "x$have_deprecated" = "xyes"; then
4665    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4668 dnl 
4669 dnl Simple Generational checks (sgen)
4671 SGEN_DEFINES=
4672 AC_ARG_WITH(sgen,                    [  --with-sgen=yes,no             Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4673 AC_ARG_WITH(sgen-default-concurrent, [  --with-sgen-default-concurrent=yes,no             Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4674 if test x$buildsgen = xyes; then
4675    AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4676    SGEN_DEFINES="-DHAVE_SGEN_GC"
4678         conc_gc_msg=""
4679    if test x$with_sgen_default_concurrent != xno; then
4680        AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4681            conc_gc_msg=" (concurrent by default)"
4682    fi
4684    if test "x$gc_msg" = "x"; then
4685       gc_msg="sgen$conc_gc_msg"
4686    else
4687       gc_msg="sgen$conc_gc_msg and $gc_msg"
4688    fi
4690 AC_SUBST(SGEN_DEFINES)
4691 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4693 jit_status="Building and using the JIT"
4695 libsuffix=".so"
4697 case "$host" in
4698      *-*-darwin*)
4699         libsuffix=".dylib"
4700         LIBC="libc.dylib"
4701         INTL="libintl.dylib"
4702         SQLITE="libsqlite.0.dylib"
4703         SQLITE3="libsqlite3.0.dylib"
4704         X11="libX11.dylib"
4705         GDKX11="libgdk-x11-2.0.dylib"
4706         GTKX11="libgtk-x11-2.0.dylib"
4707         ;;
4708      *-*-*netbsd*)
4709         LIBC="libc.so"
4710         INTL="libintl.so"
4711         SQLITE="libsqlite.so"
4712         SQLITE3="libsqlite3.so"
4713         ;;
4714      *-*-kfreebsd*-gnu)
4715         LIBC="libc.so.0.1"
4716         INTL="libc.so.0.1"
4717         X11="libX11.so.6"
4718         ;;
4719     *-*-*freebsd*)
4720         LIBC="libc.so.7"
4721         INTL="libintl.so"
4722         SQLITE="libsqlite.so"
4723         SQLITE3="libsqlite3.so"
4724         ;;
4725     *-*-*openbsd*)
4726         LIBC="libc.so"
4727         INTL="libintl.so"
4728         SQLITE="libsqlite.so"
4729         SQLITE3="libsqlite3.so"
4730         ;;
4731     *-*-*linux*)
4732         AC_PATH_X
4733         dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4734         AC_MSG_CHECKING(for the soname of libX11.so)
4735         for i in $x_libraries $dlsearch_path; do
4736                 for r in 4 5 6; do
4737                         if test -f $i/libX11.so.$r; then
4738                                 X11=libX11.so.$r
4739                                 AC_MSG_RESULT($X11)
4740                         fi
4741                 done
4742         done
4743         
4744         if test "x$X11" = "xlibX11.so"; then
4745                 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4746                 X11=libX11.so.6
4747         fi
4748         ;;
4749 esac
4751 AC_SUBST(libsuffix)
4753 ######################################
4754 # EGLIB CHECKS
4755 ######################################
4757 GNUC_PRETTY=
4758 GNUC_UNUSED=
4759 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4760 if test x$GCC = xyes; then
4761    GNUC_UNUSED='__attribute__((__unused__))'
4762    GNUC_NORETURN='__attribute__((__noreturn__))'
4763    case $host_cpu in
4764      i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4765    esac
4767 AC_SUBST(GNUC_PRETTY)
4768 AC_SUBST(GNUC_UNUSED)
4769 AC_SUBST(GNUC_NORETURN)
4770 AC_SUBST(BREAKPOINT)
4772 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4774 case $host in
4775 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4776     PATHSEP='\\'
4777     SEARCHSEP=';'
4778     OS="WIN32"
4779     PIDTYPE='void *'
4780     ;;
4782     PATHSEP='/'
4783     SEARCHSEP=':'
4784     OS="UNIX"
4785     PIDTYPE='int'
4786     ;;
4787 esac
4789 case $host in
4790         *-*-solaris*)
4791         CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4792         ;;
4793 esac
4795 case $target in
4796 arm*-darwin*|aarch64*-*|riscv*)
4797     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4798     ;;
4799 i*86-*-darwin*)
4800     ORDER=G_LITTLE_ENDIAN
4801     ;;
4802 *-*-haiku*)
4803     LDFLAGS="$LDFLAGS -ltextencoding"
4804     ;;
4805 *-*-openbsd*)
4806     CFLAGS="$CFLAGS -pthread"
4807     LDFLAGS="$LDFLAGS -pthread"
4808     ;;
4809 esac
4811 AC_SUBST(ORDER)
4812 AC_SUBST(PATHSEP)
4813 AC_SUBST(SEARCHSEP)
4814 AC_SUBST(OS)
4815 AC_SUBST(PIDTYPE)
4817 # Defined for all targets/platforms using classic Windows API support.
4818 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4819 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4821 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4822 AC_CHECK_FUNCS(getrlimit)
4823 AC_CHECK_FUNCS(fork execv execve)
4824 AC_CHECK_FUNCS(waitpid)
4826 AC_ARG_WITH([overridable-allocators], [  --with-overridable-allocators  allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4828 if test x$with_overridable_allocators = xyes; then
4829         AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4830   AC_MSG_NOTICE([Overridable allocator support enabled])
4831 else
4832   AC_MSG_NOTICE([Overridable allocator support disabled])
4836 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4837 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4838 # removed once support for 10.6 is dropped.
4840 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4842 if test x$target_osx = xyes; then
4843 AC_CHECK_FUNCS(getpwuid_r)
4844 elif test x$target_ios = xno; then
4845 AC_CHECK_FUNCS(strndup getpwuid_r)
4848 AC_SEARCH_LIBS(sqrtf, m)
4850 # nanosleep may not be part of libc, also search it in other libraries
4851 AC_SEARCH_LIBS(nanosleep, rt)
4853 AC_SEARCH_LIBS(dlopen, dl)
4854 old_ldflags="${LDFLAGS}"
4855 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4856 if test $lt_cv_prog_gnu_ld = yes; then
4857         LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4858 else
4859         case $host in
4860         *-*-aix*|*-*-os400*)
4861                 ;;
4862         *)
4863                 dnl Try to use export-dynamic anyways
4864                 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4865                 ;;
4866         esac
4868 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4869 if test $found_export_dynamic = no; then
4870         LDFLAGS="${old_ldflags}"
4873 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4874 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4875 AC_CHECK_LIB(iconv, iconv_open)
4876 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4877 AC_SUBST(HAVE_ALLOCA_H)
4879 # Get the exact type of size_t, not just its size.
4880 # This is so we can find an exact printf format among u, lu, llu, I64u.
4881 # To avoid warnings about slight mismatches.
4882 # C99 runtime "zu" dependency is being avoided here.
4884 # We have to compile as C++ because C is too lenient
4885 # and lets the wrong thing compile, with warnings.
4887 # Note: "zu" or ifdef <something> have the advantage
4888 # of producing installable "biarch" headers. i.e. one Mac header
4889 # for Mac/x86 and Mac/amd64.
4891 AC_LANG_PUSH(C++)
4893 # Check long before int because it is the overwhelming Unix answer,
4894 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4896 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4898 AC_MSG_CHECKING(if size_t is unsigned long)
4899 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4900         #include <stddef.h>
4901         unsigned long *a = (size_t*)0;
4902 ])], [
4903         AC_MSG_RESULT(yes)
4904         AC_SUBST(GSIZE_FORMAT, '"lu"')
4905 ], [
4906         AC_MSG_RESULT(no)
4907         AC_MSG_CHECKING(if size_t is unsigned int)
4908         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4909                 #include <stddef.h>
4910                 unsigned *a = (size_t*)0;
4911         ])], [
4912                 AC_MSG_RESULT(yes)
4913                 AC_SUBST(GSIZE_FORMAT, '"u"')
4914         ], [
4915 # At this point the majority of systems have their answer,
4916 # and we descend into non-standard or new-standard territory.
4918 # Check __int64 first because I64 on some systems predates ll, enabling
4919 # new compiler/old runtime interop, and the types always have the same size.
4920                 AC_MSG_RESULT(no)
4921                 AC_MSG_CHECKING(if size_t is unsigned __int64)
4922                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4923                         #include <stddef.h>
4924                         unsigned __int64 *a = (size_t*)0;
4925                 ])], [
4926                         AC_MSG_RESULT(yes)
4927                         AC_SUBST(GSIZE_FORMAT, '"I64u"')
4928                 ], [
4929                         AC_MSG_RESULT(no)
4930                         AC_MSG_CHECKING(if size_t is unsigned long long)
4931                         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4932                                 #include <stddef.h>
4933                                 unsigned long long *a = (size_t*)0;
4934                         ])], [
4935                                 AC_MSG_RESULT(yes)
4936                                 AC_SUBST(GSIZE_FORMAT, '"llu"')
4937                         ], [
4938                                 AC_MSG_RESULT(no)
4939                                 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4940                         ] )
4941                 ] )
4942         ] )
4943 ] )
4945 AC_LANG_POP
4947 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4948 # This provides for an exact match with functions that
4949 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4950 # uintptr_t is not necessarily the same.
4952 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4953 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4955 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4956    GSIZE="size_t"
4957    GSSIZE="ptrdiff_t"
4958 else
4959    GSIZE="uintptr_t"
4960    GSSIZE="intptr_t"
4963 AC_SUBST(GSIZE)
4964 AC_SUBST(GSSIZE)
4965 AC_SUBST(GSIZE_FORMAT)
4968 # END OF EGLIB CHECKS
4971 AC_ARG_WITH([libgdiplus],
4972         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4973         [], [with_libgdiplus=installed])
4975 # default install location
4976 libgdiplus_install_loc=libgdiplus${libsuffix}
4977 case "$host" in
4978     *-*-*linux*)
4979     libgdiplus_install_loc=libgdiplus${libsuffix}.0
4980     ;;
4981 esac
4983 case $with_libgdiplus in
4984     no)
4985     libgdiplus_loc=
4986     ;;
4988     installed)
4989     libgdiplus_loc=
4990     if test x$cross_compiling = xno; then
4991         if test x$host_darwin = xyes; then
4992             a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4993             if test -x $a; then
4994               libgdiplus_install_loc=$a
4995               libgdiplus_loc=$a
4996             fi
4997         fi
4998     fi
4999     ;;
5001     yes|sibling)
5002     libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5003     ;;
5005     /*) # absolute path, assume it is an install location
5006     libgdiplus_loc=$with_libgdiplus
5007     libgdiplus_install_loc=$with_libgdiplus
5008     ;;
5010     *)
5011     libgdiplus_loc=`pwd`/$with_libgdiplus
5012     ;;
5013 esac
5014 AC_SUBST(libgdiplus_loc)
5015 AC_SUBST(libgdiplus_install_loc)
5017 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)
5018 if test "x$icall_symbol_map" = "xyes"; then
5019    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5022 AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5023 if test "x$icall_export" = "xyes"; then
5024    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5027 AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5028 if test "x$icall_tables" = "xno"; then
5029    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5032 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5034 if test "x$with_tls" = "x__thread"; then
5035         AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5036         # Pass the information to libgc
5037         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5038         AC_MSG_CHECKING(if the tls_model attribute is supported)
5039         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5040                 ], [
5041                         AC_MSG_RESULT(yes)
5042                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5043                 ], [
5044                         AC_MSG_RESULT(no)
5045         ])
5048 if test ${TARGET} = ARM; then
5049         dnl ******************************************
5050         dnl *** Check to see what FPU is available ***
5051         dnl ******************************************
5052         AC_MSG_CHECKING(which FPU to use)
5054         #
5055         # This is a bit tricky:
5056         #
5057         # if (__ARM_PCS_VFP) {
5058         #       /* mfloat-abi=hard == VFP with hard ABI */
5059         # } elif (!__SOFTFP__) {
5060         #       /* mfloat-abi=softfp == VFP with soft ABI */
5061         # } else {
5062         #       /* mfloat-abi=soft == no VFP */
5063         # }
5064         #
5065         # The exception is iOS (w/ GCC) where none of the above
5066         # are defined (but iOS always uses the 'softfp' ABI).
5067         #
5068         # No support for FPA.
5069         #
5071         fpu=NONE
5073         # iOS GCC always uses the 'softfp' ABI.
5074         if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5075                 fpu=VFP
5076         fi
5078         # Are we using the 'hard' ABI?
5079         if test x$fpu = xNONE; then
5080                 AC_TRY_COMPILE([], [
5081                         #ifndef __ARM_PCS_VFP
5082                         #error "Float ABI is not 'hard'"
5083                         #endif
5084                 ], [
5085                         fpu=VFP_HARD
5086                 ], [
5087                         fpu=NONE
5088                 ])
5089         fi
5091         # No 'hard' ABI. 'soft' or 'softfp'?
5092         if test x$fpu = xNONE; then
5093                 AC_TRY_COMPILE([], [
5094                         #ifdef __SOFTFP__
5095                         #error "Float ABI is not 'softfp'"
5096                         #endif
5097                 ], [
5098                         fpu=VFP
5099                 ], [
5100                         fpu=NONE
5101                 ])
5102         fi
5104         if test x$arm_fpu != x; then
5105            fpu=$arm_fpu
5106         fi
5108         AC_MSG_RESULT($fpu)
5109         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5110         unset fpu
5112         dnl *********************************************
5113         dnl *** Check which ARM version(s) we can use ***
5114         dnl *********************************************
5115         AC_MSG_CHECKING(which ARM version to use)
5117         AC_TRY_COMPILE([], [
5118                 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5119                 #error Not on ARM v5.
5120                 #endif
5121         ], [
5122                 arm_v5=yes
5124                 arm_ver=ARMv5
5125         ], [])
5127         AC_TRY_COMPILE([], [
5128                 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5129                 #error Not on ARM v6.
5130                 #endif
5131         ], [
5132                 arm_v5=yes
5133                 arm_v6=yes
5135                 arm_ver=ARMv6
5136         ], [])
5138         AC_TRY_COMPILE([], [
5139                 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5140                 #error Not on ARM v7.
5141                 #endif
5142         ], [
5143                 arm_v5=yes
5144                 arm_v6=yes
5145                 arm_v7=yes
5147                 arm_ver=ARMv7
5148         ], [])
5150         AC_MSG_RESULT($arm_ver)
5152         if test x$arm_v5 = xyes; then
5153                 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5154                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5155         fi
5157         if test x$arm_v6 = xyes; then
5158                 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5159                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5160         fi
5162         if test x$arm_v7 = xyes; then
5163                 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5164                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5165         fi
5168 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5169         AC_ARG_WITH([riscv-fpabi], [  --with-riscv-fpabi=auto,double,soft   Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5171         AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5173         if test x$fpabi = xauto; then
5174                 AC_TRY_COMPILE([], [
5175                         #ifdef __riscv_float_abi_double
5176                         #error "double"
5177                         #endif
5178                 ], [
5179                         fpabi=auto
5180                 ], [
5181                         fpabi=double
5182                 ])
5183         fi
5185         if test x$fpabi = xauto; then
5186                 AC_TRY_COMPILE([], [
5187                         #ifdef __riscv_float_abi_single
5188                         #error "single"
5189                         #endif
5190                 ], [
5191                         fpabi=auto
5192                 ], [
5193                         fpabi=single
5194                 ])
5195         fi
5197         if test x$fpabi = xauto; then
5198                 AC_TRY_COMPILE([], [
5199                         #ifdef __riscv_float_abi_soft
5200                         #error "soft"
5201                         #endif
5202                 ], [
5203                         fpabi=auto
5204                 ], [
5205                         fpabi=soft
5206                 ])
5207         fi
5209         case $fpabi in
5210         double)
5211                 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5212                 AC_MSG_RESULT([double-precision])
5213                 ;;
5214         single)
5215                 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5216                 AC_MSG_ERROR([single-precision, not supported])
5217                 ;;
5218         soft)
5219                 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5220                 AC_MSG_RESULT([soft float])
5221                 ;;
5222         auto)
5223                 AC_MSG_ERROR([unknown])
5224                 ;;
5225         *)
5226                 AC_MSG_ERROR([invalid option: $fpabi])
5227                 ;;
5228         esac
5231 if test ${TARGET} = unknown; then
5232         CPPFLAGS="$CPPFLAGS -DNO_PORT"
5233         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5236 if test "x$platform_android" = "xyes"; then
5237         case "x${TARGET}" in
5238         xARM)
5239                 case "x$arm_ver" in
5240                 xARMv5)
5241                         BTLS_SUPPORTED=yes
5242                         BTLS_PLATFORM=android-armv5
5243                         ;;
5244                 xARMv6)
5245                         BTLS_SUPPORTED=yes
5246                         BTLS_PLATFORM=android-armv6
5247                         ;;
5248                 xARMv7)
5249                         BTLS_SUPPORTED=yes
5250                         BTLS_PLATFORM=android-armv7
5251                         ;;
5252                 *)
5253                         BTLS_SUPPORTED=no
5254                         ;;
5255                 esac
5256                 ;;
5257         xARM64)
5258                 BTLS_SUPPORTED=yes
5259                 BTLS_PLATFORM=android-v8a
5260                 ;;
5261         xX86)
5262                 BTLS_SUPPORTED=yes
5263                 BTLS_PLATFORM=android-x86
5264                 ;;
5265         xAMD64)
5266                 BTLS_SUPPORTED=yes
5267                 BTLS_PLATFORM=android-x64
5268                 ;;
5269         *)
5270                 BTLS_SUPPORTED=no
5271                 ;;
5272         esac
5275 if test ${ACCESS_UNALIGNED} = no; then
5276         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5279 if test x$host_darwin = xyes; then
5280         AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5281         AS_IF(
5282                 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5283                 [AC_MSG_RESULT([no])],
5284                 [
5285                         # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5286                         AR_FLAGS="Scru"
5287                         RANLIB="$RANLIB -no_warning_for_no_symbols"
5288                         AC_MSG_RESULT([yes])
5289                 ]
5290         )
5293 case "x$libgc" in
5294         xincluded)
5295                 # Pass CPPFLAGS to libgc configure
5296                 # We should use a separate variable for this to avoid passing useless and
5297                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5298                 # This should be executed late so we pick up the final version of CPPFLAGS
5299                 # The problem with this approach, is that during a reconfigure, the main
5300                 # configure scripts gets invoked with these arguments, so we use separate
5301                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5302                 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5303                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5304                         TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5305                 fi
5306                 # Don't pass -finstrument-for-thread-suspension in, 
5307                 # if these are instrumented it will be very bad news 
5308                 # (infinite recursion, undefined parking behavior, etc)
5309                 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5310                 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\""
5311                 if test "x$support_boehm" = "xyes"; then
5312                         AC_CONFIG_SUBDIRS(libgc)
5313                 fi
5314                 ;;
5315 esac
5317 MALLOC_MEMPOOLS=no
5318 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5319         if test x$with_malloc_mempools = xyes; then
5320                 MALLOC_MEMPOOLS=yes
5321                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5322         fi
5326 DISABLE_MCS_DOCS=default
5327 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
5328         if test x$with_mcs_docs != xyes; then
5329                 DISABLE_MCS_DOCS=yes
5330         fi
5332 if test -n "$INSTALL_4_x_TRUE"; then :
5333         DISABLE_MCS_DOCS=yes
5335 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5336    DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5339 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)],[
5340         if test x$with_lazy_gc_thread_creation != xno ; then
5341                 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5342         fi
5343 ], [with_lazy_gc_thread_creation=no])
5345 dnl *****************************
5346 dnl *** Thread suspend policy ***
5347 dnl *****************************
5349 dnl Set a default hybrid or cooperative suspend on some platforms
5351 dnl Coop default is set by the bitcode preset.
5353 dnl If coop isn't on by default, maybe hybrid should be?
5354 if test x$enable_cooperative_suspend_default != xyes; then
5355         case $HOST in
5356         X86 | AMD64)
5357                 dnl Some host/target confusion, there's no host_osx (and
5358                 dnl host_darwin would be true on iOS not just macOS).
5359                 if test x$target_osx = xyes; then
5360                         enable_hybrid_suspend_default=yes
5361                 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5362                         enable_hybrid_suspend_default=yes
5363                 fi
5364                 ;;
5365         esac
5368 dnl Now check if there were flags overriding the defaults
5370 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])
5371 AC_ARG_ENABLE(cooperative_suspend, [  --enable-cooperative-suspend      Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5373 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5374         enable_cooperative_suspend=$with_cooperative_gc
5377 if test x$enable_cooperative_suspend = xdefault; then
5378         enable_cooperative_suspend=$enable_cooperative_suspend_default
5381 if test x$enable_cooperative_suspend != xno; then
5382         AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5385 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5387 AC_ARG_ENABLE(hybrid_suspend, [ --enable-hybrid-suspend     Enable hybrid stop-the-world garbage collection (sgen only) - cooperative suspend for threads running managed and runtime code, and preemptive suspend for threads running native and P/Invoke code (defaults to no)], [], [enable_hybrid_suspend=default])
5389 if test x$enable_hybrid_suspend = xdefault; then
5390    enable_hybrid_suspend=$enable_hybrid_suspend_default
5393 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5394         AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5397 if test x$enable_hybrid_suspend != xno ; then
5398         AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5401 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5403 dnl End of thread suspend policy
5405 dnl ***************************
5406 dnl *** feature experiments ***
5407 dnl ***************************
5409 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5410 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST       Enable experimental fatures from the comma-separate LIST.  Available experiments: null],[
5412         if test x$enable_experiment != x ; then
5413                 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5414         fi
5415         for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5416                 eval "mono_experiment_test_enable_$feature='yes'"
5417         done
5419         if test "x$mono_experiment_test_enable_all" = "xyes"; then
5420                 eval "mono_experiment_test_enable_null='yes'"
5421                 true
5422         fi
5424         if test "x$mono_experiment_test_enable_null" = "xyes"; then
5425                 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5426         fi
5427 ],[])
5429 dnl **********************
5430 dnl *** checked builds ***
5431 dnl **********************
5433 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, crash_reporting],[
5435         if test x$enable_checked_build != x ; then
5436                 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5437         fi
5438         for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5439                 eval "mono_checked_build_test_enable_$feature='yes'"
5440         done
5442         if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5443                 eval "mono_checked_build_test_enable_gc='yes'"
5444                 eval "mono_checked_build_test_enable_metadata='yes'"
5445                 eval "mono_checked_build_test_enable_thread='yes'"
5446                 eval "mono_checked_build_test_enable_private_types='yes'"
5447                 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5448         fi
5450         if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5451                 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5452         fi
5454         if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5455                 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5456         fi
5458         if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5459                 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5460         fi
5462         if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5463                 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5464         fi
5466         if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5467                 # Required
5468                 with_overridable_allocators=yes
5469                 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5471                 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5472         fi
5473 ], [])
5475 dnl End of checked builds
5477 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5479 AC_CHECK_HEADER([malloc.h], 
5480                 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
5481                         [Define to 1 if you have /usr/include/malloc.h.])],,)
5483 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5484 # instead of libmono-static.a
5485 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5486    LIBMONO_LA=libmini-static.la
5487 else
5488    if test x$buildsgen = xyes; then
5489       LIBMONO_LA=libmonosgen-$API_VER.la
5490    else
5491       LIBMONO_LA=libmonoboehm-$API_VER.la
5492    fi
5494 AC_SUBST(LIBMONO_LA)
5496 dnl **************
5497 dnl ***  Btls  ***
5498 dnl **************
5500 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5501 AC_ARG_ENABLE(btls-lib, [  --disable-btls-lib             Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5502 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
5503 AC_ARG_WITH(btls_android_api, [  --with-btls-android-api        Android NDK API level for BTLS build])
5504 AC_ARG_WITH(btls_android_cmake_toolchain, [  --with-btls-android-cmake-toolchain        Path to the cmake toolchain file for Android])
5505 AC_ARG_WITH(btls_android_ndk_asm_workaround, [  --with-btls-android-ndk-asm-workaround        Work around a problem with NDK r18+ clang compiler when compiling some AES assembly for ARM])
5507 if test "x$with_btls_android_api" = "x" ; then
5508         case "$BTLS_PLATFORM" in
5509                 android-armv5)
5510                         with_btls_android_api=16" ;;
5511                 android-armv6)
5512                         with_btls_android_api=16" ;;
5513                 android-armv7)
5514                         with_btls_android_api=16 ;;
5515                 android-v8a)
5516                         with_btls_android_api=21 ;;
5517                 android-x86)
5518                         with_btls_android_api=16 ;;
5519                 android-x64)
5520                         with_btls_android_api=21 ;;
5521         esac
5524 if test "x$enable_btls" = "xno"; then
5525    enable_btls_lib=no
5528 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5530 btls_android=no
5531 if test "x$enable_btls" = "xyes"; then
5532         AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5533         if test "x$CMAKE" = "xno"; then
5534                 AC_MSG_ERROR("cmake not found")
5535         fi
5537         BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5538         AC_SUBST(BTLS_ROOT)
5540         btls_arch=
5541         btls_cflags=
5542         BTLS_CMAKE_ARGS=
5544         if test "x$host_win32" = "xyes"; then
5545                 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5546         fi
5548         case "$BTLS_PLATFORM" in
5549         i386)
5550                 btls_arch=i386
5551                 btls_cflags="-m32"
5552                 case $host_os in
5553                         darwin*)
5554                                 btls_cflags="$btls_cflags -arch i386"
5555                                 ;;
5556                         mingw*|cygwin*)
5557                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5558                                 if test "x$HAVE_YASM" != "xyes"; then
5559                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5560                                 fi
5561                                 ;;
5562                 esac
5563                 ;;
5564         x86_64)
5565                 btls_arch=x86_64
5566                 case $host_os in
5567                         mingw*|cygwin*)
5568                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5569                                 if test "x$HAVE_YASM" != "xyes"; then
5570                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5571                                 fi
5572                                 ;;
5573                 esac
5574                 ;;
5575         arm)
5576                 btls_arch=arm
5577                 btls_cflags="-DOPENSSL_NO_ASM=1"
5578                 ;;
5579         armsoft)
5580                 btls_arch=arm
5581                 btls_cflags="-DOPENSSL_NO_ASM=1"
5582                 ;;
5583         aarch64)
5584                 btls_arch=aarch64
5585                 btls_cflags="-march=armv8-a+crypto"
5586                 ;;
5587         s390x)
5588                 btls_arch=s390x
5589                 ;;
5590         powerpc)
5591                 btls_arch=powerpc
5592                 case $host_os in
5593                         aix*|os400*)
5594                                 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5595                                 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5596                 esac
5597                 ;;
5598         android-armv5)
5599                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5600                 ;;
5601         android-armv6)
5602                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5603                 ;;
5604         android-armv7)
5605                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5606                 ;;
5607         android-v8a)
5608                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5609                 ;;
5610         android-x86)
5611                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5612                 ;;
5613         android-x64)
5614                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5615                 ;;
5616         riscv32)
5617                 btls_arch=riscv32
5618                 ;;
5619         riscv64)
5620                 btls_arch=riscv64
5621                 ;;
5622         *)
5623                 AC_MSG_ERROR(Invalid BTLS platform)
5624         esac
5626         if test "x$platform_android" = "xyes"; then
5627                 if test "x$with_btls_android_cmake_toolchain" = "x"; then
5628                    with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5629                 fi
5631                 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
5632                    BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
5633                 fi
5635                 btls_android=yes
5636                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
5637                 if test "x$with_btls_android_ndk" != "x"; then
5638                         BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5639                 else
5640                         AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5641                 fi
5642         fi
5644         if test "x$btls_arch" != "x"; then
5645                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5646         fi
5648         BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5649         AC_SUBST(BTLS_ARCH)
5650         AC_SUBST(BTLS_CFLAGS)
5651         AC_SUBST(BTLS_PLATFORM)
5652         AC_SUBST(BTLS_CMAKE_ARGS)
5654         AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5655 else
5656         enable_btls=no
5659 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5661 if test x$DISABLE_MCS_DOCS = xyes; then
5662    docs_dir=""
5663 else
5664    docs_dir=docs
5666 AC_SUBST(docs_dir)
5668 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
5669 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5670 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5672 libmono_ldflags="$libmono_ldflags $LIBS"
5674 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5675 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5676 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5677 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5678 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5679 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5680 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5681 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5682 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5683 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5684 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
5685 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5686 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5687 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5688 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5689 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5690 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5691 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5692 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5693 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5694 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5695 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5696 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5697 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5699 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5701 AC_SUBST(LIBC)
5702 AC_SUBST(INTL)
5703 AC_SUBST(SQLITE)
5704 AC_SUBST(SQLITE3)
5705 AC_SUBST(X11)
5706 AC_SUBST(GDKX11)
5707 AC_SUBST(GTKX11)
5708 AC_SUBST(XINERAMA)
5709 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5710 AC_SUBST(arch_target)
5712 #This must always be defined when building the runtime
5713 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5715 mono_build_root=`pwd`
5716 AC_SUBST(mono_build_root)
5718 AC_ARG_ENABLE(msvc,[  --enable-msvc    Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5719 if test x$host_win32 = xno; then
5720         if test x$enable_msvc = xyes; then
5721                 echo "Error, --enable-msvc only supported for Windows builds."
5722                 exit 1
5723         fi
5725 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5727 if test "x$enable_msvc" = "xyes"; then
5728         if test "x$support_boehm" = "xyes"; then
5729                 echo "Error, Boehm GC is not supported when using --enable-msvc."
5730                 exit 1
5731         fi
5732         mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5733         if test "x$host_cpu" = "xi686"; then
5734                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5735                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5736                 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5737                 mono_runtime_wrapper=$mono_runtime
5738         else
5739                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5740                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5741                 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5742                 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
5743         fi
5744         AC_SUBST(mono_msvc_build_dir)
5745         AC_SUBST(mono_msvc_build_lib_dir)
5746         AC_SUBST(mono_msvc_build_bin_dir)
5747 else
5748         mono_runtime=mono/mini/mono
5749         mono_runtime_wrapper=$mono_runtime
5752 AC_SUBST(mono_runtime)
5753 AC_SUBST(mono_runtime_wrapper)
5755 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5757 if test $csc_compiler = mcs; then
5758   CSC=$mcs_topdir/class/lib/build/mcs.exe
5759 else
5760   CSC=$CSC_LOCATION
5763 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5765 mono_cfg_root=$mono_build_root/runtime
5766 if test x$host_win32 = xyes; then
5767   if test "x$cross_compiling" = "xno"; then
5768     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5769     CSC=`cygpath -m -a $CSC`
5770     CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5771   else
5772     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5773   fi
5774 else
5775   mono_cfg_dir=$mono_cfg_root/etc
5778 if test "x$platform_android" = "xyes"; then
5779   mono_cfg_dir=
5782 AC_SUBST(mono_cfg_dir)
5784 AC_SUBST(CSC)
5786 AC_CONFIG_FILES([po/mcs/Makefile.in])
5788 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5789 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5790 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5792 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5793 [   depth=../../../..
5794     case $srcdir in
5795     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5796     .) reldir=$depth ;;
5797     *) reldir=$depth/$srcdir ;;
5798     esac
5799     $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5800     cd runtime/etc/mono/1.0
5801     rm -f machine.config
5802     $LN_S $reldir/data/net_1_1/machine.config machine.config
5803     cd $depth
5804 ],[LN_S='$LN_S'])
5806 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5807 [   depth=../../../..
5808     case $srcdir in
5809     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5810     .) reldir=$depth ;;
5811     *) reldir=$depth/$srcdir ;;
5812     esac
5813     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5814     cd runtime/etc/mono/2.0
5815     rm -f machine.config
5816     $LN_S $reldir/data/net_2_0/machine.config machine.config
5817     cd $depth
5818 ],[LN_S='$LN_S'])
5820 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5821 [   depth=../../../..
5822     case $srcdir in
5823     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5824     .) reldir=$depth ;;
5825     *) reldir=$depth/$srcdir ;;
5826     esac
5827     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5828     cd runtime/etc/mono/2.0
5829     rm -f web.config
5830     $LN_S $reldir/data/net_2_0/web.config web.config
5831     cd $depth
5832 ],[LN_S='$LN_S'])
5834 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5835 [   depth=../../..
5836     case $srcdir in
5837     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5838     .) reldir=$depth ;;
5839     *) reldir=$depth/$srcdir ;;
5840     esac
5841     $ac_aux_dir/install-sh -d runtime/etc/mono/
5842     cd runtime/etc/mono/
5843     rm -f browscap.ini
5844     $LN_S $reldir/data/browscap.ini browscap.ini
5845     cd $depth
5846 ],[LN_S='$LN_S'])
5848 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5849 [   depth=../../../../..
5850     case $srcdir in
5851     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5852     .) reldir=$depth ;;
5853     *) reldir=$depth/$srcdir ;;
5854     esac
5855     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5856     cd runtime/etc/mono/2.0/Browsers
5857     rm -f Compat.browser
5858     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5859     cd $depth
5860 ],[LN_S='$LN_S'])
5862 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5863 [   depth=../../../../..
5864     case $srcdir in
5865     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5866     .) reldir=$depth ;;
5867     *) reldir=$depth/$srcdir ;;
5868     esac
5869     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5870     cd runtime/etc/mono/4.0/Browsers
5871     rm -f Compat.browser
5872     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5873     cd $depth
5874 ],[LN_S='$LN_S'])
5876 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5877 [   depth=../../../../..
5878     case $srcdir in
5879     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5880     .) reldir=$depth ;;
5881     *) reldir=$depth/$srcdir ;;
5882     esac
5883     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5884     cd runtime/etc/mono/4.5/Browsers
5885     rm -f Compat.browser
5886     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5887     cd $depth
5888 ],[LN_S='$LN_S'])
5890 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5891 [   depth=../../../..
5892     case $srcdir in
5893     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5894     .) reldir=$depth ;;
5895     *) reldir=$depth/$srcdir ;;
5896     esac
5897     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5898     cd runtime/etc/mono/4.0
5899     rm -f machine.config
5900     $LN_S $reldir/data/net_4_0/machine.config machine.config
5901     cd $depth
5902 ],[LN_S='$LN_S'])
5904 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5905 [   depth=../../../..
5906     case $srcdir in
5907     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5908     .) reldir=$depth ;;
5909     *) reldir=$depth/$srcdir ;;
5910     esac
5911     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5912     cd runtime/etc/mono/4.0
5913     rm -f web.config
5914     $LN_S $reldir/data/net_4_0/web.config web.config
5915     cd $depth
5916 ],[LN_S='$LN_S'])
5918 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5919 [   depth=../../../..
5920     case $srcdir in
5921     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5922     .) reldir=$depth ;;
5923     *) reldir=$depth/$srcdir ;;
5924     esac
5925     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5926     cd runtime/etc/mono/4.5
5927     rm -f machine.config
5928     $LN_S $reldir/data/net_4_5/machine.config machine.config
5929     cd $depth
5930 ],[LN_S='$LN_S'])
5932 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5933 [   depth=../../../..
5934     case $srcdir in
5935     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5936     .) reldir=$depth ;;
5937     *) reldir=$depth/$srcdir ;;
5938     esac
5939     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5940     cd runtime/etc/mono/4.5
5941     rm -f web.config
5942     $LN_S $reldir/data/net_4_5/web.config web.config
5943     cd $depth
5944 ],[LN_S='$LN_S'])
5946 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])
5947 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])
5948 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
5951 # Mono.Native Support
5952 # -------------------
5953 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
5954 # It is built as a stand-alone shared library and not bundled with the runtime because we
5955 # may need to build two different versions of it.
5957 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
5958 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
5960 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
5961 # implementation accordingly.  We build a single `libmono-native` shared library.
5963 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
5965 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
5966 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
5967 # depending on platform.
5969 # We build two versions of the shared library:
5970 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
5971 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
5973 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
5974 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
5975 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
5977 # This can be called by automated tests both to ensure that the library has been correctly installed and also
5978 # to verify that it's the correct version of it.
5981 AC_MSG_CHECKING([Mono.Native support])
5982 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
5983 if test x$disable_mono_native = xyes; then
5984         mono_native=no
5985 elif test x$target_osx = xyes; then
5986         MONO_NATIVE_CC=$CC
5987         MONO_NATIVE_CXX=$CXX
5988         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
5989         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
5990         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
5991         MONO_NATIVE_CFLAGS=$CFLAGS
5992         MONO_NATIVE_LDFLAGS=$LDFLAGS
5994         mono_native=yes
5995         MONO_NATIVE_PLATFORM=macos
5996         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
5998         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
5999                 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6001         if test x$mono_native_compat = xyes; then
6002                 mono_native_compat=yes
6003                 mono_native_text="Mac OSX (compat + unified v10.12)"
6004                 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6005                 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6006                 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6007                 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6008                 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6010                 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6011                 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6012                 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6013                 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6014                 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6015                 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6016         else
6017                 mono_native_compat=no
6018                 mono_native_text="Mac OSX"
6019         fi
6020 elif test x$mono_native_platform_ios = xyes; then
6021         AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6023         AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6024                 if test x$mono_native_ios_sim = xyes; then
6025                         mono_native_ios_target=ios-simulator
6026                         mono_native_text="iOS Simulator"
6027                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6028                 else
6029                         mono_native_ios_target=iphoneos
6030                         mono_native_text="iOS Device"
6031                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6032                 fi
6033                 mono_native_unified_version="10.0"
6034                 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6035         ], [
6036                 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6037                         if test x$mono_native_ios_sim = xyes; then
6038                                 mono_native_ios_target=tvos-simulator
6039                                 mono_native_text="AppleTV Simulator"
6040                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6041                         else
6042                                 mono_native_ios_target=tvos
6043                                 mono_native_text="AppleTV Device"
6044                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6045                         fi
6046                         mono_native_unified_version="10.0"
6047                         mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6048                 ], [
6049                         AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6050                                 if test x$mono_native_ios_sim = xyes; then
6051                                         mono_native_ios_target=watchos-simulator
6052                                         mono_native_text="Apple Watch Simulator"
6053                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6054                                 else
6055                                         mono_native_ios_target=watchos
6056                                         mono_native_text="Apple Watch Device"
6057                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6058                                 fi
6059                                 mono_native_unified_version="5.0"
6060                                 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6061                         ], [
6062                                 AC_MSG_ERROR([Unknown iOS Target])
6063                         ])
6064                 ])
6065         ])
6067         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6069         if test x$with_bitcode = xyes; then
6070                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6071                 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6072         else
6073                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6074         fi
6076         if test x$enable_gss = xyes; then
6077                 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6078         fi
6080         MONO_NATIVE_CC=$CC
6081         MONO_NATIVE_CXX=$CXX
6082         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6083         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6084         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6085         MONO_NATIVE_CFLAGS=$CFLAGS
6086         MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6088         if test x$mono_native_compat = xyes; then
6089                 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6090                 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6091                 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6092                 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6093                 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6094                 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6096                 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6097                 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6098                 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6099                 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6100                 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6101                 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS $mono_native_ldflags | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6102         fi
6104         mono_native=yes
6105         MONO_NATIVE_PLATFORM=ios
6106 elif test x$host_linux = xyes; then
6107         mono_native_text="Linux"
6108         MONO_NATIVE_CC=$CC
6109         MONO_NATIVE_CXX=$CXX
6110         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6111         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6112         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6113         MONO_NATIVE_CFLAGS=$CFLAGS
6114         MONO_NATIVE_LDFLAGS=$LDFLAGS
6116         mono_native=yes
6117         mono_native_compat=no
6118         MONO_NATIVE_PLATFORM=linux
6120         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6121 elif test x$target_wasm = xyes; then
6122         mono_native_text="wasm"
6123         MONO_NATIVE_CC=$CC
6124         MONO_NATIVE_CXX=$CXX
6125         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6126         # The system.native code uses _WASM_ to check for wasm
6127         MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6128         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6129         MONO_NATIVE_CFLAGS=$CFLAGS
6130         MONO_NATIVE_LDFLAGS=$LDFLAGS
6132         mono_native=yes
6133         mono_native_compat=no
6134         MONO_NATIVE_PLATFORM=linux
6136         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6137 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6138         mono_native_text="AIX"
6139         MONO_NATIVE_CC=$CC
6140         MONO_NATIVE_CXX=$CXX
6141         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6142         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6143         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6144         MONO_NATIVE_CFLAGS=$CFLAGS
6145         MONO_NATIVE_LDFLAGS=$LDFLAGS
6147         mono_native=yes
6148         mono_native_compat=no
6149         MONO_NATIVE_PLATFORM=aix
6151         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6152 elif test x$platform_android = xyes; then
6153         mono_native_text="Android"
6154         MONO_NATIVE_CC=$CC
6155         MONO_NATIVE_CXX=$CXX
6156         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6157         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6158         MONO_NATIVE_CFLAGS=$CFLAGS
6159         MONO_NATIVE_LDFLAGS=$LDFLAGS
6160         MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6162         mono_native=yes
6163         mono_native_compat=no
6164         MONO_NATIVE_PLATFORM=android
6166         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6167 else
6168         mono_native=no
6169         mono_native_text="no"
6172 AC_MSG_RESULT($mono_native_text)
6174 if test x$mono_native_compat = xyes; then
6175         MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6176 else
6177         MONO_NATIVE_LIBRARY_NAME=libmono-native
6180 AC_SUBST(MONO_NATIVE_PLATFORM)
6181 AC_SUBST(MONO_NATIVE_CC)
6182 AC_SUBST(MONO_NATIVE_CXX)
6183 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6184 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6185 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6186 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6187 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6188 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6189 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6190 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6191 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6192 AC_SUBST(MONO_NATIVE_CFLAGS)
6193 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6194 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6195 AC_SUBST(MONO_NATIVE_LDFLAGS)
6196 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6197 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6198 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6199 AC_SUBST(MONO_NATIVE_LIBADD)
6201 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6202 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6203 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6204 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6205 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6206 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6207 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6209 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6210 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6211 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6212 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6213 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6215 ### C++ Linker selection
6217 # We have to lie to autotools, sometimes.
6219 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6220 # otherwise to CC.  We want C linking even if we're compiling with C++ enabled
6221 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6222 # except if we're linking with LLVM which relies on it.
6224 # Explanation of the hack:
6226 # According to
6227 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6228 # automake chooses the linker that it used to compile a target based on the
6229 # _SOURCES for that target.  If the target is comprised of only C code, it
6230 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6231 # linker arguments and a -o).  If the target _SOURCES include at least one C++ file, 
6232 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6234 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6235 # or libc++) linked in - even when Mono is written in C++, we take care not to
6236 # require the runtime library.  As a result, we don't want g++ or clang++ to do
6237 # the linking.  On the other hand if LLVM is enabled, then we _must_ use the
6238 # C++ linker - LLVM doesn't have the same restrictions.
6240 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6241 #  mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6242 #  automake's autodetection and lets us use the linker that we want.
6244 if test "x$enable_llvm_runtime" = "xyes"; then
6245         AC_SUBST(MONO_CXXLD, [$CXX])
6246 else
6247         AC_SUBST(MONO_CXXLD, [$CC])
6250 ### Set -Werror options
6252 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6254 if test x"$GCC" = xyes; then
6256         if test "x$with_jemalloc" != "xyes"; then
6258                 # incompatible-pointer-types requires gcc circa 5.x
6260                 ORIG_CFLAGS=$CFLAGS
6261                 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6262                 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6263                 AC_TRY_COMPILE([],[
6264                 ], [
6265                         AC_MSG_RESULT(yes)
6266                         CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6267                 ], [
6268                         AC_MSG_RESULT(no)
6269                         CFLAGS=$ORIG_CFLAGS
6270                 ])
6272                 CFLAGS="$CFLAGS -Werror=return-type"
6273         fi
6275         # Implicit function declarations are not 64 bit safe
6276         # Do this late, since this causes lots of configure tests to fail
6277         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6278         # jay has a lot of implicit declarations
6279         JAY_CFLAGS="-Wno-implicit-function-declaration"
6282 AC_SUBST(CFLAGS)
6283 AC_SUBST(CPPFLAGS)
6284 AC_SUBST(LDFLAGS)
6286 # Update all submodules recursively to ensure everything is checked out
6287 (cd $srcdir && scripts/update_submodules.sh)
6289 AC_OUTPUT([
6290 Makefile
6291 mono-uninstalled.pc
6292 acceptance-tests/Makefile
6293 llvm/Makefile
6294 scripts/mono-find-provides
6295 scripts/mono-find-requires
6296 mk/Makefile
6297 mono/Makefile
6298 mono/btls/Makefile
6299 mono/native/Makefile
6300 mono/utils/Makefile
6301 mono/utils/jemalloc/Makefile
6302 mono/metadata/Makefile
6303 mono/dis/Makefile
6304 mono/cil/Makefile
6305 mono/arch/Makefile
6306 mono/arch/x86/Makefile
6307 mono/arch/amd64/Makefile
6308 mono/arch/ppc/Makefile
6309 mono/arch/sparc/Makefile
6310 mono/arch/s390x/Makefile
6311 mono/arch/arm/Makefile
6312 mono/arch/arm64/Makefile
6313 mono/arch/mips/Makefile
6314 mono/arch/riscv/Makefile
6315 mono/sgen/Makefile
6316 mono/native/platform-type.c
6317 mono/native/platform-type-compat.c
6318 mono/native/platform-type-unified.c
6319 mono/tests/Makefile
6320 mono/tests/assembly-load-reference/Makefile
6321 mono/tests/tests-config
6322 mono/tests/gc-descriptors/Makefile
6323 mono/tests/testing_gac/Makefile
6324 mono/tests/llvmonly-mixed/Makefile
6325 mono/unit-tests/Makefile
6326 mono/benchmark/Makefile
6327 mono/mini/Makefile
6328 mono/profiler/Makefile
6329 mono/eglib/Makefile
6330 mono/eglib/eglib-config.h
6331 mono/eglib/test/Makefile
6332 m4/Makefile
6333 ikvm-native/Makefile
6334 scripts/Makefile
6335 man/Makefile
6336 docs/Makefile
6337 data/Makefile
6338 data/net_2_0/Makefile
6339 data/net_4_0/Makefile
6340 data/net_4_5/Makefile
6341 data/net_2_0/Browsers/Makefile
6342 data/net_4_0/Browsers/Makefile
6343 data/net_4_5/Browsers/Makefile
6344 data/mint.pc
6345 data/mono-2.pc
6346 data/monosgen-2.pc
6347 data/mono.pc
6348 data/mono-cairo.pc
6349 data/mono-options.pc
6350 data/mono-lineeditor.pc
6351 data/monodoc.pc
6352 data/dotnet.pc
6353 data/dotnet35.pc
6354 data/wcf.pc
6355 data/cecil.pc
6356 data/system.web.extensions_1.0.pc
6357 data/system.web.extensions.design_1.0.pc
6358 data/system.web.mvc.pc
6359 data/system.web.mvc2.pc
6360 data/system.web.mvc3.pc
6361 data/aspnetwebstack.pc
6362 data/reactive.pc
6363 samples/Makefile
6364 support/Makefile
6365 data/config
6366 tools/Makefile
6367 tools/locale-builder/Makefile
6368 tools/sgen/Makefile
6369 tools/pedump/Makefile
6370 runtime/Makefile
6371 msvc/Makefile
6372 po/Makefile
6375 if test x$host_win32 = xyes; then
6376    # Get rid of 'cyg' prefixes in library names
6377    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6378    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6379    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6380    # executable doesn't work...
6381    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6384 if test x$host_darwin = xyes; then
6385    # This doesn't seem to be required and it slows down parallel builds
6386    sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6390   case $prefix in
6391   NONE) prefix=$ac_default_prefix ;;
6392   esac
6393   case $exec_prefix in
6394   NONE) exec_prefix='${prefix}' ;;
6395   esac
6397   #
6398   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
6399   # any existing config.make.  This allows people to share the same source tree
6400   # with different build directories, one native and one cross
6401   #
6402   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6404     test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6406     echo "prefix=$prefix" > $mcs_topdir/build/config.make
6407     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6408     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6409     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6410     echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6411     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6412     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6413     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6414     echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6416     case $INSTALL in
6417     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6418     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6419     esac
6421     echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6423     export VERSION
6424     [myver=$($AWK 'BEGIN {
6425       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6426       if(length(vsplit [1]) > 4) {
6427         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6428       }
6429       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6430     }')]
6432     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6433     echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6435     if test x$host_darwin = xyes; then
6436       echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6437       echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6438       echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6439     elif test x$host_win32 = xyes; then
6440       echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6441       echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6442       echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6443     elif test x$host_linux = xyes; then
6444       echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6445       echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6446       echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6447     else
6448       echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6449       echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6450       echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6451     fi
6453     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6454       echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6455     fi
6457         if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6458            enable_system_aot=yes
6459         fi
6461     if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6462       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6463     fi
6465     if test x$DISABLE_MCS_DOCS = xyes; then
6466       echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6467     fi
6469     if test x$has_extension_module != xno; then
6470         echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6471     fi
6472     
6473     echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6474     
6475     if test "x$test_bcl_opt" = "xyes"; then    
6476       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6477     fi
6479     echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6480     echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6481     echo "VBCS_LOCATION?=" >> $srcdir/$mcsdir/build/config.make
6483     if test $csc_compiler = mcs; then
6484       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6485     fi
6487     if test "x$AOT_BUILD_FLAGS" != "x" ; then
6488       echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6489       echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6490       echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6491     fi
6493     if test "x$AOT_MODE" != "x" ; then
6494       echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6495     fi
6497     if test "x$enable_btls" = "xyes"; then
6498       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6499     fi
6501     if test "x$mono_native" = "xyes"; then
6502       echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6503     else
6504       echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6505     fi
6507     if test x$mono_native_compat = xyes; then
6508       echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6509     else
6510       echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6511     fi
6513     echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6514     echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6515     if test x$enable_compiler_server = xyes; then
6516       echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
6517     else
6518       echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
6519     fi
6520     echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
6522   fi
6526 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6528 btls_platform_string=
6529 if test x$enable_btls = xyes; then
6530         if test x$btls_android = xyes; then
6531                 btls_platform_string=" (android:$BTLS_PLATFORM)"
6532         else
6533                 btls_platform_string=" ($BTLS_PLATFORM)"
6534         fi
6537 thread_suspend_msg=
6538 if test x$buildsgen = xyes; then
6539         if test x$enable_cooperative_suspend != xno; then
6540                 thread_suspend_msg="Suspend:       Cooperative"
6541         elif test x$enable_hybrid_suspend != xno; then
6542                 thread_suspend_msg="Suspend:       Hybrid"
6543         else
6544                 thread_suspend_msg="Suspend:       Preemptive"
6545         fi
6547         
6548 echo "
6549         mcs source:    $mcsdir
6550         C# Compiler:   $csc_compiler
6552    Engine:
6553         Host:          $host
6554         Target:        $target
6555         GC:            $gc_msg 
6556         $thread_suspend_msg
6557         TLS:           $with_tls
6558         SIGALTSTACK:   $with_sigaltstack
6559         Engine:        $jit_status
6560         BigArrays:     $enable_big_arrays
6561         DTrace:        $enable_dtrace
6562         LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6563         Spectre:       $spectre_mitigation_status
6564         Mono.Native:   $mono_native_text
6566    Libraries:
6567         .NET 4.x:        $with_profile4_x
6568         Xamarin.Android: $with_monodroid
6569         Xamarin.iOS:     $with_monotouch
6570         Xamarin.WatchOS: $with_monotouch_watch
6571         Xamarin.TVOS:    $with_monotouch_tv
6572         Xamarin.Mac:     $with_xammac
6573         Windows AOT:     $with_winaot
6574         Orbis:           $with_orbis
6575         Unreal:          $with_unreal
6576         WebAssembly:     $with_wasm
6577         Test profiles:   AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6578         JNI support:     $jdk_headers_found
6579         libgdiplus:      $libgdiplus_msg
6580         zlib:            $zlib_msg
6581         BTLS:            $enable_btls$btls_platform_string
6582         jemalloc:        $with_jemalloc (always use: $with_jemalloc_always)
6583         crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6584         .NET Core:       $with_core
6585         $disabled
6587 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6588    AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)