Disable the named pipe tests on win32 due to OnNativeIOCompleted issue (7500?)
[mono-project.git] / configure.ac
blob76c7dd4d0521e77c2744d9b5ed7e971eac611bf8
1 # Process this file with autoconf to produce a configure script.
2 #AC_PREREQ([2.62])
4 AC_INIT(mono, [5.23.0],
5         [https://github.com/mono/mono/issues/new])
7 AC_CONFIG_SRCDIR([README.md])
8 AC_CONFIG_MACRO_DIR([m4])
9 AC_CANONICAL_SYSTEM
10 AC_CANONICAL_HOST
12 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
13 # The extra brackets are to foil regex-based scans.
14 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
16 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign subdir-objects]
17                  m4_esyscmd([case `automake --version | head -n 1` in    # parallel-tests is default in automake 1.13+, we need to explicitly enable it
18                              *1.11*|*1.12*) echo parallel-tests;;        # for 1.11 and 1.12 but not below as those versions don't recognize the flag
19                              esac]))                                     # TODO: remove this hack once we require automake 1.11+
21 AC_CONFIG_HEADERS([config.h])
22 AM_MAINTAINER_MODE
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=e686c1dd-3c2a-4dc9-b12e-ff0d524d6e6b
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 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
481 AC_CHECK_TOOL(CC, gcc, gcc)
482 AC_PROG_CC
483 AC_CHECK_TOOL(CXX, g++, g++)
484 AC_PROG_CXX
485 AM_PROG_AS
486 AC_PROG_INSTALL
487 AC_PROG_AWK
488 AM_PROG_CC_C_O
489 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
490 : ${CCAS='$(CC)'}
491 # Set ASFLAGS if not already set.
492 : ${CCASFLAGS='$(CFLAGS)'}
493 AC_SUBST(CCAS)
494 AC_SUBST(CCASFLAGS)
496 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
497 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
498 if test "x$CXX" = "xg++"; then
499         if test "x$GXX" != "xyes"; then
500                 # automake/libtool is so broken, it requires g++ even if the c++ sources
501                 # are inside automake conditionals
502                 AC_MSG_ERROR([You need to install g++])
503         fi
506 dnl may require a specific autoconf version
507 dnl AC_PROG_CC_FOR_BUILD
508 dnl CC_FOR_BUILD not automatically detected
509 CC_FOR_BUILD=$CC
510 CFLAGS_FOR_BUILD=$CFLAGS
511 BUILD_EXEEXT=
512 if test "x$cross_compiling" = "xyes"; then
513         CC_FOR_BUILD=cc
514         CFLAGS_FOR_BUILD=
515         BUILD_EXEEXT=""
517 AC_SUBST(CC_FOR_BUILD)
518 AC_SUBST(CFLAGS_FOR_BUILD)
519 AC_SUBST(HOST_CC)
520 AC_SUBST(BUILD_EXEEXT)
522 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
523 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
525 # Set STDC_HEADERS
526 AC_HEADER_STDC
527 AC_LIBTOOL_WIN32_DLL
528 # This causes monodis to not link correctly
529 #AC_DISABLE_FAST_INSTALL
531 #lookup makedev() header
532 AC_HEADER_MAJOR
534 AM_PROG_LIBTOOL
535 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
536 DOLT
538 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
539 AC_SUBST(export_ldflags)
541 # Test whenever ld supports -version-script
542 AC_PROG_LD
543 AC_PROG_LD_GNU
545 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)
546 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)
547 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
548                   [], [], [#include <stddef.h>
549                   #include <sys/socket.h>
550                   #include <linux/socket.h>])
552 AC_CHECK_HEADERS(sys/user.h, [], [],
554 #ifdef HAVE_SYS_PARAM_H
555 # include <sys/param.h>
556 #endif
559 AC_CHECK_HEADERS(linux/serial.h)
561 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
562 if test x$have_zlib = xyes; then
563    AC_TRY_COMPILE([#include <zlib.h>], [
564    #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
565    #else
566    #error No good zlib found
567    #endif
568    ],[
569         AC_MSG_RESULT(Using system zlib)
570         zlib_msg="system zlib"
571         AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
572    ],[
573         AC_MSG_RESULT(Using embedded zlib)
574         have_zlib=no
575         zlib_msg="bundled zlib"
576    ])
579 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
580 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
582 # for mono/metadata/debug-symfile.c
583 AC_CHECK_HEADERS(elf.h)
585 # for support
586 AC_CHECK_HEADERS(poll.h)
587 AC_CHECK_HEADERS(sys/poll.h)
588 AC_CHECK_HEADERS(sys/wait.h)
589 AC_CHECK_HEADERS(grp.h)
590 AC_CHECK_HEADERS(syslog.h)
591 AC_CHECK_FUNCS(vsyslog)
593 # for mono/dis
594 AC_CHECK_HEADERS(wchar.h)
596 # for Linux statfs support
597 AC_CHECK_HEADERS(linux/magic.h)
599 # For Android NDK unified headers
600 if test x$platform_android = xyes; then
601         AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
602         AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
603         AC_CHECK_HEADERS(android/ndk-version.h)
605         # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
606         # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
607         # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
608         # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
609         # doesn't contain the required definitions (NDK 14)
610         if test x$have_android_signal_inlines = xyes; then
611                 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
612                 AC_COMPILE_IFELSE([
613                         AC_LANG_PROGRAM([#include <signal.h>
614                                 #include <android/legacy_signal_inlines.h>],[
615                                 int i;
616                                 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
617                                 }
618                         ])],[
619                                 AC_MSG_RESULT(yes)
620                                 android_sigrtminmax_work=yes
621                         ],[
622                                 AC_MSG_RESULT(no)
623                                 android_sigrtminmax_work=no
624                         ]
625                 )
627                 if test x$android_sigrtminmax_work = xno; then
628                         AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
629                 fi
630         fi
632         # Attempt to detect whether we're using Android NDK unified headers
633         AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
634         AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
636         android_unified_headers=no
637         if test x$have_android_api_level = xyes; then
638                 if test x$have_android_versioning = xyes; then
639                         AC_MSG_CHECKING([whether using Android NDK unified headers])
641                         # Both macros are defined only in the NDK unified headers
642                         AC_COMPILE_IFELSE([
643                                 AC_LANG_PROGRAM([
644                                         #include <android/api-level.h>
645                                         #include <android/versioning.h>
646                                 ],[
647                                         #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
648                                         #else
649                                                 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
650                                         #endif
651                                 ])],[
652                                         AC_MSG_RESULT(yes)
653                                         android_unified_headers=yes
654                                 ],[
655                                         AC_MSG_RESULT(no)
656                                         android_unified_headers=no
657                                 ]
658                         )
659                 fi
660         fi
662         if test x$android_unified_headers = xyes; then
663                 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
664         fi
665 fi # Android
667 # not 64 bit clean in cross-compile
668 AC_CHECK_SIZEOF(void *)
669 AC_CHECK_SIZEOF(long)
671 AC_CHECK_SIZEOF(int)
672 AC_CHECK_SIZEOF(long long)
674 AC_CACHE_CHECK([for clang],
675         mono_cv_clang,[
676         AC_TRY_COMPILE([], [
677                 #ifdef __clang__
678                 #else
679                 #error "FAILED"
680                 #endif
681         ],
682         [mono_cv_clang=yes],
683         [mono_cv_clang=no],
684         [])
687 AC_ARG_ENABLE(visibility-hidden,
688 [  --disable-visibility-hidden    disable usage of -fvisiblity=hidden],
689    disable_visibility_hidden=yes, disable_visibility_hidden=no)
691 WARN=''
692 if test x"$GCC" = xyes; then
693                 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
694                 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
696                 # We require C99 with some GNU extensions, e.g. `linux` macro
697                 CFLAGS="$CFLAGS -std=gnu99"
699                 # The runtime code does not respect ANSI C strict aliasing rules
700                 CFLAGS="$CFLAGS -fno-strict-aliasing"
702                 # We rely on signed overflow to behave
703                 CFLAGS="$CFLAGS -fwrapv"
705                 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
706                 if test x"$disable_visibility_hidden" = xno; then
707                    # Don't export any symbols by default
708                    SHARED_CFLAGS="-fvisibility=hidden"
709                    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
710                 fi
712                 ORIG_CFLAGS=$CFLAGS
713                 # Check for the normal version, since gcc ignores unknown -Wno options
714                 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
715                 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
716                 AC_TRY_COMPILE([],[
717                 ], [
718                    AC_MSG_RESULT(yes)
719                    CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
720                 ], [
721                    AC_MSG_RESULT(no)
722                    CFLAGS=$ORIG_CFLAGS
723                 ])
725                 if test "x$mono_cv_clang" = "xyes"; then
726                    # https://bugzilla.samba.org/show_bug.cgi?id=8118
727                    WARN="$WARN -Qunused-arguments"
728                    WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
729                    # We rely on zero length arrays in structs
730                    WARN="$WARN -Wno-zero-length-array"
731                 fi
732 else
733         # The Sun Forte compiler complains about inline functions that access static variables
734         # so disable all inlining.
735         case "$host" in
736         *-*-solaris*)
737                 CFLAGS="$CFLAGS -Dinline="
738                 ;;
739         esac
741 CFLAGS="$WARN $CFLAGS -g"
742 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
743 CPPFLAGS="$WARN $CPPFLAGS -g"
745 # Where's the 'mcs' source tree?
746 if test -d $srcdir/mcs; then
747   mcsdir=mcs
748 else
749   mcsdir=../mcs
752 AC_ARG_WITH(mcs-path, [  --with-mcs-path=/path/to/mcs      Specify an alternate mcs source tree],
753         if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
754                 mcsdir=$with_mcs_path
755         fi
758 AC_ARG_WITH(jumptables, [  --with-jumptables=yes,no      enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
760 AC_ARG_WITH(core,       [  --with-core=yes,no,only       controls whether to build Mono as a .NET Core runtime, not build it, or just build core (defaults to no)],[],[with_core=no])
761 if test x$with_core = xyes; then
762     AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
764 AM_CONDITIONAL(ENABLE_CORE, test x$with_core = xyes)
765 AM_CONDITIONAL(ONLY_CORE, test x$with_core = xonly)
768 # A sanity check to catch cases where the package was unpacked
769 # with an ancient tar program (Solaris)
771 AC_ARG_ENABLE(solaris-tar-check,
772 [  --disable-solaris-tar-check    disable solaris tar check],
773    do_solaris_tar_check=no, do_solaris_tar_check=yes)
775 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
776         AC_MSG_CHECKING(integrity of package)
777         if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
778         then
779                 AC_MSG_RESULT(ok)
780         else
781                 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"
782                 AC_MSG_ERROR([$errorm])
783         fi
786 if test "x$with_mcs_path" != "x"; then
787 mcs_topdir=$(cd "$mcsdir" && pwd)
788 mcs_topdir_from_srcdir=$mcs_topdir
789 else
790 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
791 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
794 # Convert mcs_topdir* paths to Windows syntax.
795 if test x$cross_compiling$host_win32 = xnoyes; then
796   mcs_topdir=$(cygpath -m $mcs_topdir)
797   case $mcs_topdir_from_srcdir in
798     /cygdrive/*)
799         mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
800         ;;
801   esac
804 AC_SUBST([mcs_topdir])
805 AC_SUBST([mcs_topdir_from_srcdir])
807 # gettext: prepare the translation directories. 
808 # we do not configure the full gettext, as we consume it dynamically from C#
809 AM_PO_SUBDIRS
811 if test "x$USE_NLS" = "xyes"; then
812    AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
814    if test "x$HAVE_MSGFMT" = "xno"; then
815           AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
816    fi
819 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
821 pkg_config_path=
822 AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir],
823         if test x$with_crosspkgdir = "x"; then
824                 if test -s $PKG_CONFIG_PATH; then
825                         pkg_config_path=$PKG_CONFIG_PATH
826                 fi
827         else
828                 pkg_config_path=$with_crosspkgdir
829                 PKG_CONFIG_PATH=$pkg_config_path
830                 export PKG_CONFIG_PATH
831         fi
834 AC_ARG_ENABLE(ninja,[  --enable-ninja    Enable using ninja where available], enable_ninja=$enableval)
835 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
836 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
838 AC_ARG_ENABLE(werror, [  --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
839 if test x$werror_flag = xyes; then
840         WERROR_CFLAGS="-Werror"
842 AC_SUBST([WERROR_CFLAGS])
843 AC_SUBST([SHARED_CFLAGS])
845 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
846   
847 AC_SUBST(GLIB_CFLAGS)
849 # Enable support for fast thread-local storage
850 # Some systems have broken support, so we allow to disable it.
851 AC_ARG_WITH(tls, [  --with-tls=__thread,pthread    select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
853 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
854 # This does not work on some platforms (bug #55253)
855 AC_ARG_WITH(sigaltstack, [  --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
857 AC_ARG_WITH(static_mono, [  --with-static_mono=yes,no      link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
858 AC_ARG_WITH(shared_mono, [  --with-shared_mono=yes,no      build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
859 # Same as --with-shared_mono=no
860 AC_ARG_ENABLE(libraries, [  --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
862 if test "x$enable_static" = "xno"; then
863    with_static_mono=no
866 if test "x$enable_shared" = "xno"; then
867    with_shared_mono=no
870 if test "x$enable_libraries" = "xno"; then
871    with_shared_mono=no
874 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
876 if test "x$host_win32" = "xyes"; then
877    # Boehm GC requires the runtime to be in its own dll
878    with_static_mono=no
881 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
882 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
883 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
884 AC_ARG_ENABLE(support-build, [  --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
886 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
887 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
888         AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
889         ORIG_CFLAGS=$CFLAGS
890         CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
891         AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
892         AC_TRY_COMPILE([], [
893         ], [
894            AC_MSG_RESULT(yes)
895            # Pass it to libgc as well
896            CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
897         ], [
898            AC_MSG_RESULT(no)
899            CFLAGS=$ORIG_CFLAGS
900         ])
903 AC_ARG_ENABLE(small-config, [  --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
905 if test x$enable_small_config = xyes; then
906         AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
907         CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
910 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)
912 DISABLED_FEATURES=none
913 csc_compiler=default
914 endian=unknown
915 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
916 AC_MSG_CHECKING([CSharp compiler to use])
917 AC_ARG_WITH(csc, [  --with-csc=mcs,roslyn,default      Configures the CSharp compiler to use],[
918    if test x$withval = xmcs; then
919        csc_compiler=mcs
920    elif test x$withval = xroslyn; then
921        csc_compiler=roslyn
922    elif test x$withval = xdefault; then
923        :
924    else
925        AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
926    fi
927 ],[csc_compiler=default])
929 if test $csc_compiler = default; then
930    if test $endian = big; then
931       csc_compiler=mcs
932    elif test $endian = little; then
933       case "$host" in
934         powerpc*) csc_compiler=mcs ;;
935         *) csc_compiler=roslyn ;;
936       esac
937    else
938       csc_compiler=mcs
939    fi
941 AC_MSG_RESULT($csc_compiler)
943 AC_ARG_WITH(jemalloc,             [  --with-jemalloc=yes,no               If jemalloc is enabled (defaults to no)],                                     [], [with_jemalloc=no])
944 AC_ARG_WITH(jemalloc-always,      [  --with-jemalloc_always=yes,no        If jemalloc is enabled and always used (defaults to yes)],                    [], [with_jemalloc_always=no])
945 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])
948 if test x$target_win32 = xyes; then
949 with_jemalloc=no
950 with_jemalloc_assert=no
951 with_jemalloc_always=no
954 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
955 if test "x$with_jemalloc_assert" = "xyes"; then
956 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
957 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
958 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
961 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
962 if test "x$with_jemalloc_always" = "xyes"; then
963 with_jemalloc=yes
964 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
965 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
966 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
969 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
970 if test "x$with_jemalloc" = "xyes"; then
971 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
972 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
973 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
975 if test "x$target_mach" = "xyes"; then
976         JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
979 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
980 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
982 AC_SUBST(JEMALLOC_CFLAGS)
983 AC_SUBST(JEMALLOC_CPPFLAGS)
984 AC_SUBST(JEMALLOC_LDFLAGS)
985 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
988 # Terminology:
989 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
990 # MERP - The MS telemetry profile. Not for general use.
991 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
993 # 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.
995 #--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.
996 #--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.
997 #--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.
998 #--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.
1000 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])
1001 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])
1002 AC_ARG_ENABLE(crash-reporting,  [  --disable-crash-reporting            Enable or Disable crash reporting subsystem],        [crash_reporting=$enableval], [crash_reporting=yes])
1004 if test "x$with_crash_privacy" = "xyes"; then
1005 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1008 if test "x$with_structured_crashes" = "xno"; then
1009 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1012 case "$host" in
1013         *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1014                 crash_reporting=no
1015                 ;;
1016 esac
1018 if test "x$crash_reporting" != "xyes"; then
1019 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1020 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1023 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1024 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1026 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1027 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1029 if test x$enable_monodroid = xyes; then
1030         AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1033 if test x$enable_monotouch = xyes; then
1034         AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1037 AC_ARG_ENABLE(cxx, [  --enable-cxx   compile some code as C++])
1039 # mono/corefx/native has a lot of invalid C++98 in its headers
1040 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1041 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1042 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1043 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1045 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1046 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1047 # and add it whenever we're running clang on Darwin.
1048 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1049         CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1052 AC_SUBST(CXXFLAGS_COMMON)
1054 if test "x$enable_cxx" = "xyes"; then
1056         CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1058         # -std=gnu99 -xc++ is not allowed and errors.
1059         CXX_REMOVE_CFLAGS=-std=gnu99
1060         # These give warnings and should be removed. They are C-only.
1061         # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1062         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1063         # Likewise with CentOS 6 gcc 4.4.
1064         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1066         # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1067         # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1068         # generates a warning every time we run gcc which is very unsightly.
1069         # The warning is for e.g. sprintf(foo, "") which can just be
1070         # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1071         # and completely legal and valid.
1072         # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1073         # Alternatively, just run $CXX -xc++ -c /dev/null.
1074         AC_LANG_PUSH(C++)
1075         ORIG_CXXFLAGS=$CXXFLAGS
1076         CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1077         AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1078         AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1079                                  [ AC_MSG_RESULT(no)
1080                                    CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1081         CXXFLAGS=$ORIG_CXXFLAGS
1082         AC_LANG_POP(C++)
1084 AC_SUBST(CXX_ADD_CFLAGS)
1085 AC_SUBST(CXX_REMOVE_CFLAGS)
1088 # Set the build profiles and options before things which use them
1091 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])
1092 AC_ARG_WITH(monodroid,           [  --with-monodroid=yes,no             If you want to build the MonoDroid assemblies (defaults to no)],            [], [with_monodroid=default])
1093 AC_ARG_WITH(monotouch,           [  --with-monotouch=yes,no             If you want to build the Xamarin.iOS assemblies (defaults to no)],          [], [with_monotouch=default])
1094 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])
1095 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])
1096 AC_ARG_WITH(bitcode,             [  --with-bitcode=yes,no               If bitcode is enabled (defaults to no)],                                    [], [with_bitcode=default])
1097 AC_ARG_WITH(xammac,              [  --with-xammac=yes,no                If you want to build the Xamarin.Mac assemblies (defaults to no)],          [], [with_xammac=default])
1098 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])
1099 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])
1100 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])
1101 AC_ARG_WITH(winaot,              [  --with-winaot=yes,no                If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1102 AC_ARG_WITH(orbis,               [  --with-orbis=yes,no                 If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1103 AC_ARG_WITH(unreal,              [  --with-unreal=yes,no                If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1104 AC_ARG_WITH(wasm,                [  --with-wasm=yes,no                  If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1107 AC_ARG_WITH(runtime-preset, [  --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,bitcode,unreal,fullaotinterp,fullaotinterp_llvm  Which default profile to build (defaults to net_4_x)],  [], [with_runtime_preset=net_4_x])
1108 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])
1109 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])
1110 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])
1113 dnl Spectre compiler mitigation flag checks
1115 if test "x$with_spectre_mitigation" = "xyes"; then
1116    AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1117    SPECTRE_CFLAGS=
1118    SPECTRE_INDIRECT_BRANCH_KIND=
1119    case "x$with_spectre_indirect_branch_choice" in
1120        xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1121        xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1122        xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1123        xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1124        *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1125    esac
1127    SPECTRE_FUNCTION_RETURN_KIND=""
1128    case "x$with_spectre_function_return_choice" in
1129        xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1130        xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1131        xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1132        xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1133        *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1134    esac
1136    AX_CHECK_COMPILE_FLAG(
1137         [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1138         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1139    )
1141    AX_CHECK_COMPILE_FLAG(
1142         [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1143         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1144    )
1146    if test "x$SPECTRE_CFLAGS" != "x" ; then
1147         CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1148         CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1149         spectre_mitigation_status="mitigation enabled"
1150    fi
1151 else
1152         spectre_mitigation_status="no mitigation"
1156 dnl Profile defaults
1158 TEST_PROFILE=default
1159 enable_llvm_default=no
1161 with_profile4_x_default=no
1162 with_monodroid_default=no
1163 with_monotouch_default=no
1164 with_monotouch_watch_default=no
1165 with_monotouch_tv_default=no
1166 with_xammac_default=no
1167 with_testing_aot_full_interp_default=no
1168 with_testing_aot_hybrid_default=no
1169 with_testing_aot_full_default=no
1170 with_winaot_default=no
1171 with_orbis_default=no
1172 with_unreal_default=no
1173 with_wasm_default=no
1175 with_bitcode_default=no
1176 enable_cooperative_suspend_default=no
1177 enable_hybrid_suspend_default=no
1179 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000,nftnptr-arg-trampolines=4000
1181 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1183 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1184    DISABLE_MCS_DOCS_default=yes
1185 elif test x$with_runtime_preset = xnet_4_x; then
1186    with_profile4_x_default=yes
1187    TEST_PROFILE=net_4_x
1188 elif test x$with_runtime_preset = xall; then
1189    with_profile4_x_default=yes
1190    with_monodroid_default=yes
1191    with_monotouch_default=yes
1192    with_monotouch_watch_default=yes
1193    with_monotouch_tv_default=yes
1194    with_xammac_default=yes
1195    with_winaot_default=yes
1196    with_orbis_default=yes
1197    with_unreal_default=yes
1198    with_wasm_default=yes
1199    with_testing_aot_full_interp_default=yes
1200    with_testing_aot_hybrid_default=yes
1201    with_testing_aot_full_default=yes
1202    TEST_PROFILE=net_4_x
1203 elif test x$with_runtime_preset = xbitcode; then
1204    DISABLE_MCS_DOCS_default=yes
1205    with_testing_aot_full_default=yes
1206    with_bitcode_default=yes
1207    enable_cooperative_suspend_default=yes
1208    TEST_PROFILE=testing_aot_full
1209    enable_llvm_default=yes
1211    mono_feature_disable_com='yes'
1212    mono_feature_disable_remoting='yes'
1213    mono_feature_disable_reflection_emit_save='yes'
1214    mono_feature_disable_reflection_emit='yes'
1215    mono_feature_disable_appdomains='yes'
1217    AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1218    AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1219    AOT_MODE="llvmonly"
1220 elif test x$with_runtime_preset = xfullaot; then
1221    DISABLE_MCS_DOCS_default=yes
1222    with_testing_aot_full_default=yes
1223    TEST_PROFILE=testing_aot_full
1225    mono_feature_disable_com='yes'
1226    mono_feature_disable_remoting='yes'
1227    mono_feature_disable_reflection_emit_save='yes'
1228    mono_feature_disable_reflection_emit='yes'
1229    mono_feature_disable_appdomains='yes'
1231    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1232    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1233    AOT_MODE="full"
1234 elif test x$with_runtime_preset = xfullaot_llvm; then
1235    DISABLE_MCS_DOCS_default=yes
1236    with_testing_aot_full_default=yes
1237    TEST_PROFILE=testing_aot_full
1239    mono_feature_disable_com='yes'
1240    mono_feature_disable_remoting='yes'
1241    mono_feature_disable_reflection_emit_save='yes'
1242    mono_feature_disable_reflection_emit='yes'
1243    mono_feature_disable_appdomains='yes'
1245    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1246    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1247    AOT_MODE="full"
1248 elif test x$with_runtime_preset = xhybridaot; then
1249    DISABLE_MCS_DOCS_default=yes
1250    with_testing_aot_hybrid_default=yes
1251    TEST_PROFILE=testing_aot_hybrid 
1253    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1254    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1255 elif test x$with_runtime_preset = xhybridaot_llvm; then
1256    DISABLE_MCS_DOCS_default=yes
1257    with_testing_aot_hybrid_default=yes
1258    TEST_PROFILE=testing_aot_hybrid
1260    AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1261    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1262 elif test x$with_runtime_preset = xfullaotinterp; then
1263    with_testing_aot_full_interp_default=yes
1264    TEST_PROFILE=testing_aot_full_interp
1266    # mscorlib.dll aot compilation crashes
1267    mono_feature_disable_com='yes'
1269    AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1270    AOT_RUN_FLAGS="--full-aot-interp"
1271 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1272    with_testing_aot_full_interp_default=yes
1273    TEST_PROFILE=testing_aot_full_interp_llvm
1275    # mscorlib.dll aot compilation crashes
1276    mono_feature_disable_com='yes'
1278    AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1279    AOT_RUN_FLAGS="--full-aot-interp"
1280 elif test x$with_runtime_preset = xaot; then
1281    with_profile4_x_default=yes
1283    AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1284    AOT_RUN_FLAGS=""
1286    DISABLE_MCS_DOCS_default=yes
1287 elif test x$with_runtime_preset = xaot_llvm; then
1288    with_profile4_x_default=yes
1290    AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1291    AOT_RUN_FLAGS=""
1293    DISABLE_MCS_DOCS_default=yes
1294 elif test x$with_runtime_preset = xwinaot; then
1295    DISABLE_MCS_DOCS_default=yes
1296    with_winaot_default=yes
1297    TEST_PROFILE=winaot
1299    mono_feature_disable_com='yes'
1300    mono_feature_disable_remoting='yes'
1301    mono_feature_disable_reflection_emit_save='yes'
1302    mono_feature_disable_reflection_emit='yes'
1303    mono_feature_disable_appdomains='yes'
1305    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1306    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1307    AOT_MODE="llvmonly"
1308 elif test x$with_runtime_preset = xorbis; then
1309    DISABLE_MCS_DOCS_default=yes
1310    with_orbis_default=yes
1311    TEST_PROFILE=orbis
1313    mono_feature_disable_com='yes'
1314    mono_feature_disable_remoting='yes'
1315    mono_feature_disable_reflection_emit_save='yes'
1316    mono_feature_disable_reflection_emit='yes'
1317    mono_feature_disable_appdomains='yes'
1319    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1320    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1321    AOT_MODE="full"
1322 elif test x$with_runtime_preset = xunreal; then
1323    DISABLE_MCS_DOCS_default=yes
1324    with_unreal_default=yes
1325    TEST_PROFILE=unreal
1327    mono_feature_disable_com='yes'
1328    mono_feature_disable_remoting='yes'
1329    mono_feature_disable_appdomains='no'
1331    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1332    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1333 elif test x$with_runtime_preset = xwasm; then
1334    DISABLE_MCS_DOCS_default=yes
1335    with_wasm_default=yes
1336    TEST_PROFILE=wasm
1338    mono_feature_disable_com='yes'
1339    mono_feature_disable_remoting='yes'
1340    mono_feature_disable_reflection_emit_save='yes'
1341    mono_feature_disable_reflection_emit='yes'
1342    mono_feature_disable_appdomains='yes'
1344    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1345    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1346 else
1347    TEST_PROFILE=net_4_x
1348    with_profile4_x_default=yes
1351 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1352    AC_SUBST(AOT_BUILD_FLAGS)
1353    AC_SUBST(AOT_RUN_FLAGS)
1354    # For llvmonlycheck + fullaotcheck
1355    AC_SUBST(INVARIANT_AOT_OPTIONS)
1358 AC_SUBST(TEST_PROFILE)
1360 if test "x$with_profile4_x" = "xdefault"; then
1361    with_profile4_x=$with_profile4_x_default
1363 if test "x$with_monodroid" = "xdefault"; then
1364    with_monodroid=$with_monodroid_default
1366 if test "x$with_monotouch" = "xdefault"; then
1367    with_monotouch=$with_monotouch_default
1369 if test "x$with_monotouch_watch" = "xdefault"; then
1370    with_monotouch_watch=$with_monotouch_watch_default
1372 if test "x$with_monotouch_tv" = "xdefault"; then
1373    with_monotouch_tv=$with_monotouch_tv_default
1375 if test "x$with_bitcode" = "xdefault"; then
1376    with_bitcode=$with_bitcode_default
1378 if test "x$with_xammac" = "xdefault"; then
1379    with_xammac=$with_xammac_default
1381 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1382    with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1384 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1385    with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1387 if test "x$with_testing_aot_full" = "xdefault"; then
1388    with_testing_aot_full=$with_testing_aot_full_default
1390 if test "x$with_winaot" = "xdefault"; then
1391    with_winaot=$with_winaot_default
1393 if test "x$with_orbis" = "xdefault"; then
1394    with_orbis=$with_orbis_default
1396 if test "x$with_unreal" = "xdefault"; then
1397    with_unreal=$with_unreal_default
1399 if test "x$with_wasm" = "xdefault"; then
1400    with_wasm=$with_wasm_default
1404 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1405 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1406 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1407 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1408 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1409 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1410 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1411 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1412 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1413 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1414 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1415 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1416 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1417 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1418 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1419 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"])
1420 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1421 AM_CONDITIONAL(AOT_FULL_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"])
1422 AM_CONDITIONAL(AOT_FULL_INTERP_LLVM_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp_llvm"])
1423 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1425 default_profile=net_4_x
1426 if test -z "$INSTALL_MONODROID_TRUE"; then :
1427    default_profile=monodroid
1429 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1430    default_profile=monotouch
1432 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1433    default_profile=xammac
1435 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1436    default_profile=testing_aot_full_interp
1438 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1439    default_profile=testing_aot_hybrid
1441 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1442    default_profile=testing_aot_full
1444 if test -z "$INSTALL_WINAOT_TRUE"; then :
1445    default_profile=winaot
1447 if test -z "$INSTALL_ORBIS_TRUE"; then :
1448    default_profile=orbis
1450 if test -z "$INSTALL_UNREAL_TRUE"; then :
1451    default_profile=unreal
1453 if test -z "$INSTALL_WASM_TRUE"; then :
1454    default_profile=wasm
1456 if test -z "$INSTALL_4_x_TRUE"; then :
1457    default_profile=net_4_x
1459 DEFAULT_PROFILE=$default_profile
1460 AC_SUBST(DEFAULT_PROFILE)
1463 # End build profile configuration
1466 if test x$USE_NLS = xprofile_default; then
1468         AC_MSG_CHECKING([NLS used])
1470         # We make the default value for USE_NLS
1471         # "no" on OSX because it isn't available on most
1472         # default OSX installs. The most common configurations will
1473         # all disable it, so this saves us typing.
1474         if test x$host_darwin = xyes; then
1475                 USE_NLS=no;
1476         else
1477                 USE_NLS=yes;
1478         fi
1480         AC_SUBST([USE_NLS])
1481         AC_MSG_RESULT([$USE_NLS])
1484 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
1485      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, 
1486      reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1487          security, lldb, mdb, assert_messages, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1489         for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1490                 eval "mono_feature_disable_$feature='yes'"
1491         done
1492         DISABLED_FEATURES=$enable_minimal
1493         disabled="Disabled:      $enable_minimal"
1494 ],[])
1496 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1498 if test "x$mono_feature_disable_aot" = "xyes"; then
1499         AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1500         enable_system_aot=no
1501         AC_MSG_NOTICE([Disabled AOT compiler])
1504 if test "x$mono_feature_disable_profiler" = "xyes"; then
1505         AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1506         AC_MSG_NOTICE([Disabled support for the profiler])
1508 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1510 if test "x$mono_feature_disable_decimal" = "xyes"; then
1511         AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1512         AC_MSG_NOTICE([Disabled support for decimal])
1515 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1516         AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1517         AC_MSG_NOTICE([Disabled support for P/Invoke])
1520 if test "x$mono_feature_disable_debug" = "xyes"; then
1521         AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1522         AC_MSG_NOTICE([Disabled support for runtime debugging])
1525 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1526         AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1527         mono_feature_disable_reflection_emit_save=yes
1528         AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1531 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1532         AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1533         AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1536 if test "x$mono_feature_disable_large_code" = "xyes"; then
1537         AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1538         AC_MSG_NOTICE([Disabled support for large assemblies])
1541 if test "x$mono_feature_disable_logging" = "xyes"; then
1542         AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1543         AC_MSG_NOTICE([Disabled support for logging])
1546 if test "x$mono_feature_disable_com" = "xyes"; then
1547         AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1548         AC_MSG_NOTICE([Disabled COM support])
1551 if test "x$mono_feature_disable_ssa" = "xyes"; then
1552         AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1553         AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1556 if test "x$mono_feature_disable_generics" = "xyes"; then
1557         AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1558         AC_MSG_NOTICE([Disabled Generics Support])
1561 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1562         AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1563         AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1566 if test "x$mono_feature_disable_portability" = "xyes"; then
1567         AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1568         AC_MSG_NOTICE([Disabled IO Portability layer])
1571 if test "x$mono_feature_disable_attach" = "xyes"; then
1572         AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1573         AC_MSG_NOTICE([Disabled agent attach])
1576 if test "x$mono_feature_disable_verifier" = "xyes"; then
1577         AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1578         AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1581 if test "x$mono_feature_disable_jit" = "xyes"; then
1582         AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1583         AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1586 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1588 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1589         AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1590         AC_MSG_NOTICE([Disabled the interpreter])
1593 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1595 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1596         AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1599 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1601 if test "x$mono_feature_disable_simd" = "xyes"; then
1602         AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1603         AC_MSG_NOTICE([Disabled SIMD support])
1606 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1607         AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1608         AC_MSG_NOTICE([Disabled Soft Debugger.])
1611 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1613 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1614         AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1615         AC_MSG_NOTICE([Disabled Performance Counters.])
1617 if test "x$mono_feature_disable_normalization" = "xyes"; then
1618         AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1619         AC_MSG_NOTICE([Disabled String normalization support.])
1622 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1623 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1624         AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1625         AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1628 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1629         AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1630         AC_MSG_NOTICE([Disabled Shared perfcounters.])
1633 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1634         AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1635         AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1638 if test "x$mono_feature_disable_remoting" = "xyes"; then
1639         AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1640         AC_MSG_NOTICE([Disabled remoting])
1643 if test "x$mono_feature_disable_security" = "xyes"; then
1644         AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1645         AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1648 if test "x$mono_feature_disable_lldb" = "xyes"; then
1649         AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1650         AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1653 if test "x$mono_feature_disable_mdb" = "xyes"; then
1654         AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1655         AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1658 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1659         AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1660         AC_MSG_NOTICE([Disabled assertion messages.])
1663 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1664         AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1665         AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1669 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1670         AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1671         AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1674 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1675         AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1676         AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1679 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1680         AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1681         AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1684 AC_ARG_ENABLE(executables, [  --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1685 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1687 has_extension_module=no
1688 AC_ARG_ENABLE(extension-module, [  --enable-extension-module=LIST enable the core-extensions from LIST],
1690         for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1691                 if test x$extension = xdefault ; then
1692                         has_extension_module=yes;
1693                 fi
1694         done
1695         if test x$enable_extension_module = xyes; then
1696                 has_extension_module=yes;
1697         fi
1698 ], [])
1700 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1702 if test x$has_extension_module != xno ; then
1703         AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1704         AC_MSG_NOTICE([Enabling mono extension module.])
1707 # Deprecated
1708 AC_ARG_ENABLE(gsharedvt, [  --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1710 AC_MSG_CHECKING(for visibility __attribute__)
1711 AC_COMPILE_IFELSE([
1712         AC_LANG_SOURCE([[
1713                 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1714                 int main () { doit (); return 0; }
1715         ]])
1716 ], [
1717    have_visibility_hidden=yes
1718    AC_MSG_RESULT(yes)
1719 ], [
1720    have_visibility_hidden=no
1721    AC_MSG_RESULT(no)
1725 dnl Boehm GC configuration
1728 AC_ARG_WITH(libgc,   [  --with-libgc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1730 AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1731 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1733 if test "x$support_boehm" = "xyes"; then
1735         AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1736         if test x$enable_parallel_mark = xyes; then
1737                 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1738         fi
1740         gc_msg=""
1741         LIBGC_CPPFLAGS=
1742         LIBGC_LIBS=
1743         LIBGC_STATIC_LIBS=
1744         libgc_dir=
1745         case "x$libgc" in
1746                 xincluded)
1747                         if test "x$support_boehm" = "xyes"; then
1748                                 libgc_dir=libgc
1749                         fi
1751                         LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1752                         LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1753                         LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1755                         BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1757                         if test x$target_win32 = xyes; then
1758                                 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1759                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1760                         fi
1762                         gc_msg="Included Boehm GC with typed GC"
1763                         if test x$enable_parallel_mark = xyes; then
1764                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1765                                 gc_msg="$gc_msg and parallel mark"
1766                         else
1767                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1768                         fi
1769                         ;;
1771                 xboehm|xbohem|xyes)
1772                         AC_MSG_WARN("External Boehm is no longer supported")
1773                         ;;
1775                 xsgen)
1776                         AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1777                         ;;
1779                 xnone)
1780                         AC_MSG_WARN("Compiling mono without GC.")
1781                         AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1782                         AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1783                         gc_msg="none"
1784                         ;;
1785                 *)
1786                         AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1787                         ;;
1788         esac
1790         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])
1791         if test "x$large_heap" = "xyes"; then
1792            CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1793         fi
1795         AC_SUBST(LIBGC_CPPFLAGS)
1796         AC_SUBST(LIBGC_LIBS)
1797         AC_SUBST(LIBGC_STATIC_LIBS)
1798         AC_SUBST(libgc_dir)
1799         AC_SUBST(BOEHM_DEFINES)
1802 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1805 dnl End of Boehm GC Configuration
1808 dnl *************************************
1809 dnl *** Checks for zero length arrays ***
1810 dnl *************************************
1811 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1812 AC_TRY_COMPILE([
1813         struct s {
1814                 int  length;
1815                 char data [0];
1816         };
1817 ], [], [
1818         AC_MSG_RESULT(yes)
1819         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1820 ], [
1821         AC_MSG_RESULT(no)
1822         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1825 dnl ***********************************
1826 dnl *** Checks for signals
1827 dnl ***********************************
1828 AC_CHECK_HEADERS(signal.h)
1829 AC_CHECK_FUNCS(sigaction)
1830 AC_CHECK_FUNCS(kill)
1831 AC_CHECK_FUNCS(signal)
1833 # signal() is declared inline in Android headers
1834 # so we need to workaround it by overriding the check.
1835 if test x$platform_android = xyes; then
1836         AC_DEFINE(HAVE_SIGNAL,1)
1839 dnl ***********************************
1840 dnl *** Checks for availability of GSS dependencies (krb5, gss.framework, etc)
1841 dnl ***********************************
1842 enable_gss=no;
1843 AC_MSG_CHECKING(for GSS/GSS.h)
1844 AC_TRY_COMPILE([
1845     #include <GSS/GSS.h>
1846 ], [
1848     AC_MSG_RESULT(yes)
1849     AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
1850     AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1851     enable_gss=yes
1852 ], [
1853     AC_MSG_RESULT(no)
1856 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
1857 AC_TRY_COMPILE([
1858     #include <gssapi/gssapi_ext.h>
1859 ], [
1861     AC_MSG_RESULT(yes)
1862     enable_gss=yes
1863 ], [
1864     AC_MSG_RESULT(no)
1867 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
1868 AC_TRY_COMPILE([
1869     #include <gssapi/gssapi_ext.h>
1870     #include <gssapi/gssapi_krb5.h>
1871     gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
1872 ], [
1874     AC_MSG_RESULT(yes)
1875     AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1876 ], [
1877     AC_MSG_RESULT(no)
1880 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
1882 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1883 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1885 if test x$host_win32 = xno; then
1886         dnl *************************************
1887         dnl *** Checks for time capabilities ***
1888         dnl *************************************
1890         AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1891         AC_TRY_COMPILE([#include <time.h>], [
1892                 const int foo = CLOCK_MONOTONIC;
1893         ],[
1894                 AC_MSG_RESULT(yes)
1895                 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1896         ], [
1897                 AC_MSG_RESULT(no)
1898         ])
1900         AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1901         AC_TRY_COMPILE([#include <time.h>], [
1902                 const int foo = CLOCK_MONOTONIC_COARSE;
1903         ],[
1904                 AC_MSG_RESULT(yes)
1905                 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1906         ], [
1907                 AC_MSG_RESULT(no)
1908         ])
1910         AC_MSG_CHECKING(for CLOCK_REALTIME)
1911         AC_TRY_COMPILE([#include <time.h>], [
1912                 const int foo = CLOCK_REALTIME;
1913         ],[
1914                 AC_MSG_RESULT(yes)
1915                 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1916         ], [
1917                 AC_MSG_RESULT(no)
1918         ])
1920         AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1921         AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1922         AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1923         AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1924         AC_CHECK_FUNC(futimes,            [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1925         AC_CHECK_FUNC(futimens,           [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1927         dnl hires monotonic clock support
1928         AC_SEARCH_LIBS(clock_gettime, rt)
1929         AC_CHECK_FUNCS(clock_nanosleep)
1931         dnl dynamic loader support
1932         AC_CHECK_FUNC(dlopen, DL_LIB="",
1933                 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1934         )
1935         if test x$dl_support = xno; then
1936                 AC_MSG_WARN([No dynamic loading support available])
1937         else
1938                 LIBS="$LIBS $DL_LIB"
1939                 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1940                 dnl from glib's configure.ac
1941                 AC_CACHE_CHECK([for preceeding underscore in symbols],
1942                         mono_cv_uscore,[
1943                         AC_TRY_RUN([#include <dlfcn.h>
1944                         int mono_underscore_test (void) { return 42; }
1945                         int main() {
1946                           void *f1 = (void*)0, *f2 = (void*)0, *handle;
1947                           handle = dlopen ((void*)0, 0);
1948                           if (handle) {
1949                             f1 = dlsym (handle, "mono_underscore_test");
1950                             f2 = dlsym (handle, "_mono_underscore_test");
1951                           } return (!f2 || f1);
1952                         }],
1953                                 [mono_cv_uscore=yes],
1954                                 [mono_cv_uscore=no],
1955                         [])
1956                 ])
1957                 if test "x$mono_cv_uscore" = "xyes"; then
1958                         MONO_DL_NEED_USCORE=1
1959                 else
1960                         MONO_DL_NEED_USCORE=0
1961                 fi
1962                 AC_SUBST(MONO_DL_NEED_USCORE)
1963                 AC_CHECK_FUNC(dlerror)
1964         fi
1966         dnl ******************************************************************
1967         dnl *** Checks for the IKVM JNI interface library                  ***
1968         dnl ******************************************************************
1969         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])
1971         ikvm_native_dir=
1972         if test x$with_ikvm_native = xyes; then
1973                 ikvm_native_dir=ikvm-native
1974                 jdk_headers_found="IKVM Native"
1975         fi
1977         AC_SUBST(ikvm_native_dir)
1979         AC_CHECK_HEADERS(execinfo.h)
1981         AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1983         AC_CHECK_FUNCS(getgrgid_r)
1984         AC_CHECK_FUNCS(getgrnam_r)
1985         AC_CHECK_FUNCS(getresuid)
1986         AC_CHECK_FUNCS(setresuid)
1987         AC_CHECK_FUNCS(kqueue)
1988         AC_CHECK_FUNCS(backtrace_symbols)
1989         AC_CHECK_FUNCS(mkstemp)
1990         AC_CHECK_FUNCS(mmap)
1991         AC_CHECK_FUNCS(madvise)
1992         AC_CHECK_FUNCS(getrusage)
1993         AC_CHECK_FUNCS(getpriority)
1994         AC_CHECK_FUNCS(setpriority)
1995         AC_CHECK_FUNCS(dl_iterate_phdr)
1996         AC_CHECK_FUNCS(dladdr)
1997         AC_CHECK_FUNCS(sysconf)
1998         AC_CHECK_FUNCS(getrlimit)
1999         AC_CHECK_FUNCS(prctl)
2000         AC_CHECK_FUNCS(arc4random)
2001         AC_CHECK_FUNCS(nl_langinfo)
2003         AC_CHECK_FUNCS(sched_getaffinity)
2004         AC_CHECK_FUNCS(sched_setaffinity)
2005         AC_CHECK_FUNCS(sched_getcpu)
2007         if test x$platform_android != xyes; then
2008                 AC_CHECK_FUNCS(getpwnam_r)
2009                 AC_CHECK_FUNCS(getpwuid_r)
2010         fi
2012         AC_FUNC_STRERROR_R()
2014         dnl ****************************************************************
2015         dnl *** Check for sched_setaffinity from glibc versions before   ***
2016         dnl *** 2.3.4. The older versions of the function only take 2    ***
2017         dnl *** parameters, not 3.                                       ***
2018         dnl ***                                                          ***
2019         dnl *** Because the interface change was not made in a minor     ***
2020         dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros    ***
2021         dnl *** won't always indicate the interface sched_affinity has.  ***
2022         dnl ****************************************************************
2023         AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2024         AC_TRY_COMPILE([#include <sched.h>], [
2025             int mask = 1; 
2026             sched_setaffinity(0, &mask);
2027         ], [
2028                 # Yes, we have it...
2029                 AC_MSG_RESULT(yes)
2030                 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2031         ], [
2032                 # We have the new, three-parameter version
2033                 AC_MSG_RESULT(no)
2034         ])
2035         AC_TRY_COMPILE([#include <sched.h>], [
2036              CPU_COUNT((void *) 0);
2037         ], [
2038                 AC_MSG_RESULT(yes)
2039                 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2040         ], [
2041                 # We have the new, three-parameter version
2042                 AC_MSG_RESULT(no)
2043         ])
2045         dnl ******************************************************************
2046         dnl *** Check for large file support                               ***
2047         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2048         dnl ******************************************************************
2049         
2050         # Check that off_t can represent 2**63 - 1 correctly, working around
2051         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
2052         # CPPFLAGS and sets $large_offt to yes if the test succeeds
2053         large_offt=no
2054         AC_DEFUN([LARGE_FILES], [
2055                 large_CPPFLAGS=$CPPFLAGS
2056                 CPPFLAGS="$CPPFLAGS $1"
2057                 AC_TRY_COMPILE([
2058                         #include <sys/types.h>
2059                         #include <limits.h>
2060                 ], [
2061                         /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2062                         #define COMPILE_TIME_ASSERT(pred) \
2063                                 switch(0){case 0:case pred:;}
2064                         COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2065                 ], [
2066                         AC_MSG_RESULT(ok)
2067                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2068                         large_CPPFLAGS="$large_CPPFLAGS $1"
2069                         large_offt=yes
2070                 ], [
2071                         AC_MSG_RESULT(no)
2072                 ])
2073                 CPPFLAGS=$large_CPPFLAGS
2074         ])
2076         AC_MSG_CHECKING(if off_t is 64 bits wide)
2077         LARGE_FILES("")
2078         if test $large_offt = no; then
2079                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2080                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2081         fi
2082         if test $large_offt = no; then
2083                 AC_MSG_WARN([No 64 bit file size support available])
2084         fi
2085         
2086         dnl *****************************
2087         dnl *** Checks for libsocket  ***
2088         dnl *****************************
2089         AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2091         case "$host" in
2092                 *-*-*freebsd*)
2093                         dnl *****************************
2094                         dnl *** Checks for libinotify ***
2095                         dnl *****************************
2096                         AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2097         esac
2099         dnl *******************************
2100         dnl *** Checks for MSG_NOSIGNAL ***
2101         dnl *******************************
2102         AC_MSG_CHECKING(for MSG_NOSIGNAL)
2103         AC_TRY_COMPILE([#include <sys/socket.h>], [
2104                 int f = MSG_NOSIGNAL;
2105         ], [
2106                 # Yes, we have it...
2107                 AC_MSG_RESULT(yes)
2108                 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2109         ], [
2110                 # We'll have to use signals
2111                 AC_MSG_RESULT(no)
2112         ])
2114         dnl *****************************
2115         dnl *** Checks for IPPROTO_IP ***
2116         dnl *****************************
2117         AC_MSG_CHECKING(for IPPROTO_IP)
2118         AC_TRY_COMPILE([#include <netinet/in.h>], [
2119                 int level = IPPROTO_IP;
2120         ], [
2121                 # Yes, we have it...
2122                 AC_MSG_RESULT(yes)
2123                 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2124         ], [
2125                 # We'll have to use getprotobyname
2126                 AC_MSG_RESULT(no)
2127         ])
2129         dnl *******************************
2130         dnl *** Checks for IPPROTO_IPV6 ***
2131         dnl *******************************
2132         AC_MSG_CHECKING(for IPPROTO_IPV6)
2133         AC_TRY_COMPILE([#include <netinet/in.h>], [
2134                 int level = IPPROTO_IPV6;
2135         ], [
2136                 # Yes, we have it...
2137                 AC_MSG_RESULT(yes)
2138                 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2139         ], [
2140                 # We'll have to use getprotobyname
2141                 AC_MSG_RESULT(no)
2142         ])
2144         dnl ******************************
2145         dnl *** Checks for IPPROTO_TCP ***
2146         dnl ******************************
2147         AC_MSG_CHECKING(for IPPROTO_TCP)
2148         AC_TRY_COMPILE([#include <netinet/in.h>], [
2149                 int level = IPPROTO_TCP;
2150         ], [
2151                 # Yes, we have it...
2152                 AC_MSG_RESULT(yes)
2153                 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2154         ], [
2155                 # We'll have to use getprotobyname
2156                 AC_MSG_RESULT(no)
2157         ])
2159         dnl *****************************
2160         dnl *** Checks for SOL_IP     ***
2161         dnl *****************************
2162         AC_MSG_CHECKING(for SOL_IP)
2163         AC_TRY_COMPILE([#include <netdb.h>], [
2164                 int level = SOL_IP;
2165         ], [
2166                 # Yes, we have it...
2167                 AC_MSG_RESULT(yes)
2168                 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2169         ], [
2170                 # We'll have to use getprotobyname
2171                 AC_MSG_RESULT(no)
2172         ])
2174         dnl *****************************
2175         dnl *** Checks for SOL_IPV6     ***
2176         dnl *****************************
2177         AC_MSG_CHECKING(for SOL_IPV6)
2178         AC_TRY_COMPILE([#include <netdb.h>], [
2179                 int level = SOL_IPV6;
2180         ], [
2181                 # Yes, we have it...
2182                 AC_MSG_RESULT(yes)
2183                 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2184         ], [
2185                 # We'll have to use getprotobyname
2186                 AC_MSG_RESULT(no)
2187         ])
2189         dnl *****************************
2190         dnl *** Checks for SOL_TCP    ***
2191         dnl *****************************
2192         AC_MSG_CHECKING(for SOL_TCP)
2193         AC_TRY_COMPILE([#include <netdb.h>], [
2194                 int level = SOL_TCP;
2195         ], [
2196                 # Yes, we have it...
2197                 AC_MSG_RESULT(yes)
2198                 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2199         ], [
2200                 # We'll have to use getprotobyname
2201                 AC_MSG_RESULT(no)
2202         ])
2204         dnl *****************************
2205         dnl *** Checks for IP_PKTINFO ***
2206         dnl *****************************
2207         AC_MSG_CHECKING(for IP_PKTINFO)
2208         AC_TRY_COMPILE([#include <linux/in.h>], [
2209                 int level = IP_PKTINFO;
2210         ], [
2211                 # Yes, we have it...
2212                 AC_MSG_RESULT(yes)
2213                 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2214         ], [
2215                 AC_MSG_RESULT(no)
2216         ])
2218         dnl *****************************
2219         dnl *** Checks for IPV6_PKTINFO ***
2220         dnl *****************************
2221         AC_MSG_CHECKING(for IPV6_PKTINFO)
2222         AC_TRY_COMPILE([#include <netdb.h>], [
2223                 int level = IPV6_PKTINFO;
2224         ], [
2225                 # Yes, we have it...
2226                 AC_MSG_RESULT(yes)
2227                 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2228         ], [
2229                 AC_MSG_RESULT(no)
2230         ])
2232         dnl **********************************
2233         dnl *** Checks for IP_DONTFRAG     ***
2234         dnl **********************************
2235         AC_MSG_CHECKING(for IP_DONTFRAG)
2236         AC_TRY_COMPILE([#include <netinet/in.h>], [
2237                 int level = IP_DONTFRAG;
2238         ], [
2239                 # Yes, we have it...
2240                 AC_MSG_RESULT(yes)
2241                 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2242         ], [
2243                 AC_MSG_RESULT(no)
2244         ])
2246         dnl **********************************
2247         dnl *** Checks for IP_DONTFRAGMENT ***
2248         dnl **********************************
2249         AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2250         AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2251                 int level = IP_DONTFRAGMENT;
2252         ], [
2253                 # Yes, we have it...
2254                 AC_MSG_RESULT(yes)
2255                 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2256         ], [
2257                 AC_MSG_RESULT(no)
2258         ])
2260         dnl **********************************
2261         dnl *** Checks for IP_MTU_DISCOVER ***
2262         dnl **********************************
2263         AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2264         AC_TRY_COMPILE([#include <linux/in.h>], [
2265                 int level = IP_MTU_DISCOVER;
2266         ], [
2267                 # Yes, we have it...
2268                 AC_MSG_RESULT(yes)
2269                 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2270         ], [
2271                 AC_MSG_RESULT(no)
2272         ])
2274         dnl **********************************
2275         dnl *** Checks for  IP_PMTUDISC_DO ***
2276         dnl **********************************
2277         AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2278         AC_TRY_COMPILE([#include <linux/in.h>], [
2279                 int level = IP_PMTUDISC_DO;
2280         ], [
2281                 # Yes, we have it...
2282                 AC_MSG_RESULT(yes)
2283                 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2284         ], [
2285                 AC_MSG_RESULT(no)
2286         ])
2288         dnl *********************************
2289         dnl *** Check for struct ip_mreqn ***
2290         dnl *********************************
2291         AC_MSG_CHECKING(for struct ip_mreqn)
2292         AC_TRY_COMPILE([#include <netinet/in.h>], [
2293                 struct ip_mreqn mreq;
2294                 mreq.imr_address.s_addr = 0;
2295         ], [
2296                 # Yes, we have it...
2297                 AC_MSG_RESULT(yes)
2298                 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2299         ], [
2300                 # We'll just have to try and use struct ip_mreq
2301                 AC_MSG_RESULT(no)
2302                 AC_MSG_CHECKING(for struct ip_mreq)
2303                 AC_TRY_COMPILE([#include <netinet/in.h>], [
2304                         struct ip_mreq mreq;
2305                         mreq.imr_interface.s_addr = 0;
2306                 ], [
2307                         # Yes, we have it...
2308                         AC_MSG_RESULT(yes)
2309                         AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2310                 ], [
2311                         # No multicast support
2312                         AC_MSG_RESULT(no)
2313                 ])
2314         ])
2315         
2316         dnl **********************************
2317         dnl *** Check for getaddrinfo ***
2318         dnl **********************************
2319         AC_MSG_CHECKING(for getaddrinfo)
2320                 AC_TRY_LINK([
2321                 #include <stdio.h>
2322                 #include <netdb.h>
2323         ], [
2324                 getaddrinfo(NULL,NULL,NULL,NULL);
2325         ], [
2326                 # Yes, we have it...
2327                 AC_MSG_RESULT(yes)
2328                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2329         ], [
2330                 AC_MSG_RESULT(no)
2331         ])
2333         dnl **********************************
2334         dnl *** Check for gethostbyname2_r ***
2335         dnl **********************************
2336         AC_MSG_CHECKING(for gethostbyname2_r)
2337                 AC_TRY_LINK([
2338                 #include <stdio.h>
2339                 #include <netdb.h>
2340         ], [
2342                 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2343         ], [
2344                 # Yes, we have it...
2345                 AC_MSG_RESULT(yes)
2346                 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2347         ], [
2348                 AC_MSG_RESULT(no)
2349         ])
2351         dnl **********************************
2352         dnl *** Check for gethostbyname2 ***
2353         dnl **********************************
2354         AC_MSG_CHECKING(for gethostbyname2)
2355                 AC_TRY_LINK([
2356                 #include <stdio.h>
2357                 #include <netdb.h>
2358         ], [
2359                 gethostbyname2(NULL,0);
2360         ], [
2361                 # Yes, we have it...
2362                 AC_MSG_RESULT(yes)
2363                 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2364         ], [
2365                 AC_MSG_RESULT(no)
2366         ])
2368         dnl **********************************
2369         dnl *** Check for gethostbyname ***
2370         dnl **********************************
2371         AC_MSG_CHECKING(for gethostbyname)
2372                 AC_TRY_LINK([
2373                 #include <stdio.h>
2374                 #include <netdb.h>
2375         ], [
2376                 gethostbyname(NULL);
2377         ], [
2378                 # Yes, we have it...
2379                 AC_MSG_RESULT(yes)
2380                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2381         ], [
2382                 AC_MSG_RESULT(no)
2383         ])
2385         dnl **********************************
2386         dnl *** Check for getprotobyname ***
2387         dnl **********************************
2388         AC_MSG_CHECKING(for getprotobyname)
2389                 AC_TRY_LINK([
2390                 #include <stdio.h>
2391                 #include <netdb.h>
2392         ], [
2393                 getprotobyname(NULL);
2394         ], [
2395                 # Yes, we have it...
2396                 AC_MSG_RESULT(yes)
2397                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2398         ], [
2399                 AC_MSG_RESULT(no)
2400         ])
2402         dnl **********************************
2403         dnl *** Check for getprotobyname_r ***
2404         dnl **********************************
2405         AC_MSG_CHECKING(for getprotobyname_r)
2406                 AC_TRY_LINK([
2407                 #include <stdio.h>
2408                 #include <netdb.h>
2409         ], [
2410                 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2411         ], [
2412                 # Yes, we have it...
2413                 AC_MSG_RESULT(yes)
2414                 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2415         ], [
2416                 AC_MSG_RESULT(no)
2417         ])
2419         dnl **********************************
2420         dnl *** Check for getnameinfo ***
2421         dnl **********************************
2422         AC_MSG_CHECKING(for getnameinfo)
2423                 AC_TRY_LINK([
2424                 #include <stdio.h>
2425                 #include <netdb.h>
2426         ], [
2427                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2428         ], [
2429                 # Yes, we have it...
2430                 AC_MSG_RESULT(yes)
2431                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2432         ], [
2433                 AC_MSG_RESULT(no)
2434         ])
2437         dnl **********************************
2438         dnl *** Check for inet_ntop ***
2439         dnl **********************************
2440         AC_MSG_CHECKING(for inet_ntop)
2441                 AC_TRY_LINK([
2442                 #include <stdio.h>
2443                 #include <arpa/inet.h>
2444         ], [
2445                 inet_ntop (0, NULL, NULL, 0);
2446         ], [
2447                 # Yes, we have it...
2448                 AC_MSG_RESULT(yes)
2449                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2450         ], [
2451                 AC_MSG_RESULT(no)
2452         ])
2454         dnl *****************************
2455         dnl *** Checks for libnsl     ***
2456         dnl *****************************
2457         AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2459         AC_CHECK_FUNCS(inet_pton inet_aton)
2461         dnl *****************************
2462         dnl *** Checks for libxnet    ***
2463         dnl *****************************
2464         case "${host}" in
2465                 *solaris* )
2466                         AC_MSG_CHECKING(for Solaris XPG4 support)
2467                         if test -f /usr/lib/libxnet.so; then
2468                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2469                                 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2470                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2471                                 LIBS="$LIBS -lxnet"
2472                                 AC_MSG_RESULT(yes)
2473                         else
2474                                 AC_MSG_RESULT(no)
2475                         fi
2477                         if test "$GCC" = "yes"; then
2478                                 CFLAGS="$CFLAGS -Wno-char-subscripts"
2479                         fi
2480                 ;;
2481         esac
2483         dnl *****************************
2484         dnl *** Checks for libpthread ***
2485         dnl *****************************
2486 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2487 # and libpthread does not exist
2489         case "${host}" in
2490                 *-*-*haiku*)
2491                         dnl Haiku has pthread in libroot (libc equiv)
2492                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2493                 ;;
2494                 *-*-*freebsd*)
2495                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2496                 ;;
2497                 *-*-*openbsd*)
2498                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2499                 ;;
2500                 *)
2501                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2502                 ;;
2503         esac
2504         AC_CHECK_HEADERS(pthread.h)
2505         AC_CHECK_HEADERS(pthread_np.h)
2506         AC_CHECK_FUNCS(pthread_mutex_timedlock)
2507         AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2508         AC_CHECK_FUNCS(pthread_kill)
2509         AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2510         AC_TRY_COMPILE([ #include <pthread.h>], [
2511                 pthread_mutexattr_t attr;
2512                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2513         ], [
2514                 AC_MSG_RESULT(ok)
2515         ], [
2516                 AC_MSG_RESULT(no)
2517                 AC_ERROR(Posix system lacks support for recursive mutexes)
2518         ])
2519         AC_CHECK_FUNCS(pthread_attr_setstacksize)
2520         AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2521         AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2522         AC_CHECK_FUNCS(mincore mlock munlock)
2524         dnl ***********************************
2525         dnl *** Checks for working __thread ***
2526         dnl ***********************************
2527         AC_MSG_CHECKING(for working __thread)
2528         if test "x$with_tls" != "x__thread"; then
2529                 AC_MSG_RESULT(disabled)
2530         elif test "x$cross_compiling" = "xyes"; then
2531                 AC_MSG_RESULT(cross compiling, assuming yes)
2532         else
2533                 AC_TRY_RUN([
2534                         #if defined(__APPLE__) && defined(__clang__)
2535                         #error "__thread does not currently work with clang on Mac OS X"
2536                         #endif
2537                         
2538                         #include <pthread.h>
2539                         __thread int i;
2540                         static int res1, res2;
2542                         void thread_main (void *arg)
2543                         {
2544                                 i = arg;
2545                                 sleep (1);
2546                                 if (arg == 1)
2547                                         res1 = (i == arg);
2548                                 else
2549                                         res2 = (i == arg);
2550                         }
2552                         int main () {
2553                                 pthread_t t1, t2;
2555                                 i = 5;
2557                                 pthread_create (&t1, NULL, thread_main, 1);
2558                                 pthread_create (&t2, NULL, thread_main, 2);
2560                                 pthread_join (t1, NULL);
2561                                 pthread_join (t2, NULL);
2563                                 return !(res1 + res2 == 2);
2564                         }
2565                 ], [
2566                                 AC_MSG_RESULT(yes)
2567                 ], [
2568                                 AC_MSG_RESULT(no)
2569                                 with_tls=pthread
2570                 ])
2571         fi
2573         dnl **************************************
2574         dnl *** Checks for working sigaltstack ***
2575         dnl **************************************
2576         AC_MSG_CHECKING(for working sigaltstack)
2577         if test "x$with_sigaltstack" != "xyes"; then
2578                 AC_MSG_RESULT(disabled)
2579         elif test "x$cross_compiling" = "xyes"; then
2580                 AC_MSG_RESULT(cross compiling, assuming yes)
2581         else
2582                 AC_TRY_RUN([
2583                         #include <stdio.h>
2584                         #include <stdlib.h>
2585                         #include <unistd.h>
2586                         #include <signal.h>
2587                         #include <pthread.h>
2588                         #include <sys/wait.h>
2589                         #if defined(__FreeBSD__) || defined(__NetBSD__)
2590                         #define SA_STACK SA_ONSTACK
2591                         #endif
2592                         static void
2593                         sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2594                         {
2595                                 exit (0);
2596                         }
2598                         volatile char*__ptr = NULL;
2599                         static void *
2600                         loop (void *ignored)
2601                         {
2602                                 *__ptr = 0;
2603                                 return NULL;
2604                         }
2606                         static void
2607                         child ()
2608                         {
2609                                 struct sigaction sa;
2610                                 stack_t sas;
2611                                 pthread_t id;
2612                                 pthread_attr_t attr;
2614                                 sa.sa_sigaction = sigsegv_signal_handler;
2615                                 sigemptyset (&sa.sa_mask);
2616                                 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2617                                 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2618                                         perror ("sigaction");
2619                                         return;
2620                                 }
2622                                 /* x86 darwin deliver segfaults using SIGBUS */
2623                                 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2624                                         perror ("sigaction");
2625                                         return;
2626                                 }
2627                                 sas.ss_sp = malloc (SIGSTKSZ);
2628                                 sas.ss_size = SIGSTKSZ;
2629                                 sas.ss_flags = 0;
2630                                 if (sigaltstack (&sas, NULL) == -1) {
2631                                         perror ("sigaltstack");
2632                                         return;
2633                                 }
2635                                 pthread_attr_init (&attr);
2636                                 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2637                                         printf ("pthread_create\n");
2638                                         return;
2639                                 }
2641                                 sleep (100);
2642                         }
2644                         int
2645                         main ()
2646                         {
2647                                 pid_t son;
2648                                 int status;
2649                                 int i;
2651                                 son = fork ();
2652                                 if (son == -1) {
2653                                         return 1;
2654                                 }
2656                                 if (son == 0) {
2657                                         child ();
2658                                         return 0;
2659                                 }
2661                                 for (i = 0; i < 300; ++i) {
2662                                         waitpid (son, &status, WNOHANG);
2663                                         if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2664                                                 return 0;
2665                                         usleep (10000);
2666                                 }
2668                                 kill (son, SIGKILL);
2669                                 return 1;
2670                         }
2672                 ], [
2673                                 AC_MSG_RESULT(yes)
2674                                 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2675                 ], [
2676                                 with_sigaltstack=no
2677                                 AC_MSG_RESULT(no)
2678                 ])
2679         fi
2681         dnl ********************************
2682         dnl *** Checks for semaphore lib ***
2683         dnl ********************************
2684         # 'Real Time' functions on Solaris
2685         # posix4 on Solaris 2.6
2686         # pthread (first!) on Linux
2687         AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
2689         AC_SEARCH_LIBS(shm_open, pthread rt posix4) 
2690         AC_CHECK_FUNCS(shm_open)
2692         dnl ********************************
2693         dnl *** Checks for timezone stuff **
2694         dnl ********************************
2695         AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2696                 AC_TRY_COMPILE([
2697                         #include <time.h>
2698                         ], [
2699                         struct tm tm;
2700                         tm.tm_gmtoff = 1;
2701                         ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2702         if test $ac_cv_struct_tm_gmtoff = yes; then
2703                 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2704         else
2705                 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2706                         AC_TRY_COMPILE([
2707                                 #include <time.h>
2708                         ], [
2709                                 timezone = 1;
2710                         ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2711                 if test $ac_cv_var_timezone = yes; then
2712                         AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2713                 else
2714                         AC_ERROR(unable to find a way to determine timezone)
2715                 fi
2716         fi
2718         dnl *********************************
2719         dnl *** Checks for math functions ***
2720         dnl *********************************
2721         AC_SEARCH_LIBS(sqrtf, m)
2723         dnl ****************************************************************
2724         dnl *** Checks for working poll() (macosx defines it but doesn't ***
2725         dnl *** have it in the library (duh))                            ***
2726         dnl ****************************************************************
2727         AC_CHECK_FUNCS(poll)
2729         dnl **********************************
2730         dnl *** epoll                      ***
2731         dnl **********************************
2732         AC_CHECK_HEADERS(sys/epoll.h)
2733         haveepoll=no
2734         AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2735         if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2736                 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2737         fi
2739         havekqueue=no
2741         AC_CHECK_HEADERS(sys/event.h)
2742         AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2744         dnl **************************************
2745         dnl * Darwin has a race that prevents us from using reliably:
2746         dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2747         dnl * Since kqueue is mostly used for scaling large web servers, 
2748         dnl * and very few folks run Mono on large web servers on OSX, falling
2749         dnl * back 
2750         dnl **************************************
2751         if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2752                 if test "x$host_darwin" = "xno"; then
2753                         AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2754                 fi
2755         fi
2757         dnl ******************************
2758         dnl *** Checks for SIOCGIFCONF ***
2759         dnl ******************************
2760         AC_CHECK_HEADERS(sys/ioctl.h)
2761         AC_CHECK_HEADERS(net/if.h, [], [],
2762            [
2763            #ifdef HAVE_SYS_TYPES_H
2764            # include <sys/types.h>
2765            #endif
2766            #ifdef HAVE_SYS_SOCKET_H
2767            # include <sys/socket.h>
2768            #endif
2769            ])
2770         AC_MSG_CHECKING(for ifreq)
2771         AC_TRY_COMPILE([
2772                 #include <stdio.h>
2773                 #include <sys/ioctl.h>
2774                 #include <net/if.h>
2775                 ], [
2776                 struct ifconf ifc;
2777                 struct ifreq *ifr;
2778                 void *x;
2779                 ifc.ifc_len = 0;
2780                 ifc.ifc_buf = NULL;
2781                 x = (void *) &ifr->ifr_addr;
2782                 ],[
2783                         AC_MSG_RESULT(yes)
2784                         AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2785                 ], [
2786                         AC_MSG_RESULT(no)
2787                 ])
2788         dnl **********************************
2789         dnl ***     Checks for sin_len     ***
2790         dnl **********************************
2791         AC_MSG_CHECKING(for sockaddr_in.sin_len)
2792         AC_TRY_COMPILE([
2793                 #include <netinet/in.h>
2794                 ], [
2795                 struct sockaddr_in saddr;
2796                 saddr.sin_len = sizeof (saddr);
2797                 ],[
2798                         AC_MSG_RESULT(yes)
2799                         AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2800                 ], [
2801                         AC_MSG_RESULT(no)
2802                 ])      
2803         dnl **********************************
2804         dnl ***    Checks for sin6_len     ***
2805         dnl **********************************
2806         AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2807         AC_TRY_COMPILE([
2808                 #include <netinet/in.h>
2809                 ], [
2810                 struct sockaddr_in6 saddr6;
2811                 saddr6.sin6_len = sizeof (saddr6);
2812                 ],[
2813                         AC_MSG_RESULT(yes)
2814                         AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2815                 ], [
2816                         AC_MSG_RESULT(no)
2817                 ])
2818         dnl **********************************
2819         dnl *** Check for getifaddrs       ***
2820         dnl **********************************
2821         AC_MSG_CHECKING(for getifaddrs)
2822                 AC_TRY_LINK([
2823                 #include <stdio.h>
2824                 #include <sys/types.h>
2825                 #include <sys/socket.h>
2826                 #include <ifaddrs.h>
2827         ], [
2828                 getifaddrs(NULL);
2829         ], [
2830                 # Yes, we have it...
2831                 AC_MSG_RESULT(yes)
2832                 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2833         ], [
2834                 AC_MSG_RESULT(no)
2835         ])
2836         dnl **********************************
2837         dnl *** Check for if_nametoindex   ***
2838         dnl **********************************
2839         AC_MSG_CHECKING(for if_nametoindex)
2840                 AC_TRY_LINK([
2841                 #include <stdio.h>
2842                 #include <sys/types.h>
2843                 #include <sys/socket.h>
2844                 #include <net/if.h>
2845         ], [
2846                 if_nametoindex(NULL);
2847         ], [
2848                 # Yes, we have it...
2849                 AC_MSG_RESULT(yes)
2850                 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2851         ], [
2852                 AC_MSG_RESULT(no)
2853         ])
2854         dnl **********************************
2855         dnl *** Check for access ***
2856         dnl **********************************
2857         AC_MSG_CHECKING(for access)
2858                 AC_TRY_LINK([
2859                 #include <unistd.h>
2860         ], [
2861                 access(NULL,0);
2862         ], [
2863                 # Yes, we have it...
2864                 AC_MSG_RESULT(yes)
2865                 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2866         ], [
2867                 AC_MSG_RESULT(no)
2868         ])
2869                         
2870         dnl **********************************
2871         dnl *** Checks for proclib         ***
2872         dnl **********************************
2873         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.)])
2874         dnl **********************************
2875         dnl *** Checks for MonoPosixHelper ***
2876         dnl **********************************
2877         AC_CHECK_HEADERS(checklist.h)
2878         AC_CHECK_HEADERS(pathconf.h)
2879         AC_CHECK_HEADERS(fstab.h)
2880         AC_CHECK_HEADERS(attr/xattr.h)
2881         AC_CHECK_HEADERS(sys/extattr.h)
2882         AC_CHECK_HEADERS(sys/sendfile.h)
2883         AC_CHECK_HEADERS(sys/statvfs.h)
2884         AC_CHECK_HEADERS(sys/statfs.h)
2885         AC_CHECK_HEADERS(sys/vfstab.h)
2886         AC_CHECK_HEADERS(sys/xattr.h)
2887         AC_CHECK_HEADERS(sys/mman.h)
2888         AC_CHECK_HEADERS(sys/param.h)
2889         AC_CHECK_HEADERS(sys/mount.h, [], [],
2890                 [
2891                 #ifdef HAVE_SYS_PARAM_H
2892                 # include <sys/param.h>
2893                 #endif
2894                 ])
2895         AC_CHECK_HEADERS(sys/mount.h)
2896         AC_CHECK_FUNCS(confstr)
2897         AC_CHECK_FUNCS(seekdir telldir)
2898         AC_CHECK_FUNCS(getdomainname)
2899         AC_CHECK_FUNCS(setdomainname)
2900         AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2901         AC_CHECK_FUNCS(setgroups)
2902         AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2903         AC_CHECK_FUNCS(getfsstat)
2904         AC_CHECK_FUNCS(lutimes futimes)
2905         AC_CHECK_FUNCS(mremap)
2906         AC_CHECK_FUNCS(remap_file_pages)
2907         AC_CHECK_FUNCS(posix_fadvise)
2908         AC_CHECK_FUNCS(posix_fallocate)
2909         AC_CHECK_FUNCS(posix_madvise)
2910         AC_CHECK_FUNCS(vsnprintf)
2911         AC_CHECK_FUNCS(sendfile)
2912         AC_CHECK_FUNCS(gethostid sethostid)
2913         AC_CHECK_FUNCS(sethostname)
2914         AC_CHECK_FUNCS(statfs)
2915         AC_CHECK_FUNCS(fstatfs)
2916         AC_CHECK_FUNCS(statvfs)
2917         AC_CHECK_FUNCS(fstatvfs)
2918         AC_CHECK_FUNCS(stime)
2919         AC_CHECK_FUNCS(ttyname_r)
2920         AC_CHECK_FUNCS(psignal)
2921         AC_CHECK_FUNCS(getlogin_r)
2922         AC_CHECK_FUNCS(lockf)
2923         AC_CHECK_FUNCS(swab)
2924         AC_CHECK_FUNCS(setusershell endusershell)
2925         AC_CHECK_FUNCS(futimens utimensat)
2926         AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2927         AC_CHECK_FUNCS(readv writev preadv pwritev)
2928         AC_CHECK_FUNCS(setpgid)
2929         AC_CHECK_FUNCS(system)
2930         AC_CHECK_FUNCS(fork execv execve)
2931         AC_CHECK_FUNCS(waitpid)
2932         AC_CHECK_FUNCS(accept4)
2933         AC_CHECK_FUNCS(localtime_r)
2934         AC_CHECK_FUNCS(mkdtemp)
2935         AC_CHECK_SIZEOF(size_t)
2936         AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
2937                 [#include <sys/types.h>
2938                  #include <sys/stat.h>
2939                  #include <unistd.h>])
2940         AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2941                 [#include <sys/types.h>
2942                  #include <sys/stat.h>
2943                  #include <unistd.h>])
2944         AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2945                 [#include <sys/time.h>])
2946         AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2947                 [#include <sys/socket.h>])
2948         AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2949                 [#include <unistd.h>
2950                  #include <fcntl.h>])
2951         AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2952                 [#include <sys/uio.h>])
2953         AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2954                 [#include <sys/socket.h>])
2955         AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2956                 [#include <sys/poll.h>])
2957         AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2958                 [#include <sys/socket.h>])
2959         AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2960                 [#include <sys/socket.h>])
2961         AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2962                 [#include <netinet/in.h>])
2963         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2964                 [#include <netinet/in.h>])
2965         AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2966                 [#include <sys/un.h>])
2967         AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2968                 [#include <sys/types.h>
2969                  #include <sys/stat.h>
2970                  #include <unistd.h>])
2971         AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2972                 [#include <time.h>])
2973         AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2974                 [#include <sys/time.h>
2975                  #include <sys/types.h>
2976                  #include <utime.h>])
2977         AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2978                 [#include <sys/time.h>])
2979         AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2980                 [#include <sys/types.h>
2981                  #include <utime.h>])
2982         AC_CHECK_MEMBERS(
2983                 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,, 
2984                 [#include <sys/types.h>
2985                  #include <dirent.h>])
2986         AC_CHECK_MEMBERS(
2987                 [struct passwd.pw_gecos],,, 
2988                 [#include <sys/types.h>
2989                  #include <pwd.h>])
2990         AC_CHECK_MEMBERS(
2991                 [struct statfs.f_flags],,, 
2992                 [#include <sys/types.h>
2993                  #include <sys/vfs.h>])
2994         AC_CHECK_MEMBERS(
2995                 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,, 
2996                 [#include <sys/types.h>
2997                  #include <sys/stat.h>
2998                  #include <unistd.h>])
3000         dnl Favour xattr through glibc, but use libattr if we have to
3001         AC_CHECK_FUNC(lsetxattr, ,
3002                 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3003         )
3004         AC_SUBST(XATTR_LIB)
3006         dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3007         AC_CHECK_MEMBERS(
3008                 [struct kinfo_proc.kp_proc],,, 
3009                 [#include <sys/types.h>
3010                  #include <sys/param.h>
3011                  #include <sys/sysctl.h>
3012                  #include <sys/proc.h>
3013                  ])
3015         dnl *********************************
3016         dnl *** Checks for Windows compilation ***
3017         dnl *********************************
3018         AC_CHECK_HEADERS(sys/time.h)
3019         AC_CHECK_HEADERS(sys/param.h)
3020         AC_CHECK_HEADERS(dirent.h)
3022         dnl ******************************************
3023         dnl *** Checks for OSX and iOS compilation ***
3024         dnl ******************************************
3025         AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3027         dnl *********************************
3028         dnl *** Check for Console 2.0 I/O ***
3029         dnl *********************************
3030         AC_CHECK_HEADERS([curses.h])
3031         AC_CHECK_HEADERS([term.h], [], [],
3032         [#if HAVE_CURSES_H
3033          #include <curses.h>
3034          #endif
3035         ])
3036         AC_CHECK_HEADERS([termios.h])
3038         dnl *********************************
3039         dnl *** Checks for random         ***
3040         dnl *********************************
3041         if test x$host_darwin = xno; then
3042                 AC_CHECK_HEADERS(sys/random.h)
3043                 AC_CHECK_FUNCS(getrandom getentropy)
3044         fi
3046         dnl *********************************
3047         dnl *** Checks for Mono.Native  ***
3048         dnl *********************************
3050         AC_MSG_CHECKING(for linux/in.h)
3051         AC_TRY_COMPILE([
3052                 #include <sys/socket.h>
3053                 #include <linux/in.h>
3054         ], [
3055         ],[
3056                 AC_MSG_RESULT(yes)
3057                 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3058         ], [
3059                 AC_MSG_RESULT(no)
3060         ])
3062         AC_CHECK_HEADERS([linux/if_packet.h])
3064         AC_MSG_CHECKING(for struct in_pktinfo)
3065         AC_TRY_COMPILE([
3066                 #ifdef HAVE_LINUX_IN_H
3067                 #include <sys/socket.h>
3068                 #include <linux/in.h>
3069                 #else
3070                 #include <netinet/in.h>
3071                 #endif
3072         ], [
3073                 struct in_pktinfo pktinfo;
3074         ],[
3075                 AC_MSG_RESULT(yes)
3076                 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3077         ], [
3078                 AC_MSG_RESULT(no)
3079         ])
3081         AC_MSG_CHECKING(for struct ip_mreqn)
3082         AC_TRY_COMPILE([
3083                 #if HAVE_LINUX_IN_H
3084                 #include <sys/socket.h>
3085                 #include <linux/in.h>
3086                 #else
3087                 #include <netinet/in.h>
3088                 #endif
3089         ], [
3090                 struct ip_mreqn mreqn;
3091         ],[
3092                 AC_MSG_RESULT(yes)
3093                 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3094         ], [
3095                 AC_MSG_RESULT(no)
3096         ])
3098         if test x$host_darwin = xno; then
3099                 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3100         fi
3102         if test x$mono_native_platform_ios = xno; then
3103                 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3104                 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3105                 AC_CHECK_FUNC(stat64,            [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3106         fi
3108         AC_CHECK_FUNC(lseek64,           [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3109         AC_CHECK_FUNC(mmap64,            [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3110         AC_CHECK_FUNC(ftruncate64,       [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3111         AC_CHECK_FUNC(posix_fadvise64,   [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3112         AC_CHECK_DECL(pipe2,             [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3113         AC_CHECK_FUNC(getmntinfo,        [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3114         AC_CHECK_FUNC(strcpy_s,          [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3115         AC_CHECK_FUNC(strlcpy,           [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3116         AC_CHECK_FUNC(posix_fadvise,     [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
3117         AC_CHECK_FUNC(ioctl,             [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3118         AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3119         AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3120         AC_CHECK_DECL(TIOCGWINSZ,        [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3121         AC_CHECK_FUNC(tcgetattr,         [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3122         AC_CHECK_FUNC(tcsetattr,         [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3123         AC_CHECK_FUNC(arc4random_buf,    [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3124         AC_CHECK_DECL(ECHO,              [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3125         AC_CHECK_DECL(ICANON,            [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3126         AC_CHECK_DECL(TCSANOW,           [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3128         AC_CHECK_DECL(O_CLOEXEC,         [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3129         AC_CHECK_DECL(F_DUPFD_CLOEXEC,   [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3131         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>]])
3132         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>]])
3133         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>]])
3134         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>]])
3135         AC_CHECK_MEMBER(struct dirent.d_namlen,       [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3136         AC_CHECK_MEMBER(struct statfs.f_fstypename,   [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3137         AC_CHECK_MEMBER(struct statvfs.f_fstypename,  [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3139         AC_MSG_CHECKING(for struct statfs)
3140         AC_TRY_COMPILE([
3141                 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3142                 #include <sys/mount.h>
3143                 #else
3144                 #include <sys/statfs.h>
3145                 #endif
3146         ], [
3147                 struct statfs;
3148         ],[
3149                 AC_MSG_RESULT(yes)
3150                 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3151         ], [
3152                 AC_MSG_RESULT(no)
3153         ])
3155         if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3156                 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3157         fi
3159         AC_MSG_CHECKING(for readdir_r)
3160         AC_TRY_COMPILE([
3161                 #include <dirent.h>
3162         ], [
3163                 DIR* dir;
3164                 struct dirent* entry;
3165                 struct dirent* result;
3166                 readdir_r(dir, entry, &result);
3167         ],[
3168                 AC_MSG_RESULT(yes)
3169                 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3170         ], [
3171                 AC_MSG_RESULT(no)
3172         ])
3174         AC_MSG_CHECKING(for kevent with void *data)
3175         AC_TRY_COMPILE([
3176                 #include <sys/types.h>
3177                 #include <sys/event.h>
3178         ], [
3179                 struct kevent event;
3180                 void* data;
3181                 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3182         ],[
3183                 AC_MSG_RESULT(yes)
3184                 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3185         ], [
3186                 AC_MSG_RESULT(no)
3187         ])
3189         AC_CHECK_MEMBER(struct fd_set.fds_bits,   [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3190         AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3192         AC_MSG_CHECKING(for sendfile with 4 arguments)
3193         AC_TRY_COMPILE([
3194                 #include <sys/sendfile.h>
3195         ], [
3196                 int result = sendfile(0, 0, 0, 0);
3197         ],[
3198                 AC_MSG_RESULT(yes)
3199                 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3200         ], [
3201                 AC_MSG_RESULT(no)
3202         ])
3204         AC_MSG_CHECKING(for sendfile with 6 arguments)
3205         AC_TRY_LINK([
3206                 #include <stdlib.h>
3207                 #include <sys/types.h>
3208                 #include <sys/socket.h>
3209                 #include <sys/uio.h>
3210         ], [
3211                 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3212         ],[
3213                 AC_MSG_RESULT(yes)
3214                 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3215         ], [
3216                 AC_MSG_RESULT(no)
3217         ])
3219         AC_CHECK_FUNC(fcopyfile,     [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3220         AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3221         AC_CHECK_FUNC(accept4,       [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3222         AC_CHECK_FUNC(kqueue,        [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3224         ORIG_CFLAGS="$CFLAGS"
3225         CFLAGS="-Werror -Wsign-conversion"
3227         AC_MSG_CHECKING(for getnameinfo with signed flags)
3228         AC_TRY_COMPILE([
3229                 #include <sys/types.h>
3230                 #include <netdb.h>
3231         ], [
3232                 const struct sockaddr *addr;
3233                 socklen_t addrlen;
3234                 char *host;
3235                 socklen_t hostlen;
3236                 char *serv;
3237                 socklen_t servlen;
3238                 int flags;
3239                 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3240         ],[
3241                 AC_MSG_RESULT(yes)
3242                 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3243         ], [
3244                 AC_MSG_RESULT(no)
3245         ])
3247         CFLAGS="$ORIG_CFLAGS"
3249         if test "x$host_linux" = "xyes"; then
3250                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3251         else
3252                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3253         fi
3255         ORIG_CFLAGS="$CFLAGS"
3256         CFLAGS="-Werror -Wsign-conversion"
3258         AC_MSG_CHECKING(for bind with unsigned addrlen)
3259         AC_TRY_COMPILE([
3260                 #include <sys/socket.h>
3261         ], [
3262                 int fd;
3263                 struct sockaddr* addr;
3264                 socklen_t addrLen;
3265                 bind(fd, addr, addrLen);
3266         ],[
3267                 AC_MSG_RESULT(yes)
3268                 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3269         ], [
3270                 AC_MSG_RESULT(no)
3271         ])
3273         AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3274         AC_TRY_COMPILE([
3275                 #include <netinet/in.h>
3276                 #include <netinet/tcp.h>
3277         ], [
3278                 struct ipv6_mreq opt;
3279                 unsigned int index = 0;
3280                 opt.ipv6mr_interface = index;
3281         ],[
3282                 AC_MSG_RESULT(yes)
3283                 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3284         ], [
3285                 AC_MSG_RESULT(no)
3286         ])
3288         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3289         AC_TRY_COMPILE([
3290                 #include <sys/inotify.h>
3291         ], [
3292                 intptr_t fd;
3293                 uint32_t wd;
3294                 int result = inotify_rm_watch(fd, wd);
3295         ],[
3296                 AC_MSG_RESULT(yes)
3297                 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3298         ], [
3299                 AC_MSG_RESULT(no)
3300         ])
3302         CFLAGS="$ORIG_CFLAGS"
3304         AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3305         if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3306                 AC_MSG_RESULT(no)
3307         else
3308                 AC_TRY_RUN([
3309                         #include <sys/mman.h>
3310                         #include <fcntl.h>
3311                         #include <unistd.h>
3313                         int main ()
3314                         {
3315                                 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3316                                 if (fd == -1)
3317                                         return -1;
3319                                 shm_unlink("/mono_configure_shm_open");
3321                                 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3322                                 //       on at least the current version of Mac OS X
3324                                 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3325                                         return -1;
3327                                 return 0;
3328                         }
3329                 ],[
3330                         AC_MSG_RESULT(yes)
3331                         AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3332                 ], [
3333                         AC_MSG_RESULT(no)
3334                 ])
3335         fi
3337         AC_MSG_CHECKING(for getpriority with int who)
3338         AC_TRY_COMPILE([
3339                 #include <sys/resource.h>
3340         ], [
3341                 int which;
3342                 int who;
3343                 int result = getpriority(which, who);
3344         ],[
3345                 AC_MSG_RESULT(yes)
3346                 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3347         ], [
3348                 AC_MSG_RESULT(no)
3349         ])
3351         AC_MSG_CHECKING(for kevent with int parameters)
3352         AC_TRY_COMPILE([
3353                 #include <sys/types.h>
3354                 #include <sys/event.h>
3355         ], [
3356                 int kg;
3357                 const struct kevent* chagelist;
3358                 int nchanges;
3359                 struct kevent* eventlist;
3360                 int nevents;
3361                 const struct timespec* timeout;
3362                 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3363         ],[
3364                 AC_MSG_RESULT(yes)
3365                 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3366         ], [
3367                 AC_MSG_RESULT(no)
3368         ])
3370         ORIG_CFLAGS="$CFLAGS"
3371         CFLAGS="-Werror -Wimplicit-function-declaration"
3373         AC_MSG_CHECKING(for mkstemps)
3374         AC_TRY_COMPILE([
3375                 #include <stdlib.h>
3376                 #include <unistd.h>
3377                 #include <string.h>
3378         ], [
3379                 char *template;
3380                 int suffixlen;
3381                 int result = mkstemps(template, suffixlen);
3382         ],[
3383                 AC_MSG_RESULT(yes)
3384                 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3385                 have_mkstemps=yes
3386         ], [
3387                 AC_MSG_RESULT(no)
3388         ])
3390         CFLAGS="$ORIG_CFLAGS"
3392         if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3393                 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3394         fi
3396         AC_MSG_CHECKING(for tcp/var.h)
3397         AC_TRY_COMPILE([
3398                 #include <sys/types.h>
3399                 #include <sys/socketvar.h>
3400                 #include <netinet/ip.h>
3401                 #include <netinet/tcp.h>
3402                 #include <netinet/tcp_var.h>
3403         ], [
3404         ],[
3405                 AC_MSG_RESULT(yes)
3406                 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3407         ], [
3408                 AC_MSG_RESULT(no)
3409         ])
3411         AC_CHECK_HEADERS([sys/cdefs.h])
3413         AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3414         AC_TRY_COMPILE([
3415                 #ifdef HAVE_SYS_CDEFS_H
3416                 #include <sys/cdefs.h>
3417                 #endif
3418                 #include <netinet/tcp.h>
3419         ], [
3420                 int result = TCP_ESTABLISHED;
3421         ],[
3422                 AC_MSG_RESULT(yes)
3423                 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3424         ], [
3425                 AC_MSG_RESULT(no)
3426         ])
3428         AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3430         AC_MSG_CHECKING(for struct rt_msghdr)
3431         AC_TRY_COMPILE([
3432                 #include <sys/types.h>
3433                 #include <net/route.h>
3434         ], [
3435                 struct rt_msghdr;
3436         ],[
3437                 AC_MSG_RESULT(yes)
3438                 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3439         ], [
3440                 AC_MSG_RESULT(no)
3441         ])
3443         AC_CHECK_HEADERS([sys/sysctl.h])
3444         AC_CHECK_HEADERS([linux/rtnetlink.h])
3446         AC_CHECK_FUNC(getpeereid,    [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3447         AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3448         AC_CHECK_FUNC(uname,         [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3450         ORIG_CFLAGS="$CFLAGS"
3451         CFLAGS="-Werror -Weverything"
3453         AC_MSG_CHECKING(for getdomainname with size_t namelen)
3454         AC_TRY_COMPILE([
3455                 #include <unistd.h>
3456         ], [
3457                 size_t namelen = 20;
3458                 char name[20];
3459                 int result = getdomainname(name, namelen);
3460         ],[
3461                 AC_MSG_RESULT(yes)
3462                 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3463         ], [
3464                 AC_MSG_RESULT(no)
3465         ])
3467         CFLAGS="$ORIG_CFLAGS"
3469         AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3470         AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3471         AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3473         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
3474                 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3475         elif test "x$host_linux" = "xyes"; then
3476                 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3477         fi
3479         AC_CHECK_HEADERS([crt_externs.h])
3481         AC_MSG_CHECKING(for _NSGetEnviron)
3482         AC_TRY_COMPILE([
3483                 #include <crt_externs.h>
3484         ], [
3485                 char **result = *(_NSGetEnviron());
3486         ],[
3487                 AC_MSG_RESULT(yes)
3488                 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3489         ], [
3490                 AC_MSG_RESULT(no)
3491         ])
3493         AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3495 else
3496         dnl *********************************
3497         dnl *** Checks for Windows compilation ***
3498         dnl *********************************
3499         AC_CHECK_HEADERS(winternl.h)
3501         jdk_headers_found=no
3502         AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3503         AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3504         AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3505         AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3506         AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3507         AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3508         AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3510         dnl *********************************
3511         dnl *** Check for struct ip_mreqn ***
3512         dnl *********************************
3513         AC_MSG_CHECKING(for struct ip_mreqn)
3514         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3515                 struct ip_mreqn mreq;
3516                 mreq.imr_address.s_addr = 0;
3517         ], [
3518                 # Yes, we have it...
3519                 AC_MSG_RESULT(yes)
3520                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3521         ], [
3522                 # We'll just have to try and use struct ip_mreq
3523                 AC_MSG_RESULT(no)
3524                 AC_MSG_CHECKING(for struct ip_mreq)
3525                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3526                         struct ip_mreq mreq;
3527                         mreq.imr_interface.s_addr = 0;
3528                 ], [
3529                         # Yes, we have it...
3530                         AC_MSG_RESULT(yes)
3531                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3532                 ], [
3533                         # No multicast support
3534                         AC_MSG_RESULT(no)
3535                 ])
3536         ])
3538         dnl **********************************
3539         dnl *** Check for getaddrinfo ***
3540         dnl **********************************
3541         AC_MSG_CHECKING(for getaddrinfo)
3542                 AC_TRY_LINK([
3543                 #include <stdio.h>
3544                 #include <winsock2.h>
3545                 #include <ws2tcpip.h>
3546         ], [
3547                 getaddrinfo(NULL,NULL,NULL,NULL);
3548         ], [
3549                 # Yes, we have it...
3550                 AC_MSG_RESULT(yes)
3551                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3552         ], [
3553                 AC_MSG_RESULT(no)
3554         ])
3556         dnl **********************************
3557         dnl *** Check for gethostbyname ***
3558         dnl **********************************
3559         AC_MSG_CHECKING(for gethostbyname)
3560                 AC_TRY_LINK([
3561                 #include <stdio.h>
3562                 #include <winsock2.h>
3563                 #include <ws2tcpip.h>
3564         ], [
3565                 gethostbyname(NULL);
3566         ], [
3567                 # Yes, we have it...
3568                 AC_MSG_RESULT(yes)
3569                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3570         ], [
3571                 AC_MSG_RESULT(no)
3572         ])
3574         dnl **********************************
3575         dnl *** Check for getprotobyname ***
3576         dnl **********************************
3577         AC_MSG_CHECKING(for getprotobyname)
3578                 AC_TRY_LINK([
3579                 #include <stdio.h>
3580                 #include <winsock2.h>
3581                 #include <ws2tcpip.h>
3582         ], [
3583                 getprotobyname(NULL);
3584         ], [
3585                 # Yes, we have it...
3586                 AC_MSG_RESULT(yes)
3587                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3588         ], [
3589                 AC_MSG_RESULT(no)
3590         ])
3592         dnl **********************************
3593         dnl *** Check for getnameinfo ***
3594         dnl **********************************
3595         AC_MSG_CHECKING(for getnameinfo)
3596                 AC_TRY_LINK([
3597                 #include <stdio.h>
3598                 #include <winsock2.h>
3599                 #include <ws2tcpip.h>
3600         ], [
3601                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3602         ], [
3603                 # Yes, we have it...
3604                 AC_MSG_RESULT(yes)
3605                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3606         ], [
3607                 AC_MSG_RESULT(no)
3608         ])
3610         dnl **********************************
3611         dnl *** Check for inet_ntop ***
3612         dnl **********************************
3613         AC_MSG_CHECKING(for inet_ntop)
3614                 AC_TRY_LINK([
3615                 #include <stdio.h>
3616                 #include <winsock2.h>
3617                 #include <ws2tcpip.h>
3618         ], [
3619                 inet_ntop (0, NULL, NULL, 0);
3620         ], [
3621                 # Yes, we have it...
3622                 AC_MSG_RESULT(yes)
3623                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3624         ], [
3625                 AC_MSG_RESULT(no)
3626         ])
3628         dnl **********************************
3629         dnl *** Check for inet_pton ***
3630         dnl **********************************
3631         AC_MSG_CHECKING(for inet_pton)
3632                 AC_TRY_LINK([
3633                 #include <stdio.h>
3634                 #include <winsock2.h>
3635                 #include <ws2tcpip.h>
3636         ], [
3637                 #ifndef inet_pton
3638                 (void) inet_pton;
3639                 #endif
3640                 inet_pton (0, NULL, NULL);
3641         ], [
3642                 # Yes, we have it...
3643                 AC_MSG_RESULT(yes)
3644                 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3645         ], [
3646                 AC_MSG_RESULT(no)
3647         ])
3649         AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3650         AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3651         AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3652         AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3653         AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3654         AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3655         AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3658 dnl socklen_t check
3659 AC_MSG_CHECKING(for socklen_t)
3660 AC_TRY_COMPILE([
3661 #include <sys/types.h>
3662 #include <sys/socket.h>
3664   socklen_t foo;
3666 ac_cv_c_socklen_t=yes
3667         AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3668         AC_MSG_RESULT(yes)
3670         AC_MSG_RESULT(no)
3673 AC_CHECK_FUNCS(execvp)
3675 dnl ****************************
3676 dnl *** Look for /dev/random ***
3677 dnl ****************************
3679 AC_MSG_CHECKING([if usage of random device is requested])
3680 AC_ARG_ENABLE(dev-random,
3681 [  --disable-dev-random    disable the use of the random device (enabled by default)],
3682 try_dev_random=$enableval, try_dev_random=yes)
3684 AC_MSG_RESULT($try_dev_random)
3686 case "{$build}" in
3688 dnl IBM i does not have /dev/random, use unblocking only
3690     *-*-os400*)
3691     NAME_DEV_RANDOM="/dev/urandom"
3692     ;;
3694 dnl Win32 does not have /dev/random, they have their own method...
3696     *-mingw*|*-*-cygwin*)
3697     ac_cv_have_dev_random=no
3698     ;;
3700 dnl Everywhere else, it's /dev/random
3702     *)
3703     NAME_DEV_RANDOM="/dev/random"
3704     ;;
3705 esac
3707 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3709 dnl Now check if the device actually exists
3711 if test "x$try_dev_random" = "xyes"; then
3712     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3713     [if test -r "$NAME_DEV_RANDOM" ; then
3714         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3715     if test "x$ac_cv_have_dev_random" = "xyes"; then
3716         AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3717     fi
3718 else
3719     AC_MSG_CHECKING(for random device)
3720     ac_cv_have_dev_random=no
3721     AC_MSG_RESULT(has been disabled)
3724 if test "x$host_win32" = "xyes"; then
3725     AC_DEFINE(HAVE_CRYPT_RNG)
3728 if test "x$ac_cv_have_dev_random" = "xno" \
3729     && test "x$host_win32" = "xno"; then
3730     AC_MSG_WARN([[
3732 *** A system-provided entropy source was not found on this system.
3733 *** Because of this, the System.Security.Cryptography random number generator
3734 *** will throw a NotImplemented exception.
3736 *** If you are seeing this message, and you know your system DOES have an
3737 *** entropy collection in place, please report an issue on GitHub and
3738 *** provide information about the system and how to access the random device.
3740 *** Otherwise you can install either egd or prngd and set the environment
3741 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3742 ***]])
3745 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)
3747 AC_MSG_CHECKING([if big-arrays are to be enabled])
3748 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)
3749 if test "x$enable_big_arrays" = "xyes" ; then
3750     if  test "x$ac_cv_sizeof_void_p" = "x8"; then
3751         AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3752     else
3753         AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3754     fi
3756 AC_MSG_RESULT($enable_big_arrays)
3758 dnl **************
3759 dnl *** DTRACE ***
3760 dnl **************
3762 AC_ARG_ENABLE(dtrace,[  --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3764 if test "x$enable_dtrace" = "xyes"; then
3765    if test "x$has_dtrace" = "xno"; then
3766           AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3767    fi
3768    AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3769    if test "x$DTRACE" = "xno"; then
3770           AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3771           enable_dtrace=no
3772    elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3773           AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3774           enable_dtrace=no
3775    fi
3778 dtrace_g=no
3779 if test "x$enable_dtrace" = "xyes"; then
3780         AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3781         DTRACEFLAGS=
3782         if test "x$ac_cv_sizeof_void_p" = "x8"; then
3783                 case "$host" in
3784                         powerpc-*-darwin*)
3785                         DTRACEFLAGS="-arch ppc64"
3786                         ;;
3787                         i*86-*-darwin*)
3788                         DTRACEFLAGS="-arch x86_64"
3789                         ;;
3790                         *)
3791                         DTRACEFLAGS=-64
3792                         ;;
3793                 esac
3794         else
3795                 case "$host" in
3796                         powerpc-*-darwin*)
3797                         DTRACEFLAGS="-arch ppc"
3798                         ;;
3799                         i*86-*-darwin*)
3800                         DTRACEFLAGS="-arch i386"
3801                         ;;
3802                         *)
3803                         DTRACEFLAGS=-32
3804                         ;;
3805                 esac
3806         fi
3807         AC_SUBST(DTRACEFLAGS)
3808         case "$host" in
3809                 *-*-solaris*)
3810                 dtrace_g=yes
3811                 ;;
3812         esac
3813         AC_CHECK_HEADERS([sys/sdt.h])
3815 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3816 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3818 dnl **************************
3819 dnl *** AOT cross offsets  ***
3820 dnl **************************
3822 AC_ARG_WITH(cross-offsets, [  --with-cross-offsets=<offsets file path>    Explicit AOT cross offsets file],
3823     AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3825 dnl **************
3826 dnl ***  LLVM  ***
3827 dnl **************
3829 AC_ARG_ENABLE(llvm,[  --enable-llvm     Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3830 AC_ARG_ENABLE(loadedllvm,[  --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3831 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)
3832 AC_ARG_ENABLE(llvm-runtime,[  --enable-llvm-runtime     Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3833 AC_ARG_ENABLE(llvm-asserts,[  --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3835 AC_ARG_WITH(llvm, [  --with-llvm=<llvm prefix>    Enable the LLVM back-end], enable_llvm=yes,)
3837 if test "x$enable_llvm" = "xdefault"; then
3838    enable_llvm=$enable_llvm_default
3841 enable_llvm_msvc_only="no"
3842 if test "x$enable_llvm" = "xyes"; then
3843         if test "x$host_win32" = "xyes"; then
3844                 if test "x$cross_compiling" = "xno"; then
3845                         case "$target" in
3846                         x86_64*)
3847                                 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
3848                                 enable_llvm_msvc_only="yes"
3849                                 ;;
3850                         i686*)
3851                                 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
3852                                 ;;
3853                         esac
3854                 fi
3855                 if test "x$enable_loadedllvm" = "xyes"; then
3856                         AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
3857                         enable_loadedllvm=no
3858                 fi
3859         fi
3862 internal_llvm="no"
3863 if test "x$enable_llvm" = "xyes"; then
3864         if test "x$with_llvm" != "x"; then
3865                 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3866                 if test x$host_win32 = xyes; then
3867                         EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
3868                 fi
3869                 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3870                         AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3871                 fi
3872         else
3873                 if test x$host_win32 = xyes; then
3874                         AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
3875                 else
3876                         AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3877                 fi
3878                 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3879                         internal_llvm=yes
3880                 fi
3881         fi
3883         LLVM_CODEGEN_LIBS="x86codegen"
3884         case "$target" in
3885         arm*)
3886                 LLVM_CODEGEN_LIBS="armcodegen"
3887                 ;;
3888         aarch64*)
3889                 LLVM_CODEGEN_LIBS="aarch64codegen"
3890                 ;;
3891         powerpc*)
3892                 LLVM_CODEGEN_LIBS="powerpccodegen"
3893                 ;;
3894         esac
3895         if test "x$host" != "x$target"; then
3896                 # No need for jit libs
3897                 LLVM_CODEGEN_LIBS=
3898         fi
3900         AC_SUBST(LLVM_CODEGEN_LIBS)
3901         AC_SUBST(EXTERNAL_LLVM_CONFIG)
3903         if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" &&  test "x$internal_llvm" = "xno"; then
3904                 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
3905                 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
3906         fi
3907         if test "x$enable_llvm_msvc_only" != "xyes"; then
3908                 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3909         else
3910                 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
3911         fi
3912 fi # ENABLE_LLVM
3914 # AC_DEFINE necessary for correct restore behavior on Linux
3915 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3916 if test "x$internal_llvm" != "xno"; then
3917         if test "x$enable_llvm_msvc_only" != "xyes"; then
3918                 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
3919         else
3920                 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
3921         fi
3924 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3925 if test "x$enable_llvm_asserts" != "xno"; then
3926         if test "x$enable_llvm_msvc_only" != "xyes"; then
3927                 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
3928         else
3929                 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
3930         fi
3933 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
3935 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
3936 if test "x$enable_loadedllvm" = "xyes"; then
3937         if test "x$enable_llvm_msvc_only" != "xyes"; then
3938                 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3939         fi
3942 if test "x$enable_llvm" = "xyes"; then
3943         enable_llvm_runtime=yes
3946 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
3947 if test "x$enable_llvm_runtime" = "xyes"; then
3948         if test "x$enable_llvm_msvc_only" != "xyes"; then
3949                 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3950         else
3951                 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
3952         fi
3955 TARGET="unknown"
3956 ACCESS_UNALIGNED="yes"
3958 LIBC="libc.so.6"
3959 INTL="libc.so.6"
3960 SQLITE="libsqlite.so.0"
3961 SQLITE3="libsqlite3.so.0"
3962 X11="libX11.so"
3963 GDKX11="libgdk-x11-2.0.so.0"
3964 GTKX11="libgtk-x11-2.0.so.0"
3965 XINERAMA="libXinerama.so.1"
3967 sizeof_register="SIZEOF_VOID_P"
3969 jit_wanted=true
3970 boehm_supported=true
3971 BTLS_SUPPORTED=no
3972 BTLS_PLATFORM=
3974 case "$host" in
3975         wasm32*)
3976                 TARGET=WASM
3977                 arch_target=wasm
3978                 BTLS_SUPPORTED=no
3979                 ACCESS_UNALIGNED="no"
3980                 with_tls=pthread
3981                 target_wasm=yes
3982                 ;;
3983         mips*)
3984                 TARGET=MIPS;
3985                 arch_target=mips;
3986                 with_tls=pthread;
3987                 ACCESS_UNALIGNED="no"
3989                 AC_MSG_CHECKING(for mips n32)
3990                 AC_TRY_COMPILE([],[
3991                 #if _MIPS_SIM != _ABIN32
3992                 #error Not mips n32
3993                 #endif
3994                 ],[
3995                 AC_MSG_RESULT(yes)
3996                 sizeof_register=8
3997                 ],[
3998                 AC_MSG_RESULT(no)
3999                 ])
4000                 ;;
4001         i*86-*-*)
4002                 TARGET=X86;
4003                 arch_target=x86;
4004                 case $host_os in
4005                   solaris*)
4006                         LIBC="libc.so"
4007                         INTL="libintl.so"
4008                         if test "x$ac_cv_sizeof_void_p" = "x8"; then
4009                                 TARGET=AMD64
4010                                 arch_target=amd64
4011                         fi
4013                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4014                         # int astruct __attribute__ ((visibility ("hidden")));
4015                         # void foo ()
4016                         # {
4017                         #       void *p = &astruct;
4018                         # }
4019                         # gcc -fPIC --shared -o libfoo.so foo.c
4020                         # yields:
4021                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4022                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4023                         have_visibility_hidden=no
4024                         ;;
4025                   mingw*|cygwin*)
4026                         have_visibility_hidden=no
4027                         BTLS_SUPPORTED=no
4028                         BTLS_PLATFORM=i386
4029                         ;;
4030                   haiku*)
4031                         LIBC=libroot.so
4032                         ;;
4033                   linux*)
4034                         AOT_SUPPORTED="yes"
4035                         BTLS_SUPPORTED=yes
4036                         BTLS_PLATFORM=i386
4037                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4038                         ;;
4039                   darwin*)
4040                         AOT_SUPPORTED="yes"
4041                         BTLS_SUPPORTED=yes
4042                         BTLS_PLATFORM=i386
4043                         ;;
4044                   openbsd*|freebsd*|kfreebsd-gnu*)
4045                         AOT_SUPPORTED="yes"
4046                         BTLS_SUPPORTED=yes
4047                         BTLS_PLATFORM=i386
4048                         ;;
4049                 esac
4050                 ;;
4051         x86_64-*-* | amd64-*-*)
4052                 TARGET=AMD64;
4053                 arch_target=amd64;
4054                 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4055                         AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4056                         sizeof_register=8
4057                 fi
4058                 case $host_os in
4059                   linux*)
4060                         AOT_SUPPORTED="yes"
4061                         BTLS_SUPPORTED=yes
4062                         BTLS_PLATFORM=x86_64
4063                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4064                         ;;
4065                   darwin*)
4066                         AOT_SUPPORTED="yes"
4067                         BTLS_SUPPORTED=yes
4068                         BTLS_PLATFORM=x86_64
4069                         boehm_supported=false
4070                         ;;
4071                   openbsd*|freebsd*|kfreebsd-gnu*)
4072                         AOT_SUPPORTED="yes"
4073                         BTLS_SUPPORTED=yes
4074                         BTLS_PLATFORM=x86_64
4075                         ;;
4076                   mingw*|cygwin*)
4077                         BTLS_SUPPORTED=no
4078                         BTLS_PLATFORM=x86_64
4079                         ;;
4080                 esac
4081                 ;;
4082         sparc*-*-*)
4083                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4084                    TARGET=SPARC64
4085                 else
4086                         TARGET=SPARC
4087                 fi
4088                 arch_target=sparc;
4089                 ACCESS_UNALIGNED="no"
4090                 case $host_os in
4091                   linux*) ;;
4092                   *)
4093                         LIBC="libc.so"
4094                         INTL="libintl.so"
4095                 esac
4096                 if test x"$GCC" = xyes; then
4097                         # We don't support v8 cpus
4098                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4099                 fi
4100                 if test x"$AR" = xfalse; then
4101                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4102                 fi
4103                 ;;
4104         *-mingw*|*-*-cygwin*)
4105                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4106                 have_visibility_hidden=no
4107                 INTL="intl"
4108                 ;;
4109         macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4110         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4111         powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4112                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4113                         TARGET=POWERPC64;
4114                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4115                         if ! (echo $CC | grep -q -- 'clang'); then
4116                                 CFLAGS="$CFLAGS -mminimal-toc"
4117                         fi
4118                 else
4119                         TARGET=POWERPC;
4120                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4121                 fi
4122                 arch_target=ppc;
4123                 case $host_os in
4124                   aix*|os400*)
4125                         BTLS_SUPPORTED=yes
4126                         BTLS_PLATFORM=powerpc
4127                         dnl on AIX/PASE, shared libraries can be inside archives
4128                         dnl if they are, we specify them by lib.a(lib.so)
4129                         dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4130                         LIBC="libc.a(shr_64.o)"
4131                         INTL="libintl.a(libintl.so.8)"
4132                         ;;
4133                   linux*)
4134                         BTLS_SUPPORTED=yes
4135                         BTLS_PLATFORM=powerpc
4136                         ;;
4137                 esac
4138                 ;;
4139         armv7k-*-darwin*)
4140                 TARGET=ARM;
4141                 TARGET_SYS=WATCHOS
4142                 arch_target=arm;
4143                 arm_fpu=VFP_HARD
4144                 ACCESS_UNALIGNED="no"
4145                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4146                 ;;
4148         arm*-darwin*)
4149                 TARGET=ARM;
4150                 arch_target=arm;
4151                 ACCESS_UNALIGNED="no"
4152                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4153                 ;;
4154         arm*-linux*)
4155                 TARGET=ARM;
4156                 arch_target=arm;
4157                 ACCESS_UNALIGNED="no"
4158                 AOT_SUPPORTED="yes"
4159                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4160                 BTLS_SUPPORTED=yes
4161                 BTLS_PLATFORM=arm
4162                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4163                 case "$target" in
4164                 arm*-linux*-gnueabi)
4165                         BTLS_PLATFORM=armsoft
4166                         ;;
4167                 esac
4168                 ;;
4169         arm*-netbsd*-eabi*)
4170                 TARGET=ARM;
4171                 arch_target=arm;
4172                 ACCESS_UNALIGNED="no"
4173                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4174                 ;;
4175         aarch64-*darwin*ilp32)
4176                 TARGET=ARM64;
4177                 arch_target=arm64
4178                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4179                 sizeof_register=8
4180                 # assuming no other target other than watchOS is using aarch64*darwin triple
4181                 TARGET_SYS=WATCHOS
4182                 ;;
4183         aarch64-*)
4184                 # https://lkml.org/lkml/2012/7/15/133
4185                 TARGET=ARM64
4186                 arch_target=arm64
4187                 boehm_supported=false
4188                 AOT_SUPPORTED="yes"
4189                 BTLS_SUPPORTED=yes
4190                 BTLS_PLATFORM=aarch64
4191                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4192                 ;;
4193         s390x-*-linux*)
4194                 TARGET=S390X;
4195                 arch_target=s390x;
4196                 ACCESS_UNALIGNED="yes"
4197                 BTLS_SUPPORTED=yes
4198                 BTLS_PLATFORM=s390x
4199                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4200                 ;;
4201         riscv32-*)
4202                 TARGET=RISCV32
4203                 ACCESS_UNALIGNED=no
4204                 AOT_SUPPORTED=no
4205                 BTLS_SUPPORTED=yes
4206                 BTLS_PLATFORM=riscv32
4207                 arch_target=riscv32
4208                 boehm_supported=false
4209                 ;;
4210         riscv64*)
4211                 TARGET=RISCV64
4212                 ACCESS_UNALIGNED=no
4213                 AOT_SUPPORTED=no
4214                 BTLS_SUPPORTED=yes
4215                 BTLS_PLATFORM=riscv64
4216                 arch_target=riscv64
4217                 boehm_supported=false
4218                 ;;
4219 esac
4221 HOST=$TARGET
4223 if test "x$host" != "x$target"; then
4224    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4225    enable_mcs_build=no
4226    enable_support_build=no
4227    BTLS_SUPPORTED=no
4228    # Can't use tls, since it depends on the runtime detection of tls offsets
4229    # in mono-compiler.h
4230    with_tls=pthread
4231    target_mach=no
4232    case "$target" in
4233    wasm32*)
4234                 TARGET=WASM
4235                 arch_target=wasm
4236                 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4237                 ;;
4238    arm*-darwin*)
4239                 TARGET=ARM;
4240                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4241                 case "$target" in
4242                 armv7k-*)
4243                         arm_fpu=VFP_HARD
4244                         AC_DEFINE(TARGET_WATCHOS, 1, [...])
4245                         ;;
4246                 esac            
4247                 ;;
4248    powerpc64-ps3-linux-gnu)
4249                 TARGET=POWERPC64
4250                 arch_target=powerpc64
4251                 AC_DEFINE(TARGET_PS3, 1, [...])
4252                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4253                 # uses this define
4254                 AC_DEFINE(__mono_ppc64__, 1, [...])
4255                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4256                 sizeof_register=8
4257                 target_byte_order=G_BIG_ENDIAN
4258                 ;;
4259    powerpc64-xbox360-linux-gnu)
4260                 TARGET=POWERPC64
4261                 arch_target=powerpc64
4262                 AC_DEFINE(TARGET_XBOX360, 1, [...])
4263                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4264                 # uses this define
4265                 sizeof_register=8
4266                 target_byte_order=G_BIG_ENDIAN
4267                 ;;
4268    arm*-linux-*)
4269                 TARGET=ARM;
4270                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4271                 ;;
4272    arm*-netbsd*-eabi*)
4273                 TARGET=ARM;
4274                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4275                 ;;
4276    i686*-linux-*)
4277                 TARGET=X86;
4278                 ;;
4279    i*86-apple-*)
4280                 TARGET=X86;
4281                 ;;
4282    x86_64*-linux-*)
4283                 TARGET=AMD64;
4284                 ;;
4285    x86_64-ps4-freebsd)
4286                 TARGET=AMD64;
4287                 AC_DEFINE(TARGET_PS4, 1, [...])
4288                 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4289                 CPPFLAGS="$CPPFLAGS"
4290                 target_win32=no
4291                 ;;
4292    aarch64*-linux-*)
4293                 TARGET=ARM64;
4294                 ;;
4295         aarch64-*)
4296                 TARGET=ARM64
4297                 ;;
4298         riscv32*)
4299                 TARGET=RISCV32
4300                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4301                 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4302                 arch_target=riscv32
4303                 target_mach=no
4304                 with_tls=pthread
4305                 ;;
4306         riscv64*)
4307                 TARGET=RISCV64
4308                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4309                 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4310                 arch_target=riscv64
4311                 target_mach=no
4312                 with_tls=pthread
4313                 ;;
4314         *)
4315                 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4316         esac
4318         case "$target" in
4319         *-darwin*)
4320                 target_mach=yes
4321                 ;;
4322         *-linux-android*)
4323                 AC_DEFINE(TARGET_ANDROID, 1, [...])
4324                 ;;
4325         esac
4328 case "$TARGET" in
4329 WASM)
4330         AC_DEFINE(TARGET_WASM, 1, [...])
4331         arch_target=wasm
4332         ;;
4333 X86)
4334         AC_DEFINE(TARGET_X86, 1, [...])
4335         arch_target=x86
4336         ;;
4337 AMD64)
4338         AC_DEFINE(TARGET_AMD64, 1, [...])
4339         arch_target=amd64
4340         ;;
4341 ARM)
4342         AC_DEFINE(TARGET_ARM, 1, [...])
4343         arch_target=arm
4344         ACCESS_UNALIGNED="no"
4345         ;;
4346 ARM64)
4347         AC_DEFINE(TARGET_ARM64, 1, [...])
4348         arch_target=arm64
4349         ;;
4350 POWERPC)
4351         AC_DEFINE(TARGET_POWERPC, 1, [...])
4352         ;;
4353 POWERPC64)
4354         AC_DEFINE(TARGET_POWERPC, 1, [...])
4355         AC_DEFINE(TARGET_POWERPC64, 1, [...])
4356         ;;
4357 S390X)
4358         AC_DEFINE(TARGET_S390X, 1, [...])
4359         ;;
4360 MIPS)
4361         AC_DEFINE(TARGET_MIPS, 1, [...])
4362         ;;
4363 SPARC)
4364         AC_DEFINE(TARGET_SPARC, 1, [...])
4365         ;;
4366 SPARC64)
4367         AC_DEFINE(TARGET_SPARC64, 1, [...])
4368         ;;
4369 RISCV32)
4370         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4371         AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4372         ;;
4373 RISCV64)
4374         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4375         AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4376         ;;
4377 esac
4379 case "$TARGET" in
4380 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4381     target_sizeof_void_p=4
4382     ;;
4383 *64* | S390X)
4384     target_sizeof_void_p=8
4385     ;;
4387     AC_MSG_ERROR([unknown target])
4388     ;;
4389 esac
4391 case "$HOST" in
4392 WASM)
4393         AC_DEFINE(HOST_WASM, 1, [...])
4394         ;;
4395 X86)
4396         AC_DEFINE(HOST_X86, 1, [...])
4397         ;;
4398 AMD64)
4399         AC_DEFINE(HOST_AMD64, 1, [...])
4400         ;;
4401 ARM)
4402         AC_DEFINE(HOST_ARM, 1, [...])
4403         ;;
4404 ARM64)
4405         AC_DEFINE(HOST_ARM64, 1, [...])
4406         ;;
4407 POWERPC)
4408         AC_DEFINE(HOST_POWERPC, 1, [...])
4409         ;;
4410 POWERPC64)
4411         AC_DEFINE(HOST_POWERPC, 1, [...])
4412         AC_DEFINE(HOST_POWERPC64, 1, [...])
4413         ;;
4414 S390X)
4415         AC_DEFINE(HOST_S390X, 1, [...])
4416         ;;
4417 MIPS)
4418         AC_DEFINE(HOST_MIPS, 1, [...])
4419         ;;
4420 SPARC)
4421         AC_DEFINE(HOST_SPARC, 1, [...])
4422         ;;
4423 SPARC64)
4424         AC_DEFINE(HOST_SPARC64, 1, [...])
4425         ;;
4426 RISCV32)
4427         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4428         AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4429         ;;
4430 RISCV64)
4431         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4432         AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4433         ;;
4434 esac
4436 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4437 case "$HOST" in
4438 X86 | AMD64 | ARM | ARM64)
4439         MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4440         ;;
4441 esac
4443 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4444 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4446 dnl *************
4447 dnl *** VTUNE ***
4448 dnl *************
4450 AC_ARG_ENABLE(vtune,[  --enable-vtune   Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4451 AC_ARG_WITH(vtune, [  --with-vtune=<vtune prefix>       Enable jit vtune profiling], enable_vtune=yes,)
4453 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4455 if test "x$enable_vtune" = "xyes"; then
4456         if test "x$with_vtune" = "x"; then
4457                 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4458         else
4459                 VTUNE_PATH=$with_vtune
4460         fi
4461         VTUNE_INCLUDE=$VTUNE_PATH/include
4462         case "$TARGET" in
4463         X86)
4464                 VTUNE_LIB=$VTUNE_PATH/lib32
4465                 ;;
4466         AMD64)
4467                 VTUNE_LIB=$VTUNE_PATH/lib64
4468                 ;;
4469         *)
4470                 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4471                 ;;
4472         esac
4473         if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4474                 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4475         fi
4476         if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4477                 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4478         fi
4480         VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4481         VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4483         AC_SUBST(VTUNE_LIBS)
4484         AC_SUBST(VTUNE_CFLAGS)
4486 dnl Use GCC atomic ops if they work on the target.
4487 if test x$GCC = "xyes"; then
4488         case $TARGET in
4489         X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4490                 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4491                 ;;
4492         esac
4495 if test "x$target_mach" = "xyes"; then
4497    if test "x$TARGET_SYS" = "xWATCHOS"; then
4498           AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4499           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4500           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4501           BTLS_SUPPORTED=no
4502    elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4503           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4504           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4505           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4506           BTLS_SUPPORTED=no
4507           target_ios=yes
4508    else
4509        AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4510        #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4511        #error fail this for ios
4512        #endif
4513        ], [
4514                   AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4515           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4516           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4517           target_osx=yes
4518        ], [
4519           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4520           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4521           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4522           BTLS_SUPPORTED=no
4523                   target_ios=yes
4524        ])
4525         fi
4526    AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4529 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4531 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4533 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4534    AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4535 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4536    AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4537 else
4538    AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4541 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4543 if test "x$sizeof_register" = "x4"; then
4544   AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4545 elif test "x$sizeof_register" = "x8"; then
4546   AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4547 else
4548   AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4551 if test "x$have_visibility_hidden" = "xyes"; then
4552    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4555 if test "x$have_deprecated" = "xyes"; then
4556    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4559 dnl 
4560 dnl Simple Generational checks (sgen)
4562 SGEN_DEFINES=
4563 AC_ARG_WITH(sgen,                    [  --with-sgen=yes,no             Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4564 AC_ARG_WITH(sgen-default-concurrent, [  --with-sgen-default-concurrent=yes,no             Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4565 if test x$buildsgen = xyes; then
4566    AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4567    SGEN_DEFINES="-DHAVE_SGEN_GC"
4569         conc_gc_msg=""
4570    if test x$with_sgen_default_concurrent != xno; then
4571        AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4572            conc_gc_msg=" (concurrent by default)"
4573    fi
4575    if test "x$gc_msg" = "x"; then
4576       gc_msg="sgen$conc_gc_msg"
4577    else
4578       gc_msg="sgen$conc_gc_msg and $gc_msg"
4579    fi
4581 AC_SUBST(SGEN_DEFINES)
4582 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4584 jit_status="Building and using the JIT"
4586 libsuffix=".so"
4588 case "$host" in
4589      *-*-darwin*)
4590         libsuffix=".dylib"
4591         LIBC="libc.dylib"
4592         INTL="libintl.dylib"
4593         SQLITE="libsqlite.0.dylib"
4594         SQLITE3="libsqlite3.0.dylib"
4595         X11="libX11.dylib"
4596         GDKX11="libgdk-x11-2.0.dylib"
4597         GTKX11="libgtk-x11-2.0.dylib"
4598         ;;
4599      *-*-*netbsd*)
4600         LIBC="libc.so"
4601         INTL="libintl.so"
4602         SQLITE="libsqlite.so"
4603         SQLITE3="libsqlite3.so"
4604         ;;
4605      *-*-kfreebsd*-gnu)
4606         LIBC="libc.so.0.1"
4607         INTL="libc.so.0.1"
4608         X11="libX11.so.6"
4609         ;;
4610     *-*-*freebsd*)
4611         LIBC="libc.so.7"
4612         INTL="libintl.so"
4613         SQLITE="libsqlite.so"
4614         SQLITE3="libsqlite3.so"
4615         ;;
4616     *-*-*openbsd*)
4617         LIBC="libc.so"
4618         INTL="libintl.so"
4619         SQLITE="libsqlite.so"
4620         SQLITE3="libsqlite3.so"
4621         ;;
4622     *-*-*linux*)
4623         AC_PATH_X
4624         dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4625         AC_MSG_CHECKING(for the soname of libX11.so)
4626         for i in $x_libraries $dlsearch_path; do
4627                 for r in 4 5 6; do
4628                         if test -f $i/libX11.so.$r; then
4629                                 X11=libX11.so.$r
4630                                 AC_MSG_RESULT($X11)
4631                         fi
4632                 done
4633         done
4634         
4635         if test "x$X11" = "xlibX11.so"; then
4636                 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4637                 X11=libX11.so.6
4638         fi
4639         ;;
4640 esac
4642 AC_SUBST(libsuffix)
4644 ######################################
4645 # EGLIB CHECKS
4646 ######################################
4648 GNUC_PRETTY=
4649 GNUC_UNUSED=
4650 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4651 if test x$GCC = xyes; then
4652    GNUC_UNUSED='__attribute__((__unused__))'
4653    GNUC_NORETURN='__attribute__((__noreturn__))'
4654    case $host_cpu in
4655      i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4656    esac
4658 AC_SUBST(GNUC_PRETTY)
4659 AC_SUBST(GNUC_UNUSED)
4660 AC_SUBST(GNUC_NORETURN)
4661 AC_SUBST(BREAKPOINT)
4663 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4665 case $host in
4666 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4667     PATHSEP='\\'
4668     SEARCHSEP=';'
4669     OS="WIN32"
4670     PIDTYPE='void *'
4671     ;;
4673     PATHSEP='/'
4674     SEARCHSEP=':'
4675     OS="UNIX"
4676     PIDTYPE='int'
4677     ;;
4678 esac
4680 case $host in
4681         *-*-solaris*)
4682         CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4683         ;;
4684 esac
4686 case $target in
4687 arm*-darwin*|aarch64*-*|riscv*)
4688     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4689     ;;
4690 i*86-*-darwin*)
4691     ORDER=G_LITTLE_ENDIAN
4692     ;;
4693 *-*-haiku*)
4694     LDFLAGS="$LDFLAGS -ltextencoding"
4695     ;;
4696 *-*-openbsd*)
4697     CFLAGS="$CFLAGS -pthread"
4698     LDFLAGS="$LDFLAGS -pthread"
4699     ;;
4700 esac
4702 AC_SUBST(ORDER)
4703 AC_SUBST(CFLAGS)
4704 AC_SUBST(PATHSEP)
4705 AC_SUBST(SEARCHSEP)
4706 AC_SUBST(OS)
4707 AC_SUBST(PIDTYPE)
4709 # Defined for all targets/platforms using classic Windows API support.
4710 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4711 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4713 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4714 AC_CHECK_FUNCS(getrlimit)
4715 AC_CHECK_FUNCS(fork execv execve)
4716 AC_CHECK_FUNCS(waitpid)
4718 AC_ARG_WITH([overridable-allocators], [  --with-overridable-allocators  allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4720 if test x$with_overridable_allocators = xyes; then
4721         AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4722   AC_MSG_NOTICE([Overridable allocator support enabled])
4723 else
4724   AC_MSG_NOTICE([Overridable allocator support disabled])
4728 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4729 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4730 # removed once support for 10.6 is dropped.
4732 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4734 if test x$target_osx = xyes; then
4735 AC_CHECK_FUNCS(getpwuid_r)
4736 elif test x$target_ios = xno; then
4737 AC_CHECK_FUNCS(strndup getpwuid_r)
4740 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4742 AC_SEARCH_LIBS(sqrtf, m)
4744 # nanosleep may not be part of libc, also search it in other libraries
4745 AC_SEARCH_LIBS(nanosleep, rt)
4747 AC_SEARCH_LIBS(dlopen, dl)
4748 old_ldflags="${LDFLAGS}"
4749 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4750 if test $lt_cv_prog_gnu_ld = yes; then
4751         LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4752 else
4753         case $host in
4754         *-*-aix*|*-*-os400*)
4755                 ;;
4756         *)
4757                 dnl Try to use export-dynamic anyways
4758                 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4759                 ;;
4760         esac
4762 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4763 if test $found_export_dynamic = no; then
4764         LDFLAGS="${old_ldflags}"
4767 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4768 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4769 AC_CHECK_LIB(iconv, iconv_open)
4770 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4771 AC_SUBST(HAVE_ALLOCA_H)
4773 # Get the exact type of size_t, not just its size.
4774 # This is so we can find an exact printf format among u, lu, llu, I64u.
4775 # To avoid warnings about slight mismatches.
4776 # C99 runtime "zu" dependency is being avoided here.
4778 # We have to compile as C++ because C is too lenient
4779 # and lets the wrong thing compile, with warnings.
4781 # Note: "zu" or ifdef <something> have the advantage
4782 # of producing installable "biarch" headers. i.e. one Mac header
4783 # for Mac/x86 and Mac/amd64.
4785 AC_LANG_PUSH(C++)
4787 # Check long before int because it is the overwhelming Unix answer,
4788 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4790 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4792 AC_MSG_CHECKING(if size_t is unsigned long)
4793 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4794         #include <stddef.h>
4795         unsigned long *a = (size_t*)0;
4796 ])], [
4797         AC_MSG_RESULT(yes)
4798         AC_SUBST(GSIZE_FORMAT, '"lu"')
4799 ], [
4800         AC_MSG_RESULT(no)
4801         AC_MSG_CHECKING(if size_t is unsigned int)
4802         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4803                 #include <stddef.h>
4804                 unsigned *a = (size_t*)0;
4805         ])], [
4806                 AC_MSG_RESULT(yes)
4807                 AC_SUBST(GSIZE_FORMAT, '"u"')
4808         ], [
4809 # At this point the majority of systems have their answer,
4810 # and we descend into non-standard or new-standard territory.
4812 # Check __int64 first because I64 on some systems predates ll, enabling
4813 # new compiler/old runtime interop, and the types always have the same size.
4814                 AC_MSG_RESULT(no)
4815                 AC_MSG_CHECKING(if size_t is unsigned __int64)
4816                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4817                         #include <stddef.h>
4818                         unsigned __int64 *a = (size_t*)0;
4819                 ])], [
4820                         AC_MSG_RESULT(yes)
4821                         AC_SUBST(GSIZE_FORMAT, '"I64u"')
4822                 ], [
4823                         AC_MSG_RESULT(no)
4824                         AC_MSG_CHECKING(if size_t is unsigned long long)
4825                         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4826                                 #include <stddef.h>
4827                                 unsigned long long *a = (size_t*)0;
4828                         ])], [
4829                                 AC_MSG_RESULT(yes)
4830                                 AC_SUBST(GSIZE_FORMAT, '"llu"')
4831                         ], [
4832                                 AC_MSG_RESULT(no)
4833                                 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4834                         ] )
4835                 ] )
4836         ] )
4837 ] )
4839 AC_LANG_POP
4841 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4842 # This provides for an exact match with functions that
4843 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4844 # uintptr_t is not necessarily the same.
4846 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4847 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4849 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4850    GSIZE="size_t"
4851    GSSIZE="ptrdiff_t"
4852 else
4853    GSIZE="uintptr_t"
4854    GSSIZE="intptr_t"
4857 AC_SUBST(GSIZE)
4858 AC_SUBST(GSSIZE)
4859 AC_SUBST(GSIZE_FORMAT)
4862 # END OF EGLIB CHECKS
4865 AC_ARG_WITH([libgdiplus],
4866         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4867         [], [with_libgdiplus=installed])
4869 # default install location
4870 libgdiplus_install_loc=libgdiplus${libsuffix}
4871 case "$host" in
4872     *-*-*linux*)
4873     libgdiplus_install_loc=libgdiplus${libsuffix}.0
4874     ;;
4875 esac
4877 case $with_libgdiplus in
4878     no)
4879     libgdiplus_loc=
4880     ;;
4882     installed)
4883     libgdiplus_loc=
4884     if test x$cross_compiling = xno; then
4885         if test x$host_darwin = xyes; then
4886             a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4887             if test -x $a; then
4888               libgdiplus_install_loc=$a
4889               libgdiplus_loc=$a
4890             fi
4891         fi
4892     fi
4893     ;;
4895     yes|sibling)
4896     libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4897     ;;
4899     /*) # absolute path, assume it is an install location
4900     libgdiplus_loc=$with_libgdiplus
4901     libgdiplus_install_loc=$with_libgdiplus
4902     ;;
4904     *)
4905     libgdiplus_loc=`pwd`/$with_libgdiplus
4906     ;;
4907 esac
4908 AC_SUBST(libgdiplus_loc)
4909 AC_SUBST(libgdiplus_install_loc)
4911 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)
4912 if test "x$icall_symbol_map" = "xyes"; then
4913    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4916 AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4917 if test "x$icall_export" = "xyes"; then
4918    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4921 AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4922 if test "x$icall_tables" = "xno"; then
4923    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4926 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4928 if test "x$with_tls" = "x__thread"; then
4929         AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
4930         # Pass the information to libgc
4931         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4932         AC_MSG_CHECKING(if the tls_model attribute is supported)
4933         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4934                 ], [
4935                         AC_MSG_RESULT(yes)
4936                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4937                 ], [
4938                         AC_MSG_RESULT(no)
4939         ])
4942 if test ${TARGET} = ARM; then
4943         dnl ******************************************
4944         dnl *** Check to see what FPU is available ***
4945         dnl ******************************************
4946         AC_MSG_CHECKING(which FPU to use)
4948         #
4949         # This is a bit tricky:
4950         #
4951         # if (__ARM_PCS_VFP) {
4952         #       /* mfloat-abi=hard == VFP with hard ABI */
4953         # } elif (!__SOFTFP__) {
4954         #       /* mfloat-abi=softfp == VFP with soft ABI */
4955         # } else {
4956         #       /* mfloat-abi=soft == no VFP */
4957         # }
4958         #
4959         # The exception is iOS (w/ GCC) where none of the above
4960         # are defined (but iOS always uses the 'softfp' ABI).
4961         #
4962         # No support for FPA.
4963         #
4965         fpu=NONE
4967         # iOS GCC always uses the 'softfp' ABI.
4968         if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4969                 fpu=VFP
4970         fi
4972         # Are we using the 'hard' ABI?
4973         if test x$fpu = xNONE; then
4974                 AC_TRY_COMPILE([], [
4975                         #ifndef __ARM_PCS_VFP
4976                         #error "Float ABI is not 'hard'"
4977                         #endif
4978                 ], [
4979                         fpu=VFP_HARD
4980                 ], [
4981                         fpu=NONE
4982                 ])
4983         fi
4985         # No 'hard' ABI. 'soft' or 'softfp'?
4986         if test x$fpu = xNONE; then
4987                 AC_TRY_COMPILE([], [
4988                         #ifdef __SOFTFP__
4989                         #error "Float ABI is not 'softfp'"
4990                         #endif
4991                 ], [
4992                         fpu=VFP
4993                 ], [
4994                         fpu=NONE
4995                 ])
4996         fi
4998         if test x$arm_fpu != x; then
4999            fpu=$arm_fpu
5000         fi
5002         AC_MSG_RESULT($fpu)
5003         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5004         unset fpu
5006         dnl *********************************************
5007         dnl *** Check which ARM version(s) we can use ***
5008         dnl *********************************************
5009         AC_MSG_CHECKING(which ARM version to use)
5011         AC_TRY_COMPILE([], [
5012                 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5013                 #error Not on ARM v5.
5014                 #endif
5015         ], [
5016                 arm_v5=yes
5018                 arm_ver=ARMv5
5019         ], [])
5021         AC_TRY_COMPILE([], [
5022                 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5023                 #error Not on ARM v6.
5024                 #endif
5025         ], [
5026                 arm_v5=yes
5027                 arm_v6=yes
5029                 arm_ver=ARMv6
5030         ], [])
5032         AC_TRY_COMPILE([], [
5033                 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5034                 #error Not on ARM v7.
5035                 #endif
5036         ], [
5037                 arm_v5=yes
5038                 arm_v6=yes
5039                 arm_v7=yes
5041                 arm_ver=ARMv7
5042         ], [])
5044         AC_MSG_RESULT($arm_ver)
5046         if test x$arm_v5 = xyes; then
5047                 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5048                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5049         fi
5051         if test x$arm_v6 = xyes; then
5052                 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5053                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5054         fi
5056         if test x$arm_v7 = xyes; then
5057                 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5058                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5059         fi
5062 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5063         AC_ARG_WITH([riscv-fpabi], [  --with-riscv-fpabi=auto,double,soft   Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5065         AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5067         if test x$fpabi = xauto; then
5068                 AC_TRY_COMPILE([], [
5069                         #ifdef __riscv_float_abi_double
5070                         #error "double"
5071                         #endif
5072                 ], [
5073                         fpabi=auto
5074                 ], [
5075                         fpabi=double
5076                 ])
5077         fi
5079         if test x$fpabi = xauto; then
5080                 AC_TRY_COMPILE([], [
5081                         #ifdef __riscv_float_abi_single
5082                         #error "single"
5083                         #endif
5084                 ], [
5085                         fpabi=auto
5086                 ], [
5087                         fpabi=single
5088                 ])
5089         fi
5091         if test x$fpabi = xauto; then
5092                 AC_TRY_COMPILE([], [
5093                         #ifdef __riscv_float_abi_soft
5094                         #error "soft"
5095                         #endif
5096                 ], [
5097                         fpabi=auto
5098                 ], [
5099                         fpabi=soft
5100                 ])
5101         fi
5103         case $fpabi in
5104         double)
5105                 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5106                 AC_MSG_RESULT([double-precision])
5107                 ;;
5108         single)
5109                 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5110                 AC_MSG_ERROR([single-precision, not supported])
5111                 ;;
5112         soft)
5113                 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5114                 AC_MSG_RESULT([soft float])
5115                 ;;
5116         auto)
5117                 AC_MSG_ERROR([unknown])
5118                 ;;
5119         *)
5120                 AC_MSG_ERROR([invalid option: $fpabi])
5121                 ;;
5122         esac
5125 if test ${TARGET} = unknown; then
5126         CPPFLAGS="$CPPFLAGS -DNO_PORT"
5127         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5130 if test "x$platform_android" = "xyes"; then
5131         case "x${TARGET}" in
5132         xARM)
5133                 case "x$arm_ver" in
5134                 xARMv5)
5135                         BTLS_SUPPORTED=yes
5136                         BTLS_PLATFORM=android-armv5
5137                         ;;
5138                 xARMv6)
5139                         BTLS_SUPPORTED=yes
5140                         BTLS_PLATFORM=android-armv6
5141                         ;;
5142                 xARMv7)
5143                         BTLS_SUPPORTED=yes
5144                         BTLS_PLATFORM=android-armv7
5145                         ;;
5146                 *)
5147                         BTLS_SUPPORTED=no
5148                         ;;
5149                 esac
5150                 ;;
5151         xARM64)
5152                 BTLS_SUPPORTED=yes
5153                 BTLS_PLATFORM=android-v8a
5154                 ;;
5155         xX86)
5156                 BTLS_SUPPORTED=yes
5157                 BTLS_PLATFORM=android-x86
5158                 ;;
5159         xAMD64)
5160                 BTLS_SUPPORTED=yes
5161                 BTLS_PLATFORM=android-x64
5162                 ;;
5163         *)
5164                 BTLS_SUPPORTED=no
5165                 ;;
5166         esac
5169 if test ${ACCESS_UNALIGNED} = no; then
5170         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5173 if test x$host_darwin = xyes; then
5174         AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5175         AS_IF(
5176                 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5177                 [AC_MSG_RESULT([no])],
5178                 [
5179                         # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5180                         AR_FLAGS="Scru"
5181                         RANLIB="$RANLIB -no_warning_for_no_symbols"
5182                         AC_MSG_RESULT([yes])
5183                 ]
5184         )
5187 case "x$libgc" in
5188         xincluded)
5189                 # Pass CPPFLAGS to libgc configure
5190                 # We should use a separate variable for this to avoid passing useless and
5191                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5192                 # This should be executed late so we pick up the final version of CPPFLAGS
5193                 # The problem with this approach, is that during a reconfigure, the main
5194                 # configure scripts gets invoked with these arguments, so we use separate
5195                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5196                 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5197                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5198                         TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5199                 fi
5200                 # Don't pass -finstrument-for-thread-suspension in, 
5201                 # if these are instrumented it will be very bad news 
5202                 # (infinite recursion, undefined parking behavior, etc)
5203                 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5204                 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\""
5205                 if test "x$support_boehm" = "xyes"; then
5206                         AC_CONFIG_SUBDIRS(libgc)
5207                 fi
5208                 ;;
5209 esac
5211 MALLOC_MEMPOOLS=no
5212 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5213         if test x$with_malloc_mempools = xyes; then
5214                 MALLOC_MEMPOOLS=yes
5215                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5216         fi
5220 DISABLE_MCS_DOCS=default
5221 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
5222         if test x$with_mcs_docs != xyes; then
5223                 DISABLE_MCS_DOCS=yes
5224         fi
5226 if test -n "$INSTALL_4_x_TRUE"; then :
5227         DISABLE_MCS_DOCS=yes
5229 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5230    DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5233 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)],[
5234         if test x$with_lazy_gc_thread_creation != xno ; then
5235                 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5236         fi
5237 ], [with_lazy_gc_thread_creation=no])
5239 dnl *****************************
5240 dnl *** Thread suspend policy ***
5241 dnl *****************************
5243 dnl Set a default hybrid or cooperative suspend on some platforms
5245 dnl Coop default is set by the bitcode preset.
5247 dnl If coop isn't on by default, maybe hybrid should be?
5248 if test x$enable_cooperative_suspend_default != xyes; then
5249         case $HOST in
5250         X86 | AMD64)
5251                 dnl Some host/target confusion, there's no host_osx (and
5252                 dnl host_darwin would be true on iOS not just macOS).
5253                 if test x$target_osx = xyes; then
5254                         enable_hybrid_suspend_default=yes
5255                 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5256                         enable_hybrid_suspend_default=yes
5257                 fi
5258                 ;;
5259         esac
5262 dnl Now check if there were flags overriding the defaults
5264 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])
5265 AC_ARG_ENABLE(cooperative_suspend, [  --enable-cooperative-suspend      Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5267 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5268         enable_cooperative_suspend=$with_cooperative_gc
5271 if test x$enable_cooperative_suspend = xdefault; then
5272         enable_cooperative_suspend=$enable_cooperative_suspend_default
5275 if test x$enable_cooperative_suspend != xno; then
5276         AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5279 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5281 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])
5283 if test x$enable_hybrid_suspend = xdefault; then
5284    enable_hybrid_suspend=$enable_hybrid_suspend_default
5287 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5288         AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5291 if test x$enable_hybrid_suspend != xno ; then
5292         AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5295 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5297 dnl End of thread suspend policy
5299 dnl ***************************
5300 dnl *** feature experiments ***
5301 dnl ***************************
5303 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5304 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST       Enable experimental fatures from the comma-separate LIST.  Available experiments: null],[
5306         if test x$enable_experiment != x ; then
5307                 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5308         fi
5309         for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5310                 eval "mono_experiment_test_enable_$feature='yes'"
5311         done
5313         if test "x$mono_experiment_test_enable_all" = "xyes"; then
5314                 eval "mono_experiment_test_enable_null='yes'"
5315                 true
5316         fi
5318         if test "x$mono_experiment_test_enable_null" = "xyes"; then
5319                 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5320         fi
5321 ],[])
5323 dnl **********************
5324 dnl *** checked builds ***
5325 dnl **********************
5327 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],[
5329         if test x$enable_checked_build != x ; then
5330                 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5331         fi
5332         for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5333                 eval "mono_checked_build_test_enable_$feature='yes'"
5334         done
5336         if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5337                 eval "mono_checked_build_test_enable_gc='yes'"
5338                 eval "mono_checked_build_test_enable_metadata='yes'"
5339                 eval "mono_checked_build_test_enable_thread='yes'"
5340                 eval "mono_checked_build_test_enable_private_types='yes'"
5341         fi
5343         if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5344                 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5345         fi
5347         if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5348                 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5349         fi
5351         if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5352                 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5353         fi
5355         if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5356                 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5357         fi
5358 ], [])
5360 dnl End of checked builds
5362 AC_CHECK_HEADER([malloc.h], 
5363                 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
5364                         [Define to 1 if you have /usr/include/malloc.h.])],,)
5366 if test x"$GCC" = xyes; then
5367         # Implicit function declarations are not 64 bit safe
5368         # Do this late, since this causes lots of configure tests to fail
5369         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5370         # jay has a lot of implicit declarations
5371         JAY_CFLAGS="-Wno-implicit-function-declaration"
5374 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5375 # instead of libmono-static.a
5376 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5377    LIBMONO_LA=libmini-static.la
5378 else
5379    if test x$buildsgen = xyes; then
5380       LIBMONO_LA=libmonosgen-$API_VER.la
5381    else
5382       LIBMONO_LA=libmonoboehm-$API_VER.la
5383    fi
5385 AC_SUBST(LIBMONO_LA)
5387 dnl **************
5388 dnl ***  Btls  ***
5389 dnl **************
5391 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5392 AC_ARG_ENABLE(btls-lib, [  --disable-btls-lib             Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5393 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
5394 AC_ARG_WITH(btls_android_api, [  --with-btls-android-api        Android NDK API level for BTLS build])
5395 AC_ARG_WITH(btls_android_cmake_toolchain, [  --with-btls-android-cmake-toolchain        Path to the cmake toolchain file for Android])
5396 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])
5398 if test "x$with_btls_android_api" = "x" ; then
5399         case "$BTLS_PLATFORM" in
5400                 android-armv5)
5401                         with_btls_android_api=16" ;;
5402                 android-armv6)
5403                         with_btls_android_api=16" ;;
5404                 android-armv7)
5405                         with_btls_android_api=16 ;;
5406                 android-v8a)
5407                         with_btls_android_api=21 ;;
5408                 android-x86)
5409                         with_btls_android_api=16 ;;
5410                 android-x64)
5411                         with_btls_android_api=21 ;;
5412         esac
5415 if test "x$enable_btls" = "xno"; then
5416    enable_btls_lib=no
5419 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5421 btls_android=no
5422 if test "x$enable_btls" = "xyes"; then
5423         AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5424         if test "x$CMAKE" = "xno"; then
5425                 AC_MSG_ERROR("cmake not found")
5426         fi
5428         BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5429         AC_SUBST(BTLS_ROOT)
5431         btls_arch=
5432         btls_cflags=
5433         BTLS_CMAKE_ARGS=
5435         if test "x$host_win32" = "xyes"; then
5436                 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5437         fi
5439         case "$BTLS_PLATFORM" in
5440         i386)
5441                 btls_arch=i386
5442                 btls_cflags="-m32"
5443                 case $host_os in
5444                         darwin*)
5445                                 btls_cflags="$btls_cflags -arch i386"
5446                                 ;;
5447                         mingw*|cygwin*)
5448                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5449                                 if test "x$HAVE_YASM" != "xyes"; then
5450                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5451                                 fi
5452                                 ;;
5453                 esac
5454                 ;;
5455         x86_64)
5456                 btls_arch=x86_64
5457                 case $host_os in
5458                         mingw*|cygwin*)
5459                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5460                                 if test "x$HAVE_YASM" != "xyes"; then
5461                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5462                                 fi
5463                                 ;;
5464                 esac
5465                 ;;
5466         arm)
5467                 btls_arch=arm
5468                 btls_cflags="-DOPENSSL_NO_ASM=1"
5469                 ;;
5470         armsoft)
5471                 btls_arch=arm
5472                 btls_cflags="-DOPENSSL_NO_ASM=1"
5473                 ;;
5474         aarch64)
5475                 btls_arch=aarch64
5476                 btls_cflags="-march=armv8-a+crypto"
5477                 ;;
5478         s390x)
5479                 btls_arch=s390x
5480                 ;;
5481         powerpc)
5482                 btls_arch=powerpc
5483                 case $host_os in
5484                         aix*|os400*)
5485                                 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5486                                 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5487                 esac
5488                 ;;
5489         android-armv5)
5490                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5491                 ;;
5492         android-armv6)
5493                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5494                 ;;
5495         android-armv7)
5496                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5497                 ;;
5498         android-v8a)
5499                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5500                 ;;
5501         android-x86)
5502                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5503                 ;;
5504         android-x64)
5505                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5506                 ;;
5507         riscv32)
5508                 btls_arch=riscv32
5509                 ;;
5510         riscv64)
5511                 btls_arch=riscv64
5512                 ;;
5513         *)
5514                 AC_MSG_ERROR(Invalid BTLS platform)
5515         esac
5517         if test "x$platform_android" = "xyes"; then
5518                 if test "x$with_btls_android_cmake_toolchain" = "x"; then
5519                    with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5520                 fi
5522                 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
5523                    BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
5524                 fi
5526                 btls_android=yes
5527                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
5528                 if test "x$with_btls_android_ndk" != "x"; then
5529                         BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5530                 else
5531                         AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5532                 fi
5533         fi
5535         if test "x$btls_arch" != "x"; then
5536                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5537         fi
5539         BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5540         AC_SUBST(BTLS_ARCH)
5541         AC_SUBST(BTLS_CFLAGS)
5542         AC_SUBST(BTLS_PLATFORM)
5543         AC_SUBST(BTLS_CMAKE_ARGS)
5545         AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5546 else
5547         enable_btls=no
5550 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5552 if test x$DISABLE_MCS_DOCS = xyes; then
5553    docs_dir=""
5554 else
5555    docs_dir=docs
5557 AC_SUBST(docs_dir)
5559 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
5560 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5561 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5563 libmono_ldflags="$libmono_ldflags $LIBS"
5565 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5566 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5567 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5568 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5569 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5570 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5571 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5572 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5573 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5574 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5575 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5576 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5577 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5578 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5579 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5580 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5581 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5582 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5583 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5584 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5585 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5586 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5587 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5588 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5590 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5592 AC_SUBST(LIBC)
5593 AC_SUBST(INTL)
5594 AC_SUBST(SQLITE)
5595 AC_SUBST(SQLITE3)
5596 AC_SUBST(X11)
5597 AC_SUBST(GDKX11)
5598 AC_SUBST(GTKX11)
5599 AC_SUBST(XINERAMA)
5600 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5601 AC_SUBST(arch_target)
5602 AC_SUBST(CFLAGS)
5603 AC_SUBST(CPPFLAGS)
5604 AC_SUBST(LDFLAGS)
5606 #This must always be defined when building the runtime
5607 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5609 mono_build_root=`pwd`
5610 AC_SUBST(mono_build_root)
5612 AC_ARG_ENABLE(msvc,[  --enable-msvc    Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5613 if test x$host_win32 = xno; then
5614         if test x$enable_msvc = xyes; then
5615                 echo "Error, --enable-msvc only supported for Windows builds."
5616                 exit 1
5617         fi
5619 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5621 if test "x$enable_msvc" = "xyes"; then
5622         if test "x$support_boehm" = "xyes"; then
5623                 echo "Error, Boehm GC is not supported when using --enable-msvc."
5624                 exit 1
5625         fi
5626         mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5627         if test "x$host_cpu" = "xi686"; then
5628                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5629                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5630                 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5631         else
5632                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5633                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5634                 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5635         fi
5636         AC_SUBST(mono_msvc_build_dir)
5637         AC_SUBST(mono_msvc_build_lib_dir)
5638         AC_SUBST(mono_msvc_build_bin_dir)
5639 else
5640         mono_runtime=mono/mini/mono
5643 AC_SUBST(mono_runtime)
5645 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5647 if test $csc_compiler = mcs; then
5648   CSC=$mcs_topdir/class/lib/build/mcs.exe
5649 else
5650   CSC=$CSC_LOCATION
5653 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5655 mono_cfg_root=$mono_build_root/runtime
5656 if test x$host_win32 = xyes; then
5657   if test "x$cross_compiling" = "xno"; then
5658     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5659     CSC=`cygpath -m -a $CSC`
5660     CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5661   else
5662     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5663   fi
5664 else
5665   mono_cfg_dir=$mono_cfg_root/etc
5667 AC_SUBST(mono_cfg_dir)
5669 AC_SUBST(CSC)
5671 AC_CONFIG_FILES([po/mcs/Makefile.in])
5673 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5674 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5675 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5677 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5678 [   depth=../../../..
5679     case $srcdir in
5680     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5681     .) reldir=$depth ;;
5682     *) reldir=$depth/$srcdir ;;
5683     esac
5684     $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5685     cd runtime/etc/mono/1.0
5686     rm -f machine.config
5687     $LN_S $reldir/data/net_1_1/machine.config machine.config
5688     cd $depth
5689 ],[LN_S='$LN_S'])
5691 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5692 [   depth=../../../..
5693     case $srcdir in
5694     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5695     .) reldir=$depth ;;
5696     *) reldir=$depth/$srcdir ;;
5697     esac
5698     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5699     cd runtime/etc/mono/2.0
5700     rm -f machine.config
5701     $LN_S $reldir/data/net_2_0/machine.config machine.config
5702     cd $depth
5703 ],[LN_S='$LN_S'])
5705 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5706 [   depth=../../../..
5707     case $srcdir in
5708     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5709     .) reldir=$depth ;;
5710     *) reldir=$depth/$srcdir ;;
5711     esac
5712     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5713     cd runtime/etc/mono/2.0
5714     rm -f web.config
5715     $LN_S $reldir/data/net_2_0/web.config web.config
5716     cd $depth
5717 ],[LN_S='$LN_S'])
5719 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5720 [   depth=../../..
5721     case $srcdir in
5722     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5723     .) reldir=$depth ;;
5724     *) reldir=$depth/$srcdir ;;
5725     esac
5726     $ac_aux_dir/install-sh -d runtime/etc/mono/
5727     cd runtime/etc/mono/
5728     rm -f browscap.ini
5729     $LN_S $reldir/data/browscap.ini browscap.ini
5730     cd $depth
5731 ],[LN_S='$LN_S'])
5733 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5734 [   depth=../../../../..
5735     case $srcdir in
5736     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5737     .) reldir=$depth ;;
5738     *) reldir=$depth/$srcdir ;;
5739     esac
5740     $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5741     cd runtime/etc/mono/2.0/Browsers
5742     rm -f Compat.browser
5743     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5744     cd $depth
5745 ],[LN_S='$LN_S'])
5747 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5748 [   depth=../../../../..
5749     case $srcdir in
5750     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5751     .) reldir=$depth ;;
5752     *) reldir=$depth/$srcdir ;;
5753     esac
5754     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5755     cd runtime/etc/mono/4.0/Browsers
5756     rm -f Compat.browser
5757     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5758     cd $depth
5759 ],[LN_S='$LN_S'])
5761 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5762 [   depth=../../../../..
5763     case $srcdir in
5764     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5765     .) reldir=$depth ;;
5766     *) reldir=$depth/$srcdir ;;
5767     esac
5768     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5769     cd runtime/etc/mono/4.5/Browsers
5770     rm -f Compat.browser
5771     $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5772     cd $depth
5773 ],[LN_S='$LN_S'])
5775 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5776 [   depth=../../../..
5777     case $srcdir in
5778     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5779     .) reldir=$depth ;;
5780     *) reldir=$depth/$srcdir ;;
5781     esac
5782     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5783     cd runtime/etc/mono/4.0
5784     rm -f machine.config
5785     $LN_S $reldir/data/net_4_0/machine.config machine.config
5786     cd $depth
5787 ],[LN_S='$LN_S'])
5789 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5790 [   depth=../../../..
5791     case $srcdir in
5792     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5793     .) reldir=$depth ;;
5794     *) reldir=$depth/$srcdir ;;
5795     esac
5796     $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5797     cd runtime/etc/mono/4.0
5798     rm -f web.config
5799     $LN_S $reldir/data/net_4_0/web.config web.config
5800     cd $depth
5801 ],[LN_S='$LN_S'])
5803 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5804 [   depth=../../../..
5805     case $srcdir in
5806     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5807     .) reldir=$depth ;;
5808     *) reldir=$depth/$srcdir ;;
5809     esac
5810     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5811     cd runtime/etc/mono/4.5
5812     rm -f machine.config
5813     $LN_S $reldir/data/net_4_5/machine.config machine.config
5814     cd $depth
5815 ],[LN_S='$LN_S'])
5817 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5818 [   depth=../../../..
5819     case $srcdir in
5820     [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5821     .) reldir=$depth ;;
5822     *) reldir=$depth/$srcdir ;;
5823     esac
5824     $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5825     cd runtime/etc/mono/4.5
5826     rm -f web.config
5827     $LN_S $reldir/data/net_4_5/web.config web.config
5828     cd $depth
5829 ],[LN_S='$LN_S'])
5831 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])
5832 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])
5833 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
5835 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
5836 if test x"$GCC" = xyes; then
5838         # incompatible-pointer-types requires gcc circa 5.x
5840         ORIG_CFLAGS=$CFLAGS
5841         CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
5842         AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
5843         AC_TRY_COMPILE([],[
5844         ], [
5845                 AC_MSG_RESULT(yes)
5846                 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
5847         ], [
5848                 AC_MSG_RESULT(no)
5849                 CFLAGS=$ORIG_CFLAGS
5850         ])
5854 # Mono.Native Support
5855 # -------------------
5856 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
5857 # It is built as a stand-alone shared library and not bundled with the runtime because we
5858 # may need to build two different versions of it.
5860 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
5861 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
5863 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
5864 # implementation accordingly.  We build a single `libmono_native` shared library.
5866 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
5868 # During the mobile build, we are called with `CC` containing an explicit minium version flag,
5869 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
5870 # depending on platform.
5872 # We build two versions of the shared library:
5873 # - `libmono_native_compat` is built with whichever minimum version is passed to us via `CC`.
5874 # - `libmono_native_unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
5876 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
5877 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
5878 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/System/Mono/MonoNativePlatform.cs).
5880 # This can be called by automated tests both to ensure that the library has been correctly installed and also
5881 # to verify that it's the correct version of it.
5884 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
5885 if test x$target_osx = xyes; then
5886         sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
5887         grep_find_mac_version_pattern="-mmacosx-version-min=$sed_version_pattern"
5888         mono_native_compat_version=`echo $CC | grep -o -e $grep_find_mac_version_pattern`
5889         MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_mac_version_pattern`
5890         MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_mac_version_pattern`
5891         MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern`
5892         MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern`
5893         MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern`
5894         MONO_NATIVE_LDFLAGS=`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern`
5896         mono_native=yes
5897         MONO_NATIVE_PLATFORM=macos
5898         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
5899         AC_MSG_CHECKING([Mono.Native support])
5900         AC_MSG_RESULT(macos)
5902         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
5903                 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
5905         if test x$mono_native_compat = xyes; then
5906                 mono_native_compat=yes
5907                 mono_native_text="Mac OSX (compat+unified)"
5908                 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
5909                 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
5910                 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -mmacosx-version-min=10.12"
5911                 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -mmacosx-version-min=10.12"
5912         else
5913                 mono_native_compat=no
5914                 mono_native_text="Mac OSX"
5915         fi
5916 elif test x$mono_native_platform_ios = xyes; then
5917         AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
5919         AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
5920                 if test x$mono_native_ios_sim = xyes; then
5921                         mono_native_ios_target=ios-simulator
5922                         mono_native_text="iOS Simulator"
5923                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5924                 else
5925                         mono_native_ios_target=iphoneos
5926                         mono_native_text="iOS Device"
5927                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5928                 fi
5929                 mono_native_unified_version="10.0"
5930                 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
5931         ], [
5932                 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
5933                         if test x$mono_native_ios_sim = xyes; then
5934                                 mono_native_ios_target=tvos-simulator
5935                                 mono_native_text="AppleTV Simulator"
5936                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5937                         else
5938                                 mono_native_ios_target=tvos
5939                                 mono_native_text="AppleTV Device"
5940                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5941                         fi
5942                         mono_native_unified_version="10.0"
5943                         mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
5944                 ], [
5945                         AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
5946                                 if test x$mono_native_ios_sim = xyes; then
5947                                         mono_native_ios_target=watchos-simulator
5948                                         mono_native_text="Apple Watch Simulator"
5949                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5950                                 else
5951                                         mono_native_ios_target=watchos
5952                                         mono_native_text="Apple Watch Device"
5953                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5954                                 fi
5955                                 mono_native_unified_version="5.0"
5956                                 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
5957                         ], [
5958                                 AC_MSG_ERROR([Unknown iOS Target])
5959                         ])
5960                 ])
5961         ])
5963         AC_MSG_CHECKING([Mono.Native support])
5964         AC_MSG_RESULT([$mono_native_ios_target])
5966         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
5968         sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
5969         grep_find_ios_version_pattern="-m$mono_native_ios_target-version-min=$sed_version_pattern"
5971         mono_native_compat_version=`echo $CC | grep -o -e $grep_find_ios_version_pattern`
5973         if test x$with_bitcode = xyes; then
5974                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
5975                 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
5976         else
5977                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
5978         fi
5980         if test x$enable_gss = xyes; then
5981                 mono_native_ldflags="$mono_native_ldflags -framework GSS"
5982         fi
5984         MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_ios_version_pattern`
5985         MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_ios_version_pattern`
5986         MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern`
5987         MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern`
5988         MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern`
5989         MONO_NATIVE_LDFLAGS=`echo $LDFLAGS $mono_native_ldflags | sed -e $sed_remove_ios_version_pattern`
5991         if test x$mono_native_compat = xyes; then
5992                 mono_native_text="$mono_native_text (compat+unified)"
5993                 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
5994                 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
5995                 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
5996                 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
5997         fi
5999         mono_native=yes
6000         MONO_NATIVE_PLATFORM=ios
6001 elif test x$host_linux = xyes; then
6002         mono_native_text="Linux"
6003         MONO_NATIVE_CC=$CC
6004         MONO_NATIVE_CXX=$CXX
6005         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6006         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6007         MONO_NATIVE_CFLAGS=$CFLAGS
6008         MONO_NATIVE_LDFLAGS=$LDFLAGS
6010         mono_native=yes
6011         mono_native_compat=no
6012         MONO_NATIVE_PLATFORM=linux
6013         AC_MSG_CHECKING([Mono.Native support])
6014         AC_MSG_RESULT(linux)
6016         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6017 elif test x$target_wasm = xyes; then
6018         mono_native_text="wasm"
6019         MONO_NATIVE_CC=$CC
6020         MONO_NATIVE_CXX=$CXX
6021         # The system.native code uses _WASM_ to check for wasm
6022         MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6023         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6024         MONO_NATIVE_CFLAGS=$CFLAGS
6025         MONO_NATIVE_LDFLAGS=$LDFLAGS
6027         mono_native=yes
6028         mono_native_compat=no
6029         MONO_NATIVE_PLATFORM=linux
6030         AC_MSG_CHECKING([Mono.Native support])
6031         AC_MSG_RESULT(wasm)
6033         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6034 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6035         mono_native_text="AIX"
6036         MONO_NATIVE_CC=$CC
6037         MONO_NATIVE_CXX=$CXX
6038         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6039         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6040         MONO_NATIVE_CFLAGS=$CFLAGS
6041         MONO_NATIVE_LDFLAGS=$LDFLAGS
6043         mono_native=yes
6044         mono_native_compat=no
6045         MONO_NATIVE_PLATFORM=aix
6046         AC_MSG_CHECKING([Mono.Native support])
6047         AC_MSG_RESULT(aix)
6049         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6050 elif test x$platform_android = xyes; then
6051         mono_native_text="Android"
6052         MONO_NATIVE_CC=$CC
6053         MONO_NATIVE_CXX=$CXX
6054         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6055         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6056         MONO_NATIVE_CFLAGS=$CFLAGS
6057         MONO_NATIVE_LDFLAGS=$LDFLAGS
6059         mono_native=yes
6060         mono_native_compat=no
6061         MONO_NATIVE_PLATFORM=android
6062         AC_MSG_CHECKING([Mono.Native support])
6063         AC_MSG_RESULT(Android)
6065         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6066 else
6067         mono_native=no
6068         mono_native_text="no"
6069         AC_MSG_CHECKING([Mono.Native support])
6070         AC_MSG_RESULT(no)
6073 if test x$mono_native_compat = xyes; then
6074         MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6075 else
6076         MONO_NATIVE_LIBRARY_NAME=libmono-native
6079 AC_SUBST(MONO_NATIVE_PLATFORM)
6080 AC_SUBST(MONO_NATIVE_CC)
6081 AC_SUBST(MONO_NATIVE_CXX)
6082 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6083 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6084 AC_SUBST(MONO_NATIVE_CFLAGS)
6085 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6086 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6087 AC_SUBST(MONO_NATIVE_LDFLAGS)
6088 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6089 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6090 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6091 AC_SUBST(MONO_NATIVE_LIBADD)
6093 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6094 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6095 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6096 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6097 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6098 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6099 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6101 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6102 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6103 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6104 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6105 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6107 # Update all submodules recursively to ensure everything is checked out
6108 (cd $srcdir && scripts/update_submodules.sh)
6110 AC_OUTPUT([
6111 Makefile
6112 mono-uninstalled.pc
6113 acceptance-tests/Makefile
6114 llvm/Makefile
6115 scripts/mono-find-provides
6116 scripts/mono-find-requires
6117 mk/Makefile
6118 mono/Makefile
6119 mono/btls/Makefile
6120 mono/native/Makefile
6121 mono/utils/Makefile
6122 mono/utils/jemalloc/Makefile
6123 mono/metadata/Makefile
6124 mono/dis/Makefile
6125 mono/cil/Makefile
6126 mono/arch/Makefile
6127 mono/arch/x86/Makefile
6128 mono/arch/amd64/Makefile
6129 mono/arch/ppc/Makefile
6130 mono/arch/sparc/Makefile
6131 mono/arch/s390x/Makefile
6132 mono/arch/arm/Makefile
6133 mono/arch/arm64/Makefile
6134 mono/arch/mips/Makefile
6135 mono/arch/riscv/Makefile
6136 mono/sgen/Makefile
6137 mono/native/platform-type.c
6138 mono/native/platform-type-compat.c
6139 mono/native/platform-type-unified.c
6140 mono/tests/Makefile
6141 mono/tests/assembly-load-reference/Makefile
6142 mono/tests/tests-config
6143 mono/tests/gc-descriptors/Makefile
6144 mono/tests/testing_gac/Makefile
6145 mono/unit-tests/Makefile
6146 mono/benchmark/Makefile
6147 mono/mini/Makefile
6148 mono/profiler/Makefile
6149 mono/eglib/Makefile
6150 mono/eglib/eglib-config.h
6151 mono/eglib/test/Makefile
6152 m4/Makefile
6153 ikvm-native/Makefile
6154 scripts/Makefile
6155 man/Makefile
6156 docs/Makefile
6157 data/Makefile
6158 data/net_2_0/Makefile
6159 data/net_4_0/Makefile
6160 data/net_4_5/Makefile
6161 data/net_2_0/Browsers/Makefile
6162 data/net_4_0/Browsers/Makefile
6163 data/net_4_5/Browsers/Makefile
6164 data/mint.pc
6165 data/mono-2.pc
6166 data/monosgen-2.pc
6167 data/mono.pc
6168 data/mono-cairo.pc
6169 data/mono-nunit.pc
6170 data/mono-options.pc
6171 data/mono-lineeditor.pc
6172 data/monodoc.pc
6173 data/dotnet.pc
6174 data/dotnet35.pc
6175 data/wcf.pc
6176 data/cecil.pc
6177 data/system.web.extensions_1.0.pc
6178 data/system.web.extensions.design_1.0.pc
6179 data/system.web.mvc.pc
6180 data/system.web.mvc2.pc
6181 data/system.web.mvc3.pc
6182 data/aspnetwebstack.pc
6183 data/reactive.pc
6184 samples/Makefile
6185 support/Makefile
6186 data/config
6187 tools/Makefile
6188 tools/locale-builder/Makefile
6189 tools/sgen/Makefile
6190 tools/monograph/Makefile
6191 tools/pedump/Makefile
6192 runtime/Makefile
6193 msvc/Makefile
6194 po/Makefile
6197 if test x$host_win32 = xyes; then
6198    # Get rid of 'cyg' prefixes in library names
6199    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6200    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6201    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6202    # executable doesn't work...
6203    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6206 if test x$host_darwin = xyes; then
6207    # This doesn't seem to be required and it slows down parallel builds
6208    sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6212   case $prefix in
6213   NONE) prefix=$ac_default_prefix ;;
6214   esac
6215   case $exec_prefix in
6216   NONE) exec_prefix='${prefix}' ;;
6217   esac
6219   #
6220   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
6221   # any existing config.make.  This allows people to share the same source tree
6222   # with different build directories, one native and one cross
6223   #
6224   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6226     test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6228     echo "prefix=$prefix" > $mcs_topdir/build/config.make
6229     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6230     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6231     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6232     echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6233     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6234     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6235     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6236     echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6238     case $INSTALL in
6239     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6240     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6241     esac
6243     echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6245     export VERSION
6246     [myver=$($AWK 'BEGIN {
6247       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6248       if(length(vsplit [1]) > 4) {
6249         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6250       }
6251       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6252     }')]
6254     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6255     echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6257     if test x$host_darwin = xyes; then
6258       echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6259       echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6260       echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6261     elif test x$host_win32 = xyes; then
6262       echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6263       echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6264       echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6265     elif test x$host_linux = xyes; then
6266       echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6267       echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6268       echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6269     else
6270       echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6271       echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6272       echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6273     fi
6275     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6276       echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6277     fi
6279         if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6280            enable_system_aot=yes
6281         fi
6283     if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6284       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6285     fi
6287     if test x$DISABLE_MCS_DOCS = xyes; then
6288       echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6289     fi
6291     if test x$has_extension_module != xno; then
6292         echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6293     fi
6294     
6295     echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6296     
6297     if test "x$test_bcl_opt" = "xyes"; then    
6298       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6299     fi
6301     echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6303     if test $csc_compiler = mcs; then
6304       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6305     fi
6307     if test "x$AOT_BUILD_FLAGS" != "x" ; then
6308       echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6309       echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6310       echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6311     fi
6313     if test "x$AOT_MODE" != "x" ; then
6314       echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6315     fi
6317     if test "x$enable_btls" = "xyes"; then
6318       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6319     fi
6321     if test "x$mono_native" = "xyes"; then
6322       echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6323     else
6324       echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6325     fi
6327     if test x$mono_native_compat = xyes; then
6328       echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6329     else
6330       echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6331     fi
6333     echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6334     echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6336   fi
6340 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6342 btls_platform_string=
6343 if test x$enable_btls = xyes; then
6344         if test x$btls_android = xyes; then
6345                 btls_platform_string=" (android:$BTLS_PLATFORM)"
6346         else
6347                 btls_platform_string=" ($BTLS_PLATFORM)"
6348         fi
6351 thread_suspend_msg=
6352 if test x$buildsgen = xyes; then
6353         if test x$enable_cooperative_suspend != xno; then
6354                 thread_suspend_msg="Suspend:       Cooperative"
6355         elif test x$enable_hybrid_suspend != xno; then
6356                 thread_suspend_msg="Suspend:       Hybrid"
6357         else
6358                 thread_suspend_msg="Suspend:       Preemptive"
6359         fi
6361         
6362 echo "
6363         mcs source:    $mcsdir
6364         C# Compiler:   $csc_compiler
6366    Engine:
6367         Host:          $host
6368         Target:        $target
6369         GC:            $gc_msg 
6370         $thread_suspend_msg
6371         TLS:           $with_tls
6372         SIGALTSTACK:   $with_sigaltstack
6373         Engine:        $jit_status
6374         BigArrays:     $enable_big_arrays
6375         DTrace:        $enable_dtrace
6376         LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6377         Spectre:       $spectre_mitigation_status
6378         Mono.Native:   $mono_native_text
6380    Libraries:
6381         .NET 4.x:        $with_profile4_x
6382         Xamarin.Android: $with_monodroid
6383         Xamarin.iOS:     $with_monotouch
6384         Xamarin.WatchOS: $with_monotouch_watch
6385         Xamarin.TVOS:    $with_monotouch_tv
6386         Xamarin.Mac:     $with_xammac
6387         Windows AOT:     $with_winaot
6388         Orbis:           $with_orbis
6389         Unreal:          $with_unreal
6390         WebAssembly:     $with_wasm
6391         Test profiles:   AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6392         JNI support:     $jdk_headers_found
6393         libgdiplus:      $libgdiplus_msg
6394         zlib:            $zlib_msg
6395         BTLS:            $enable_btls$btls_platform_string
6396         jemalloc:        $with_jemalloc (always use: $with_jemalloc_always)
6397         crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6398         .NET Core:       $with_core
6399         $disabled
6401 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6402    AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)