[wasm] Remove obsolete --llvm-lto 1 argument, lto is already enabled when -s WASM_OBJ...
[mono-project.git] / configure.ac
blobbd3e76d216c5098540e0cf59970d7d39a0e3fc14
1 # Process this file with autoconf to produce a configure script.
2 #AC_PREREQ([2.62])
4 # This line is parsed by tools besides autoconf, such as msvc/mono.winconfig.targets.
5 # It should remain in the format they expect.
7 AC_INIT(mono, [6.13.0],
8         [https://github.com/mono/mono/issues/new])
10 AC_CONFIG_SRCDIR([Makefile.am])
11 AC_CONFIG_MACRO_DIR([m4])
13 AC_CANONICAL_SYSTEM
14 AC_CANONICAL_HOST
16 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
17 # The extra brackets are to foil regex-based scans.
18 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
20 AM_INIT_AUTOMAKE([1.9 dist-xz tar-ustar no-dist-gzip foreign subdir-objects]
21                  m4_esyscmd([case `automake --version | head -n 1` in    # parallel-tests is default in automake 1.13+, we need to explicitly enable it
22                              *1.11*|*1.12*) echo parallel-tests;;        # for 1.11 and 1.12 but not below as those versions don't recognize the flag
23                              esac]))                                     # TODO: remove this hack once we require automake 1.11+
25 AC_CONFIG_HEADERS([config.h])
26 AM_MAINTAINER_MODE
27 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test]))
28 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test-bundle]))
30 API_VER=2.0
31 AC_SUBST(API_VER)
33 AC_PROG_LN_S
35 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
37 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
38 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
39 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
42 # This is the version of the corlib-runtime interface. When
43 # making changes to this interface (by changing the layout
44 # of classes the runtime knows about, changing icall signature or
45 # semantics etc), change this variable.
47 # This must be unique relative to corlib interface and semantics.
49 # If you change corlib such that a runtime change is required, or
50 # vice versa, change this string. Examples include removing icalls,
51 # adding icalls, changing icall signatures, and changing type layouts
52 # that both sides know.
54 # It is an arbitrary string and should be parsed as such.
55 # A guid works and is encouraged.
57 # Generate it with uuidgen. For example:
58 # perl -pi.bak -e "s/^MONO_CORLIB_VERSION=\S+/MONO_CORLIB_VERSION=`uuidgen`/" configure.ac
60 # There is no ordering of corlib versions, no old or new,
61 # an exact match is required between corlib and runtime.
63 # This line is parsed by tools besides autoconf, such as msvc/mono.winconfig.targets.
64 # It should remain in the format they expect.
66 MONO_CORLIB_VERSION=1A5E0066-58DC-428A-B21C-0AD6CDAE2789
69 # Put a quoted #define in config.h.
70 # Substitute @MONO_CORLIB_VERSION@ unquoted.
72 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
73 AC_SUBST(MONO_CORLIB_VERSION)
75 case $host_os in
76 *cygwin* )
77                  echo "Run configure using ./configure --host=i686-w64-mingw32 or --host=x86_64-w64-mingw32"
78                  exit 1
79 esac
81 # In case of cygwin, override LN_S, irrespective of what it determines.
82 # The build uses cygwin, but the actual runtime doesn't.
83 case $host_os in
84 *cygwin* ) LN_S='cp -p';;
85 esac
88 # libgc defaults
90 libgc_configure_args=
92 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
93 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
94 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
95 CFLAGS_FOR_LIBGC=$CFLAGS
96 CPPFLAGS_FOR_BTLS=$CPPFLAGS
97 CFLAGS_FOR_BTLS=$CFLAGS
99 # libgc uses some deprecated APIs
100 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
103 # These are the flags that need to be stored in the mono.pc file for 
104 # compiling code that will embed Mono
106 libmono_cflags=""
107 libmono_ldflags=""
108 AC_SUBST(libmono_cflags)
109 AC_SUBST(libmono_ldflags)
111 # Variable to have relocatable .pc files (lib, or lib64)
112 # realpath isn't always available, and requires that all but the tip of the provided
113 # path exists. Fall back to the old behaviour, but realpath allows depth >1
114 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
115 # too deep for the old method to work
116 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
117 AC_SUBST(reloc_libdir)
119 # Set to yes if Unix sockets cannot be created in an anonymous namespace
120 need_link_unlink=no
122 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
123 extra_runtime_ldflags=""
125 # Thread configuration inspired by sleepycat's db
126 AC_MSG_CHECKING([host platform characteristics])
128 libgc_threads=no
129 has_dtrace=no
130 parallel_mark=yes
131 ikvm_native=yes
133 host_win32=no
134 target_win32=no
135 target_wasm=no
136 platform_android=no
137 platform_tizen=no
138 platform_ios=no
139 host_darwin=no
140 host_linux=no
141 build_darwin=no
142 host_sunos=no
144 case "$host" in
145         wasm32*)
146                 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
147                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
148                 libgc_threads=pthreads
149                 platform_wasm=yes
150                 # FIXME:
151                 RID="osx-x64"
152                 COREARCH="wasm32"
153                 CORETARGETS="-p:TargetsUnix=true -p:TargetsOSX=true"
154                 build_darwin=yes
155                 ;;
156         *-mingw*|*-*-cygwin*)
157                 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
158                 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
159                 host_win32=yes
160                 mono_cv_clang=no
161                 if test "x$cross_compiling" = "xno"; then
162                         if test "x$host" = "x$build" -a "x$host" = "x$target"; then
163                                 target_win32=yes
164                         fi
165                 else
166                         if test "x$host" = "x$target"; then
167                                 target_win32=yes
168                         fi
169                 fi
170                 HOST_CC="gcc"
171                 RID="win-x86"
172                 CORETARGETS="-p:TargetsWindows=true"
173                 COREARCH="x86"
174                 # Boehm not supported on 64-bit Windows.
175                 case "$host" in
176                 x86_64-*-* | amd64-*-*)
177                         with_gc=sgen
178                         RID="win-x64"
179                         COREARCH="x64"
180                         ;;
181                 esac
183                 # Windows 7 or later is required
184                 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
185                 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
186                 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi -static-libgcc"
187                 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
188                 libmono_cflags="-mms-bitfields -mwindows"
189                 libmono_ldflags="-mms-bitfields -mwindows"
190                 libgc_threads=win32
191                 with_sigaltstack=no
192                 with_tls=pthread
193                 with_sgen_default_concurrent=yes
194                 LN_S=cp
195                 ;;
196         *-*-*netbsd*)
197                 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
198                 libmono_cflags="-D_REENTRANT"
199                 LDFLAGS="$LDFLAGS -pthread"
200                 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
201                 libmono_ldflags="-pthread"
202                 need_link_unlink=yes
203                 libgc_threads=pthreads
204                 with_sigaltstack=no
205                 use_sigposix=yes
206                 with_sgen_default_concurrent=yes
207                 ;;
208         *-*-kfreebsd*-gnu)
209                 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
210                 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
211                 libmono_ldflags="-lpthread -pthread"
212                 libgc_threads=pthreads
213                 need_link_unlink=yes
214                 with_sigaltstack=no
215                 use_sigposix=yes
216                 with_sgen_default_concurrent=yes
217                 ;;
218         *-*-*freebsd*)
219                 dnl For close_my_fds
220                 LDFLAGS="$LDFLAGS -lutil"
221                 if test "x$PTHREAD_CFLAGS" = "x"; then
222                         CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
223                         libmono_cflags=
224                 else
225                         CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
226                         libmono_cflags="$PTHREAD_CFLAGS"
227                 fi
228                 if test "x$PTHREAD_LIBS" = "x"; then
229                         LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
230                         libmono_ldflags="-pthread"
231                 else
232                         LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
233                         libmono_ldflags="$PTHREAD_LIBS"
234                 fi
235                 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
236                 need_link_unlink=yes
237                 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
238                 libgc_threads=pthreads
239                 use_sigposix=yes
240                 has_dtrace=yes
241                 case "$host" in
242                 aarch64-*)
243                         support_boehm=no
244                         with_gc=sgen
245                         ;;
246                 riscv*)
247                         support_boehm=no
248                         with_gc=sgen
249                         ;;
250                 esac
251                 with_sgen_default_concurrent=yes
252                 ;;
253         *-*-*openbsd*)
254                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
255                 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
256                 if test "x$disable_munmap" != "xyes"; then
257                 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
258                 fi
259                 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
260                 LDFLAGS="$LDFLAGS -pthread"
261                 need_link_unlink=yes
262                 AC_DEFINE(PTHREAD_POINTER_ID)
263                 libgc_threads=pthreads
264                 with_tls=pthread
265                 with_sigaltstack=no
266                 use_sigposix=yes
267                 with_sgen_default_concurrent=yes
268                 ;;
269         *-*-linux-android*)
270                 platform_android=yes
271                 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
272                 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
274                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
275                 if test "x$disable_munmap" != "xyes"; then
276                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
277                 fi
278                 libmono_cflags="-D_REENTRANT"
279                 libgc_threads=pthreads
280                 use_sigposix=yes
282                 with_tls=pthread
283                 with_sigaltstack=no
284                 with_static_mono=no
286                 # Android doesn't support boehm, as it's missing <link.h>
287                 support_boehm=no
288                 with_gc=sgen
290                 # isinf(3) requires -lm
291                 LDFLAGS="$LDFLAGS -lm"
293                 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
294                 # PAGE_SIZE; breaks mono/io-layer/collection.c
295                 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
296                 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
297                 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
299                 # FIXME? Only if __ANDROID_API__ < 24?
300                 # FILE32API means "long", which is stuck at 32bits for 32bit ABI (64bits for 64bit ABI).
301                 # ABI 24 introduces the "o" for "file offset" variations, which can be widened to 64bits for 32bit ABI (and still 64bits for 64bit).
302                 # Android itself uses FILE32API, and mono should use system zlib on Android anyway.
303                 ZLIB_CFLAGS="$ZLIB_CFLAGS -DUSE_FILE32API"
305                 # to bypass the underscore linker check, can't work when cross-compiling
306                 mono_cv_uscore=yes
307                 mono_cv_clang=no
308                 ;;
309         *-*-linux*)
310                 host_linux=yes
311                 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
312                 if test "x$disable_munmap" != "xyes"; then
313                         CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
314                 fi
315                 libmono_cflags="-D_REENTRANT"
316                 libgc_threads=pthreads
317                 CORETARGETS="-p:TargetsUnix=true"
318                 use_sigposix=yes
319                 if test "x$cross_compiling" != "xno"; then
320                         # to bypass the underscore linker check, not
321                         # available during cross-compilation
322                         mono_cv_uscore=no
323                 fi
324                 case "$host" in
325                 *-musl)
326                         AC_DEFINE(MUSL, 1, [musl libc])
327                         ;;
328                 esac
329                 case "$host" in
330                 *-tizen-linux-*)
331                         platform_tizen=yes
332                         ;;
333                 esac
334                 case "$host" in
335                 ppc64-*)
336                         RID="linux-ppc64"
337                         ;;
338                 ppc64le-*)
339                         RID="linux-ppc64el"
340                         ;;
341                 mipsel-*)
342                         RID="linux-mipsel"
343                         ;;
344                 x86-*)
345                         RID="linux-x86"
346                         COREARCH="x86"
347                         ;;
348                 x86_64-*)
349                         RID="linux-x64"
350                         COREARCH="x64"
351                         ;;
352                 arm-*)
353                         # deal with this in the FPU detection section, since
354                         # we cannot determine FPU from triplet and don't want
355                         # to duplicate the logic
356                         ;;
357                 aarch64-*)
358                         support_boehm=no
359                         with_gc=sgen
360                         RID="linux-arm64"
361                         COREARCH="arm64"
362                         ;;
363                 powerpc*-*-linux*)
364                         # https://bugzilla.novell.com/show_bug.cgi?id=504411
365                         disable_munmap=yes
366                         ;;
367                 powerpc*-*-freebsd*)
368                         # https://bugzilla.novell.com/show_bug.cgi?id=504411
369                         disable_munmap=yes
370                         ;;
371                 riscv*)
372                         support_boehm=no
373                         with_gc=sgen
374                         ;;
375                 esac
376                 with_sgen_default_concurrent=yes
377                 ;;
378         *-*-nacl*)
379                 echo "nacl no longer supported."
380                 exit 1
381                 ;;
382         *-*-hpux*)
383                 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
384                 # +ESdbgasm only valid on bundled cc on RISC
385                 # silently ignored for ia64
386                 if test $GCC != "yes"; then
387                         CFLAGS="$CFLAGS +ESdbgasm"
388                         # Arrange for run-time dereferencing of null
389                         # pointers to produce a SIGSEGV signal.
390                         LDFLAGS="$LDFLAGS -z"
391                 fi
392                 CFLAGS="$CFLAGS +ESdbgasm"
393                 LDFLAGS="$LDFLAGS -z"
394                 libmono_cflags="-D_REENTRANT"
395                 libmono_ldflags="-lpthread"
396                 libgc_threads=pthreads
397                 need_link_unlink=yes
398                 use_sigposix=yes
399                 ;;
400         *-*-solaris*)
401                 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS -D__EXTENSIONS__ -D_XPG4_2"
402                 need_link_unlink=yes
403                 libmono_cflags="-D_REENTRANT"
404                 libgc_threads=pthreads
405                 has_dtrace=yes
406                 use_sigposix=yes
407                 enable_solaris_tar_check=yes
408                 host_sunos=yes
409                 ;;
410         *-*-darwin*)
411                 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
412                 host_darwin=yes
413                 target_mach=yes
414                 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
415                 libmono_cflags="-D_THREAD_SAFE"
416                 need_link_unlink=yes
417                 AC_DEFINE(PTHREAD_POINTER_ID)
418                 AC_DEFINE(USE_MACH_SEMA, 1, [...])
419                 CORETARGETS="-p:TargetsUnix=true -p:TargetsOSX=true"
420                 libgc_threads=pthreads
421                 has_dtrace=yes
422                 if test "x$cross_compiling" = "xyes"; then
423                         has_broken_apple_cpp=yes
424                 fi
425                 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
426                 dnl its gcc defaults to 64-bit mode.  They have also deprecated the usage of ucontext
427                 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
428                 case "$host" in
429                         dnl Snow Leopard and newer config.guess reports as this
430                         i*86-*-darwin*)
431                                 BROKEN_DARWIN_FLAGS="-arch i386"
432                                 BROKEN_DARWIN_CPPFLAGS=""
433                                 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
434                                 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
435                                 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
436                                 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
437                                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
438                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
439                                 with_sgen_default_concurrent=yes
440                                 RID="osx-x86"
441                                 COREARCH="x86"
442                                 ;;
443                         x*64-*-darwin*)
444                                 with_sgen_default_concurrent=yes
445                                 RID="osx-x64"
446                                 COREARCH="x64"
447                                 ;;
448                         arm*-darwin*)
449                                 platform_ios=yes
450                                 has_dtrace=no
451                                 ;;
452                         aarch64*-darwin*)
453                                 platform_ios=yes
454                                 ;;
455                 esac
456                 ;;
457         *-*-haiku*)
458                 dnl BSD_SOURCE is for getifaddrs
459                 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
460                 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
461                 LIBS="$LIBS -lnetwork -ltextencoding"
462                 need_link_unlink=yes
463                 AC_DEFINE(PTHREAD_POINTER_ID)
464                 dnl Haiku does not support static TLS with __thread
465                 with_tls=pthread
466                 libgc_threads=pthreads
467                 use_sigposix=yes
468                 with_sigaltstack=no
469                 ;;
470         *-*-fuchsia*)
471                 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
472                 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
473                 fuchsia=true
474                 with_tls=pthread
475                 with_sigaltstack=yes
476                 with_static_mono=no
477                 support_boehm=no
478                 with_gc=sgen
479                 mono_cv_uscore=yes
480                 mono_cv_clang=no
481                 ;;
482         *-*-aix*|*-*-os400*)
483                 AC_DEFINE(HOST_AIX,1,[Targeting the AIX and PASE platforms])
484                 host_aix=yes
485                 dnl IMPORTANT: For svr4 sonames on AIX, you should set
486                 dnl `OBJECT_MODE=64` when configuring.
487                 dnl libtool cannot generate functioning svr4 sonames on
488                 dnl 64-bit without it.
489                 dnl Unfortunately, everything is complicated by the fact that
490                 dnl gcc doesn't respect this variable. (otherwise we could set
491                 dnl it for build time for configure and make)
492                 dnl On IBM i PASE using IBM's packages, GCC *does* respect this
493                 dnl variable, and builds are 64-bit by default. svr4 sonames
494                 dnl must still be specified when configuring on i, however.
495                 dnl As such, because Mono doesn't support 32-bit AIX or PASE,
496                 dnl set up a 64-bit build (assming GCC; XLC not supported)
497                 dnl regardless of what variable is used.
498                 case $host_os in
499                         aix*)
500                         if test "x$OBJECT_MODE" = "x64" && test "x$CC" = "x" && test "x$CXX" = "x"; then
501                                 dnl HACK: Set -maix64 at the GCC invocation
502                                 dnl level explicitly to work around the fact
503                                 dnl GCC in default maix32 mode explodes when
504                                 dnl binutils respects OBJECT_MODE.
505                                 dnl When that check occurs, flags are not
506                                 dnl passed to to the compiler, so GCC has no
507                                 dnl chance to change its mode.
508                                 dnl Otherwise, it may enter a state where it
509                                 dnl runs, but uses the libtool "compile"
510                                 dnl wrapper, which subtly breaks other things.
511                                 dnl This should propagate to all uses of CC.
512                                 dnl This is only set if not manually set.
513                                 CC="gcc -maix64"
514                                 CXX="g++ -maix64"
515                                 echo
516                         fi
517                         ;;
518                         dnl Not needed on i because it defaults to 64-bit and
519                         dnl has a GCC smart enough to respect OBJECT_MODE.
520                 esac
521                 dnl We still set this for *FLAGS, however, because we may not
522                 dnl be setting OBJECT_MODE.
523                 LDFLAGS="$LDFLAGS -maix64"
524                 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -pthread -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
525                 libmono_cflags="-pthread -D_THREAD_SAFE -D_REENTRANT"
526                 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
527                 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
528                 dnl specifiy 64-bit mode for tools. (OBJECT_MODE is finicky with cmake.)
529                 dnl XXX: We should stop the hardcoding madness
530                 AR="/usr/bin/ar -X64"
531                 NM="/usr/bin/nm -X64"
532                 STRIP="/usr/bin/strip -X64"
533                 RANLIB="/usr/bin/ranlib -X64"
534                 dnl SGen is the future (changes to Boehm support code would be
535                 dnl required if you wish to re-enable Boehm)
536                 support_boehm=no
537                 with_gc=sgen
538                 need_link_unlink=yes
539                 use_sigposix=yes
540                 dnl Similar limitation to macOS about the first thread and the
541                 dnl guard page, except sometimes the runtime hangs. Disable for
542                 dnl now until cause can be determined or it seems OK enough.
543                 with_sigaltstack=no
544                 dnl use pthread TLS, __thread has issues with the compiler flags we use
545                 with_tls=pthread
546                 dnl ppc Linux is the same? test further
547                 disable_munmap=yes
548                 RID="aix-ppc64"
549                 CORETARGETS="-p:TargetsUnix=true"
550                 ;;
551         *)
552                 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
553                 ;;
554 esac
556 AC_MSG_RESULT(ok)
558 if test x$need_link_unlink = xyes; then
559    AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
562 if test x$host_win32 = xyes; then
563    AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
566 if test x$target_win32 = xyes; then
567    AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
570 if test x$host_darwin = xyes; then
571    AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
574 # Defined for all targets/platforms using classic Windows API support.
575 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
576 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
578 AC_SUBST(extra_runtime_ldflags)
579 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
580 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
581 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
582 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
583 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
584 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
585 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
586 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
587 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
588 AM_CONDITIONAL(HOST_AIX, test x$host_aix = xyes)
590 if test -z "$HOST_DARWIN_TRUE"; then :
591 PLATFORM_AOT_SUFFIX=.dylib
592 PLATFORM_AOT_PREFIX=lib
595 if test -z "$HOST_LINUX_TRUE"; then :
596 PLATFORM_AOT_SUFFIX=.so
597 PLATFORM_AOT_PREFIX=lib
600 if test -z "$HOST_WIN32_TRUE"; then :
601 PLATFORM_AOT_SUFFIX=.dll
602 PLATFORM_AOT_PREFIX=
605 AC_SUBST(PLATFORM_AOT_SUFFIX)
606 AC_SUBST(PLATFORM_AOT_PREFIX)
608 if test -z "$HOST_WASM_TRUE"; then :
609 AC_DEFINE(HAVE_UTIME)
610 AC_DEFINE(HAVE_UTIMES)
613 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
615 AC_CHECK_TOOL(CC, gcc, gcc)
616 AC_PROG_CC
617 AC_CHECK_TOOL(CXX, g++, g++)
618 AC_PROG_CXX
619 AM_PATH_PYTHON([3.2])
620 AM_PROG_AS
621 AC_PROG_INSTALL
622 AC_PROG_AWK
623 AM_PROG_CC_C_O
624 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
625 : ${CCAS='$(CC)'}
626 # Set ASFLAGS if not already set.
627 : ${CCASFLAGS='$(CFLAGS)'}
628 AC_SUBST(CCAS)
629 AC_SUBST(CCASFLAGS)
631 if test "x$CXX" = "xno"; then
632         AC_MSG_ERROR([No c++ compiler found. You need to install a c++ compiler])
635 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
636 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
637 if test "x$CXX" = "xg++"; then
638         if test "x$GXX" != "xyes"; then
639                 # automake/libtool is so broken, it requires g++ even if the c++ sources
640                 # are inside automake conditionals
641                 AC_MSG_ERROR([You need to install g++])
642         fi
645 dnl may require a specific autoconf version
646 dnl AC_PROG_CC_FOR_BUILD
647 dnl CC_FOR_BUILD not automatically detected
648 CC_FOR_BUILD=$CC
649 CFLAGS_FOR_BUILD=$CFLAGS
650 BUILD_EXEEXT=
651 if test "x$cross_compiling" = "xyes"; then
652         CC_FOR_BUILD=cc
653         CFLAGS_FOR_BUILD=
654         BUILD_EXEEXT=""
656 AC_SUBST(CC_FOR_BUILD)
657 AC_SUBST(CFLAGS_FOR_BUILD)
658 AC_SUBST(HOST_CC)
659 AC_SUBST(BUILD_EXEEXT)
661 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
662 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
664 # Set STDC_HEADERS
665 AC_HEADER_STDC
666 AC_LIBTOOL_WIN32_DLL
667 # This causes monodis to not link correctly
668 #AC_DISABLE_FAST_INSTALL
670 #lookup makedev() header
671 AC_HEADER_MAJOR
673 AM_PROG_LIBTOOL
674 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
675 DOLT
677 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
678 AC_SUBST(export_ldflags)
680 # Test whenever ld supports -version-script
681 AC_PROG_LD
682 AC_PROG_LD_GNU
684 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 gnu/lib-names.h)
685 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)
687 # zlib/configure checks for unistd.h existence and defines HAVE_UNISTD_H on the compiler
688 # command line (not config.h) if it is present.
689 AC_CHECK_HEADER(unistd.h,
690     [HAVE_UNISTD_H=1
691      ZLIB_CFLAGS="$ZLIB_CFLAGS -DHAVE_UNISTD_H"],
692     [HAVE_UNISTD_H=0])
694 AC_SUBST(HAVE_UNISTD_H)
696 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
697                   [], [], [#include <stddef.h>
698                   #include <sys/socket.h>
699                   #include <linux/socket.h>])
701 AC_CHECK_HEADERS(sys/user.h, [], [],
703 #ifdef HAVE_SYS_PARAM_H
704 # include <sys/param.h>
705 #endif
708 AC_CHECK_HEADERS(linux/serial.h)
710 case "$host" in
711         # Use bundled zlib on Windows to be sure it is static.
712         *-mingw*|*-cygwin*)
713                 have_sys_zlib=no
714                 zlib_msg="bundled zlib"
715                 ;;
716         # Use bundled zlib on RISC-V for now to make cross-compiling easier.
717         riscv*)
718                 have_sys_zlib=no
719                 zlib_msg="bundled zlib"
720                 ;;
721         *)
722                 AC_CHECK_HEADER(zlib.h, [have_sys_zlib=yes], [have_sys_zlib=no])
723                 if test x$have_sys_zlib = xyes; then
724                         AC_TRY_COMPILE([#include <zlib.h>], [
725                                 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
726                                 #else
727                                 #error No good zlib found
728                                 #endif
729                         ],[
730                                 AC_MSG_RESULT(Using system zlib)
731                                 zlib_msg="system zlib"
732                                 have_sys_zlib=yes
733                         ],[
734                                 AC_MSG_RESULT(zlib too old, using embedded zlib)
735                                 have_sys_zlib=no
736                                 zlib_msg="bundled zlib"
737                         ])
738                 else
739                         AC_MSG_RESULT(zlib not found, using embedded zlib)
740                         have_sys_zlib=no
741                         zlib_msg="bundled zlib"
742                 fi
743                 ;;
744 esac
746 AC_ARG_WITH(static-zlib, [  --with-static-zlib=PATH    use the specified static zlib instead of -lz],[STATIC_ZLIB_PATH=$with_static_zlib],[STATIC_ZLIB_PATH=])
747 if test "x$STATIC_ZLIB_PATH" != "x"; then
748         have_static_zlib=yes
749         have_sys_zlib=no
750         zlib_msg="static zlib from $STATIC_ZLIB_PATH"
751         AC_SUBST(STATIC_ZLIB_PATH)
754 AM_CONDITIONAL(HAVE_STATIC_ZLIB, test x$have_static_zlib = xyes)
755 AM_CONDITIONAL(HAVE_SYS_ZLIB, test x$have_sys_zlib = xyes)
756 if test x$have_static_zlib = xyes; then
757         AC_DEFINE(HAVE_STATIC_ZLIB, 1, [Use static zlib])
759 if test x$have_sys_zlib = xyes; then
760         AC_DEFINE(HAVE_SYS_ZLIB, 1, [Use OS-provided zlib])
762 # for mono/metadata/debug-symfile.c
763 AC_CHECK_HEADERS(elf.h)
765 # for perf jit dump support
766 AC_CHECK_HEADERS(sys/mman.h)
767 if test "x$host_linux" = "xyes" -a x$ac_cv_header_sys_mman_h = xyes -a  x$ac_cv_header_elf_h = xyes -a x$ac_cv_header_sys_syscall_h = xyes; then
768         AC_DEFINE(ENABLE_JIT_DUMP, 1, [Enable jit dump support on Linux])
771 # for support
772 AC_CHECK_HEADERS(poll.h)
773 AC_CHECK_HEADERS(sys/poll.h)
774 AC_CHECK_HEADERS(sys/wait.h)
775 AC_CHECK_HEADERS(grp.h)
776 AC_CHECK_HEADERS(syslog.h)
777 AC_CHECK_FUNCS(vsyslog)
779 # for mono/dis
780 AC_CHECK_HEADERS(wchar.h)
782 # for Linux statfs support
783 AC_CHECK_HEADERS(linux/magic.h)
785 # For Android NDK unified headers
786 if test x$platform_android = xyes; then
787         AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
788         AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
789         AC_CHECK_HEADERS(android/ndk-version.h)
791         # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
792         # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
793         # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
794         # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
795         # doesn't contain the required definitions (NDK 14)
796         if test x$have_android_signal_inlines = xyes; then
797                 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
798                 AC_COMPILE_IFELSE([
799                         AC_LANG_PROGRAM([#include <signal.h>
800                                 #include <android/legacy_signal_inlines.h>],[
801                                 int i;
802                                 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
803                                 }
804                         ])],[
805                                 AC_MSG_RESULT(yes)
806                                 android_sigrtminmax_work=yes
807                         ],[
808                                 AC_MSG_RESULT(no)
809                                 android_sigrtminmax_work=no
810                         ]
811                 )
813                 if test x$android_sigrtminmax_work = xno; then
814                         AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
815                 fi
816         fi
818         # Attempt to detect whether we're using Android NDK unified headers
819         AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
820         AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
822         android_unified_headers=no
823         if test x$have_android_api_level = xyes; then
824                 if test x$have_android_versioning = xyes; then
825                         AC_MSG_CHECKING([whether using Android NDK unified headers])
827                         # Both macros are defined only in the NDK unified headers
828                         AC_COMPILE_IFELSE([
829                                 AC_LANG_PROGRAM([
830                                         #include <android/api-level.h>
831                                         #include <android/versioning.h>
832                                 ],[
833                                         #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
834                                         #else
835                                                 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
836                                         #endif
837                                 ])],[
838                                         AC_MSG_RESULT(yes)
839                                         android_unified_headers=yes
840                                 ],[
841                                         AC_MSG_RESULT(no)
842                                         android_unified_headers=no
843                                 ]
844                         )
845                 fi
846         fi
848         if test x$android_unified_headers = xyes; then
849                 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
850         fi
851 fi # Android
853 # not 64 bit clean in cross-compile
854 AC_CHECK_SIZEOF(void *)
855 AC_CHECK_SIZEOF(long)
857 AC_CHECK_SIZEOF(int)
858 AC_CHECK_SIZEOF(long long)
860 AC_CACHE_CHECK([for clang],
861         mono_cv_clang,[
862         AC_TRY_COMPILE([], [
863                 #ifdef __clang__
864                 #else
865                 #error "FAILED"
866                 #endif
867         ],
868         [mono_cv_clang=yes],
869         [mono_cv_clang=no],
870         [])
873 AC_ARG_ENABLE(visibility-hidden,
874 [  --disable-visibility-hidden    disable usage of -fvisiblity=hidden],
875    disable_visibility_hidden=yes, disable_visibility_hidden=no)
877 WARN=''
878 if test x"$GCC" = xyes; then
879                 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
880                 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
882                 # We require C99 with some GNU extensions, e.g. `linux` macro
883                 CFLAGS="$CFLAGS -std=gnu99"
885                 # The runtime code does not respect ANSI C strict aliasing rules
886                 CFLAGS="$CFLAGS -fno-strict-aliasing"
888                 # We rely on signed overflow to behave
889                 CFLAGS="$CFLAGS -fwrapv"
891                 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
892                 if test x"$disable_visibility_hidden" = xno; then
893                    # Don't export any symbols by default
894                    SHARED_CFLAGS="-fvisibility=hidden"
895                    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
896                 fi
898                 ORIG_CFLAGS=$CFLAGS
899                 # Check for the normal version, since gcc ignores unknown -Wno options
900                 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
901                 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
902                 AC_TRY_COMPILE([],[
903                 ], [
904                    AC_MSG_RESULT(yes)
905                    CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
906                 ], [
907                    AC_MSG_RESULT(no)
908                    CFLAGS=$ORIG_CFLAGS
909                 ])
911                 if test "x$mono_cv_clang" = "xyes"; then
912                    # https://bugzilla.samba.org/show_bug.cgi?id=8118
913                    WARN="$WARN -Qunused-arguments"
914                    WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
915                    # We rely on zero length arrays in structs
916                    WARN="$WARN -Wno-zero-length-array"
917                 fi
918 else
919         # The Sun Forte compiler complains about inline functions that access static variables
920         # so disable all inlining.
921         case "$host" in
922         *-*-solaris*)
923                 CFLAGS="$CFLAGS -Dinline="
924                 ;;
925         esac
927 CFLAGS="$WARN $CFLAGS -g"
928 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
929 CPPFLAGS="$WARN $CPPFLAGS -g"
931 # Where's the 'mcs' source tree?
932 if test -d $srcdir/mcs; then
933   mcsdir=mcs
934 else
935   mcsdir=../mcs
938 AC_ARG_WITH(mcs-path, [  --with-mcs-path=/path/to/mcs      Specify an alternate mcs source tree],
939         if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
940                 mcsdir=$with_mcs_path
941         fi
944 AC_ARG_WITH(jumptables, [  --with-jumptables=yes,no      enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
946 AC_ARG_WITH(core,       [  --with-core=only       controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
947 if test x$with_core = xonly; then
948     AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
949     with_runtime_preset=netcore
951 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
953 if test x$with_core = xonly; then
954         if test -f $srcdir/mono/eventpipe/ep.h; then
955                 enable_perftracing=yes
956         fi
957         if test x$enable_perftracing = xyes; then
958                 AC_DEFINE(ENABLE_PERFTRACING,1,[Enables support for eventpipe library])
959         fi
961 AM_CONDITIONAL(ENABLE_PERFTRACING, test x$enable_perftracing = xyes)
964 # A sanity check to catch cases where the package was unpacked
965 # with an ancient tar program (Solaris)
967 AC_ARG_ENABLE(solaris-tar-check,
968 [  --disable-solaris-tar-check    disable solaris tar check],
969    do_solaris_tar_check=no, do_solaris_tar_check=yes)
971 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
972         AC_MSG_CHECKING(integrity of package)
973         if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
974         then
975                 AC_MSG_RESULT(ok)
976         else
977                 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"
978                 AC_MSG_ERROR([$errorm])
979         fi
982 if test "x$with_mcs_path" != "x"; then
983 mcs_topdir=$(cd "$mcsdir" && pwd)
984 mcs_topdir_from_srcdir=$mcs_topdir
985 else
986 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
987 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
990 # Convert mcs_topdir* paths to Windows syntax.
991 if test x$cross_compiling$host_win32 = xnoyes; then
992   mcs_topdir=$(cygpath -m $mcs_topdir)
993   case $mcs_topdir_from_srcdir in
994     /cygdrive/*)
995         mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
996         ;;
997   esac
1000 AC_SUBST([mcs_topdir])
1001 AC_SUBST([mcs_topdir_from_srcdir])
1003 # gettext: prepare the translation directories. 
1004 # we do not configure the full gettext, as we consume it dynamically from C#
1005 AM_PO_SUBDIRS
1007 if test "x$USE_NLS" = "xyes"; then
1008    AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
1010    if test "x$HAVE_MSGFMT" = "xno"; then
1011           AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
1012    fi
1015 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
1017 pkg_config_path=
1018 AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir],
1019         if test x$with_crosspkgdir = "x"; then
1020                 if test -s $PKG_CONFIG_PATH; then
1021                         pkg_config_path=$PKG_CONFIG_PATH
1022                 fi
1023         else
1024                 pkg_config_path=$with_crosspkgdir
1025                 PKG_CONFIG_PATH=$pkg_config_path
1026                 export PKG_CONFIG_PATH
1027         fi
1030 AC_ARG_ENABLE(ninja,[  --enable-ninja    Enable using ninja where available], enable_ninja=$enableval)
1031 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
1032 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
1034 AC_ARG_ENABLE(werror, [  --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
1035 if test x$werror_flag = xyes; then
1036         WERROR_CFLAGS="-Werror"
1038 AC_SUBST([WERROR_CFLAGS])
1039 AC_SUBST([SHARED_CFLAGS])
1041 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
1042   
1043 AC_SUBST(GLIB_CFLAGS)
1045 # Enable support for fast thread-local storage
1046 # Some systems have broken support, so we allow to disable it.
1047 AC_ARG_WITH(tls, [  --with-tls=__thread,pthread    select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
1049 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
1050 # This does not work on some platforms (bug #55253)
1051 AC_ARG_WITH(sigaltstack, [  --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
1053 AC_ARG_WITH(static_mono, [  --with-static_mono=yes,no      link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
1054 AC_ARG_WITH(shared_mono, [  --with-shared_mono=yes,no      build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
1055 # Same as --with-shared_mono=no
1056 AC_ARG_ENABLE(libraries, [  --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
1058 if test "x$enable_static" = "xno"; then
1059    with_static_mono=no
1062 if test "x$enable_shared" = "xno"; then
1063    with_shared_mono=no
1066 if test "x$enable_libraries" = "xno"; then
1067    with_shared_mono=no
1070 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
1072 if test "x$host_win32" = "xyes"; then
1073    # Boehm GC requires the runtime to be in its own dll
1074    with_static_mono=no
1077 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
1078 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
1079 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
1080 AC_ARG_ENABLE(support-build, [  --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
1082 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
1083 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
1084         AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
1085         ORIG_CFLAGS=$CFLAGS
1086         CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
1087         AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
1088         AC_TRY_COMPILE([], [
1089         ], [
1090            AC_MSG_RESULT(yes)
1091            # Pass it to libgc as well
1092            CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
1093         ], [
1094            AC_MSG_RESULT(no)
1095            CFLAGS=$ORIG_CFLAGS
1096         ])
1099 AC_ARG_ENABLE(small-config, [  --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
1101 if test x$enable_small_config = xyes; then
1102         AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
1103         CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
1106 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)
1108 DISABLED_FEATURES=none
1109 csc_compiler=default
1110 endian=unknown
1111 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
1112 AC_MSG_CHECKING([CSharp compiler to use])
1113 AC_ARG_WITH(csc, [  --with-csc=mcs,roslyn,default      Configures the CSharp compiler to use],[
1114    if test x$withval = xmcs; then
1115        csc_compiler=mcs
1116    elif test x$withval = xroslyn; then
1117        csc_compiler=roslyn
1118    elif test x$withval = xdefault; then
1119        :
1120    else
1121        AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
1122    fi
1123 ],[csc_compiler=default])
1125 if test $csc_compiler = default; then
1126    if test $endian = big; then
1127       csc_compiler=mcs
1128    elif test $endian = little; then
1129       case "$host" in
1130         powerpc*) csc_compiler=mcs ;;
1131         *) csc_compiler=roslyn ;;
1132       esac
1133    else
1134       csc_compiler=mcs
1135    fi
1137 AC_MSG_RESULT($csc_compiler)
1139 AC_ARG_WITH(jemalloc,             [  --with-jemalloc=yes,no               If jemalloc is enabled (defaults to no)],                                     [], [with_jemalloc=no])
1140 AC_ARG_WITH(jemalloc-always,      [  --with-jemalloc_always=yes,no        If jemalloc is enabled and always used (defaults to yes)],                    [], [with_jemalloc_always=no])
1141 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])
1144 if test x$target_win32 = xyes; then
1145 with_jemalloc=no
1146 with_jemalloc_assert=no
1147 with_jemalloc_always=no
1150 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
1151 if test "x$with_jemalloc_assert" = "xyes"; then
1152 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
1153 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
1154 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
1157 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
1158 if test "x$with_jemalloc_always" = "xyes"; then
1159 with_jemalloc=yes
1160 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
1161 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
1162 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
1165 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
1166 if test "x$with_jemalloc" = "xyes"; then
1167 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
1168 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
1169 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
1171 if test "x$target_mach" = "xyes"; then
1172         JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
1175 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
1176 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
1178 AC_SUBST(JEMALLOC_CFLAGS)
1179 AC_SUBST(JEMALLOC_CPPFLAGS)
1180 AC_SUBST(JEMALLOC_LDFLAGS)
1181 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1184 # Terminology:
1185 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1186 # MERP - The MS telemetry profile. Not for general use.
1187 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1189 # 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.
1191 #--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.
1192 #--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.
1193 #--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.
1194 #--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.
1196 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])
1197 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])
1198 AC_ARG_ENABLE(crash-reporting,  [  --disable-crash-reporting            Enable or Disable crash reporting subsystem],        [crash_reporting=$enableval], [crash_reporting=yes])
1200 if test "x$with_crash_privacy" = "xyes"; then
1201 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1204 if test "x$with_structured_crashes" = "xno"; then
1205 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1208 case "$host" in
1209         *-mingw*|*-*-cygwin*)
1210                 crash_reporting=no
1211                 ;;
1212 esac
1214 if test "x$crash_reporting" != "xyes"; then
1215 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1216 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1219 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1220 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1222 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1223 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1225 if test x$enable_monodroid = xyes; then
1226         AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1229 if test x$enable_monotouch = xyes; then
1230         AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1233 AC_ARG_ENABLE(cxx, [  --enable-cxx   compile some code as C++])
1234 AM_CONDITIONAL(ENABLE_CXX, test x$enable_cxx = xyes)
1236 # mono/corefx/native has a lot of invalid C++98 in its headers
1237 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1238 # use these C99 print macros in the command line, since glib may not win first inttypes include
1239 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1240 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1241 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1242 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1244 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1245 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1246 # and add it whenever we're running clang on Darwin.
1247 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1248         CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1251 AC_SUBST(CXXFLAGS_COMMON)
1253 if test "x$enable_cxx" = "xyes"; then
1255         CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1257         # -std=gnu99 -xc++ is not allowed and errors.
1258         CXX_REMOVE_CFLAGS=-std=gnu99
1259         # These give warnings and should be removed. They are C-only.
1260         # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1261         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1262         # Likewise with CentOS 6 gcc 4.4.
1263         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1265         # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1266         # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1267         # generates a warning every time we run gcc which is very unsightly.
1268         # The warning is for e.g. sprintf(foo, "") which can just be
1269         # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1270         # and completely legal and valid.
1271         # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1272         # Alternatively, just run $CXX -xc++ -c /dev/null.
1273         AC_LANG_PUSH(C++)
1274         ORIG_CXXFLAGS=$CXXFLAGS
1275         CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1276         AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1277         AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1278                                  [ AC_MSG_RESULT(no)
1279                                    CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1280         CXXFLAGS=$ORIG_CXXFLAGS
1281         AC_LANG_POP(C++)
1283 AC_SUBST(CXX_ADD_CFLAGS)
1284 AC_SUBST(CXX_REMOVE_CFLAGS)
1287 # Set the build profiles and options before things which use them
1290 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])
1291 AC_ARG_WITH(monodroid,           [  --with-monodroid=yes,no             If you want to build the MonoDroid assemblies (defaults to no)],            [], [with_monodroid=default])
1292 AC_ARG_WITH(monotouch,           [  --with-monotouch=yes,no             If you want to build the Xamarin.iOS assemblies (defaults to no)],          [], [with_monotouch=default])
1293 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])
1294 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])
1295 AC_ARG_WITH(bitcode,             [  --with-bitcode=yes,no               If bitcode is enabled (defaults to no)],                                    [], [with_bitcode=default])
1296 AC_ARG_WITH(xammac,              [  --with-xammac=yes,no                If you want to build the Xamarin.Mac assemblies (defaults to no)],          [], [with_xammac=default])
1297 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])
1298 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])
1299 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])
1300 AC_ARG_WITH(winaot,              [  --with-winaot=yes,no                If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1301 AC_ARG_WITH(testing_winaot_interp,    [  --with-testing_winaot_interp=yes,no      If you want to build the Windows friendly AOT + Interpreter testing assemblies (defaults to no)], [], [with_testing_winaot_interp=default])
1302 AC_ARG_WITH(orbis,               [  --with-orbis=yes,no                 If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1303 AC_ARG_WITH(unreal,              [  --with-unreal=yes,no                If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1304 AC_ARG_WITH(wasm,                [  --with-wasm=yes,no                  If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1307 AC_ARG_WITH(runtime-preset, [  --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,winaot,winaotinterp,winaot_llvm,winaotinterp_llvm,bitcode,bitcodeinterp,unreal,fullaotinterp,fullaotinterp_llvm  Which default profile to build (defaults to net_4_x)],  [], [with_runtime_preset=net_4_x])
1308 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])
1309 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])
1310 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])
1313 dnl Spectre compiler mitigation flag checks
1315 if test "x$with_spectre_mitigation" = "xyes"; then
1316    AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1317    SPECTRE_CFLAGS=
1318    SPECTRE_INDIRECT_BRANCH_KIND=
1319    case "x$with_spectre_indirect_branch_choice" in
1320        xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1321        xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1322        xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1323        xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1324        *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1325    esac
1327    SPECTRE_FUNCTION_RETURN_KIND=""
1328    case "x$with_spectre_function_return_choice" in
1329        xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1330        xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1331        xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1332        xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1333        *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1334    esac
1336    AX_CHECK_COMPILE_FLAG(
1337         [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1338         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1339    )
1341    AX_CHECK_COMPILE_FLAG(
1342         [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1343         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1344    )
1346    if test "x$SPECTRE_CFLAGS" != "x" ; then
1347         CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1348         CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1349         spectre_mitigation_status="mitigation enabled"
1350    fi
1351 else
1352         spectre_mitigation_status="no mitigation"
1356 dnl Profile defaults
1358 TEST_PROFILE=default
1359 enable_llvm_default=no
1361 with_profile4_x_default=no
1362 with_monodroid_default=no
1363 with_monotouch_default=no
1364 with_monotouch_watch_default=no
1365 with_monotouch_tv_default=no
1366 with_xammac_default=no
1367 with_testing_aot_full_interp_default=no
1368 with_testing_aot_hybrid_default=no
1369 with_testing_aot_full_default=no
1370 with_winaot_default=no
1371 with_testing_winaot_interp_default=no
1372 with_orbis_default=no
1373 with_unreal_default=no
1374 with_wasm_default=no
1376 with_bitcode_default=no
1377 enable_cooperative_suspend_default=no
1378 enable_hybrid_suspend_default=no
1380 # For the sake of clearer error messages, these numbers should all be different from each other.
1381 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4400,nftnptr-arg-trampolines=4000,nrgctx-trampolines=21000
1383 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1385 MONO_LLVM_PATH_OPTION=llvm-path="`pwd`/llvm/usr/bin"
1387 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1388    DISABLE_MCS_DOCS_default=yes
1391 if test x$with_runtime_preset = xnetcore; then
1392    # Keep in sync with winconfig.h netcore configuration.
1393    DISABLE_MCS_DOCS_default=yes
1394    BTLS_SUPPORTED=no
1395    enable_mcs_build=no
1396    enable_support_build=no
1398    mono_feature_disable_remoting='yes'
1399    mono_feature_disable_reflection_emit_save='yes'
1400    mono_feature_disable_appdomains='yes'
1401    mono_feature_disable_cleanup='yes'
1402    mono_feature_disable_assembly_remapping='yes'
1403    mono_feature_disable_security='yes'
1404    mono_feature_disable_mdb='yes'
1405    mono_feature_disable_com='yes'
1406    mono_feature_disable_gac='yes'
1407    mono_feature_disable_perfcounters='yes'
1408    mono_feature_disable_attach='yes'
1409    if test "x$enable_monodroid" = "x" -a "x$enable_monotouch" = "x"; then
1410      mono_feature_disable_dllmap='yes' # FIXME: the mobile products use this
1411    fi
1412    disable_mono_native=yes
1413    support_boehm=no
1414 elif test x$with_runtime_preset = xnet_4_x; then
1415    with_profile4_x_default=yes
1416    TEST_PROFILE=net_4_x
1417 elif test x$with_runtime_preset = xall; then
1418    with_profile4_x_default=yes
1419    with_monodroid_default=yes
1420    with_monotouch_default=yes
1421    with_monotouch_watch_default=yes
1422    with_monotouch_tv_default=yes
1423    with_xammac_default=yes
1424    with_winaot_default=yes
1425    with_testing_winaot_interp_default=yes
1426    with_orbis_default=yes
1427    with_unreal_default=yes
1428    with_wasm_default=yes
1429    with_testing_aot_full_interp_default=yes
1430    with_testing_aot_hybrid_default=yes
1431    with_testing_aot_full_default=yes
1432    TEST_PROFILE=net_4_x
1433 elif test x$with_runtime_preset = xbitcode; then
1434    DISABLE_MCS_DOCS_default=yes
1435    with_testing_aot_full_default=yes
1436    with_bitcode_default=yes
1437    enable_cooperative_suspend_default=yes
1438    # FIXME: use TEST_PROFILE=testing_aot_full
1439    TEST_PROFILE=testing_aot_bitcode
1440    PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1441    enable_llvm_default=yes
1443    mono_feature_disable_com='yes'
1444    mono_feature_disable_remoting='yes'
1445    mono_feature_disable_reflection_emit_save='yes'
1446    mono_feature_disable_reflection_emit='yes'
1447    mono_feature_disable_appdomains='yes'
1449    # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1450    AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1451    AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1452    AOT_MODE="llvmonly"
1453 elif test x$with_runtime_preset = xbitcodeinterp; then
1454    with_testing_aot_full_interp_default=yes
1455    with_bitcode_default=yes
1456    enable_cooperative_suspend_default=yes
1457    # FIXME: use TEST_PROFILE=testing_aot_full_interp
1458    TEST_PROFILE=testing_aot_bitcode_interp
1459    PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1460    enable_llvm_default=yes
1462    # mscorlib.dll aot compilation crashes
1463    mono_feature_disable_com='yes'
1465    # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1466    AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1467    AOT_RUN_FLAGS="--llvmonly-interp"
1468 elif test x$with_runtime_preset = xfullaot; then
1469    DISABLE_MCS_DOCS_default=yes
1470    with_testing_aot_full_default=yes
1471    TEST_PROFILE=testing_aot_full
1473    mono_feature_disable_com='yes'
1474    mono_feature_disable_remoting='yes'
1475    mono_feature_disable_reflection_emit_save='yes'
1476    mono_feature_disable_reflection_emit='yes'
1477    mono_feature_disable_appdomains='yes'
1479    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1480    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1481    AOT_MODE="full"
1482 elif test x$with_runtime_preset = xfullaot_llvm; then
1483    DISABLE_MCS_DOCS_default=yes
1484    with_testing_aot_full_default=yes
1485    TEST_PROFILE=testing_aot_full
1487    mono_feature_disable_com='yes'
1488    mono_feature_disable_remoting='yes'
1489    mono_feature_disable_reflection_emit_save='yes'
1490    mono_feature_disable_reflection_emit='yes'
1491    mono_feature_disable_appdomains='yes'
1493    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1494    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1495    AOT_MODE="full"
1496 elif test x$with_runtime_preset = xhybridaot; then
1497    DISABLE_MCS_DOCS_default=yes
1498    with_testing_aot_hybrid_default=yes
1499    TEST_PROFILE=testing_aot_hybrid 
1501    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1502    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1503 elif test x$with_runtime_preset = xhybridaot_llvm; then
1504    DISABLE_MCS_DOCS_default=yes
1505    with_testing_aot_hybrid_default=yes
1506    TEST_PROFILE=testing_aot_hybrid
1508    AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1509    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1510 elif test x$with_runtime_preset = xfullaotinterp; then
1511    with_testing_aot_full_interp_default=yes
1512    TEST_PROFILE=testing_aot_full_interp
1514    # mscorlib.dll aot compilation crashes
1515    mono_feature_disable_com='yes'
1517    AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1518    AOT_RUN_FLAGS="--full-aot-interp"
1519 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1520    with_testing_aot_full_interp_default=yes
1521    TEST_PROFILE=testing_aot_full_interp
1523    # mscorlib.dll aot compilation crashes
1524    mono_feature_disable_com='yes'
1526    AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1527    AOT_RUN_FLAGS="--full-aot-interp"
1528 elif test x$with_runtime_preset = xaot; then
1529    with_profile4_x_default=yes
1531    AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1532    AOT_RUN_FLAGS=""
1534    DISABLE_MCS_DOCS_default=yes
1535 elif test x$with_runtime_preset = xaot_llvm; then
1536    with_profile4_x_default=yes
1538    AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1539    AOT_RUN_FLAGS=""
1541    DISABLE_MCS_DOCS_default=yes
1542 elif test x$with_runtime_preset = xwinaot; then
1543    DISABLE_MCS_DOCS_default=yes
1544    with_winaot_default=yes
1545    TEST_PROFILE=winaot
1547    mono_feature_disable_com='yes'
1548    mono_feature_disable_remoting='yes'
1549    mono_feature_disable_reflection_emit_save='yes'
1550    mono_feature_disable_reflection_emit='yes'
1551    mono_feature_disable_appdomains='yes'
1553    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1554    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1555    AOT_MODE="full"
1556 elif test x$with_runtime_preset = xwinaotinterp; then
1557    DISABLE_MCS_DOCS_default=yes
1558    with_testing_winaot_interp_default=yes
1559    TEST_PROFILE=testing_winaot_interp
1561    mono_feature_disable_com='yes'
1562    mono_feature_disable_remoting='yes'
1563    mono_feature_disable_appdomains='yes'
1565    AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1566    AOT_RUN_FLAGS="--full-aot-interp"
1567 elif test x$with_runtime_preset = xwinaotinterp_llvm; then
1568    DISABLE_MCS_DOCS_default=yes
1569    with_testing_winaot_interp_default=yes
1570    TEST_PROFILE=testing_winaot_interp
1572    mono_feature_disable_com='yes'
1573    mono_feature_disable_remoting='yes'
1574    mono_feature_disable_appdomains='yes'
1576    INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1577    AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1578    AOT_RUN_FLAGS="--full-aot-interp"
1579 elif test x$with_runtime_preset = xwinaot_llvm; then
1580    DISABLE_MCS_DOCS_default=yes
1581    with_winaot_default=yes
1582    TEST_PROFILE=winaot
1584    mono_feature_disable_com='yes'
1585    mono_feature_disable_remoting='yes'
1586    mono_feature_disable_reflection_emit_save='yes'
1587    mono_feature_disable_reflection_emit='yes'
1588    mono_feature_disable_appdomains='yes'
1590    INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1591    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1592    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1593    AOT_MODE="full"
1594 elif test x$with_runtime_preset = xorbis; then
1595    DISABLE_MCS_DOCS_default=yes
1596    with_orbis_default=yes
1597    TEST_PROFILE=orbis
1599    mono_feature_disable_com='yes'
1600    mono_feature_disable_remoting='yes'
1601    mono_feature_disable_reflection_emit_save='yes'
1602    mono_feature_disable_reflection_emit='yes'
1603    mono_feature_disable_appdomains='yes'
1605    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1606    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1607    AOT_MODE="full"
1608 elif test x$with_runtime_preset = xunreal; then
1609    DISABLE_MCS_DOCS_default=yes
1610    with_unreal_default=yes
1611    TEST_PROFILE=unreal
1613    mono_feature_disable_com='yes'
1614    mono_feature_disable_remoting='yes'
1615    mono_feature_disable_appdomains='no'
1617    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1618    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1619 elif test x$with_runtime_preset = xwasm; then
1620    DISABLE_MCS_DOCS_default=yes
1621    with_wasm_default=yes
1622    TEST_PROFILE=wasm
1624    mono_feature_disable_com='yes'
1625    mono_feature_disable_remoting='yes'
1626    mono_feature_disable_reflection_emit_save='yes'
1627    mono_feature_disable_reflection_emit='yes'
1628    mono_feature_disable_appdomains='yes'
1630    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1631    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1632 else
1633    TEST_PROFILE=net_4_x
1634    with_profile4_x_default=yes
1637 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1638    AC_SUBST(AOT_BUILD_FLAGS)
1639    AC_SUBST(AOT_RUN_FLAGS)
1640    # For llvmonlycheck + fullaotcheck
1641    AC_SUBST(INVARIANT_AOT_OPTIONS)
1644 AC_SUBST(TEST_PROFILE)
1646 if test "x$with_profile4_x" = "xdefault"; then
1647    with_profile4_x=$with_profile4_x_default
1649 if test "x$with_monodroid" = "xdefault"; then
1650    with_monodroid=$with_monodroid_default
1652 if test "x$with_monotouch" = "xdefault"; then
1653    with_monotouch=$with_monotouch_default
1655 if test "x$with_monotouch_watch" = "xdefault"; then
1656    with_monotouch_watch=$with_monotouch_watch_default
1658 if test "x$with_monotouch_tv" = "xdefault"; then
1659    with_monotouch_tv=$with_monotouch_tv_default
1661 if test "x$with_bitcode" = "xdefault"; then
1662    with_bitcode=$with_bitcode_default
1664 if test "x$with_xammac" = "xdefault"; then
1665    with_xammac=$with_xammac_default
1667 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1668    with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1670 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1671    with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1673 if test "x$with_testing_aot_full" = "xdefault"; then
1674    with_testing_aot_full=$with_testing_aot_full_default
1676 if test "x$with_winaot" = "xdefault"; then
1677    with_winaot=$with_winaot_default
1679 if test "x$with_testing_winaot_interp" = "xdefault"; then
1680    with_testing_winaot_interp=$with_testing_winaot_interp_default
1682 if test "x$with_orbis" = "xdefault"; then
1683    with_orbis=$with_orbis_default
1685 if test "x$with_unreal" = "xdefault"; then
1686    with_unreal=$with_unreal_default
1688 if test "x$with_wasm" = "xdefault"; then
1689    with_wasm=$with_wasm_default
1693 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1694 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1695 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1696 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1697 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1698 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1699 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1700 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1701 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1702 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1703 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1704 AM_CONDITIONAL(INSTALL_TESTING_WINAOT_INTERP, [test "x$with_testing_winaot_interp" != "xno"])
1705 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1706 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1707 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1708 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1710 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1711 AM_CONDITIONAL(FULL_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full"] || [test "x$TEST_PROFILE" = "xtesting_aot_bitcode"] || [test "x$TEST_PROFILE" = "xwinaot"] || [test "x$TEST_PROFILE" = "xorbis"] || [test "x$TEST_PROFILE" = "xwasm"])
1712 AM_CONDITIONAL(FULL_AOT_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"] || [test "x$TEST_PROFILE" = "xtesting_aot_bitcode_interp"] || [test "x$TEST_PROFILE" = "xtesting_winaot_interp"])
1713 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1715 default_profile=net_4_x
1716 if test -z "$INSTALL_MONODROID_TRUE"; then :
1717    default_profile=monodroid
1719 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1720    default_profile=monotouch
1722 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1723    default_profile=xammac
1725 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1726    default_profile=testing_aot_full_interp
1728 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1729    default_profile=testing_aot_hybrid
1731 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1732    default_profile=testing_aot_full
1734 if test -z "$INSTALL_WINAOT_TRUE"; then :
1735    default_profile=winaot
1737 if test -z "$INSTALL_TESTING_WINAOT_INTERP_TRUE"; then :
1738    default_profile=testing_winaot_interp
1740 if test -z "$INSTALL_ORBIS_TRUE"; then :
1741    default_profile=orbis
1743 if test -z "$INSTALL_UNREAL_TRUE"; then :
1744    default_profile=unreal
1746 if test -z "$INSTALL_WASM_TRUE"; then :
1747    default_profile=wasm
1749 if test -z "$INSTALL_4_x_TRUE"; then :
1750    default_profile=net_4_x
1752 DEFAULT_PROFILE=$default_profile
1753 AC_SUBST(DEFAULT_PROFILE)
1756 # End build profile configuration
1759 if test x$USE_NLS = xprofile_default; then
1761         AC_MSG_CHECKING([NLS used])
1763         # We make the default value for USE_NLS
1764         # "no" on OSX because it isn't available on most
1765         # default OSX installs. The most common configurations will
1766         # all disable it, so this saves us typing.
1767         if test x$host_darwin = xyes; then
1768                 USE_NLS=no;
1769         else
1770                 USE_NLS=yes;
1771         fi
1773         AC_SUBST([USE_NLS])
1774         AC_MSG_RESULT([$USE_NLS])
1777 AC_ARG_ENABLE(static-gcc-libs, [  --enable-static-gcc-libs      Statically link GCC support libs (for MinGW32)])
1778 if test "x$enable_static_gcc_libs" = "xyes"; then
1779         # llvm/build.mk doesn't use automake, so make a regular make variable for it.
1780         AC_SUBST(STATIC_GCC_LIBS,1)
1782 AM_CONDITIONAL(ENABLE_STATIC_GCC_LIBS, test "x$enable_static_gcc_libs" = "xyes")
1784 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
1785      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, dllmap,
1786      reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1787          security, lldb, mdb, assert_messages, config, cfgdir_config, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers, sockets, gac, threads, processes.],
1789         for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1790                 eval "mono_feature_disable_$feature='yes'"
1791         done
1792         DISABLED_FEATURES=$enable_minimal
1793         disabled="Disabled:      $enable_minimal"
1794 ],[])
1796 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1798 if test "x$mono_feature_disable_aot" = "xyes"; then
1799         AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1800         enable_system_aot=no
1801         AC_MSG_NOTICE([Disabled AOT compiler])
1804 if test "x$mono_feature_disable_profiler" = "xyes"; then
1805         AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1806         AC_MSG_NOTICE([Disabled support for the profiler])
1808 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1810 if test "x$mono_feature_disable_decimal" = "xyes"; then
1811         AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1812         AC_MSG_NOTICE([Disabled support for decimal])
1815 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1816         AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1817         AC_MSG_NOTICE([Disabled support for P/Invoke])
1820 if test "x$mono_feature_disable_debug" = "xyes"; then
1821         AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1822         AC_MSG_NOTICE([Disabled support for runtime debugging])
1825 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1826         AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1827         mono_feature_disable_reflection_emit_save=yes
1828         AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1831 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1832         AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1833         AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1836 if test "x$mono_feature_disable_large_code" = "xyes"; then
1837         AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1838         AC_MSG_NOTICE([Disabled support for large assemblies])
1841 if test "x$mono_feature_disable_logging" = "xyes"; then
1842         AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1843         AC_MSG_NOTICE([Disabled support for logging])
1846 if test "x$mono_feature_disable_com" = "xyes"; then
1847         AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1848         AC_MSG_NOTICE([Disabled COM support])
1851 if test "x$mono_feature_disable_ssa" = "xyes"; then
1852         AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1853         AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1856 if test "x$mono_feature_disable_generics" = "xyes"; then
1857         AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1858         AC_MSG_NOTICE([Disabled Generics Support])
1861 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1862         AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1863         AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1866 if test "x$mono_feature_disable_portability" = "xyes"; then
1867         AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1868         AC_MSG_NOTICE([Disabled IO Portability layer])
1871 if test "x$mono_feature_disable_attach" = "xyes"; then
1872         AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1873         AC_MSG_NOTICE([Disabled agent attach])
1876 if test "x$mono_feature_disable_verifier" = "xyes"; then
1877         AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1878         AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1881 if test "x$mono_feature_disable_jit" = "xyes"; then
1882         AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1883         AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1886 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1888 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1889         AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1890         AC_MSG_NOTICE([Disabled the interpreter])
1893 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1895 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1896         AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1899 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1901 if test "x$mono_feature_disable_simd" = "xyes"; then
1902         AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1903         AC_MSG_NOTICE([Disabled SIMD support])
1906 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1907         AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1908         AC_MSG_NOTICE([Disabled Soft Debugger.])
1911 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1913 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1914         AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1915         AC_MSG_NOTICE([Disabled Performance Counters.])
1917 if test "x$mono_feature_disable_normalization" = "xyes"; then
1918         AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1919         AC_MSG_NOTICE([Disabled String normalization support.])
1922 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1923 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1924         AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1925         AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1928 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1929         AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1930         AC_MSG_NOTICE([Disabled Shared perfcounters.])
1933 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1934         AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1935         AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1938 if test "x$mono_feature_disable_remoting" = "xyes"; then
1939         AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1940         AC_MSG_NOTICE([Disabled remoting])
1943 if test "x$mono_feature_disable_security" = "xyes"; then
1944         AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1945         AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1948 if test "x$mono_feature_disable_lldb" = "xyes"; then
1949         AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1950         AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1953 if test "x$mono_feature_disable_mdb" = "xyes"; then
1954         AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1955         AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1958 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1959         AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1960         AC_MSG_NOTICE([Disabled assertion messages.])
1963 if test "x$mono_feature_disable_cfgdir_config" = "xyes"; then
1964         AC_DEFINE(DISABLE_CFGDIR_CONFIG, 1, [Disable config directories.])
1965         AC_MSG_NOTICE([Disabled config directories.])
1968 if test "x$mono_feature_disable_config" = "xyes"; then
1969         AC_DEFINE(DISABLE_CONFIG, 1, [Disable .config file support.])
1970         AC_MSG_NOTICE([Disabled .config file support.])
1973 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1974         AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1975         AC_MSG_NOTICE([Disabled runtime cleanup.])
1978 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1979         AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1980         AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1984 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1985         AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1986         AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1989 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1990         AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1991         AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1994 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1995         AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1996         AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1999 if test "x$mono_feature_disable_sockets" = "xyes"; then
2000         AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
2001         AC_MSG_NOTICE([Disabled sockets])
2004 if test "x$mono_feature_disable_gac" = "xyes"; then
2005         AC_DEFINE(DISABLE_GAC, 1, [Disable GAC])
2006         AC_MSG_NOTICE([Disabled GAC support])
2009 if test "x$mono_feature_disable_dllmap" = "xyes"; then
2010     AC_DEFINE(DISABLE_DLLMAP,1,[Disables use of DllMaps in MonoVM])
2011     AC_MSG_NOTICE([Disabled DllMap in the loader.])
2014 if test "x$mono_feature_disable_threads" = "xyes"; then
2015         AC_DEFINE(DISABLE_THREADS, 1, [Disable Threads])
2016         AC_MSG_NOTICE([Disabled threading support])
2019 if test "x$mono_feature_disable_processes" = "xyes"; then
2020         AC_DEFINE(DISABLE_PROCESSES, 1, [Disable process support])
2021         AC_MSG_NOTICE([Disabled process support])
2024 AC_ARG_ENABLE(executables, [  --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
2025 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
2027 has_extension_module=no
2028 AC_ARG_ENABLE(extension-module, [  --enable-extension-module=LIST enable the core-extensions from LIST],
2030         for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
2031                 if test x$extension = xdefault ; then
2032                         has_extension_module=yes;
2033                 fi
2034         done
2035         if test x$enable_extension_module = xyes; then
2036                 has_extension_module=yes;
2037         fi
2038 ], [])
2040 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
2042 if test x$has_extension_module != xno ; then
2043         AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
2044         AC_MSG_NOTICE([Enabling mono extension module.])
2047 # Deprecated
2048 AC_ARG_ENABLE(gsharedvt, [  --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
2050 AC_MSG_CHECKING(for visibility __attribute__)
2051 AC_COMPILE_IFELSE([
2052         AC_LANG_SOURCE([[
2053                 void __attribute__ ((visibility ("hidden"))) doit (void) {}
2054                 int main () { doit (); return 0; }
2055         ]])
2056 ], [
2057    have_visibility_hidden=yes
2058    AC_MSG_RESULT(yes)
2059 ], [
2060    have_visibility_hidden=no
2061    AC_MSG_RESULT(no)
2065 dnl Boehm GC configuration
2068 AC_ARG_WITH(libgc,   [  --with-libgc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
2070 AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
2071 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
2073 if test "x$support_boehm" = "xyes"; then
2075         AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
2076         if test x$enable_parallel_mark = xyes; then
2077                 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
2078         fi
2080         gc_msg=""
2081         LIBGC_CPPFLAGS=
2082         LIBGC_LIBS=
2083         LIBGC_STATIC_LIBS=
2084         case "x$libgc" in
2085                 xincluded)
2086                         LIBGC_CPPFLAGS='-I$(top_srcdir)/external/bdwgc/include -I$(top_srcdir)/external/bdwgc/libatomic_ops/src'
2087                         LIBGC_LIBS='$(top_builddir)/external/bdwgc/libgc.la'
2088                         LIBGC_STATIC_LIBS='$(top_builddir)/external/bdwgc/libgc-static.la'
2090                         BOEHM_DEFINES="-DHAVE_BOEHM_GC -DGC_THREADS"
2092                         if test x$target_win32 = xyes; then
2093                                 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
2094                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
2095                         fi
2097                         gc_msg="Included Boehm GC with typed GC"
2098                         if test x$enable_parallel_mark = xyes; then
2099                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
2100                                 gc_msg="$gc_msg and parallel mark"
2101                         else
2102                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
2103                         fi
2104                         ;;
2106                 xboehm|xbohem|xyes)
2107                         AC_MSG_WARN("External Boehm is no longer supported")
2108                         ;;
2110                 xsgen)
2111                         AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
2112                         ;;
2114                 xnone)
2115                         AC_MSG_WARN("Compiling mono without GC.")
2116                         AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
2117                         AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
2118                         gc_msg="none"
2119                         ;;
2120                 *)
2121                         AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
2122                         ;;
2123         esac
2125         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])
2126         if test "x$large_heap" = "xyes"; then
2127            CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
2128         fi
2130         AC_SUBST(LIBGC_CPPFLAGS)
2131         AC_SUBST(LIBGC_LIBS)
2132         AC_SUBST(LIBGC_STATIC_LIBS)
2133         AC_SUBST(BOEHM_DEFINES)
2136 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
2139 dnl End of Boehm GC Configuration
2142 dnl *************************************
2143 dnl *** Checks for zero length arrays ***
2144 dnl *************************************
2145 AC_MSG_CHECKING(whether $CC supports zero length arrays)
2146 AC_TRY_COMPILE([
2147         struct s {
2148                 int  length;
2149                 char data [0];
2150         };
2151 ], [], [
2152         AC_MSG_RESULT(yes)
2153         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
2154 ], [
2155         AC_MSG_RESULT(no)
2156         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
2159 dnl ***********************************
2160 dnl *** Checks for signals
2161 dnl ***********************************
2162 AC_CHECK_HEADERS(signal.h)
2163 AC_CHECK_FUNCS(sigaction)
2164 AC_CHECK_FUNCS(kill)
2165 AC_CHECK_FUNCS(signal)
2167 # signal() is declared inline in Android headers
2168 # so we need to workaround it by overriding the check.
2169 if test x$platform_android = xyes; then
2170         AC_DEFINE(HAVE_SIGNAL,1)
2173 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
2174 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
2176 if test x$host_win32 = xno; then
2177         dnl *************************************
2178         dnl *** Checks for time capabilities ***
2179         dnl *************************************
2181         AC_MSG_CHECKING(for CLOCK_MONOTONIC)
2182         AC_TRY_COMPILE([#include <time.h>], [
2183                 const int foo = CLOCK_MONOTONIC;
2184         ],[
2185                 AC_MSG_RESULT(yes)
2186                 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
2187         ], [
2188                 AC_MSG_RESULT(no)
2189         ])
2191         AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
2192         AC_TRY_COMPILE([#include <time.h>], [
2193                 const int foo = CLOCK_MONOTONIC_COARSE;
2194         ],[
2195                 AC_MSG_RESULT(yes)
2196                 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
2197         ], [
2198                 AC_MSG_RESULT(no)
2199         ])
2201         AC_MSG_CHECKING(for CLOCK_REALTIME)
2202         AC_TRY_COMPILE([#include <time.h>], [
2203                 const int foo = CLOCK_REALTIME;
2204         ],[
2205                 AC_MSG_RESULT(yes)
2206                 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
2207         ], [
2208                 AC_MSG_RESULT(no)
2209         ])
2211         AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
2212         AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
2213         AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
2214         AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
2215         AC_CHECK_FUNC(futimes,            [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
2216         AC_CHECK_FUNC(futimens,           [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
2218         AC_CHECK_TYPES([clockid_t], [AC_DEFINE(HAVE_CLOCKID_T)], [],
2219                 [#include <sys/types.h>])
2221         dnl hires monotonic clock support
2222         AC_SEARCH_LIBS(clock_gettime, rt)
2223         AC_CHECK_FUNCS(clock_nanosleep)
2225         dnl dynamic loader support
2226         AC_CHECK_FUNC(dlopen, DL_LIB="",
2227                 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
2228         )
2229         if test x$dl_support = xno; then
2230                 AC_MSG_WARN([No dynamic loading support available])
2231         else
2232                 LIBS="$LIBS $DL_LIB"
2233                 dnl from glib's configure.ac
2234                 if test "x$cross_compiling" = "xyes"; then
2235                    AC_MSG_RESULT(cross compiling, assuming no)
2236                    mono_cv_uscore=no
2237                 else
2238                         AC_CACHE_CHECK([for preceeding underscore in symbols],
2239                           mono_cv_uscore,[
2240                           AC_TRY_RUN([#include <dlfcn.h>
2241                           int mono_underscore_test (void) { return 42; }
2242                           int main() {
2243                             void *f1 = (void*)0, *f2 = (void*)0, *handle;
2244                             handle = dlopen ((void*)0, 0);
2245                             if (handle) {
2246                               f1 = dlsym (handle, "mono_underscore_test");
2247                               f2 = dlsym (handle, "_mono_underscore_test");
2248                             } return (!f2 || f1);
2249                           }],
2250                                 [mono_cv_uscore=yes],
2251                                 [mono_cv_uscore=no],
2252                           [])
2253                   ])
2254                 fi
2255                 if test "x$mono_cv_uscore" = "xyes"; then
2256                         AC_DEFINE(MONO_DL_NEED_USCORE, 1, [Does dlsym require leading underscore.])
2257                 fi
2258                 AC_CHECK_FUNC(dlerror)
2259         fi
2261         dnl ******************************************************************
2262         dnl *** Checks for the IKVM JNI interface library                  ***
2263         dnl ******************************************************************
2264         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])
2266         if test x$with_ikvm_native = xyes; then
2267                 jdk_headers_found="IKVM Native"
2268         fi
2270         AC_CHECK_HEADERS(execinfo.h)
2272         AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2274         AC_CHECK_FUNCS(getgrgid_r)
2275         AC_CHECK_FUNCS(getgrnam_r)
2276         AC_CHECK_FUNCS(getresuid)
2277         AC_CHECK_FUNCS(setresuid)
2278         AC_CHECK_FUNCS(kqueue)
2279         # IBM provides a compatibility library for offering this function.
2280         # BSDs and others, have execinfo in base or packages.
2281         AC_SEARCH_LIBS(backtrace_symbols, execinfo util)
2282         # Two-step so it sets it in config.h
2283         AC_CHECK_FUNCS(backtrace_symbols)
2284         AC_CHECK_FUNCS(mkstemp)
2285         AC_CHECK_FUNCS(mmap)
2286         AC_CHECK_FUNCS(getrusage)
2287         AC_CHECK_FUNCS(getpriority)
2288         AC_CHECK_FUNCS(setpriority)
2289         AC_CHECK_FUNCS(dl_iterate_phdr)
2290         AC_CHECK_FUNCS(dladdr)
2291         AC_CHECK_FUNCS(sysconf)
2292         AC_CHECK_FUNCS(getrlimit)
2293         AC_CHECK_FUNCS(prctl)
2294         AC_CHECK_FUNCS(arc4random)
2295         AC_CHECK_FUNCS(nl_langinfo)
2297         AC_CHECK_FUNCS(sched_getaffinity)
2298         AC_CHECK_FUNCS(sched_setaffinity)
2299         AC_CHECK_FUNCS(sched_getcpu)
2301         if test x$platform_android != xyes; then
2302                 AC_CHECK_FUNCS(getpwnam_r)
2303                 AC_CHECK_FUNCS(getpwuid_r)
2304         fi
2306         AC_CHECK_FUNCS(readlink)
2307         AC_CHECK_FUNCS(chmod)
2308         AC_CHECK_FUNCS(lstat)
2309         AC_CHECK_FUNCS(getdtablesize)
2311         AC_CHECK_FUNCS(ftruncate)
2312         AC_CHECK_FUNCS(msync)
2314         AC_CHECK_FUNCS(gethostname getpeername)
2315         AC_CHECK_FUNCS(utime utimes)
2317         AC_CHECK_FUNCS(openlog closelog)
2318         AC_CHECK_FUNCS(atexit)
2319         AC_CHECK_FUNCS(popen)
2321         AC_FUNC_STRERROR_R()
2323         dnl ****************************************************************
2324         dnl *** Check for sched_setaffinity from glibc versions before   ***
2325         dnl *** 2.3.4. The older versions of the function only take 2    ***
2326         dnl *** parameters, not 3.                                       ***
2327         dnl ***                                                          ***
2328         dnl *** Because the interface change was not made in a minor     ***
2329         dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros    ***
2330         dnl *** won't always indicate the interface sched_affinity has.  ***
2331         dnl ****************************************************************
2332         AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2333         AC_TRY_COMPILE([#include <sched.h>], [
2334             int mask = 1; 
2335             sched_setaffinity(0, &mask);
2336         ], [
2337                 # Yes, we have it...
2338                 AC_MSG_RESULT(yes)
2339                 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2340         ], [
2341                 # We have the new, three-parameter version
2342                 AC_MSG_RESULT(no)
2343         ])
2344         AC_TRY_COMPILE([#include <sched.h>], [
2345              CPU_COUNT((void *) 0);
2346         ], [
2347                 AC_MSG_RESULT(yes)
2348                 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2349         ], [
2350                 # We have the new, three-parameter version
2351                 AC_MSG_RESULT(no)
2352         ])
2354         dnl ******************************************************************
2355         dnl *** Check for large file support                               ***
2356         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2357         dnl ******************************************************************
2358         
2359         # Check that off_t can represent 2**63 - 1 correctly, working around
2360         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
2361         # CPPFLAGS and sets $large_offt to yes if the test succeeds
2362         large_offt=no
2363         AC_DEFUN([LARGE_FILES], [
2364                 large_CPPFLAGS=$CPPFLAGS
2365                 CPPFLAGS="$CPPFLAGS $1"
2366                 AC_TRY_COMPILE([
2367                         #include <sys/types.h>
2368                         #include <limits.h>
2369                 ], [
2370                         /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2371                         #define COMPILE_TIME_ASSERT(pred) \
2372                                 switch(0){case 0:case pred:;}
2373                         COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2374                 ], [
2375                         AC_MSG_RESULT(ok)
2376                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2377                         large_CPPFLAGS="$large_CPPFLAGS $1"
2378                         large_offt=yes
2379                 ], [
2380                         AC_MSG_RESULT(no)
2381                 ])
2382                 CPPFLAGS=$large_CPPFLAGS
2383         ])
2385         AC_MSG_CHECKING(if off_t is 64 bits wide)
2386         LARGE_FILES("")
2387         if test $large_offt = no; then
2388                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2389                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2390         fi
2391         if test $large_offt = no; then
2392                 AC_MSG_WARN([No 64 bit file size support available])
2393         fi
2394         
2395         dnl *****************************
2396         dnl *** Checks for libsocket  ***
2397         dnl *****************************
2398         AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2400         dnl *****************************
2401         dnl *** Checks for IPPROTO_IP ***
2402         dnl *****************************
2403         AC_MSG_CHECKING(for IPPROTO_IP)
2404         AC_TRY_COMPILE([#include <netinet/in.h>], [
2405                 int level = IPPROTO_IP;
2406         ], [
2407                 # Yes, we have it...
2408                 AC_MSG_RESULT(yes)
2409                 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2410         ], [
2411                 # We'll have to use getprotobyname
2412                 AC_MSG_RESULT(no)
2413         ])
2415         dnl *******************************
2416         dnl *** Checks for IPPROTO_IPV6 ***
2417         dnl *******************************
2418         AC_MSG_CHECKING(for IPPROTO_IPV6)
2419         AC_TRY_COMPILE([#include <netinet/in.h>], [
2420                 int level = IPPROTO_IPV6;
2421         ], [
2422                 # Yes, we have it...
2423                 AC_MSG_RESULT(yes)
2424                 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2425         ], [
2426                 # We'll have to use getprotobyname
2427                 AC_MSG_RESULT(no)
2428         ])
2430         dnl ******************************
2431         dnl *** Checks for IPPROTO_TCP ***
2432         dnl ******************************
2433         AC_MSG_CHECKING(for IPPROTO_TCP)
2434         AC_TRY_COMPILE([#include <netinet/in.h>], [
2435                 int level = IPPROTO_TCP;
2436         ], [
2437                 # Yes, we have it...
2438                 AC_MSG_RESULT(yes)
2439                 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2440         ], [
2441                 # We'll have to use getprotobyname
2442                 AC_MSG_RESULT(no)
2443         ])
2445         dnl *****************************
2446         dnl *** Checks for SOL_IP     ***
2447         dnl *****************************
2448         AC_MSG_CHECKING(for SOL_IP)
2449         AC_TRY_COMPILE([#include <netdb.h>], [
2450                 int level = SOL_IP;
2451         ], [
2452                 # Yes, we have it...
2453                 AC_MSG_RESULT(yes)
2454                 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2455         ], [
2456                 # We'll have to use getprotobyname
2457                 AC_MSG_RESULT(no)
2458         ])
2460         dnl *****************************
2461         dnl *** Checks for SOL_IPV6     ***
2462         dnl *****************************
2463         AC_MSG_CHECKING(for SOL_IPV6)
2464         AC_TRY_COMPILE([#include <netdb.h>], [
2465                 int level = SOL_IPV6;
2466         ], [
2467                 # Yes, we have it...
2468                 AC_MSG_RESULT(yes)
2469                 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2470         ], [
2471                 # We'll have to use getprotobyname
2472                 AC_MSG_RESULT(no)
2473         ])
2475         dnl *****************************
2476         dnl *** Checks for SOL_TCP    ***
2477         dnl *****************************
2478         AC_MSG_CHECKING(for SOL_TCP)
2479         AC_TRY_COMPILE([#include <netdb.h>], [
2480                 int level = SOL_TCP;
2481         ], [
2482                 # Yes, we have it...
2483                 AC_MSG_RESULT(yes)
2484                 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2485         ], [
2486                 # We'll have to use getprotobyname
2487                 AC_MSG_RESULT(no)
2488         ])
2490         dnl *****************************
2491         dnl *** Checks for IP_PKTINFO ***
2492         dnl *****************************
2493         AC_MSG_CHECKING(for IP_PKTINFO)
2494         AC_TRY_COMPILE([#include <linux/in.h>], [
2495                 int level = IP_PKTINFO;
2496         ], [
2497                 # Yes, we have it...
2498                 AC_MSG_RESULT(yes)
2499                 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2500         ], [
2501                 AC_MSG_RESULT(no)
2502         ])
2504         dnl *****************************
2505         dnl *** Checks for IPV6_PKTINFO ***
2506         dnl *****************************
2507         AC_MSG_CHECKING(for IPV6_PKTINFO)
2508         AC_TRY_COMPILE([#include <netdb.h>], [
2509                 int level = IPV6_PKTINFO;
2510         ], [
2511                 # Yes, we have it...
2512                 AC_MSG_RESULT(yes)
2513                 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2514         ], [
2515                 AC_MSG_RESULT(no)
2516         ])
2518         dnl **********************************
2519         dnl *** Checks for IP_DONTFRAG     ***
2520         dnl **********************************
2521         AC_MSG_CHECKING(for IP_DONTFRAG)
2522         AC_TRY_COMPILE([#include <netinet/in.h>], [
2523                 int level = IP_DONTFRAG;
2524         ], [
2525                 # Yes, we have it...
2526                 AC_MSG_RESULT(yes)
2527                 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2528         ], [
2529                 AC_MSG_RESULT(no)
2530         ])
2532         dnl **********************************
2533         dnl *** Checks for IP_DONTFRAGMENT ***
2534         dnl **********************************
2535         AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2536         AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2537                 int level = IP_DONTFRAGMENT;
2538         ], [
2539                 # Yes, we have it...
2540                 AC_MSG_RESULT(yes)
2541                 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2542         ], [
2543                 AC_MSG_RESULT(no)
2544         ])
2546         dnl **********************************
2547         dnl *** Checks for IP_MTU_DISCOVER ***
2548         dnl **********************************
2549         AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2550         AC_TRY_COMPILE([#include <linux/in.h>], [
2551                 int level = IP_MTU_DISCOVER;
2552         ], [
2553                 # Yes, we have it...
2554                 AC_MSG_RESULT(yes)
2555                 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2556         ], [
2557                 AC_MSG_RESULT(no)
2558         ])
2560         dnl **********************************
2561         dnl *** Checks for  IP_PMTUDISC_DO ***
2562         dnl **********************************
2563         AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2564         AC_TRY_COMPILE([#include <linux/in.h>], [
2565                 int level = IP_PMTUDISC_DO;
2566         ], [
2567                 # Yes, we have it...
2568                 AC_MSG_RESULT(yes)
2569                 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2570         ], [
2571                 AC_MSG_RESULT(no)
2572         ])
2574         dnl *********************************
2575         dnl *** Check for struct ip_mreqn ***
2576         dnl *********************************
2577         AC_MSG_CHECKING(for struct ip_mreqn)
2578         AC_TRY_COMPILE([#include <netinet/in.h>], [
2579                 struct ip_mreqn mreq;
2580                 mreq.imr_address.s_addr = 0;
2581         ], [
2582                 # Yes, we have it...
2583                 AC_MSG_RESULT(yes)
2584                 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2585         ], [
2586                 # We'll just have to try and use struct ip_mreq
2587                 AC_MSG_RESULT(no)
2588                 AC_MSG_CHECKING(for struct ip_mreq)
2589                 AC_TRY_COMPILE([#include <netinet/in.h>], [
2590                         struct ip_mreq mreq;
2591                         mreq.imr_interface.s_addr = 0;
2592                 ], [
2593                         # Yes, we have it...
2594                         AC_MSG_RESULT(yes)
2595                         AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2596                 ], [
2597                         # No multicast support
2598                         AC_MSG_RESULT(no)
2599                 ])
2600         ])
2601         
2602         dnl **********************************
2603         dnl *** Check for getaddrinfo ***
2604         dnl **********************************
2605         AC_MSG_CHECKING(for getaddrinfo)
2606                 AC_TRY_LINK([
2607                 #include <stdio.h>
2608                 #include <netdb.h>
2609         ], [
2610                 getaddrinfo(NULL,NULL,NULL,NULL);
2611         ], [
2612                 # Yes, we have it...
2613                 AC_MSG_RESULT(yes)
2614                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2615         ], [
2616                 AC_MSG_RESULT(no)
2617         ])
2619         dnl **********************************
2620         dnl *** Check for gethostbyname2_r ***
2621         dnl **********************************
2622         AC_MSG_CHECKING(for gethostbyname2_r)
2623                 AC_TRY_LINK([
2624                 #include <stdio.h>
2625                 #include <netdb.h>
2626         ], [
2628                 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2629         ], [
2630                 # Yes, we have it...
2631                 AC_MSG_RESULT(yes)
2632                 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2633         ], [
2634                 AC_MSG_RESULT(no)
2635         ])
2637         dnl **********************************
2638         dnl *** Check for gethostbyname2 ***
2639         dnl **********************************
2640         AC_MSG_CHECKING(for gethostbyname2)
2641                 AC_TRY_LINK([
2642                 #include <stdio.h>
2643                 #include <netdb.h>
2644         ], [
2645                 gethostbyname2(NULL,0);
2646         ], [
2647                 # Yes, we have it...
2648                 AC_MSG_RESULT(yes)
2649                 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2650         ], [
2651                 AC_MSG_RESULT(no)
2652         ])
2654         dnl **********************************
2655         dnl *** Check for gethostbyname ***
2656         dnl **********************************
2657         AC_MSG_CHECKING(for gethostbyname)
2658                 AC_TRY_LINK([
2659                 #include <stdio.h>
2660                 #include <netdb.h>
2661         ], [
2662                 gethostbyname(NULL);
2663         ], [
2664                 # Yes, we have it...
2665                 AC_MSG_RESULT(yes)
2666                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2667         ], [
2668                 AC_MSG_RESULT(no)
2669         ])
2671         dnl **********************************
2672         dnl *** Check for getprotobyname ***
2673         dnl **********************************
2674         AC_MSG_CHECKING(for getprotobyname)
2675                 AC_TRY_LINK([
2676                 #include <stdio.h>
2677                 #include <netdb.h>
2678         ], [
2679                 getprotobyname(NULL);
2680         ], [
2681                 # Yes, we have it...
2682                 AC_MSG_RESULT(yes)
2683                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2684         ], [
2685                 AC_MSG_RESULT(no)
2686         ])
2688         dnl **********************************
2689         dnl *** Check for getprotobyname_r ***
2690         dnl **********************************
2691         AC_MSG_CHECKING(for getprotobyname_r)
2692                 AC_TRY_LINK([
2693                 #include <stdio.h>
2694                 #include <netdb.h>
2695         ], [
2696                 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2697         ], [
2698                 # Yes, we have it...
2699                 AC_MSG_RESULT(yes)
2700                 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2701         ], [
2702                 AC_MSG_RESULT(no)
2703         ])
2705         dnl **********************************
2706         dnl *** Check for getnameinfo ***
2707         dnl **********************************
2708         AC_MSG_CHECKING(for getnameinfo)
2709                 AC_TRY_LINK([
2710                 #include <stdio.h>
2711                 #include <netdb.h>
2712         ], [
2713                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2714         ], [
2715                 # Yes, we have it...
2716                 AC_MSG_RESULT(yes)
2717                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2718         ], [
2719                 AC_MSG_RESULT(no)
2720         ])
2723         dnl **********************************
2724         dnl *** Check for inet_ntop ***
2725         dnl **********************************
2726         AC_MSG_CHECKING(for inet_ntop)
2727                 AC_TRY_LINK([
2728                 #include <stdio.h>
2729                 #include <arpa/inet.h>
2730         ], [
2731                 inet_ntop (0, NULL, NULL, 0);
2732         ], [
2733                 # Yes, we have it...
2734                 AC_MSG_RESULT(yes)
2735                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2736         ], [
2737                 AC_MSG_RESULT(no)
2738         ])
2740         dnl *****************************
2741         dnl *** Checks for libnsl     ***
2742         dnl *****************************
2743         AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2745         AC_CHECK_FUNCS(inet_pton inet_aton)
2747         dnl *****************************
2748         dnl *** Checks for libxnet    ***
2749         dnl *****************************
2750         case "${host}" in
2751                 *solaris*)
2752                         AC_MSG_CHECKING(for Solaris XPG4 support)
2753                         if test -f /usr/lib/libxnet.so; then
2754                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2755                                 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2756                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2757                                 LIBS="$LIBS -lxnet"
2758                                 AC_MSG_RESULT(yes)
2759                         else
2760                                 AC_MSG_RESULT(no)
2761                         fi
2763                         if test "$GCC" = "yes"; then
2764                                 CFLAGS="$CFLAGS -Wno-char-subscripts"
2765                         fi
2766                 ;;
2767         esac
2769         dnl *****************************
2770         dnl *** Checks for libpthread ***
2771         dnl *****************************
2772 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2773 # and libpthread does not exist
2775         case "${host}" in
2776                 *-*-*haiku*)
2777                         dnl Haiku has pthread in libroot (libc equiv)
2778                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2779                 ;;
2780                 *-*-*freebsd*)
2781                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2782                 ;;
2783                 *-*-*openbsd*)
2784                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2785                 ;;
2786                 *)
2787                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2788                 ;;
2789         esac
2790         AC_CHECK_HEADERS(pthread.h)
2791         AC_CHECK_HEADERS(pthread_np.h)
2792         AC_CHECK_FUNCS(pthread_mutex_timedlock)
2793         AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2794         AC_CHECK_FUNCS(pthread_kill)
2795         AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2796         AC_TRY_COMPILE([ #include <pthread.h>], [
2797                 pthread_mutexattr_t attr;
2798                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2799         ], [
2800                 AC_MSG_RESULT(ok)
2801         ], [
2802                 AC_MSG_RESULT(no)
2803                 AC_ERROR(Posix system lacks support for recursive mutexes)
2804         ])
2805         AC_CHECK_FUNCS(pthread_attr_setstacksize)
2806         AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2807         AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2808         dnl check that pthread_mutexattr_setprotocol is declared
2809         AC_CHECK_DECLS([pthread_mutexattr_setprotocol], [], [], [[#include <pthread.h>]])
2810         AC_CHECK_FUNCS(mincore mlock munlock)
2812         dnl ***********************************
2813         dnl *** Checks for working __thread ***
2814         dnl ***********************************
2815         AC_MSG_CHECKING(for working __thread)
2816         if test "x$with_tls" != "x__thread"; then
2817                 AC_MSG_RESULT(disabled)
2818         elif test "x$cross_compiling" = "xyes"; then
2819                 AC_MSG_RESULT(cross compiling, assuming yes)
2820         else
2821                 AC_TRY_RUN([
2822                         #if defined(__APPLE__) && defined(__clang__)
2823                         #error "__thread does not currently work with clang on Mac OS X"
2824                         #endif
2825                         
2826                         #include <unistd.h>
2827                         #include <pthread.h>
2828                         __thread int i;
2829                         static int res1, res2;
2831                         void thread_main (void *arg)
2832                         {
2833                                 i = arg;
2834                                 sleep (1);
2835                                 if (arg == 1)
2836                                         res1 = (i == arg);
2837                                 else
2838                                         res2 = (i == arg);
2839                         }
2841                         int main () {
2842                                 pthread_t t1, t2;
2844                                 i = 5;
2846                                 pthread_create (&t1, NULL, thread_main, 1);
2847                                 pthread_create (&t2, NULL, thread_main, 2);
2849                                 pthread_join (t1, NULL);
2850                                 pthread_join (t2, NULL);
2852                                 return !(res1 + res2 == 2);
2853                         }
2854                 ], [
2855                                 AC_MSG_RESULT(yes)
2856                 ], [
2857                                 AC_MSG_RESULT(no)
2858                                 with_tls=pthread
2859                 ])
2860         fi
2862         dnl **************************************
2863         dnl *** Checks for working sigaltstack ***
2864         dnl **************************************
2865         AC_MSG_CHECKING(for working sigaltstack)
2866         if test "x$with_sigaltstack" != "xyes"; then
2867                 AC_MSG_RESULT(disabled)
2868         elif test "x$cross_compiling" = "xyes"; then
2869                 AC_MSG_RESULT(cross compiling, assuming no)
2870                 with_sigaltstack=no
2871         else
2872                 AC_TRY_RUN([
2873                         #include <stdio.h>
2874                         #include <stdlib.h>
2875                         #include <unistd.h>
2876                         #include <signal.h>
2877                         #include <pthread.h>
2878                         #include <sys/wait.h>
2879                         #if defined(__FreeBSD__) || defined(__NetBSD__)
2880                         #define SA_STACK SA_ONSTACK
2881                         #endif
2882                         static void
2883                         sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2884                         {
2885                                 exit (0);
2886                         }
2888                         volatile char*__ptr = NULL;
2889                         static void *
2890                         loop (void *ignored)
2891                         {
2892                                 *__ptr = 0;
2893                                 return NULL;
2894                         }
2896                         static void
2897                         child ()
2898                         {
2899                                 struct sigaction sa;
2900                                 stack_t sas;
2901                                 pthread_t id;
2902                                 pthread_attr_t attr;
2904                                 sa.sa_sigaction = sigsegv_signal_handler;
2905                                 sigemptyset (&sa.sa_mask);
2906                                 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2907                                 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2908                                         perror ("sigaction");
2909                                         return;
2910                                 }
2912                                 /* x86 darwin deliver segfaults using SIGBUS */
2913                                 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2914                                         perror ("sigaction");
2915                                         return;
2916                                 }
2917                                 sas.ss_sp = malloc (SIGSTKSZ);
2918                                 sas.ss_size = SIGSTKSZ;
2919                                 sas.ss_flags = 0;
2920                                 if (sigaltstack (&sas, NULL) == -1) {
2921                                         perror ("sigaltstack");
2922                                         return;
2923                                 }
2925                                 pthread_attr_init (&attr);
2926                                 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2927                                         printf ("pthread_create\n");
2928                                         return;
2929                                 }
2931                                 sleep (100);
2932                         }
2934                         int
2935                         main ()
2936                         {
2937                                 pid_t son;
2938                                 int status;
2939                                 int i;
2941                                 son = fork ();
2942                                 if (son == -1) {
2943                                         return 1;
2944                                 }
2946                                 if (son == 0) {
2947                                         child ();
2948                                         return 0;
2949                                 }
2951                                 for (i = 0; i < 300; ++i) {
2952                                         waitpid (son, &status, WNOHANG);
2953                                         if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2954                                                 return 0;
2955                                         usleep (10000);
2956                                 }
2958                                 kill (son, SIGKILL);
2959                                 return 1;
2960                         }
2962                 ], [
2963                                 AC_MSG_RESULT(yes)
2964                                 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2965                 ], [
2966                                 with_sigaltstack=no
2967                                 AC_MSG_RESULT(no)
2968                 ])
2969         fi
2971         dnl ********************************
2972         dnl *** Checks for sys_signame ***
2973         dnl ********************************
2974         AC_MSG_CHECKING(for sys_signame)
2975                 AC_TRY_LINK([
2976                 #include <signal.h>
2977         ], [
2978                 const char *signame = sys_signame[0];
2979         ], [
2980                 # Yes, we have it...
2981                 AC_MSG_RESULT(yes)
2982                 AC_DEFINE(HAVE_SYSSIGNAME, 1, [Have sys_signame])
2983         ], [
2984                 AC_MSG_RESULT(no)
2985         ])
2988         dnl ********************************
2989         dnl *** Checks for semaphore lib ***
2990         dnl ********************************
2991         # 'Real Time' functions on Solaris
2992         # posix4 on Solaris 2.6
2993         # pthread (first!) on Linux
2994         AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
2996         AC_SEARCH_LIBS(shm_open, pthread rt posix4) 
2997         AC_CHECK_FUNCS(shm_open)
2999         dnl ********************************
3000         dnl *** Checks for timezone stuff **
3001         dnl ********************************
3002         AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
3003                 AC_TRY_COMPILE([
3004                         #include <time.h>
3005                         ], [
3006                         struct tm tm;
3007                         tm.tm_gmtoff = 1;
3008                         ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
3009         if test $ac_cv_struct_tm_gmtoff = yes; then
3010                 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
3011         else
3012                 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
3013                         AC_TRY_COMPILE([
3014                                 #include <time.h>
3015                         ], [
3016                                 timezone = 1;
3017                         ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
3018                 if test $ac_cv_var_timezone = yes; then
3019                         AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
3020                 else
3021                         AC_ERROR(unable to find a way to determine timezone)
3022                 fi
3023         fi
3025         dnl *********************************
3026         dnl *** Checks for math functions ***
3027         dnl *********************************
3028         AC_SEARCH_LIBS(sqrtf, m)
3030         dnl ****************************************************************
3031         dnl *** Checks for working poll() (macosx defines it but doesn't ***
3032         dnl *** have it in the library (duh))                            ***
3033         dnl ****************************************************************
3034         AC_CHECK_FUNCS(poll)
3036         dnl **********************************
3037         dnl *** epoll                      ***
3038         dnl **********************************
3039         AC_CHECK_HEADERS(sys/epoll.h)
3040         haveepoll=no
3041         AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
3042         if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
3043                 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
3044         fi
3046         havekqueue=no
3048         AC_CHECK_HEADERS(sys/event.h)
3049         AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
3051         dnl **************************************
3052         dnl * Darwin has a race that prevents us from using reliably:
3053         dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
3054         dnl * Since kqueue is mostly used for scaling large web servers, 
3055         dnl * and very few folks run Mono on large web servers on OSX, falling
3056         dnl * back 
3057         dnl **************************************
3058         if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
3059                 if test "x$host_darwin" = "xno"; then
3060                         AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
3061                 fi
3062         fi
3064         dnl ******************************
3065         dnl *** Checks for SIOCGIFCONF ***
3066         dnl ******************************
3067         AC_CHECK_HEADERS(sys/ioctl.h)
3068         AC_CHECK_HEADERS(net/if.h, [], [],
3069            [
3070            #ifdef HAVE_SYS_TYPES_H
3071            # include <sys/types.h>
3072            #endif
3073            #ifdef HAVE_SYS_SOCKET_H
3074            # include <sys/socket.h>
3075            #endif
3076            ])
3077         AC_MSG_CHECKING(for ifreq)
3078         AC_TRY_COMPILE([
3079                 #include <stdio.h>
3080                 #include <sys/ioctl.h>
3081                 #include <net/if.h>
3082                 ], [
3083                 struct ifconf ifc;
3084                 struct ifreq *ifr;
3085                 void *x;
3086                 ifc.ifc_len = 0;
3087                 ifc.ifc_buf = NULL;
3088                 x = (void *) &ifr->ifr_addr;
3089                 ],[
3090                         AC_MSG_RESULT(yes)
3091                         AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
3092                 ], [
3093                         AC_MSG_RESULT(no)
3094                 ])
3095         dnl **********************************
3096         dnl ***     Checks for sin_len     ***
3097         dnl **********************************
3098         AC_MSG_CHECKING(for sockaddr_in.sin_len)
3099         AC_TRY_COMPILE([
3100                 #include <netinet/in.h>
3101                 ], [
3102                 struct sockaddr_in saddr;
3103                 saddr.sin_len = sizeof (saddr);
3104                 ],[
3105                         AC_MSG_RESULT(yes)
3106                         AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
3107                 ], [
3108                         AC_MSG_RESULT(no)
3109                 ])      
3110         dnl **********************************
3111         dnl ***    Checks for sin6_len     ***
3112         dnl **********************************
3113         AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
3114         AC_TRY_COMPILE([
3115                 #include <netinet/in.h>
3116                 ], [
3117                 struct sockaddr_in6 saddr6;
3118                 saddr6.sin6_len = sizeof (saddr6);
3119                 ],[
3120                         AC_MSG_RESULT(yes)
3121                         AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
3122                 ], [
3123                         AC_MSG_RESULT(no)
3124                 ])
3125         dnl **********************************
3126         dnl *** Check for getifaddrs       ***
3127         dnl **********************************
3128         AC_MSG_CHECKING(for getifaddrs)
3129                 AC_TRY_LINK([
3130                 #include <stdio.h>
3131                 #include <sys/types.h>
3132                 #include <sys/socket.h>
3133                 #ifdef HAVE_NET_IF_H
3134                 #include <net/if.h>
3135                 #endif
3136                 #include <ifaddrs.h>
3137         ], [
3138                 getifaddrs(NULL);
3139         ], [
3140                 # Yes, we have it...
3141                 AC_MSG_RESULT(yes)
3142                 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
3143         ], [
3144                 AC_MSG_RESULT(no)
3145         ])
3146         dnl **********************************
3147         dnl *** Check for if_nametoindex   ***
3148         dnl **********************************
3149         AC_MSG_CHECKING(for if_nametoindex)
3150                 AC_TRY_LINK([
3151                 #include <stdio.h>
3152                 #include <sys/types.h>
3153                 #include <sys/socket.h>
3154                 #include <net/if.h>
3155         ], [
3156                 if_nametoindex(NULL);
3157         ], [
3158                 # Yes, we have it...
3159                 AC_MSG_RESULT(yes)
3160                 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
3161         ], [
3162                 AC_MSG_RESULT(no)
3163         ])
3164         dnl **********************************
3165         dnl *** Check for access ***
3166         dnl **********************************
3167         AC_MSG_CHECKING(for access)
3168                 AC_TRY_LINK([
3169                 #include <unistd.h>
3170         ], [
3171                 access(NULL,0);
3172         ], [
3173                 # Yes, we have it...
3174                 AC_MSG_RESULT(yes)
3175                 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
3176         ], [
3177                 AC_MSG_RESULT(no)
3178         ])
3179                         
3180         dnl **********************************
3181         dnl *** Checks for proclib         ***
3182         dnl **********************************
3183         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.)])
3184         dnl **********************************
3185         dnl *** Checks for MonoPosixHelper ***
3186         dnl **********************************
3187         AC_CHECK_HEADERS(checklist.h)
3188         AC_CHECK_HEADERS(pathconf.h)
3189         AC_CHECK_HEADERS(fstab.h)
3190         AC_CHECK_HEADERS(attr/xattr.h)
3191         AC_CHECK_HEADERS(sys/extattr.h)
3192         AC_CHECK_HEADERS(sys/sendfile.h)
3193         AC_CHECK_HEADERS(sys/statvfs.h)
3194         AC_CHECK_HEADERS(sys/statfs.h)
3195         AC_CHECK_HEADERS(sys/vfstab.h)
3196         AC_CHECK_HEADERS(sys/xattr.h)
3197         AC_CHECK_HEADERS(sys/mman.h)
3198         AC_CHECK_HEADERS(sys/param.h)
3199         AC_CHECK_HEADERS(sys/mount.h, [], [],
3200                 [
3201                 #ifdef HAVE_SYS_PARAM_H
3202                 # include <sys/param.h>
3203                 #endif
3204                 ])
3205         AC_CHECK_HEADERS(sys/mount.h)
3206         AC_CHECK_FUNCS(confstr)
3207         AC_CHECK_FUNCS(seekdir telldir)
3208         AC_CHECK_FUNCS(getdomainname)
3209         AC_CHECK_FUNCS(setdomainname)
3210         AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
3211         AC_CHECK_FUNCS(setgroups)
3212         AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
3213         AC_CHECK_FUNCS(getfsstat)
3214         AC_CHECK_FUNCS(lutimes futimes)
3215         AC_CHECK_FUNCS(mremap)
3216         AC_CHECK_FUNCS(remap_file_pages)
3217         AC_CHECK_FUNCS(posix_fadvise)
3218         AC_CHECK_FUNCS(posix_fallocate)
3219         AC_CHECK_FUNCS(vsnprintf)
3220         AC_CHECK_FUNCS(sendfile)
3221         AC_CHECK_FUNCS(gethostid sethostid)
3222         AC_CHECK_FUNCS(sethostname)
3223         AC_CHECK_FUNCS(statfs)
3224         AC_CHECK_FUNCS(fstatfs)
3225         AC_CHECK_FUNCS(statvfs)
3226         AC_CHECK_FUNCS(fstatvfs)
3227         AC_CHECK_FUNCS(stime)
3228         AC_CHECK_FUNCS(ttyname_r)
3229         AC_CHECK_FUNCS(psignal)
3230         AC_CHECK_FUNCS(getlogin_r)
3231         AC_CHECK_FUNCS(lockf)
3232         AC_CHECK_FUNCS(swab)
3233         AC_CHECK_FUNCS(setusershell endusershell)
3234         AC_CHECK_FUNCS(futimens utimensat)
3235         AC_CHECK_FUNCS(fstatat mknodat readlinkat)
3236         AC_CHECK_FUNCS(readv writev preadv pwritev)
3237         AC_CHECK_FUNCS(setpgid)
3238         AC_CHECK_FUNCS(system)
3239         AC_CHECK_FUNCS(fork execv execve)
3240         AC_CHECK_FUNCS(waitpid)
3241         AC_CHECK_FUNCS(accept4)
3242         AC_CHECK_FUNCS(localtime_r)
3243         AC_CHECK_FUNCS(mkdtemp)
3244         AC_CHECK_SIZEOF(size_t)
3245         AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
3246                 [#include <sys/types.h>
3247                  #include <sys/stat.h>
3248                  #include <unistd.h>])
3249         AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
3250                 [#include <sys/types.h>
3251                  #include <sys/stat.h>
3252                  #include <unistd.h>])
3253         AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
3254                 [#include <sys/time.h>])
3255         AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
3256                 [#include <sys/socket.h>])
3257         AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
3258                 [#include <unistd.h>
3259                  #include <fcntl.h>])
3260         AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
3261                 [#include <sys/uio.h>])
3262         AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
3263                 [#include <sys/socket.h>])
3264         AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
3265                 [#include <sys/poll.h>])
3266         AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
3267                 [#include <sys/socket.h>])
3268         AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
3269                 [#include <sys/socket.h>])
3270         AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
3271                 [#include <netinet/in.h>])
3272         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3273                 [#include <netinet/in.h>])
3274         AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3275                 [#include <sys/un.h>])
3276         AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3277                 [#include <sys/types.h>
3278                  #include <sys/stat.h>
3279                  #include <unistd.h>])
3280         AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3281                 [#include <time.h>])
3282         AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3283                 [#include <sys/time.h>
3284                  #include <sys/types.h>
3285                  #include <utime.h>])
3286         AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3287                 [#include <sys/time.h>])
3288         AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3289                 [#include <sys/types.h>
3290                  #include <utime.h>])
3291         AC_CHECK_MEMBERS(
3292                 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,, 
3293                 [#include <sys/types.h>
3294                  #include <dirent.h>])
3295         AC_CHECK_MEMBERS(
3296                 [struct passwd.pw_gecos],,, 
3297                 [#include <sys/types.h>
3298                  #include <pwd.h>])
3299         AC_CHECK_MEMBERS(
3300                 [struct statfs.f_flags],,, 
3301                 [#include <sys/types.h>
3302                  #include <sys/vfs.h>])
3303         AC_CHECK_MEMBERS(
3304                 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,, 
3305                 [#include <sys/types.h>
3306                  #include <sys/stat.h>
3307                  #include <unistd.h>])
3309         dnl Favour xattr through glibc, but use libattr if we have to
3310         AC_CHECK_FUNC(lsetxattr, ,
3311                 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3312         )
3313         AC_SUBST(XATTR_LIB)
3315         dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3316         AC_CHECK_MEMBERS(
3317                 [struct kinfo_proc.kp_proc],,, 
3318                 [#include <sys/types.h>
3319                  #include <sys/param.h>
3320                  #include <sys/sysctl.h>
3321                  #include <sys/proc.h>
3322                  ])
3324         dnl *********************************
3325         dnl *** Checks for Windows compilation ***
3326         dnl *********************************
3327         AC_CHECK_HEADERS(sys/time.h)
3328         AC_CHECK_HEADERS(sys/param.h)
3329         AC_CHECK_HEADERS(dirent.h)
3331         dnl ******************************************
3332         dnl *** Checks for OSX and iOS compilation ***
3333         dnl ******************************************
3334         AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3336         dnl *********************************
3337         dnl *** Check for Console 2.0 I/O ***
3338         dnl *********************************
3339         AC_CHECK_HEADERS([curses.h])
3340         AC_CHECK_HEADERS([term.h], [], [],
3341         [#if HAVE_CURSES_H
3342          #include <curses.h>
3343          #endif
3344         ])
3345         AC_CHECK_HEADERS([termios.h])
3347         dnl *********************************
3348         dnl *** Checks for random         ***
3349         dnl *********************************
3350         if test x$host_darwin = xno; then
3351                 AC_CHECK_HEADERS(sys/random.h)
3352                 AC_CHECK_FUNCS(getrandom getentropy)
3353         fi
3355         dnl *********************************
3356         dnl *** Checks for Mono.Native    ***
3357         dnl *********************************
3359         # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3360         # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3362         AC_MSG_CHECKING(for linux/in.h)
3363         AC_TRY_COMPILE([
3364                 #include <sys/socket.h>
3365                 #include <linux/in.h>
3366         ], [
3367         ],[
3368                 AC_MSG_RESULT(yes)
3369                 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3370         ], [
3371                 AC_MSG_RESULT(no)
3372         ])
3374         AC_CHECK_HEADERS([linux/if_packet.h])
3376         AC_MSG_CHECKING(for struct in_pktinfo)
3377         AC_TRY_COMPILE([
3378                 #ifdef HAVE_LINUX_IN_H
3379                 #include <sys/socket.h>
3380                 #include <linux/in.h>
3381                 #else
3382                 #include <netinet/in.h>
3383                 #endif
3384         ], [
3385                 struct in_pktinfo pktinfo;
3386         ],[
3387                 AC_MSG_RESULT(yes)
3388                 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3389         ], [
3390                 AC_MSG_RESULT(no)
3391         ])
3393         AC_MSG_CHECKING(for struct ip_mreqn)
3394         AC_TRY_COMPILE([
3395                 #if HAVE_LINUX_IN_H
3396                 #include <sys/socket.h>
3397                 #include <linux/in.h>
3398                 #else
3399                 #include <netinet/in.h>
3400                 #endif
3401         ], [
3402                 struct ip_mreqn mreqn;
3403         ],[
3404                 AC_MSG_RESULT(yes)
3405                 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3406         ], [
3407                 AC_MSG_RESULT(no)
3408         ])
3410         if test x$host_darwin = xno; then
3411                 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3412         fi
3414         AC_CHECK_DECL(O_CLOEXEC,         [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3415         AC_CHECK_DECL(F_DUPFD_CLOEXEC,   [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3417         # AC_CHECK_FUNC(getifaddrs,           [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3418         AC_CHECK_FUNC(Qp2getifaddrs,     [AC_DEFINE(HAVE_QP2GETIFADDRS, 1, [Qp2getifaddrs])])
3420         AC_CHECK_FUNC(lseek64,           [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3421         AC_CHECK_FUNC(mmap64,            [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3422         AC_CHECK_FUNC(ftruncate64,       [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3423         AC_CHECK_FUNC(posix_fadvise64,   [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3425         if test "x$mono_native_platform_ios" = "xno"; then
3426                 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3427                 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3428                 AC_CHECK_FUNC(stat64,            [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3429         fi
3431         AC_CHECK_DECL(pipe2,             [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3432         AC_CHECK_FUNC(getmntinfo,        [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3433         AC_CHECK_FUNC(strcpy_s,          [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3434         AC_CHECK_FUNC(strlcpy,           [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3435         AC_CHECK_FUNC(posix_fadvise,     [AC_DEFINE(HAVE_POSIX_ADVISE, 1, [posix_fadvise])]) # the define is called HAVE_POSIX_ADVISE in corefx, not a typo
3436         AC_CHECK_FUNC(ioctl,             [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3437         AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3438         AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3440         if test "x$platform_android" != "xyes"; then
3441                 AC_CHECK_FUNC(arc4random_buf,    [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3442         fi
3444         AC_CHECK_DECL(TIOCGWINSZ,        [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3445         AC_CHECK_FUNC(tcgetattr,         [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3446         AC_CHECK_FUNC(tcsetattr,         [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3447         AC_CHECK_DECL(ECHO,              [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3448         AC_CHECK_DECL(ICANON,            [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3449         AC_CHECK_DECL(TCSANOW,           [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3451         AC_CHECK_DECL(lchflags,          [AC_DEFINE(HAVE_LCHFLAGS, 1, [lchflags])], [], 
3452                 [[#include <sys/types.h> 
3453                 #include <sys/stat.h>]])
3454         AC_CHECK_MEMBER(struct stat.st_flags,
3455                 [AC_DEFINE(HAVE_STAT_FLAGS, 1, [struct stat.st_flags])],
3456                 [],
3457                 [#include <sys/types.h>
3458                 #include <sys/stat.h>])
3460         AC_CHECK_MEMBER(struct stat.st_birthtimespec,
3461                 [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtimespec])],
3462                 [],
3463                 [#include <sys/types.h>
3464                 #include <sys/stat.h>])
3465         AC_CHECK_MEMBER(struct stat.st_atimespec,
3466                 [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])],
3467                 [],
3468                 [#include <sys/types.h>
3469                 #include <sys/stat.h>])
3470         AC_CHECK_MEMBER(struct stat.st_atim,
3471                 [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])],
3472                 [],
3473                 [#include <sys/types.h>
3474                 #include <sys/stat.h>])
3475         AC_CHECK_MEMBER(struct stat.st_atimensec,
3476                 [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])],
3477                 [],
3478                 [#include <sys/types.h>
3479                 #include <sys/stat.h>])
3480         AC_CHECK_MEMBER(struct dirent.d_namlen,       [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [#include <dirent.h>])
3481         AC_CHECK_MEMBER(struct statfs.f_fstypename,   [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [#include <sys/mount.h>])
3482         AC_CHECK_MEMBER(struct statvfs.f_fstypename,  [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [#include <sys/mount.h>])
3484         AC_MSG_CHECKING(for struct statfs)
3485         AC_TRY_COMPILE([
3486                 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3487                 #include <sys/mount.h>
3488                 #else
3489                 #include <sys/statfs.h>
3490                 #endif
3491         ], [
3492                 struct statfs;
3493         ],[
3494                 AC_MSG_RESULT(yes)
3495                 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3496         ], [
3497                 AC_MSG_RESULT(no)
3498         ])
3500         if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3501                 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3502         fi
3504         AC_MSG_CHECKING(for readdir_r)
3505         AC_TRY_LINK([
3506                 #include <dirent.h>
3507         ], [
3508                 DIR* dir;
3509                 struct dirent* entry;
3510                 struct dirent* result;
3511                 readdir_r(dir, entry, &result);
3512         ],[
3513                 AC_MSG_RESULT(yes)
3514                 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3515         ], [
3516                 AC_MSG_RESULT(no)
3517         ])
3519         AC_MSG_CHECKING(for kevent with void *data)
3520         AC_TRY_LINK([
3521                 #include <sys/types.h>
3522                 #include <sys/event.h>
3523         ], [
3524                 struct kevent event;
3525                 void* data;
3526                 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3527         ],[
3528                 AC_MSG_RESULT(yes)
3529                 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3530         ], [
3531                 AC_MSG_RESULT(no)
3532         ])
3534         AC_CHECK_MEMBER(struct fd_set.fds_bits,   [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3535         AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3537         AC_MSG_CHECKING(for sendfile with 4 arguments)
3538         AC_TRY_LINK([
3539                 #include <sys/sendfile.h>
3540         ], [
3541                 #if defined(TARGET_ANDROID)
3542                 #if !defined(__ANDROID_API__)
3543                 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3544                 #elif __ANDROID_API__ < 21
3545                 #error sendfile is not supported on this Android API level
3546                 #endif
3547                 #endif
3549                 int result = sendfile(0, 0, 0, 0);
3550         ],[
3551                 AC_MSG_RESULT(yes)
3552                 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3553         ], [
3554                 AC_MSG_RESULT(no)
3555         ])
3557         ORIG_CFLAGS="$CFLAGS"
3558         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3560         AC_MSG_CHECKING(for sendfile with 6 arguments)
3561         AC_TRY_LINK([
3562                 #include <stdlib.h>
3563                 #include <sys/types.h>
3564                 #include <sys/socket.h>
3565                 #include <sys/uio.h>
3566         ], [
3567                 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3568         ],[
3569                 AC_MSG_RESULT(yes)
3570                 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3571         ], [
3572                 AC_MSG_RESULT(no)
3573         ])
3575         CFLAGS="$ORIG_CFLAGS"
3577         AC_CHECK_FUNC(fcopyfile,     [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3578         AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3579         AC_CHECK_FUNC(accept4,       [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3580         AC_CHECK_FUNC(kqueue,        [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3582         ORIG_CFLAGS="$CFLAGS"
3583         CFLAGS="$CFLAGS -Werror=sign-conversion"
3585         AC_MSG_CHECKING(for getnameinfo with signed flags)
3586         AC_TRY_LINK([
3587                 #include <sys/types.h>
3588                 #include <netdb.h>
3589         ], [
3590                 const struct sockaddr *addr;
3591                 socklen_t addrlen;
3592                 char *host;
3593                 socklen_t hostlen;
3594                 char *serv;
3595                 socklen_t servlen;
3596                 int flags;
3597                 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3598         ],[
3599                 AC_MSG_RESULT(yes)
3600                 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3601         ], [
3602                 AC_MSG_RESULT(no)
3603         ])
3605         CFLAGS="$ORIG_CFLAGS"
3607         if test "x$host_linux" = "xyes"; then
3608                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3609         else
3610                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3611         fi
3613         # HAVE_CLOCK_MONOTONIC check already done above
3614         # HAVE_CLOCK_REALTIME check already done above
3615         # HAVE_MACH_ABSOLUTE_TIME check already done above
3616         # HAVE_MACH_TIMEBASE_INFO check already done above
3617         # HAVE_FUTIMES check already done above
3618         # HAVE_FUTIMENS check already done above
3620         ORIG_CFLAGS="$CFLAGS"
3621         CFLAGS="$CFLAGS -Werror=sign-conversion"
3623         AC_MSG_CHECKING(for bind with unsigned addrlen)
3624         AC_TRY_LINK([
3625                 #include <sys/socket.h>
3626         ], [
3627                 int fd;
3628                 struct sockaddr* addr;
3629                 socklen_t addrLen;
3630                 bind(fd, addr, addrLen);
3631         ],[
3632                 AC_MSG_RESULT(yes)
3633                 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3634         ], [
3635                 AC_MSG_RESULT(no)
3636         ])
3638         AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3639         AC_TRY_LINK([
3640                 #include <netinet/in.h>
3641                 #include <netinet/tcp.h>
3642         ], [
3643                 struct ipv6_mreq opt;
3644                 unsigned int index = 0;
3645                 opt.ipv6mr_interface = index;
3646         ],[
3647                 AC_MSG_RESULT(yes)
3648                 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3649         ], [
3650                 AC_MSG_RESULT(no)
3651         ])
3653         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3654         AC_TRY_LINK([
3655                 #include <sys/inotify.h>
3656         ], [
3657                 intptr_t fd;
3658                 uint32_t wd;
3659                 int result = inotify_rm_watch(fd, wd);
3660         ],[
3661                 AC_MSG_RESULT(yes)
3662                 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3663         ], [
3664                 AC_MSG_RESULT(no)
3665         ])
3667         case "$host" in
3668                 *-*-*freebsd*)
3669                         dnl *****************************
3670                         dnl *** Checks for libinotify ***
3671                         dnl *****************************
3672                         AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
3673                         if test "x$ac_cv_lib_inotify_inotify_init" = "xyes" ; then
3674                                 AC_DEFINE(HAVE_LIBINOTIFY, 1, [FreeBSD libinotify kqueue shim])
3675                                 dnl Needs to be done this way to avoid collision with various 
3676                                 dnl ports including glib and llvm*
3677                                 METADATA_CFLAGS="-I/usr/local/include"
3678                                 AC_SUBST(METADATA_CFLAGS)
3679                         fi
3680                         dnl Workaround due to inotify_rm_watch check failing without -I
3681                         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd in libinotify)
3682                         AC_TRY_LINK([
3683                                 #include </usr/local/include/sys/inotify.h>
3684                         ], [
3685                                 intptr_t fd;
3686                                 uint32_t wd;
3687                                 int result = inotify_rm_watch(fd, wd);
3688                         ],[
3689                            AC_MSG_RESULT(yes)
3690                            AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3691                         ], [
3692                                 AC_MSG_RESULT(no)
3693                         ])
3694         esac
3696         CFLAGS="$ORIG_CFLAGS"
3698         AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3699         if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3700                 AC_MSG_RESULT(no)
3701         elif test "x$cross_compiling" = "xyes"; then
3702                 AC_MSG_RESULT(cross compiling, assuming yes)
3703                 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3704         else
3705                 AC_TRY_RUN([
3706                         #include <sys/mman.h>
3707                         #include <fcntl.h>
3708                         #include <unistd.h>
3710                         int main ()
3711                         {
3712                         #ifdef __PASE__
3713                                 /* IBM i doesn't implement this and returns SIGILL */
3714                                 return -1;
3715                         #endif
3716                                 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3717                                 if (fd == -1)
3718                                         return -1;
3720                                 shm_unlink("/mono_configure_shm_open");
3722                                 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3723                                 //       on at least the current version of Mac OS X
3725                                 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3726                                         return -1;
3728                                 return 0;
3729                         }
3730                 ],[
3731                         AC_MSG_RESULT(yes)
3732                         AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3733                 ], [
3734                         AC_MSG_RESULT(no)
3735                 ])
3736         fi
3738         AC_MSG_CHECKING(for getpriority with int who)
3739         AC_TRY_LINK([
3740                 #include <sys/resource.h>
3741         ], [
3742                 int which;
3743                 int who;
3744                 int result = getpriority(which, who);
3745         ],[
3746                 AC_MSG_RESULT(yes)
3747                 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3748         ], [
3749                 AC_MSG_RESULT(no)
3750         ])
3752         AC_MSG_CHECKING(for kevent with int parameters)
3753         AC_TRY_LINK([
3754                 #include <sys/types.h>
3755                 #include <sys/event.h>
3756         ], [
3757                 int kg;
3758                 const struct kevent* chagelist;
3759                 int nchanges;
3760                 struct kevent* eventlist;
3761                 int nevents;
3762                 const struct timespec* timeout;
3763                 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3764         ],[
3765                 AC_MSG_RESULT(yes)
3766                 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3767         ], [
3768                 AC_MSG_RESULT(no)
3769         ])
3771         AC_CHECK_FUNCS(mkstemps)
3772         # AC_CHECK_FUNCS(mkstemp) # already done above
3774         if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3775                 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3776         fi
3778         AC_MSG_CHECKING(for tcp/var.h)
3779         AC_TRY_LINK([
3780                 #include <sys/types.h>
3781                 #include <sys/socketvar.h>
3782                 #include <netinet/ip.h>
3783                 #include <netinet/tcp.h>
3784                 #include <netinet/tcp_var.h>
3785         ], [
3786         ],[
3787                 AC_MSG_RESULT(yes)
3788                 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3789         ], [
3790                 AC_MSG_RESULT(no)
3791         ])
3793         AC_CHECK_HEADERS([sys/cdefs.h])
3795         AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3796         AC_TRY_LINK([
3797                 #ifdef HAVE_SYS_CDEFS_H
3798                 #include <sys/cdefs.h>
3799                 #endif
3800                 #include <netinet/tcp.h>
3801         ], [
3802                 int result = TCP_ESTABLISHED;
3803         ],[
3804                 AC_MSG_RESULT(yes)
3805                 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3806         ], [
3807                 AC_MSG_RESULT(no)
3808         ])
3810         AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3812         AC_MSG_CHECKING(for struct rt_msghdr)
3813         AC_TRY_COMPILE([
3814                 #include <sys/types.h>
3815                 #include <net/route.h>
3816         ], [
3817                 struct rt_msghdr;
3818         ],[
3819                 AC_MSG_RESULT(yes)
3820                 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3821         ], [
3822                 AC_MSG_RESULT(no)
3823         ])
3825         AC_CHECK_HEADERS([sys/sysctl.h])
3826         AC_CHECK_HEADERS([linux/rtnetlink.h])
3828         AC_CHECK_FUNC(getpeereid,    [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3829         #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3830         AC_CHECK_FUNC(uname,         [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3832         ORIG_CFLAGS="$CFLAGS"
3833         CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3835         AC_MSG_CHECKING(for getdomainname with size_t namelen)
3836         AC_TRY_LINK([
3837                 #include <unistd.h>
3838         ], [
3839                 size_t namelen = 20;
3840                 char name[20];
3841                 int result = getdomainname(name, namelen);
3842         ],[
3843                 AC_MSG_RESULT(yes)
3844                 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3845         ], [
3846                 AC_MSG_RESULT(no)
3847         ])
3849         CFLAGS="$ORIG_CFLAGS"
3851         AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3852         AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3853         AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3855         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
3856                 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3857         elif test "x$host_linux" = "xyes"; then
3858                 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3859         fi
3861         # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3862         # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3863         # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3864         # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3866         enable_gss=no;
3867         AC_MSG_CHECKING(for GSS/GSS.h)
3868         AC_TRY_COMPILE([
3869                         #include <GSS/GSS.h>
3870         ], [
3871         ],[
3872                         AC_MSG_RESULT(yes)
3873                         AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3874                         AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3875                         enable_gss=yes
3876                         AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3877         ], [
3878                         AC_MSG_RESULT(no)
3879         ])
3881         AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3882         AC_TRY_COMPILE([
3883                         #include <gssapi/gssapi_ext.h>
3884         ], [
3885         ],[
3886                         AC_MSG_RESULT(yes)
3887                         enable_gss=yes
3888                         AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3889         ], [
3890                         AC_MSG_RESULT(no)
3891         ])
3893         AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3894         AC_TRY_COMPILE([
3895                         #include <gssapi/gssapi_ext.h>
3896                         #include <gssapi/gssapi_krb5.h>
3897                         gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3898         ], [
3899         ],[
3900                         AC_MSG_RESULT(yes)
3901                         AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3902         ], [
3903                         AC_MSG_RESULT(no)
3904         ])
3906         AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3908         AC_CHECK_HEADERS([crt_externs.h])
3910         AC_MSG_CHECKING(for _NSGetEnviron)
3911         AC_TRY_LINK([
3912                 #include <crt_externs.h>
3913         ], [
3914                 char **result = *(_NSGetEnviron());
3915         ],[
3916                 AC_MSG_RESULT(yes)
3917                 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3918         ], [
3919                 AC_MSG_RESULT(no)
3920         ])
3922         AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3924         if test x$host_sunos = xyes; then
3925                 # set -Werror=strict-prototypes, to match the flags used during the compilation.
3926                 ORIG_CFLAGS="$CFLAGS"
3927                 CFLAGS="$CFLAGS -Werror=strict-prototypes"
3928         fi
3930         AC_CHECK_FUNCS(madvise)
3931         AC_CHECK_FUNCS(posix_madvise)
3933         if test x$host_sunos = xyes; then
3934                 CFLAGS="$ORIG_CFLAGS"
3935         fi
3937         # *** End of Mono.Native checks ***
3938 else
3939         AM_CONDITIONAL(ENABLE_GSS, false)
3941         dnl *********************************
3942         dnl *** Checks for Windows compilation ***
3943         dnl *********************************
3944         AC_CHECK_HEADERS(winternl.h)
3946         jdk_headers_found=no
3947         AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3948         AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3949         AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3950         AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3951         AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3952         AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3953         AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3955         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], , [#include <ws2tcpip.h>])
3957         dnl *********************************
3958         dnl *** Check for struct ip_mreqn ***
3959         dnl *********************************
3960         AC_MSG_CHECKING(for struct ip_mreqn)
3961         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3962                 struct ip_mreqn mreq;
3963                 mreq.imr_address.s_addr = 0;
3964         ], [
3965                 # Yes, we have it...
3966                 AC_MSG_RESULT(yes)
3967                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3968         ], [
3969                 # We'll just have to try and use struct ip_mreq
3970                 AC_MSG_RESULT(no)
3971                 AC_MSG_CHECKING(for struct ip_mreq)
3972                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3973                         struct ip_mreq mreq;
3974                         mreq.imr_interface.s_addr = 0;
3975                 ], [
3976                         # Yes, we have it...
3977                         AC_MSG_RESULT(yes)
3978                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3979                 ], [
3980                         # No multicast support
3981                         AC_MSG_RESULT(no)
3982                 ])
3983         ])
3985         dnl **********************************
3986         dnl *** Check for getaddrinfo ***
3987         dnl **********************************
3988         AC_MSG_CHECKING(for getaddrinfo)
3989                 AC_TRY_LINK([
3990                 #include <stdio.h>
3991                 #include <winsock2.h>
3992                 #include <ws2tcpip.h>
3993         ], [
3994                 getaddrinfo(NULL,NULL,NULL,NULL);
3995         ], [
3996                 # Yes, we have it...
3997                 AC_MSG_RESULT(yes)
3998                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3999         ], [
4000                 AC_MSG_RESULT(no)
4001         ])
4003         dnl **********************************
4004         dnl *** Check for gethostbyname ***
4005         dnl **********************************
4006         AC_MSG_CHECKING(for gethostbyname)
4007                 AC_TRY_LINK([
4008                 #include <stdio.h>
4009                 #include <winsock2.h>
4010                 #include <ws2tcpip.h>
4011         ], [
4012                 gethostbyname(NULL);
4013         ], [
4014                 # Yes, we have it...
4015                 AC_MSG_RESULT(yes)
4016                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
4017         ], [
4018                 AC_MSG_RESULT(no)
4019         ])
4021         dnl **********************************
4022         dnl *** Check for getprotobyname ***
4023         dnl **********************************
4024         AC_MSG_CHECKING(for getprotobyname)
4025                 AC_TRY_LINK([
4026                 #include <stdio.h>
4027                 #include <winsock2.h>
4028                 #include <ws2tcpip.h>
4029         ], [
4030                 getprotobyname(NULL);
4031         ], [
4032                 # Yes, we have it...
4033                 AC_MSG_RESULT(yes)
4034                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
4035         ], [
4036                 AC_MSG_RESULT(no)
4037         ])
4039         dnl **********************************
4040         dnl *** Check for getnameinfo ***
4041         dnl **********************************
4042         AC_MSG_CHECKING(for getnameinfo)
4043                 AC_TRY_LINK([
4044                 #include <stdio.h>
4045                 #include <winsock2.h>
4046                 #include <ws2tcpip.h>
4047         ], [
4048                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
4049         ], [
4050                 # Yes, we have it...
4051                 AC_MSG_RESULT(yes)
4052                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
4053         ], [
4054                 AC_MSG_RESULT(no)
4055         ])
4057         dnl **********************************
4058         dnl *** Check for inet_ntop ***
4059         dnl **********************************
4060         AC_MSG_CHECKING(for inet_ntop)
4061                 AC_TRY_LINK([
4062                 #include <stdio.h>
4063                 #include <winsock2.h>
4064                 #include <ws2tcpip.h>
4065         ], [
4066                 inet_ntop (0, NULL, NULL, 0);
4067         ], [
4068                 # Yes, we have it...
4069                 AC_MSG_RESULT(yes)
4070                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
4071         ], [
4072                 AC_MSG_RESULT(no)
4073         ])
4075         dnl **********************************
4076         dnl *** Check for inet_pton ***
4077         dnl **********************************
4078         AC_MSG_CHECKING(for inet_pton)
4079                 AC_TRY_LINK([
4080                 #include <stdio.h>
4081                 #include <winsock2.h>
4082                 #include <ws2tcpip.h>
4083         ], [
4084                 #ifndef inet_pton
4085                 (void) inet_pton;
4086                 #endif
4087                 inet_pton (0, NULL, NULL);
4088         ], [
4089                 # Yes, we have it...
4090                 AC_MSG_RESULT(yes)
4091                 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
4092         ], [
4093                 AC_MSG_RESULT(no)
4094         ])
4097 dnl socklen_t check
4098 AC_MSG_CHECKING(for socklen_t)
4099 AC_TRY_COMPILE([
4100 #include <sys/types.h>
4101 #include <sys/socket.h>
4103   socklen_t foo;
4105 ac_cv_c_socklen_t=yes
4106         AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
4107         AC_MSG_RESULT(yes)
4109         AC_MSG_RESULT(no)
4112 AC_CHECK_FUNCS(execvp)
4114 dnl ****************************
4115 dnl *** Look for /dev/random ***
4116 dnl ****************************
4118 AC_MSG_CHECKING([if usage of random device is requested])
4119 AC_ARG_ENABLE(dev-random,
4120 [  --disable-dev-random    disable the use of the random device (enabled by default)],
4121 try_dev_random=$enableval, try_dev_random=yes)
4123 AC_MSG_RESULT($try_dev_random)
4125 case "{$build}" in
4127 dnl IBM i does not have /dev/random, use unblocking only
4129     *-*-os400*)
4130     NAME_DEV_RANDOM="/dev/urandom"
4131     ;;
4133 dnl Win32 does not have /dev/random, they have their own method...
4135     *-mingw*|*-*-cygwin*)
4136     ac_cv_have_dev_random=no
4137     ;;
4139 dnl Everywhere else, it's /dev/random
4141     *)
4142     NAME_DEV_RANDOM="/dev/random"
4143     ;;
4144 esac
4146 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
4148 dnl Now check if the device actually exists
4150 if test "x$try_dev_random" = "xyes"; then
4151     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
4152     [if test -r "$NAME_DEV_RANDOM" ; then
4153         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
4154     if test "x$ac_cv_have_dev_random" = "xyes"; then
4155         AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
4156     fi
4157 else
4158     AC_MSG_CHECKING(for random device)
4159     ac_cv_have_dev_random=no
4160     AC_MSG_RESULT(has been disabled)
4163 if test "x$host_win32" = "xyes"; then
4164     AC_DEFINE(HAVE_CRYPT_RNG)
4167 if test "x$ac_cv_have_dev_random" = "xno" \
4168     && test "x$host_win32" = "xno"; then
4169     AC_MSG_WARN([[
4171 *** A system-provided entropy source was not found on this system.
4172 *** Because of this, the System.Security.Cryptography random number generator
4173 *** will throw a NotImplemented exception.
4175 *** If you are seeing this message, and you know your system DOES have an
4176 *** entropy collection in place, please report an issue on GitHub and
4177 *** provide information about the system and how to access the random device.
4179 *** Otherwise you can install either egd or prngd and set the environment
4180 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
4181 ***]])
4184 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)
4186 AC_MSG_CHECKING([if big-arrays are to be enabled])
4187 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)
4188 if test "x$enable_big_arrays" = "xyes" ; then
4189     if  test "x$ac_cv_sizeof_void_p" = "x8"; then
4190         AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
4191     else
4192         AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
4193     fi
4195 AC_MSG_RESULT($enable_big_arrays)
4197 dnl **************
4198 dnl *** DTRACE ***
4199 dnl **************
4201 AC_ARG_ENABLE(dtrace,[  --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
4203 if test "x$enable_dtrace" = "xyes"; then
4204    if test "x$has_dtrace" = "xno"; then
4205           AC_MSG_ERROR([DTrace probes are not supported on this platform.])
4206    fi
4207    AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
4208    if test "x$DTRACE" = "xno"; then
4209           AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
4210           enable_dtrace=no
4211    elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
4212           AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
4213           enable_dtrace=no
4214    fi
4217 dtrace_g=no
4218 if test "x$enable_dtrace" = "xyes"; then
4219         AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
4220         DTRACEFLAGS=
4221         if test "x$ac_cv_sizeof_void_p" = "x8"; then
4222                 case "$host" in
4223                         powerpc-*-darwin*)
4224                         DTRACEFLAGS="-arch ppc64"
4225                         ;;
4226                         i*86-*-darwin*)
4227                         DTRACEFLAGS="-arch x86_64"
4228                         ;;
4229                         *)
4230                         DTRACEFLAGS=-64
4231                         ;;
4232                 esac
4233         else
4234                 case "$host" in
4235                         powerpc-*-darwin*)
4236                         DTRACEFLAGS="-arch ppc"
4237                         ;;
4238                         i*86-*-darwin*)
4239                         DTRACEFLAGS="-arch i386"
4240                         ;;
4241                         *)
4242                         DTRACEFLAGS=-32
4243                         ;;
4244                 esac
4245         fi
4246         AC_SUBST(DTRACEFLAGS)
4247         case "$host" in
4248                 *-*-solaris*)
4249                 dtrace_g=yes
4250                 ;;
4251         esac
4252         AC_CHECK_HEADERS([sys/sdt.h])
4254 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
4255 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
4257 dnl **************************
4258 dnl *** AOT cross offsets  ***
4259 dnl **************************
4261 AC_ARG_WITH(cross-offsets, [  --with-cross-offsets=<offsets file path>    Explicit AOT cross offsets file],
4262     AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
4264 dnl **************
4265 dnl ***  LLVM  ***
4266 dnl **************
4268 AC_ARG_ENABLE(llvm,[  --enable-llvm     Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
4269 AC_ARG_ENABLE(loadedllvm,[  --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
4270 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)
4271 AC_ARG_ENABLE(llvm-runtime,[  --enable-llvm-runtime     Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
4272 AC_ARG_ENABLE(llvm-asserts,[  --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
4274 AC_ARG_WITH(llvm, [  --with-llvm=<llvm prefix>    Enable the LLVM back-end], enable_llvm=yes,)
4276 if test "x$enable_llvm" = "xdefault"; then
4277    enable_llvm=$enable_llvm_default
4280 if test "x$enable_loadedllvm" = "xyes"; then
4281    AC_MSG_WARN("Loadable LLVM is no longer supported. Enabling default LLVM support instead.")
4282    enable_llvm=yes
4285 enable_llvm_msvc_only="no"
4286 if test "x$enable_llvm" = "xyes"; then
4287         if test "x$host_win32" = "xyes"; then
4288                 if test "x$cross_compiling" = "xno"; then
4289                         case "$target" in
4290                         x86_64*)
4291                                 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
4292                                 enable_llvm_msvc_only="yes"
4293                                 ;;
4294                         i686*)
4295                                 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
4296                                 ;;
4297                         esac
4298                 fi
4299         fi
4302 internal_llvm="no"
4303 if test "x$enable_llvm" = "xyes"; then
4304         if test "x$with_llvm" != "x"; then
4305                 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
4306                 if test x$host_win32 = xyes; then
4307                         EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
4308                 fi
4309                 if test ! -x $EXTERNAL_LLVM_CONFIG; then
4310                         AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
4311                 fi
4312         else
4313                 internal_llvm=yes
4314         fi
4316         LLVM_CODEGEN_LIBS="x86codegen"
4317         case "$target" in
4318         arm*)
4319                 LLVM_CODEGEN_LIBS="armcodegen"
4320                 ;;
4321         aarch64*)
4322                 LLVM_CODEGEN_LIBS="aarch64codegen"
4323                 ;;
4324         powerpc*)
4325                 LLVM_CODEGEN_LIBS="powerpccodegen"
4326                 ;;
4327         esac
4328         if test "x$host" != "x$target"; then
4329                 # No need for jit libs
4330                 LLVM_CODEGEN_LIBS=
4331         fi
4333         AC_SUBST(LLVM_CODEGEN_LIBS)
4334         AC_SUBST(EXTERNAL_LLVM_CONFIG)
4336         if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" &&  test "x$internal_llvm" = "xno"; then
4337                 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4338                 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4339         fi
4340         if test "x$enable_llvm_msvc_only" != "xyes"; then
4341                 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4342         else
4343                 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4344         fi
4345 fi # ENABLE_LLVM
4347 # AC_DEFINE necessary for correct restore behavior on Linux
4348 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4349 if test "x$internal_llvm" != "xno"; then
4350         if test "x$enable_llvm_msvc_only" != "xyes"; then
4351                 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4352         else
4353                 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4354         fi
4357 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4358 if test "x$enable_llvm_asserts" != "xno"; then
4359         if test "x$enable_llvm_msvc_only" != "xyes"; then
4360                 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4361         else
4362                 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4363         fi
4366 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4368 if test "x$enable_llvm" = "xyes"; then
4369         enable_llvm_runtime=yes
4372 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4373 if test "x$enable_llvm_runtime" = "xyes"; then
4374         if test "x$enable_llvm_msvc_only" != "xyes"; then
4375                 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4376         else
4377                 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4378         fi
4381 TARGET="unknown"
4382 ACCESS_UNALIGNED="yes"
4384 LIBC="libc.so.6"
4385 INTL="libc.so.6"
4386 SQLITE="libsqlite.so.0"
4387 SQLITE3="libsqlite3.so.0"
4388 ODBC="libodbc.so.2"
4389 X11="libX11.so"
4390 GDKX11="libgdk-x11-2.0.so.0"
4391 GTKX11="libgtk-x11-2.0.so.0"
4392 XINERAMA="libXinerama.so.1"
4394 sizeof_register="SIZEOF_VOID_P"
4396 jit_wanted=true
4397 boehm_supported=true
4398 BTLS_SUPPORTED=no
4399 BTLS_PLATFORM=
4400 INTERP_CFLAGS=""
4402 case "$host" in
4403         wasm32*)
4404                 TARGET=WASM
4405                 arch_target=wasm
4406                 BTLS_SUPPORTED=no
4407                 ACCESS_UNALIGNED="no"
4408                 with_tls=pthread
4409                 target_wasm=yes
4410                 if test "x$mono_cv_clang" = "xyes"; then
4411                    INTERP_CFLAGS="-mllvm -join-liveintervals=false"
4412                    AC_SUBST(INTERP_CFLAGS)
4413                 fi
4414                 ;;
4415         mips*)
4416                 TARGET=MIPS;
4417                 arch_target=mips;
4418                 with_tls=pthread;
4419                 ACCESS_UNALIGNED="no"
4421                 AC_MSG_CHECKING(for mips n32)
4422                 AC_TRY_COMPILE([],[
4423                 #if _MIPS_SIM != _ABIN32
4424                 #error Not mips n32
4425                 #endif
4426                 ],[
4427                 AC_MSG_RESULT(yes)
4428                 sizeof_register=8
4429                 ],[
4430                 AC_MSG_RESULT(no)
4431                 ])
4432                 ;;
4433         i*86-*-*)
4434                 TARGET=X86;
4435                 arch_target=x86;
4436                 case $host_os in
4437                   solaris*)
4438                         LIBC="libc.so"
4439                         INTL="libintl.so"
4440                         if test "x$ac_cv_sizeof_void_p" = "x8"; then
4441                                 TARGET=AMD64
4442                                 arch_target=amd64
4443                         fi
4445                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4446                         # int astruct __attribute__ ((visibility ("hidden")));
4447                         # void foo ()
4448                         # {
4449                         #       void *p = &astruct;
4450                         # }
4451                         # gcc -fPIC --shared -o libfoo.so foo.c
4452                         # yields:
4453                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4454                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4455                         have_visibility_hidden=no
4456                         ;;
4457                   mingw*|cygwin*)
4458                         have_visibility_hidden=no
4459                         BTLS_SUPPORTED=no
4460                         BTLS_PLATFORM=i386
4461                         ;;
4462                   haiku*)
4463                         LIBC=libroot.so
4464                         ;;
4465                   linux*)
4466                         AOT_SUPPORTED="yes"
4467                         BTLS_SUPPORTED=yes
4468                         BTLS_PLATFORM=i386
4469                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4470                         ;;
4471                   darwin*)
4472                         AOT_SUPPORTED="yes"
4473                         BTLS_SUPPORTED=yes
4474                         BTLS_PLATFORM=i386
4475                         ;;
4476                   openbsd*|freebsd*|kfreebsd-gnu*)
4477                         AOT_SUPPORTED="yes"
4478                         BTLS_SUPPORTED=yes
4479                         BTLS_PLATFORM=i386
4480                         ;;
4481                 esac
4482                 ;;
4483         x86_64-*-* | amd64-*-*)
4484                 TARGET=AMD64;
4485                 arch_target=amd64;
4486                 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4487                         AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4488                         sizeof_register=8
4489                 fi
4490                 case $host_os in
4491                   linux*)
4492                         AOT_SUPPORTED="yes"
4493                         BTLS_SUPPORTED=yes
4494                         BTLS_PLATFORM=x86_64
4495                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4496                         ;;
4497                   darwin*)
4498                         AOT_SUPPORTED="yes"
4499                         BTLS_SUPPORTED=yes
4500                         BTLS_PLATFORM=x86_64
4501                         boehm_supported=false
4502                         ;;
4503                   openbsd*|freebsd*|kfreebsd-gnu*)
4504                         AOT_SUPPORTED="yes"
4505                         BTLS_SUPPORTED=yes
4506                         BTLS_PLATFORM=x86_64
4507                         ;;
4508                   mingw*|cygwin*)
4509                         BTLS_SUPPORTED=no
4510                         BTLS_PLATFORM=x86_64
4511                         ;;
4512                 esac
4513                 ;;
4514         sparc*-*-*)
4515                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4516                    TARGET=SPARC64
4517                 else
4518                         TARGET=SPARC
4519                 fi
4520                 arch_target=sparc;
4521                 ACCESS_UNALIGNED="no"
4522                 case $host_os in
4523                   linux*) ;;
4524                   *)
4525                         LIBC="libc.so"
4526                         INTL="libintl.so"
4527                 esac
4528                 if test x"$GCC" = xyes; then
4529                         # We don't support v8 cpus
4530                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4531                 fi
4532                 if test x"$AR" = xfalse; then
4533                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4534                 fi
4535                 ;;
4536         *-mingw*|*-*-cygwin*)
4537                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4538                 have_visibility_hidden=no
4539                 INTL="intl"
4540                 case "$host" in
4541                         x86_64*mingw*)
4542                                 # Old Boehm fails to compile for x86_64-mingw.
4543                                 # It is trivial to fix, but just silently drop it.
4544                                 boehm_supported=false
4545                                 ;;
4546                 esac
4547                 ;;
4548         macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4549         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4550         powerpc*-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4551                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4552                         TARGET=POWERPC64;
4553                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4554                         # mono#18554 - be more robust in testing for -mminimal-toc
4555                         AC_MSG_NOTICE([Checking for PowerPC ISA -mminimal-toc support])
4556                         AX_CHECK_COMPILE_FLAG(
4557                                 [-mminimal-toc],
4558                                 [CFLAGS="$CFLAGS -mminimal-toc"],
4559                                 [CFLAGS="$CFLAGS"]
4560                         )
4561                         case "$host" in
4562                                 powerpc*-*-freebsd*)
4563                                         # We need to be aware if we are ELFv1 or v2 here
4564                                         AC_MSG_NOTICE([Checking FreeBSD ELF version])
4565                                         if ! ( echo | cc -dM -E - | awk '/_CALL_ELF/ {print $NF}'); then
4566                                                 AC_DEFINE([POWERPC_ELF], 1, [PowerPC ELFv1])
4567                                         else
4568                                                 AC_DEFINE([POWERPC_ELFV2], 1, [PowerPC ELFv2])
4569                                         fi
4570                                         ;;
4571                         esac
4572                 else
4573                         TARGET=POWERPC;
4574                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4575                 fi
4576                 arch_target=ppc;
4577                 case $host_os in
4578                   aix*|os400*)
4579                         BTLS_SUPPORTED=yes
4580                         BTLS_PLATFORM=powerpc
4581                         ;;
4582                   linux*)
4583                         BTLS_SUPPORTED=yes
4584                         BTLS_PLATFORM=powerpc
4585                         ;;
4586                   freebsd*)
4587                         BTLS_SUPPORTED=yes
4588                         BTLS_PLATFORM=powerpc
4589                         ;;
4590                 esac
4591                 ;;
4592         armv7k-*-darwin*)
4593                 TARGET=ARM;
4594                 TARGET_SYS=WATCHOS
4595                 arch_target=arm;
4596                 arm_fpu=VFP_HARD
4597                 ACCESS_UNALIGNED="no"
4598                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4599                 ;;
4601         arm*-darwin*)
4602                 TARGET=ARM;
4603                 arch_target=arm;
4604                 ACCESS_UNALIGNED="no"
4605                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4606                 ;;
4607         arm*-linux*)
4608                 TARGET=ARM;
4609                 arch_target=arm;
4610                 ACCESS_UNALIGNED="no"
4611                 AOT_SUPPORTED="yes"
4612                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4613                 BTLS_SUPPORTED=yes
4614                 BTLS_PLATFORM=arm
4615                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4616                 case "$target" in
4617                 arm*-linux*-gnueabi)
4618                         BTLS_PLATFORM=armsoft
4619                         ;;
4620                 esac
4621                 ;;
4622         arm*-netbsd*-eabi*)
4623                 TARGET=ARM;
4624                 arch_target=arm;
4625                 ACCESS_UNALIGNED="no"
4626                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4627                 ;;
4628         aarch64-*darwin*ilp32)
4629                 TARGET=ARM6432
4630                 arch_target=arm64
4631                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4632                 sizeof_register=8
4633                 # assuming no other target other than watchOS is using aarch64*darwin triple
4634                 TARGET_SYS=WATCHOS
4635                 ;;
4636         aarch64-*)
4637                 # https://lkml.org/lkml/2012/7/15/133
4638                 TARGET=ARM64
4639                 arch_target=arm64
4640                 boehm_supported=false
4641                 AOT_SUPPORTED="yes"
4642                 BTLS_SUPPORTED=yes
4643                 BTLS_PLATFORM=aarch64
4644                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4645                 ;;
4646         s390x-*-linux*)
4647                 TARGET=S390X;
4648                 arch_target=s390x;
4649                 ACCESS_UNALIGNED="yes"
4650                 BTLS_SUPPORTED=yes
4651                 BTLS_PLATFORM=s390x
4652                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4653                 ;;
4654         riscv32-*)
4655                 TARGET=RISCV32
4656                 ACCESS_UNALIGNED=no
4657                 AOT_SUPPORTED=no
4658                 BTLS_SUPPORTED=yes
4659                 BTLS_PLATFORM=riscv32
4660                 arch_target=riscv32
4661                 boehm_supported=false
4662                 ;;
4663         riscv64*)
4664                 TARGET=RISCV64
4665                 ACCESS_UNALIGNED=no
4666                 AOT_SUPPORTED=no
4667                 BTLS_SUPPORTED=yes
4668                 BTLS_PLATFORM=riscv64
4669                 arch_target=riscv64
4670                 boehm_supported=false
4671                 ;;
4672 esac
4674 HOST=$TARGET
4676 if test "x$host" != "x$target"; then
4677    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4678    enable_mcs_build=no
4679    enable_support_build=no
4680    BTLS_SUPPORTED=no
4681    # Can't use tls, since it depends on the runtime detection of tls offsets
4682    # in mono-compiler.h
4683    with_tls=pthread
4684    target_mach=no
4685    case "$target" in
4686    wasm32*)
4687                 TARGET=WASM
4688                 arch_target=wasm
4689                 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4690                 ;;
4691    arm*-darwin*)
4692                 TARGET=ARM;
4693                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4694                 case "$target" in
4695                 armv7k-*)
4696                         arm_fpu=VFP_HARD
4697                         AC_DEFINE(TARGET_WATCHOS, 1, [...])
4698                         ;;
4699                 esac            
4700                 ;;
4701    powerpc64-ps3-linux-gnu)
4702                 TARGET=POWERPC64
4703                 arch_target=powerpc64
4704                 AC_DEFINE(TARGET_PS3, 1, [...])
4705                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4706                 # uses this define
4707                 AC_DEFINE(__mono_ppc64__, 1, [...])
4708                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4709                 sizeof_register=8
4710                 target_byte_order=G_BIG_ENDIAN
4711                 ;;
4712    powerpc64-xbox360-linux-gnu)
4713                 TARGET=POWERPC64
4714                 arch_target=powerpc64
4715                 AC_DEFINE(TARGET_XBOX360, 1, [...])
4716                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4717                 # uses this define
4718                 sizeof_register=8
4719                 target_byte_order=G_BIG_ENDIAN
4720                 ;;
4721    arm*-linux-*)
4722                 TARGET=ARM;
4723                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4724                 ;;
4725    arm*-netbsd*-eabi*)
4726                 TARGET=ARM;
4727                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4728                 ;;
4729    i686*-linux-*)
4730                 TARGET=X86;
4731                 ;;
4732    i*86-apple-*)
4733                 TARGET=X86;
4734                 ;;
4735    x86_64*-linux-*)
4736                 TARGET=AMD64;
4737                 ;;
4738    x86_64-ps4-freebsd)
4739                 TARGET=AMD64;
4740                 AC_DEFINE(TARGET_PS4, 1, [...])
4741                 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4742                 CPPFLAGS="$CPPFLAGS"
4743                 target_win32=no
4744                 ;;
4745         aarch64*darwin*_ilp32)
4746                 TARGET=ARM6432;
4747                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4748                 sizeof_register=8
4749                 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4750                 ;;
4751         aarch64-*)
4752                 TARGET=ARM64
4753                 ;;
4754         riscv32*)
4755                 TARGET=RISCV32
4756                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4757                 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4758                 arch_target=riscv32
4759                 target_mach=no
4760                 with_tls=pthread
4761                 ;;
4762         riscv64*)
4763                 TARGET=RISCV64
4764                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4765                 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4766                 arch_target=riscv64
4767                 target_mach=no
4768                 with_tls=pthread
4769                 ;;
4770         x86_64-google-fuchsia)
4771                 TARGET=AMD64
4772                 target_win32=nop
4773                 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
4774                 ;;
4775         *)
4776                 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4777         esac
4779         case "$target" in
4780         *-darwin*)
4781                 target_mach=yes
4782                 ;;
4783         *-linux-android*)
4784                 AC_DEFINE(TARGET_ANDROID, 1, [...])
4785                 ;;
4786         esac
4789 case "$TARGET" in
4790 WASM)
4791         AC_DEFINE(TARGET_WASM, 1, [...])
4792         arch_target=wasm
4793         ;;
4794 X86)
4795         AC_DEFINE(TARGET_X86, 1, [...])
4796         arch_target=x86
4797         ;;
4798 AMD64)
4799         AC_DEFINE(TARGET_AMD64, 1, [...])
4800         arch_target=amd64
4801         ;;
4802 ARM)
4803         AC_DEFINE(TARGET_ARM, 1, [...])
4804         arch_target=arm
4805         ACCESS_UNALIGNED="no"
4806         ;;
4807 ARM64|ARM6432)
4808         AC_DEFINE(TARGET_ARM64, 1, [...])
4809         arch_target=arm64
4810         ;;
4811 POWERPC)
4812         AC_DEFINE(TARGET_POWERPC, 1, [...])
4813         ;;
4814 POWERPC64)
4815         AC_DEFINE(TARGET_POWERPC, 1, [...])
4816         AC_DEFINE(TARGET_POWERPC64, 1, [...])
4817         ;;
4818 S390X)
4819         AC_DEFINE(TARGET_S390X, 1, [...])
4820         ;;
4821 MIPS)
4822         AC_DEFINE(TARGET_MIPS, 1, [...])
4823         ;;
4824 SPARC)
4825         AC_DEFINE(TARGET_SPARC, 1, [...])
4826         ;;
4827 SPARC64)
4828         AC_DEFINE(TARGET_SPARC64, 1, [...])
4829         ;;
4830 RISCV32)
4831         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4832         AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4833         ;;
4834 RISCV64)
4835         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4836         AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4837         ;;
4838 esac
4840 case "$TARGET" in
4841 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4842     target_sizeof_void_p=4
4843     ;;
4844 *64* | S390X)
4845     target_sizeof_void_p=8
4846     ;;
4848     AC_MSG_ERROR([unknown target])
4849     ;;
4850 esac
4852 case "$HOST" in
4853 WASM)
4854         AC_DEFINE(HOST_WASM, 1, [...])
4855         ;;
4856 X86)
4857         AC_DEFINE(HOST_X86, 1, [...])
4858         ;;
4859 AMD64)
4860         AC_DEFINE(HOST_AMD64, 1, [...])
4861         ;;
4862 ARM)
4863         AC_DEFINE(HOST_ARM, 1, [...])
4864         ;;
4865 ARM64)
4866         AC_DEFINE(HOST_ARM64, 1, [...])
4867         ;;
4868 POWERPC)
4869         AC_DEFINE(HOST_POWERPC, 1, [...])
4870         ;;
4871 POWERPC64)
4872         AC_DEFINE(HOST_POWERPC, 1, [...])
4873         AC_DEFINE(HOST_POWERPC64, 1, [...])
4874         ;;
4875 S390X)
4876         AC_DEFINE(HOST_S390X, 1, [...])
4877         ;;
4878 MIPS)
4879         AC_DEFINE(HOST_MIPS, 1, [...])
4880         ;;
4881 SPARC)
4882         AC_DEFINE(HOST_SPARC, 1, [...])
4883         ;;
4884 SPARC64)
4885         AC_DEFINE(HOST_SPARC64, 1, [...])
4886         ;;
4887 RISCV32)
4888         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4889         AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4890         ;;
4891 RISCV64)
4892         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4893         AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4894         ;;
4895 esac
4897 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4898 case "$HOST" in
4899 X86 | AMD64 | ARM | ARM64)
4900         MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4901         ;;
4902 esac
4904 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4905 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4907 dnl *************
4908 dnl *** VTUNE ***
4909 dnl *************
4911 AC_ARG_ENABLE(vtune,[  --enable-vtune   Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4912 AC_ARG_WITH(vtune, [  --with-vtune=<vtune prefix>       Enable jit vtune profiling], enable_vtune=yes,)
4914 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4916 if test "x$enable_vtune" = "xyes"; then
4917         if test "x$with_vtune" = "x"; then
4918                 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4919         else
4920                 VTUNE_PATH=$with_vtune
4921         fi
4922         VTUNE_INCLUDE=$VTUNE_PATH/include
4923         case "$TARGET" in
4924         X86)
4925                 VTUNE_LIB=$VTUNE_PATH/lib32
4926                 ;;
4927         AMD64)
4928                 VTUNE_LIB=$VTUNE_PATH/lib64
4929                 ;;
4930         *)
4931                 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4932                 ;;
4933         esac
4934         if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4935                 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4936         fi
4937         if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4938                 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4939         fi
4941         VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4942         VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4944         AC_SUBST(VTUNE_LIBS)
4945         AC_SUBST(VTUNE_CFLAGS)
4947 dnl Use GCC atomic ops if they work on the target.
4948 if test x$GCC = "xyes"; then
4949         case $TARGET in
4950         X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4951                 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4952                 ;;
4953         esac
4956 if test "x$target_mach" = "xyes"; then
4958    if test "x$TARGET_SYS" = "xWATCHOS"; then
4959           AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4960           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4961           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4962           BTLS_SUPPORTED=no
4963    elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64" -o "x$TARGET" = "xARM6432"; then
4964           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4965           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4966           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4967           BTLS_SUPPORTED=no
4968           target_ios=yes
4969    else
4970        AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4971        #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4972        #error fail this for ios
4973        #endif
4974        ], [
4975                   AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4976           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4977           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4978           target_osx=yes
4979        ], [
4980           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4981           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4982           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4983           BTLS_SUPPORTED=no
4984                   target_ios=yes
4985        ])
4986         fi
4987    AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4990 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4992 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4994 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4995    AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4996 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4997    AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4998 else
4999    AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
5002 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
5004 if test "x$sizeof_register" = "x4"; then
5005   AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
5006 elif test "x$sizeof_register" = "x8"; then
5007   AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
5008 else
5009   AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
5012 # zlib/configure detects visibility support similarly and defines HAVE_HIDDEN
5013 # on the compiler command line (not config.h).
5014 if test "x$have_visibility_hidden" = "xyes"; then
5015    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
5016    ZLIB_CFLAGS="$ZLIB_CFLAGS -DHAVE_HIDDEN"
5019 if test "x$have_deprecated" = "xyes"; then
5020    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
5023 dnl 
5024 dnl Simple Generational checks (sgen)
5026 SGEN_DEFINES=
5027 AC_ARG_WITH(sgen,                    [  --with-sgen=yes,no             Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
5028 AC_ARG_WITH(sgen-default-concurrent, [  --with-sgen-default-concurrent=yes,no             Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
5029 if test x$buildsgen = xyes; then
5030    AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
5031    SGEN_DEFINES="-DHAVE_SGEN_GC"
5033         conc_gc_msg=""
5034    if test x$with_sgen_default_concurrent != xno; then
5035        AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
5036            conc_gc_msg=" (concurrent by default)"
5037    fi
5039    if test "x$gc_msg" = "x"; then
5040       gc_msg="sgen$conc_gc_msg"
5041    else
5042       gc_msg="sgen$conc_gc_msg and $gc_msg"
5043    fi
5045 AC_SUBST(SGEN_DEFINES)
5046 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
5048 jit_status="Building and using the JIT"
5050 libsuffix=".so"
5052 case "$host" in
5053      *-*-aix*)
5054         dnl on AIX/PASE, shared libraries can be and usually are inside archives
5055         dnl so, we specify them by libfoo.a(libfoo.so.0) for libtool's conventions,
5056         dnl or libfoo.a(shr[_64].o) for the AIX system convention,
5057         dnl or lib.so[.0](shr[_64].o) for libtool's hybrid convention
5058         dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX
5059         LIBC="libc.a(shr_64.o)"
5060         # Thanks, I hate it! This is crumbly, especially the one-liner.
5061         AC_MSG_CHECKING([how to dlopen libintl])
5062         AC_LINK_IFELSE([AC_LANG_SOURCE([
5063                 /* XXX: Check for libintl header/gettext func better? */
5064                 #include <libintl.h>
5066                 int main (void) {
5067                         gettext("Dummy for autoconf");
5068                         return 1;
5069                 }
5070         ])],
5071         [
5072         INTL="$(dump -X64 -Hp conftest$EXEEXT | grep libintl | cut -c 38- | tr -s " " | awk '{print $1"("$2")"}')"
5073         AC_MSG_RESULT([yes, $INTL])
5074         ],
5075         [
5076         INTL="libintl.a(libintl.so.8)"
5077         AC_MSG_RESULT([no, falling back to $INTL])
5078         ])
5079         SQLITE3="libsqlite3.a(libsqlite3.so.0)"
5080         # it's very tempting to set a libsuffix, but it depends on the soname value
5081         ;;
5082      *-*-os400*)
5083         dnl However, IBM's packages for i try to be more "normal" than the AIX world, naming wise.
5084         dnl The library archives has "normal" .so names, but they're members with predictable "shr" names for fat libraries.
5085         LIBC="libc.a(shr_64.o)"
5086         INTL="libintl.so(shr_64.o)"
5087         SQLITE3="libsqlite3.so(shr_64.o)"
5088         # likewise, it's safer to assume ".so(shr_64.o)" due to official IBM packages being built this way, but as with AIX, others may not be guaranteed
5089         # it may be worth revisiting this in the future
5090         ;;
5091      *-*-darwin*)
5092         libsuffix=".dylib"
5093         LIBC="libc.dylib"
5094         INTL="libintl.dylib"
5095         SQLITE="libsqlite.0.dylib"
5096         SQLITE3="libsqlite3.0.dylib"
5097         X11="libX11.dylib"
5098         GDKX11="libgdk-x11-2.0.dylib"
5099         GTKX11="libgtk-x11-2.0.dylib"
5100         ;;
5101      *-*-*netbsd*)
5102         LIBC="libc.so"
5103         INTL="libintl.so"
5104         SQLITE="libsqlite.so"
5105         SQLITE3="libsqlite3.so"
5106         ;;
5107      *-*-kfreebsd*-gnu)
5108         LIBC="libc.so.0.1"
5109         INTL="libc.so.0.1"
5110         X11="libX11.so.6"
5111         ;;
5112     *-*-*freebsd*)
5113         LIBC="libc.so.7"
5114         INTL="libintl.so"
5115         SQLITE="libsqlite.so"
5116         SQLITE3="libsqlite3.so"
5117         ;;
5118     *-*-*openbsd*)
5119         LIBC="libc.so"
5120         INTL="libintl.so"
5121         SQLITE="libsqlite.so"
5122         SQLITE3="libsqlite3.so"
5123         ;;
5124     *-*-*linux*)
5125         if test "x$with_core" != "xonly"; then
5126                 AC_PATH_X
5127                 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
5128                 AC_MSG_CHECKING(for the soname of libX11.so)
5129                 for i in $x_libraries $dlsearch_path; do
5130                         for r in 4 5 6; do
5131                                 if test -f $i/libX11.so.$r; then
5132                                         X11=libX11.so.$r
5133                                         AC_MSG_RESULT($X11)
5134                                 fi
5135                         done
5136                 done
5137                 
5138                 if test "x$X11" = "xlibX11.so"; then
5139                         AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
5140                         X11=libX11.so.6
5141                 fi
5142         fi
5143         ;;
5144 esac
5146 AC_SUBST(libsuffix)
5148 ######################################
5149 # EGLIB CHECKS
5150 ######################################
5152 GNUC_PRETTY=
5153 GNUC_UNUSED=
5154 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
5155 if test x$GCC = xyes; then
5156    GNUC_UNUSED='__attribute__((__unused__))'
5157    GNUC_NORETURN='__attribute__((__noreturn__))'
5158    case $host_cpu in
5159      i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
5160    esac
5162 AC_SUBST(GNUC_PRETTY)
5163 AC_SUBST(GNUC_UNUSED)
5164 AC_SUBST(GNUC_NORETURN)
5165 AC_SUBST(BREAKPOINT)
5167 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
5169 case $host in
5170 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
5171     PATHSEP='\\'
5172     SEARCHSEP=';'
5173     OS="WIN32"
5174     PIDTYPE='void *'
5175     ;;
5177     PATHSEP='/'
5178     SEARCHSEP=':'
5179     OS="UNIX"
5180     PIDTYPE='int'
5181     ;;
5182 esac
5184 case $host in
5185         *-*-solaris*)
5186         CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
5187         ;;
5188 esac
5190 case $target in
5191 arm*-darwin*|aarch64*-*|riscv*)
5192     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
5193     ;;
5194 i*86-*-darwin*)
5195     ORDER=G_LITTLE_ENDIAN
5196     ;;
5197 *-*-haiku*)
5198     LDFLAGS="$LDFLAGS -ltextencoding"
5199     ;;
5200 *-*-openbsd*)
5201     CFLAGS="$CFLAGS -pthread"
5202     LDFLAGS="$LDFLAGS -pthread"
5203     ;;
5204 esac
5206 AC_SUBST(ORDER)
5207 AC_SUBST(PATHSEP)
5208 AC_SUBST(SEARCHSEP)
5209 AC_SUBST(OS)
5210 AC_SUBST(PIDTYPE)
5212 # Defined for all targets/platforms using classic Windows API support.
5213 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
5214 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
5216 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
5217 AC_CHECK_FUNCS(getrlimit)
5218 AC_CHECK_FUNCS(fork execv execve)
5219 AC_CHECK_FUNCS(waitpid)
5221 AC_ARG_WITH([overridable-allocators], [  --with-overridable-allocators  allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
5223 if test x$with_overridable_allocators = xyes; then
5224         AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5225   AC_MSG_NOTICE([Overridable allocator support enabled])
5226 else
5227   AC_MSG_NOTICE([Overridable allocator support disabled])
5231 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
5232 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
5233 # removed once support for 10.6 is dropped.
5235 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
5237 if test x$target_osx = xyes; then
5238 AC_CHECK_FUNCS(getpwuid_r)
5239 elif test x$target_ios = xno; then
5240 AC_CHECK_FUNCS(strndup getpwuid_r)
5243 AC_SEARCH_LIBS(sqrtf, m)
5245 # nanosleep may not be part of libc, also search it in other libraries
5246 AC_SEARCH_LIBS(nanosleep, rt)
5248 AC_SEARCH_LIBS(dlopen, dl)
5250 # AIX/OS400 -bsymbolic
5251 # Apple -bind_at_load
5252 # The rest GNU.
5254 export_link_flags=--export-dynamic
5255 case $host_os in
5256 mingw*|cygwin*)
5257         export_link_flags=--export-all-symbols
5258         ;;
5259 *-*-darwin*)
5260         export_link_flags=--export_dynamic
5261         ;;
5262 esac
5263 AX_APPEND_LINK_FLAGS([-Wl,$export_link_flags -Wl,-Bsymbolic -bsymbolic -Wl,-z,now -Wl,-bind_at_load])
5265 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
5266 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
5267 AC_CHECK_LIB(iconv, iconv_open)
5268 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
5269 AC_SUBST(HAVE_ALLOCA_H)
5271 # Get the exact type of size_t, not just its size.
5272 # This is so we can find an exact printf format among u, lu, llu, I64u.
5273 # To avoid warnings about slight mismatches.
5274 # C99 runtime "zu" dependency is being avoided here.
5276 # We have to compile as C++ because C is too lenient
5277 # and lets the wrong thing compile, with warnings.
5279 # Note: "zu" or ifdef <something> have the advantage
5280 # of producing installable "biarch" headers. i.e. one Mac header
5281 # for Mac/x86 and Mac/amd64.
5283 AC_LANG_PUSH(C++)
5285 # Check long before int because it is the overwhelming Unix answer,
5286 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
5288 # long ahead of int also tends to produce biarch-compatible headers except Windows.
5290 AC_MSG_CHECKING(if size_t is unsigned long)
5291 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5292         #include <stddef.h>
5293         unsigned long *a = (size_t*)0;
5294 ])], [
5295         AC_MSG_RESULT(yes)
5296         AC_SUBST(GSIZE_FORMAT, '"lu"')
5297 ], [
5298         AC_MSG_RESULT(no)
5299         AC_MSG_CHECKING(if size_t is unsigned int)
5300         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5301                 #include <stddef.h>
5302                 unsigned *a = (size_t*)0;
5303         ])], [
5304                 AC_MSG_RESULT(yes)
5305                 AC_SUBST(GSIZE_FORMAT, '"u"')
5306         ], [
5307 # At this point the majority of systems have their answer,
5308 # and we descend into non-standard or new-standard territory.
5310 # Check __int64 first because I64 on some systems predates ll, enabling
5311 # new compiler/old runtime interop, and the types always have the same size.
5312                 AC_MSG_RESULT(no)
5313                 AC_MSG_CHECKING(if size_t is unsigned __int64)
5314                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5315                         #include <stddef.h>
5316                         unsigned __int64 *a = (size_t*)0;
5317                 ])], [
5318                         AC_MSG_RESULT(yes)
5319                         AC_SUBST(GSIZE_FORMAT, '"I64u"')
5320                 ], [
5321                         AC_MSG_RESULT(no)
5322                         AC_MSG_CHECKING(if size_t is unsigned long long)
5323                         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5324                                 #include <stddef.h>
5325                                 unsigned long long *a = (size_t*)0;
5326                         ])], [
5327                                 AC_MSG_RESULT(yes)
5328                                 AC_SUBST(GSIZE_FORMAT, '"llu"')
5329                         ], [
5330                                 AC_MSG_RESULT(no)
5331                                 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
5332                         ] )
5333                 ] )
5334         ] )
5335 ] )
5337 AC_LANG_POP
5339 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
5340 # This provides for an exact match with functions that
5341 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
5342 # uintptr_t is not necessarily the same.
5344 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
5345 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
5347 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
5348    GSIZE="size_t"
5349    GSSIZE="ptrdiff_t"
5350 else
5351    GSIZE="uintptr_t"
5352    GSSIZE="intptr_t"
5355 AC_SUBST(GSIZE)
5356 AC_SUBST(GSSIZE)
5357 AC_SUBST(GSIZE_FORMAT)
5360 # END OF EGLIB CHECKS
5363 AC_ARG_WITH([libgdiplus],
5364         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)],
5365         [], [with_libgdiplus=installed])
5367 # default install location
5368 libgdiplus_install_loc=libgdiplus${libsuffix}
5369 case "$host" in
5370     *-*-*linux*)
5371     libgdiplus_install_loc=libgdiplus${libsuffix}.0
5372     ;;
5373 esac
5375 case $with_libgdiplus in
5376     no)
5377     libgdiplus_loc=
5378     ;;
5380     installed)
5381     libgdiplus_loc=
5382     if test x$cross_compiling = xno; then
5383         if test x$host_darwin = xyes; then
5384             a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
5385             if test -x $a; then
5386               libgdiplus_install_loc=$a
5387               libgdiplus_loc=$a
5388             fi
5389         fi
5390     fi
5391     ;;
5393     yes|sibling)
5394     libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5395     ;;
5397     /*) # absolute path, assume it is an install location
5398     libgdiplus_loc=$with_libgdiplus
5399     libgdiplus_install_loc=$with_libgdiplus
5400     ;;
5402     *)
5403     libgdiplus_loc=`pwd`/$with_libgdiplus
5404     ;;
5405 esac
5406 AC_SUBST(libgdiplus_loc)
5407 AC_SUBST(libgdiplus_install_loc)
5409 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)
5410 if test "x$icall_symbol_map" = "xyes"; then
5411    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5414 AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5415 if test "x$icall_export" = "xyes"; then
5416    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5419 AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5420 if test "x$icall_tables" = "xno"; then
5421    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5424 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5426 if test "x$with_tls" = "x__thread"; then
5427         AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5428         # Pass the information to libgc
5429         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5430         AC_MSG_CHECKING(if the tls_model attribute is supported)
5431         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5432                 ], [
5433                         AC_MSG_RESULT(yes)
5434                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5435                 ], [
5436                         AC_MSG_RESULT(no)
5437         ])
5440 if test ${TARGET} = ARM; then
5441         dnl ******************************************
5442         dnl *** Check to see what FPU is available ***
5443         dnl ******************************************
5444         AC_MSG_CHECKING(which FPU to use)
5446         #
5447         # This is a bit tricky:
5448         #
5449         # if (__ARM_PCS_VFP) {
5450         #       /* mfloat-abi=hard == VFP with hard ABI */
5451         # } elif (!__SOFTFP__) {
5452         #       /* mfloat-abi=softfp == VFP with soft ABI */
5453         # } else {
5454         #       /* mfloat-abi=soft == no VFP */
5455         # }
5456         #
5457         # The exception is iOS (w/ GCC) where none of the above
5458         # are defined (but iOS always uses the 'softfp' ABI).
5459         #
5460         # No support for FPA.
5461         #
5463         fpu=NONE
5465         # iOS GCC always uses the 'softfp' ABI.
5466         if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5467                 fpu=VFP
5468         fi
5470         # Are we using the 'hard' ABI?
5471         if test x$fpu = xNONE; then
5472                 AC_TRY_COMPILE([], [
5473                         #ifndef __ARM_PCS_VFP
5474                         #error "Float ABI is not 'hard'"
5475                         #endif
5476                 ], [
5477                         fpu=VFP_HARD
5478                 ], [
5479                         fpu=NONE
5480                 ])
5481         fi
5483         # No 'hard' ABI. 'soft' or 'softfp'?
5484         if test x$fpu = xNONE; then
5485                 AC_TRY_COMPILE([], [
5486                         #ifdef __SOFTFP__
5487                         #error "Float ABI is not 'softfp'"
5488                         #endif
5489                 ], [
5490                         fpu=VFP
5491                 ], [
5492                         fpu=NONE
5493                 ])
5494         fi
5496         if test x$arm_fpu != x; then
5497            fpu=$arm_fpu
5498         fi
5500         AC_MSG_RESULT($fpu)
5501         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5502         unset fpu
5504         dnl *********************************************
5505         dnl *** Check which ARM version(s) we can use ***
5506         dnl *********************************************
5507         AC_MSG_CHECKING(which ARM version to use)
5509         AC_TRY_COMPILE([], [
5510                 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5511                 #error Not on ARM v5.
5512                 #endif
5513         ], [
5514                 arm_v5=yes
5516                 arm_ver=ARMv5
5517         ], [])
5519         AC_TRY_COMPILE([], [
5520                 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5521                 #error Not on ARM v6.
5522                 #endif
5523         ], [
5524                 arm_v5=yes
5525                 arm_v6=yes
5527                 arm_ver=ARMv6
5528         ], [])
5530         AC_TRY_COMPILE([], [
5531                 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5532                 #error Not on ARM v7.
5533                 #endif
5534         ], [
5535                 arm_v5=yes
5536                 arm_v6=yes
5537                 arm_v7=yes
5539                 arm_ver=ARMv7
5540         ], [])
5542         AC_MSG_RESULT($arm_ver)
5544         if test x$arm_v5 = xyes; then
5545                 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5546                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5547         fi
5549         if test x$arm_v6 = xyes; then
5550                 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5551                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5552         fi
5554         if test x$arm_v7 = xyes; then
5555                 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5556                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5557         fi
5559         if test x$host_linux = xyes; then
5560                 RID="linux-arm"
5561                 COREARCH="arm"
5562                 if test x$fpu = xNONE; then
5563                         RID="linux-armel"
5564                         COREARCH="armel"
5565                 fi
5566         fi
5569 AC_SUBST(RID)
5570 AC_SUBST(COREARCH)
5571 AC_SUBST(CORETARGETS)
5573 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5574         AC_ARG_WITH([riscv-fpabi], [  --with-riscv-fpabi=auto,double,soft   Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5576         AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5578         if test x$fpabi = xauto; then
5579                 AC_TRY_COMPILE([], [
5580                         #ifdef __riscv_float_abi_double
5581                         #error "double"
5582                         #endif
5583                 ], [
5584                         fpabi=auto
5585                 ], [
5586                         fpabi=double
5587                 ])
5588         fi
5590         if test x$fpabi = xauto; then
5591                 AC_TRY_COMPILE([], [
5592                         #ifdef __riscv_float_abi_single
5593                         #error "single"
5594                         #endif
5595                 ], [
5596                         fpabi=auto
5597                 ], [
5598                         fpabi=single
5599                 ])
5600         fi
5602         if test x$fpabi = xauto; then
5603                 AC_TRY_COMPILE([], [
5604                         #ifdef __riscv_float_abi_soft
5605                         #error "soft"
5606                         #endif
5607                 ], [
5608                         fpabi=auto
5609                 ], [
5610                         fpabi=soft
5611                 ])
5612         fi
5614         case $fpabi in
5615         double)
5616                 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5617                 AC_MSG_RESULT([double-precision])
5618                 ;;
5619         single)
5620                 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5621                 AC_MSG_ERROR([single-precision, not supported])
5622                 ;;
5623         soft)
5624                 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5625                 AC_MSG_RESULT([soft float])
5626                 ;;
5627         auto)
5628                 AC_MSG_ERROR([unknown])
5629                 ;;
5630         *)
5631                 AC_MSG_ERROR([invalid option: $fpabi])
5632                 ;;
5633         esac
5636 if test ${TARGET} = unknown; then
5637         CPPFLAGS="$CPPFLAGS -DNO_PORT"
5638         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5641 if test "x$platform_android" = "xyes"; then
5642         case "x${TARGET}" in
5643         xARM)
5644                 case "x$arm_ver" in
5645                 xARMv5)
5646                         BTLS_SUPPORTED=yes
5647                         BTLS_PLATFORM=android-armv5
5648                         ;;
5649                 xARMv6)
5650                         BTLS_SUPPORTED=yes
5651                         BTLS_PLATFORM=android-armv6
5652                         ;;
5653                 xARMv7)
5654                         BTLS_SUPPORTED=yes
5655                         BTLS_PLATFORM=android-armv7
5656                         ;;
5657                 *)
5658                         BTLS_SUPPORTED=no
5659                         ;;
5660                 esac
5661                 ;;
5662         xARM64)
5663                 BTLS_SUPPORTED=yes
5664                 BTLS_PLATFORM=android-v8a
5665                 ;;
5666         xX86)
5667                 BTLS_SUPPORTED=yes
5668                 BTLS_PLATFORM=android-x86
5669                 ;;
5670         xAMD64)
5671                 BTLS_SUPPORTED=yes
5672                 BTLS_PLATFORM=android-x64
5673                 ;;
5674         *)
5675                 BTLS_SUPPORTED=no
5676                 ;;
5677         esac
5680 if test ${ACCESS_UNALIGNED} = no; then
5681         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5684 if test x$host_darwin = xyes; then
5685         AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5686         AS_IF(
5687                 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5688                 [AC_MSG_RESULT([no])],
5689                 [
5690                         # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5691                         AR_FLAGS="Scru"
5692                         RANLIB="$RANLIB -no_warning_for_no_symbols"
5693                         AC_MSG_RESULT([yes])
5694                 ]
5695         )
5698 case "x$libgc" in
5699         xincluded)
5700                 # Pass CPPFLAGS to libgc configure
5701                 # We should use a separate variable for this to avoid passing useless and
5702                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5703                 # This should be executed late so we pick up the final version of CPPFLAGS
5704                 # The problem with this approach, is that during a reconfigure, the main
5705                 # configure scripts gets invoked with these arguments, so we use separate
5706                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5707                 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5708                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5709                         TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5710                 fi
5711                 # Don't pass -finstrument-for-thread-suspension in, 
5712                 # if these are instrumented it will be very bad news 
5713                 # (infinite recursion, undefined parking behavior, etc)
5714                 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5715                 ac_configure_args="$ac_configure_args --enable-single-obj-compilation --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
5716                 if test "x$support_boehm" = "xyes"; then
5717                         AC_CONFIG_SUBDIRS(external/bdwgc)
5718                 fi
5719                 ;;
5720 esac
5722 MALLOC_MEMPOOLS=no
5723 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5724         if test x$with_malloc_mempools = xyes; then
5725                 MALLOC_MEMPOOLS=yes
5726                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5727         fi
5731 DISABLE_MCS_DOCS=default
5732 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
5733         if test x$with_mcs_docs != xyes; then
5734                 DISABLE_MCS_DOCS=yes
5735         fi
5737 if test -n "$INSTALL_4_x_TRUE"; then :
5738         DISABLE_MCS_DOCS=yes
5740 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5741    DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5744 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)],[
5745         if test x$with_lazy_gc_thread_creation != xno ; then
5746                 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5747         fi
5748 ], [with_lazy_gc_thread_creation=no])
5750 dnl *****************************
5751 dnl *** Thread suspend policy ***
5752 dnl *****************************
5754 dnl Set a default hybrid or cooperative suspend on some platforms
5756 dnl Coop default is set by the bitcode preset.
5758 dnl If coop isn't on by default, maybe hybrid should be?
5759 if test x$enable_cooperative_suspend_default != xyes; then
5760         case $HOST in
5761         X86 | AMD64)
5762                 dnl Some host/target confusion, there's no host_osx (and
5763                 dnl host_darwin would be true on iOS not just macOS).
5764                 if test x$target_osx = xyes; then
5765                         enable_hybrid_suspend_default=yes
5766                 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5767                         enable_hybrid_suspend_default=yes
5768                 fi
5769                 ;;
5770         esac
5773 dnl Now check if there were flags overriding the defaults
5775 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])
5776 AC_ARG_ENABLE(cooperative_suspend, [  --enable-cooperative-suspend      Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5778 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5779         enable_cooperative_suspend=$with_cooperative_gc
5782 if test x$enable_cooperative_suspend = xdefault; then
5783         enable_cooperative_suspend=$enable_cooperative_suspend_default
5786 if test x$enable_cooperative_suspend != xno; then
5787         AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5788         enable_hybrid_suspend_default=no
5791 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5793 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])
5795 if test x$enable_hybrid_suspend = xdefault; then
5796    enable_hybrid_suspend=$enable_hybrid_suspend_default
5799 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5800         AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5803 if test x$enable_hybrid_suspend != xno ; then
5804         AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5807 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5809 dnl End of thread suspend policy
5811 dnl ***************************
5812 dnl *** feature experiments ***
5813 dnl ***************************
5815 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5816 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST       Enable experimental fatures from the comma-separate LIST.  Available experiments: null,tiered],[
5818         if test x$enable_experiment != x ; then
5819                 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5820         fi
5821         for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5822                 eval "mono_experiment_test_enable_$feature='yes'"
5823         done
5825         if test "x$mono_experiment_test_enable_all" = "xyes"; then
5826                 eval "mono_experiment_test_enable_null='yes'"
5827                 eval "mono_experiment_test_enable_tiered='yes'"
5828                 true
5829         fi
5831         if test "x$mono_experiment_test_enable_null" = "xyes"; then
5832                 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5833         fi
5834         if test "x$mono_experiment_test_enable_tiered" = "xyes"; then
5835                 AC_DEFINE(ENABLE_EXPERIMENT_TIERED, 1, [Enable experiment 'Tiered Compilation'])
5836         fi
5837 ],[])
5839 AM_CONDITIONAL(ENABLE_EXPERIMENT_TIERED, test x$mono_experiment_test_enable_tiered = xyes)
5841 dnl **********************
5842 dnl *** checked builds ***
5843 dnl **********************
5845 AC_ARG_ENABLE(checked_build, [  --enable-checked-build=LIST      To enable checked build (expensive asserts), configure with a comma-separated LIST of checked build modules and then include that same list in the environment variable MONO_CHECK_MODE at runtime. Recognized checked build modules: all, gc, metadata, thread, private_types, crash_reporting],[
5847         if test x$enable_checked_build != x ; then
5848                 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5849         fi
5850         for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5851                 eval "mono_checked_build_test_enable_$feature='yes'"
5852         done
5854         if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5855                 eval "mono_checked_build_test_enable_gc='yes'"
5856                 eval "mono_checked_build_test_enable_metadata='yes'"
5857                 eval "mono_checked_build_test_enable_thread='yes'"
5858                 eval "mono_checked_build_test_enable_private_types='yes'"
5859                 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5860         fi
5862         if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5863                 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5864         fi
5866         if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5867                 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5868         fi
5870         if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5871                 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5872         fi
5874         if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5875                 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5876         fi
5878         if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5879                 # Required
5880                 with_overridable_allocators=yes
5881                 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5883                 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5884         fi
5885 ], [])
5887 dnl End of checked builds
5889 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5891 AC_CHECK_HEADER([malloc.h], 
5892                 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
5893                         [Define to 1 if you have /usr/include/malloc.h.])],,)
5895 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5896 # instead of libmono-static.a
5897 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5898    LIBMONO_LA=libmini-static.la
5899 else
5900    if test x$buildsgen = xyes; then
5901       LIBMONO_LA=libmonosgen-$API_VER.la
5902    else
5903       LIBMONO_LA=libmonoboehm-$API_VER.la
5904    fi
5906 AC_SUBST(LIBMONO_LA)
5908 dnl **************
5909 dnl ***  Btls  ***
5910 dnl **************
5912 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5913 AC_ARG_ENABLE(btls-lib, [  --disable-btls-lib             Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5914 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
5915 AC_ARG_WITH(btls_android_api, [  --with-btls-android-api        Android NDK API level for BTLS build])
5916 AC_ARG_WITH(btls_android_cmake_toolchain, [  --with-btls-android-cmake-toolchain        Path to the cmake toolchain file for Android])
5917 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])
5919 if test "x$with_btls_android_api" = "x" ; then
5920         case "$BTLS_PLATFORM" in
5921                 android-armv5)
5922                         with_btls_android_api=16" ;;
5923                 android-armv6)
5924                         with_btls_android_api=16" ;;
5925                 android-armv7)
5926                         with_btls_android_api=16 ;;
5927                 android-v8a)
5928                         with_btls_android_api=21 ;;
5929                 android-x86)
5930                         with_btls_android_api=16 ;;
5931                 android-x64)
5932                         with_btls_android_api=21 ;;
5933         esac
5936 if test "x$enable_btls" = "xno"; then
5937    enable_btls_lib=no
5940 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5942 btls_android=no
5943 if test "x$enable_btls" = "xyes"; then
5944         AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5945         if test "x$CMAKE" = "xno"; then
5946                 AC_MSG_ERROR("cmake not found")
5947         fi
5949         BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5950         AC_SUBST(BTLS_ROOT)
5952         btls_arch=
5953         btls_cflags=
5954         BTLS_CMAKE_ARGS=
5956         if test "x$host_win32" = "xyes"; then
5957                 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5958         fi
5960         case "$BTLS_PLATFORM" in
5961         i386)
5962                 btls_arch=i386
5963                 btls_cflags="-m32"
5964                 case $host_os in
5965                         darwin*)
5966                                 btls_cflags="$btls_cflags -arch i386"
5967                                 ;;
5968                         mingw*|cygwin*)
5969                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5970                                 if test "x$HAVE_YASM" != "xyes"; then
5971                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5972                                 fi
5973                                 ;;
5974                 esac
5975                 ;;
5976         x86_64)
5977                 btls_arch=x86_64
5978                 case $host_os in
5979                         mingw*|cygwin*)
5980                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5981                                 if test "x$HAVE_YASM" != "xyes"; then
5982                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5983                                 fi
5984                                 ;;
5985                 esac
5986                 ;;
5987         arm)
5988                 btls_arch=arm
5989                 btls_cflags="-DOPENSSL_NO_ASM=1"
5990                 ;;
5991         armsoft)
5992                 btls_arch=arm
5993                 btls_cflags="-DOPENSSL_NO_ASM=1"
5994                 ;;
5995         aarch64)
5996                 btls_arch=aarch64
5997                 btls_cflags="-march=armv8-a+crypto"
5998                 ;;
5999         s390x)
6000                 btls_arch=s390x
6001                 ;;
6002         powerpc)
6003                 btls_arch=powerpc
6004                 case $host_os in
6005                         aix*|os400*)
6006                                 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
6007                                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
6008                 esac
6009                 ;;
6010         android-armv5)
6011                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6012                 ;;
6013         android-armv6)
6014                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6015                 ;;
6016         android-armv7)
6017                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6018                 ;;
6019         android-v8a)
6020                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6021                 ;;
6022         android-x86)
6023                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6024                 ;;
6025         android-x64)
6026                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6027                 ;;
6028         riscv32)
6029                 btls_arch=riscv32
6030                 ;;
6031         riscv64)
6032                 btls_arch=riscv64
6033                 ;;
6034         *)
6035                 AC_MSG_ERROR(Invalid BTLS platform)
6036         esac
6038         if test "x$platform_android" = "xyes"; then
6039                 if test "x$with_btls_android_cmake_toolchain" = "x"; then
6040                    with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
6041                 fi
6043                 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
6044                    BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
6045                 fi
6047                 btls_android=yes
6048                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
6049                 if test "x$with_btls_android_ndk" != "x"; then
6050                         BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
6051                 else
6052                         AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
6053                 fi
6054         fi
6056         if test "x$btls_arch" != "x"; then
6057                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
6058         fi
6060         BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
6061         AC_SUBST(BTLS_ARCH)
6062         AC_SUBST(BTLS_CFLAGS)
6063         AC_SUBST(BTLS_PLATFORM)
6064         AC_SUBST(BTLS_CMAKE_ARGS)
6066         AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
6067 else
6068         enable_btls=no
6071 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
6073 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
6074 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
6075 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
6077 libmono_ldflags="$libmono_ldflags $LIBS"
6079 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
6080 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
6081 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
6082 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
6083 AM_CONDITIONAL(X86, test x$TARGET = xX86)
6084 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
6085 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
6086 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
6087 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
6088 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
6089 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
6090 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
6091 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
6092 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
6093 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
6094 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
6095 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
6096 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
6097 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
6098 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
6099 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
6100 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
6101 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
6102 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
6104 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
6106 AC_SUBST(LIBC)
6107 AC_SUBST(INTL)
6108 AC_SUBST(SQLITE)
6109 AC_SUBST(SQLITE3)
6110 AC_SUBST(ODBC)
6111 AC_SUBST(X11)
6112 AC_SUBST(GDKX11)
6113 AC_SUBST(GTKX11)
6114 AC_SUBST(XINERAMA)
6115 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
6116 AC_SUBST(arch_target)
6118 #This must always be defined when building the runtime
6119 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
6121 mono_build_root=`pwd`
6122 AC_SUBST(mono_build_root)
6124 AC_ARG_ENABLE(msvc_only,[  --enable-msvc-only    Build only with Visual Studio (msvc) (defaults to no). Disable gcc build.], enable_msvc_only=$enableval, enable_msvc_only=no)
6125 if test x$host_win32 = xno; then
6126         if test x$enable_msvc_only = xyes; then
6127                 echo "Error, --enable-msvc-only only supported for Windows builds."
6128                 exit 1
6129         fi
6131 AM_CONDITIONAL(ENABLE_MSVC_ONLY, test x$enable_msvc_only = xyes)
6133 AC_ARG_ENABLE(msvc,[  --enable-msvc    Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
6134 if test x$host_win32 = xno; then
6135         if test x$enable_msvc = xyes; then
6136                 echo "Error, --enable-msvc only supported for Windows builds."
6137                 exit 1
6138         fi
6140 if test x$enable_msvc_only = xyes; then
6141         enable_msvc=yes
6143 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
6145 if test "x$enable_msvc" = "xyes"; then
6146         mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
6147         if test "x$host_cpu" = "xi686"; then
6148                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
6149                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
6150                 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
6151                 mono_runtime_wrapper=$mono_runtime
6152         else
6153                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
6154                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
6155                 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
6156                 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
6157         fi
6158         AC_SUBST(mono_msvc_build_dir)
6159         AC_SUBST(mono_msvc_build_lib_dir)
6160         AC_SUBST(mono_msvc_build_bin_dir)
6161 else
6162         mono_runtime=mono/mini/mono
6163         mono_runtime_wrapper=$mono_runtime
6166 AC_SUBST(mono_runtime)
6167 AC_SUBST(mono_runtime_wrapper)
6169 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.7.0/csc.exe
6170 VBCS_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.7.0/VBCSCompiler.exe
6172 if test $csc_compiler = mcs; then
6173   CSC=$mcs_topdir/class/lib/build/mcs.exe
6174 else
6175   CSC=$CSC_LOCATION
6178 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
6180 mono_cfg_root=$mono_build_root/runtime
6181 if test x$host_win32 = xyes; then
6182   if test "x$cross_compiling" = "xno"; then
6183     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
6184     CSC=`cygpath -m -a $CSC`
6185     CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
6186     VBCS_LOCATION=`cygpath -m -a $VBCS_LOCATION`
6187   else
6188     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
6189   fi
6190 else
6191   mono_cfg_dir=$mono_cfg_root/etc
6194 if test "x$platform_android" = "xyes"; then
6195   mono_cfg_dir=
6198 AC_SUBST(mono_cfg_dir)
6200 AC_SUBST(CSC)
6202 if test "x$with_core" != "xonly"; then
6204         AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
6205         [   depth=../../../..
6206                 case $srcdir in
6207                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6208                 .) reldir=$depth ;;
6209                 *) reldir=$depth/$srcdir ;;
6210                 esac
6211                 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
6212                 cd runtime/etc/mono/1.0
6213                 rm -f machine.config
6214                 $LN_S $reldir/data/net_1_1/machine.config machine.config
6215                 cd $depth
6216         ],[LN_S='$LN_S'])
6218         AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
6219         [   depth=../../../..
6220                 case $srcdir in
6221                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6222                 .) reldir=$depth ;;
6223                 *) reldir=$depth/$srcdir ;;
6224                 esac
6225                 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6226                 cd runtime/etc/mono/2.0
6227                 rm -f machine.config
6228                 $LN_S $reldir/data/net_2_0/machine.config machine.config
6229                 cd $depth
6230         ],[LN_S='$LN_S'])
6232         AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
6233         [   depth=../../../..
6234                 case $srcdir in
6235                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6236                 .) reldir=$depth ;;
6237                 *) reldir=$depth/$srcdir ;;
6238                 esac
6239                 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6240                 cd runtime/etc/mono/2.0
6241                 rm -f web.config
6242                 $LN_S $reldir/data/net_2_0/web.config web.config
6243                 cd $depth
6244         ],[LN_S='$LN_S'])
6246         AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
6247         [   depth=../../..
6248                 case $srcdir in
6249                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6250                 .) reldir=$depth ;;
6251                 *) reldir=$depth/$srcdir ;;
6252                 esac
6253                 $ac_aux_dir/install-sh -d runtime/etc/mono/
6254                 cd runtime/etc/mono/
6255                 rm -f browscap.ini
6256                 $LN_S $reldir/data/browscap.ini browscap.ini
6257                 cd $depth
6258         ],[LN_S='$LN_S'])
6260         AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
6261         [   depth=../../../../..
6262                 case $srcdir in
6263                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6264                 .) reldir=$depth ;;
6265                 *) reldir=$depth/$srcdir ;;
6266                 esac
6267                 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
6268                 cd runtime/etc/mono/2.0/Browsers
6269                 rm -f Compat.browser
6270                 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6271                 cd $depth
6272         ],[LN_S='$LN_S'])
6274         AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
6275         [   depth=../../../../..
6276                 case $srcdir in
6277                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6278                 .) reldir=$depth ;;
6279                 *) reldir=$depth/$srcdir ;;
6280                 esac
6281                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
6282                 cd runtime/etc/mono/4.0/Browsers
6283                 rm -f Compat.browser
6284                 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6285                 cd $depth
6286         ],[LN_S='$LN_S'])
6288         AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
6289         [   depth=../../../../..
6290                 case $srcdir in
6291                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6292                 .) reldir=$depth ;;
6293                 *) reldir=$depth/$srcdir ;;
6294                 esac
6295                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
6296                 cd runtime/etc/mono/4.5/Browsers
6297                 rm -f Compat.browser
6298                 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6299                 cd $depth
6300         ],[LN_S='$LN_S'])
6302         AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
6303         [   depth=../../../..
6304                 case $srcdir in
6305                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6306                 .) reldir=$depth ;;
6307                 *) reldir=$depth/$srcdir ;;
6308                 esac
6309                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6310                 cd runtime/etc/mono/4.0
6311                 rm -f machine.config
6312                 $LN_S $reldir/data/net_4_0/machine.config machine.config
6313                 cd $depth
6314         ],[LN_S='$LN_S'])
6316         AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
6317         [   depth=../../../..
6318                 case $srcdir in
6319                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6320                 .) reldir=$depth ;;
6321                 *) reldir=$depth/$srcdir ;;
6322                 esac
6323                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6324                 cd runtime/etc/mono/4.0
6325                 rm -f web.config
6326                 $LN_S $reldir/data/net_4_0/web.config web.config
6327                 cd $depth
6328         ],[LN_S='$LN_S'])
6330         AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
6331         [   depth=../../../..
6332                 case $srcdir in
6333                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6334                 .) reldir=$depth ;;
6335                 *) reldir=$depth/$srcdir ;;
6336                 esac
6337                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6338                 cd runtime/etc/mono/4.5
6339                 rm -f machine.config
6340                 $LN_S $reldir/data/net_4_5/machine.config machine.config
6341                 cd $depth
6342         ],[LN_S='$LN_S'])
6344         AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
6345         [   depth=../../../..
6346                 case $srcdir in
6347                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6348                 .) reldir=$depth ;;
6349                 *) reldir=$depth/$srcdir ;;
6350                 esac
6351                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6352                 cd runtime/etc/mono/4.5
6353                 rm -f web.config
6354                 $LN_S $reldir/data/net_4_5/web.config web.config
6355                 cd $depth
6356         ],[LN_S='$LN_S'])
6359 # Top level Makefile.am subdirs
6360 if test "x$with_core" = "xonly"; then
6361         MONO_SUBDIRS="llvm mono"
6362 else
6363         if test "x$support_boehm" = "xyes" -a "x$libgc" = "xincluded"; then
6364                 mono_subdirs_libgc=external/bdwgc
6365         fi
6367         if test x$enable_support_build != xno; then
6368                 mono_subdirs_support=support
6369         fi
6371         if test x$cross_compiling = xno; then
6372                 # Some tools might not build when cross-compiling
6373                 mono_subdirs_tools=tools
6374         fi
6376         if test x$DISABLE_MCS_DOCS != xyes; then
6377                 mono_subdirs_docs=docs
6378         fi
6380         if test x$with_ikvm_native = xyes; then
6381                 mono_subdirs_ikvm_native=ikvm-native
6382         fi
6384         MONO_SUBDIRS="po $mono_subdirs_libgc llvm mono $mono_subdirs_ikvm_native $mono_subdirs_support data runtime scripts man samples $mono_subdirs_tools $mono_subdirs_docs msvc acceptance-tests"
6385         MONO_NOINST_SUBDIRS="$mono_subdirs_libgc"
6388 AC_SUBST(MONO_SUBDIRS)
6389 AC_SUBST(MONO_NOINST_SUBDIRS)
6391 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])
6392 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])
6393 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
6396 # Mono.Native Support
6397 # -------------------
6398 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
6399 # It is built as a stand-alone shared library and not bundled with the runtime because we
6400 # may need to build two different versions of it.
6402 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
6403 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
6405 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
6406 # implementation accordingly.  We build a single `libmono-native` shared library.
6408 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
6410 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
6411 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
6412 # depending on platform.
6414 # We build two versions of the shared library:
6415 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
6416 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
6418 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
6419 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
6420 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
6422 # This can be called by automated tests both to ensure that the library has been correctly installed and also
6423 # to verify that it's the correct version of it.
6426 AC_MSG_CHECKING([Mono.Native support])
6427 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
6428 if test x$disable_mono_native = xyes; then
6429         mono_native=no
6430 elif test x$target_osx = xyes; then
6431         MONO_NATIVE_CC=$CC
6432         MONO_NATIVE_CXX=$CXX
6433         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6434         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6435         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6436         MONO_NATIVE_CFLAGS=$CFLAGS
6437         MONO_NATIVE_LDFLAGS=$LDFLAGS
6439         mono_native=yes
6440         MONO_NATIVE_PLATFORM=macos
6441         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
6443         if test x$enable_gss = xyes; then
6444                 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -framework GSS"
6445         fi
6447         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
6448                 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6450         if test x$mono_native_compat = xyes; then
6451                 mono_native_compat=yes
6452                 mono_native_text="Mac OSX (compat + unified v10.12)"
6453                 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6454                 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6455                 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6456                 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6457                 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6459                 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6460                 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6461                 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6462                 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6463                 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6464                 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6465         else
6466                 mono_native_compat=no
6467                 mono_native_text="Mac OSX"
6468         fi
6469 elif test x$mono_native_platform_ios = xyes; then
6470         AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6472         AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6473                 if test x$mono_native_ios_sim = xyes; then
6474                         mono_native_ios_target=ios-simulator
6475                         mono_native_text="iOS Simulator"
6476                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6477                 else
6478                         mono_native_ios_target=iphoneos
6479                         mono_native_text="iOS Device"
6480                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6481                 fi
6482                 mono_native_unified_version="10.0"
6483                 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6484         ], [
6485                 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6486                         if test x$mono_native_ios_sim = xyes; then
6487                                 mono_native_ios_target=tvos-simulator
6488                                 mono_native_text="AppleTV Simulator"
6489                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6490                         else
6491                                 mono_native_ios_target=tvos
6492                                 mono_native_text="AppleTV Device"
6493                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6494                         fi
6495                         mono_native_unified_version="10.0"
6496                         mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6497                 ], [
6498                         AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6499                                 if test x$mono_native_ios_sim = xyes; then
6500                                         mono_native_ios_target=watchos-simulator
6501                                         mono_native_text="Apple Watch Simulator"
6502                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6503                                 else
6504                                         mono_native_ios_target=watchos
6505                                         mono_native_text="Apple Watch Device"
6506                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6507                                 fi
6508                                 mono_native_unified_version="5.0"
6509                                 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6510                         ], [
6511                                 AC_MSG_ERROR([Unknown iOS Target])
6512                         ])
6513                 ])
6514         ])
6516         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6518         if test x$with_bitcode = xyes; then
6519                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6520                 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6521         else
6522                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6523         fi
6525         if test x$enable_gss = xyes; then
6526                 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6527         fi
6529         MONO_NATIVE_CC=$CC
6530         MONO_NATIVE_CXX=$CXX
6531         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6532         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6533         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6534         MONO_NATIVE_CFLAGS=$CFLAGS
6535         MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6537         if test x$mono_native_compat = xyes; then
6538                 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6539                 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6540                 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6541                 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6542                 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6543                 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6545                 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6546                 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6547                 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6548                 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6549                 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6550                 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS $mono_native_ldflags | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6551         fi
6553         mono_native=yes
6554         MONO_NATIVE_PLATFORM=ios
6555 elif test x$host_linux = xyes; then
6556         mono_native_text="Linux"
6557         MONO_NATIVE_CC=$CC
6558         MONO_NATIVE_CXX=$CXX
6559         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6560         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6561         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6562         MONO_NATIVE_CFLAGS=$CFLAGS
6563         MONO_NATIVE_LDFLAGS=$LDFLAGS
6564         if test x$enable_gss = xyes; then
6565                 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -lgssapi_krb5"
6566         else
6567                 AC_MSG_WARN([GSS is not enabled, it requires libkrb5-dev package])
6568         fi
6569         mono_native=yes
6570         mono_native_compat=no
6571         MONO_NATIVE_PLATFORM=linux
6573         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6574 elif test x$target_wasm = xyes; then
6575         mono_native_text="wasm"
6576         MONO_NATIVE_CC=$CC
6577         MONO_NATIVE_CXX=$CXX
6578         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6579         # The system.native code uses _WASM_ to check for wasm
6580         MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6581         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6582         MONO_NATIVE_CFLAGS=$CFLAGS
6583         MONO_NATIVE_LDFLAGS=$LDFLAGS
6585         mono_native=yes
6586         mono_native_compat=no
6587         MONO_NATIVE_PLATFORM=linux
6589         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6590 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6591         mono_native_text="AIX"
6592         MONO_NATIVE_CC=$CC
6593         MONO_NATIVE_CXX=$CXX
6594         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6595         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6596         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6597         MONO_NATIVE_CFLAGS=$CFLAGS
6598         dnl nosymbolic- is a hack in case -G for linking is used, as -G seems
6599         dnl to change the way unresolved symbols work on library load in an
6600         dnl incompatible manner. (as references to runtime functions are
6601         dnl resolved later) Default params otherwise are that, so seems OK.
6602         dnl Likewise, we don't seem to need to cover the entire runtime with
6603         dnl it either, on both AIX and PASE. -brtl from -G does seem to spew
6604         dnl Big Scary TOC Warnings (tm) from the linker, but it doesn't seem
6605         dnl problematic with gcc's -mminimal-toc.
6606         dnl ----
6607         dnl flock in AIX exists in libbsd (not the same as freedesktop.org
6608         dnl libbsd) which Mono.Native needs.
6609         dnl Because of the way that the library is built by default, unresolved
6610         dnl references are kept and resolved at runtime. Often, the dependency
6611         dnl chain means libbsd is loaded anyways, but not necessarily. It's
6612         dnl better to explicitly link it, even though it has it shadows libc's
6613         dnl ioctl with its own. (As for the other unresolved imports, those
6614         dnl should be provided by the Mono runtime loaded.)
6615         MONO_NATIVE_LDFLAGS="$LDFLAGS -lbsd -Wl,-bnosymbolic-"
6617         mono_native=yes
6618         mono_native_compat=no
6619         MONO_NATIVE_PLATFORM=aix
6621         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6622 elif case $host_os in freebsd*) true;; *) false;; esac; then
6623         mono_native_text="FreeBSD"
6624         MONO_NATIVE_CC=$CC
6625         MONO_NATIVE_CXX=$CXX
6626         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6627         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6628         MONO_NATIVE_CFLAGS="$CFLAGS -I/usr/local/include"
6629         MONO_NATIVE_LDFLAGS=$LDFLAGS
6631         mono_native=yes
6632         mono_native_compat=no
6633         MONO_NATIVE_PLATFORM=freebsd
6634         AC_MSG_CHECKING([Mono.Native support])
6635         AC_MSG_RESULT(freebsd)
6637         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_FREEBSD"
6638 elif case $host_os in netbsd*) true;; *) false;; esac; then
6639         mono_native_text="NetBSD"
6640         MONO_NATIVE_CC=$CC
6641         MONO_NATIVE_CXX=$CXX
6642         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6643         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6644         MONO_NATIVE_CFLAGS=$CFLAGS
6645         MONO_NATIVE_LDFLAGS=$LDFLAGS
6647         mono_native=yes
6648         mono_native_compat=no
6649         MONO_NATIVE_PLATFORM=netbsd
6650         AC_MSG_CHECKING([Mono.Native support])
6651         AC_MSG_RESULT(netbsd)
6653         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_NETBSD"
6654 elif case $host_os in haiku*) true;; *) false;; esac; then
6655         mono_native_text="Haiku"
6656         MONO_NATIVE_CC=$CC
6657         MONO_NATIVE_CXX=$CXX
6658         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6659         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6660         MONO_NATIVE_CFLAGS=$CFLAGS
6661         MONO_NATIVE_LDFLAGS=$LDFLAGS
6663         mono_native=yes
6664         mono_native_compat=no
6665         MONO_NATIVE_PLATFORM=haiku
6666         AC_MSG_CHECKING([Mono.Native support])
6667         AC_MSG_RESULT(haiku)
6669         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_HAIKU"
6670 elif test x$platform_android = xyes; then
6671         mono_native_text="Android"
6672         MONO_NATIVE_CC=$CC
6673         MONO_NATIVE_CXX=$CXX
6674         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6675         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6676         MONO_NATIVE_CFLAGS=$CFLAGS
6677         MONO_NATIVE_LDFLAGS=$LDFLAGS
6678         MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6680         mono_native=yes
6681         mono_native_compat=no
6682         MONO_NATIVE_PLATFORM=android
6684         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6685 else
6686         mono_native=no
6687         mono_native_text="no"
6690 AC_MSG_RESULT($mono_native_text)
6692 if test x$mono_native_compat = xyes; then
6693         MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6694 else
6695         MONO_NATIVE_LIBRARY_NAME=libmono-native
6698 AC_SUBST(MONO_NATIVE_PLATFORM)
6699 AC_SUBST(MONO_NATIVE_CC)
6700 AC_SUBST(MONO_NATIVE_CXX)
6701 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6702 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6703 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6704 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6705 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6706 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6707 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6708 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6709 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6710 AC_SUBST(MONO_NATIVE_CFLAGS)
6711 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6712 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6713 AC_SUBST(MONO_NATIVE_LDFLAGS)
6714 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6715 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6716 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6717 AC_SUBST(MONO_NATIVE_LIBADD)
6719 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6720 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6721 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6722 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6723 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6724 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6725 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6726 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_FREEBSD, test x$MONO_NATIVE_PLATFORM = xfreebsd)
6727 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_NETBSD, test x$MONO_NATIVE_PLATFORM = xnetbsd)
6728 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_HAIKU, test x$MONO_NATIVE_PLATFORM = xhaiku)
6730 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6731 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6732 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6733 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6734 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6736 ### C++ Linker selection
6738 # We have to lie to autotools, sometimes.
6740 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6741 # otherwise to CC.  We want C linking even if we're compiling with C++ enabled
6742 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6743 # except if we're linking with LLVM which relies on it.
6745 # Explanation of the hack:
6747 # According to
6748 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6749 # automake chooses the linker that it used to compile a target based on the
6750 # _SOURCES for that target.  If the target is comprised of only C code, it
6751 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6752 # linker arguments and a -o).  If the target _SOURCES include at least one C++ file, 
6753 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6755 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6756 # or libc++) linked in - even when Mono is written in C++, we take care not to
6757 # require the runtime library.  As a result, we don't want g++ or clang++ to do
6758 # the linking.  On the other hand if LLVM is enabled, then we _must_ use the
6759 # C++ linker - LLVM doesn't have the same restrictions.
6761 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6762 #  mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6763 #  automake's autodetection and lets us use the linker that we want.
6765 if test "x$enable_llvm_runtime" = "xyes"; then
6766         AC_SUBST(MONO_CXXLD, [$CXX])
6767 else
6768         AC_SUBST(MONO_CXXLD, [$CC])
6771 ### Set -Werror options
6773 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6775 if test x"$GCC" = xyes; then
6777         if test "x$with_jemalloc" != "xyes"; then
6779                 # incompatible-pointer-types requires gcc circa 5.x
6781                 ORIG_CFLAGS=$CFLAGS
6782                 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6783                 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6784                 AC_TRY_COMPILE([],[
6785                 ], [
6786                         AC_MSG_RESULT(yes)
6787                         CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6788                 ], [
6789                         AC_MSG_RESULT(no)
6790                         CFLAGS=$ORIG_CFLAGS
6791                 ])
6793                 CFLAGS="$CFLAGS -Werror=return-type"
6794         fi
6796         # Implicit function declarations are not 64 bit safe
6797         # Do this late, since this causes lots of configure tests to fail
6798         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6799         # jay has a lot of implicit declarations
6800         JAY_CFLAGS="-Wno-implicit-function-declaration"
6802         ORIG_CFLAGS=$CFLAGS
6803         CFLAGS="$CFLAGS -Wsometimes-uninitialized -Werror"
6804         AC_MSG_CHECKING(for -Wsometimes-uninitialized option to gcc)
6805         AC_TRY_COMPILE([],[
6806         ], [
6807                 AC_MSG_RESULT(yes)
6808                 CFLAGS="$ORIG_CFLAGS -Werror=sometimes-uninitialized"
6809         ], [
6810                 AC_MSG_RESULT(no)
6811                 CFLAGS=$ORIG_CFLAGS
6812         ])
6815 # zlib/configure checks if this program compiles and if so
6816 # defines _LARGEFILE64_SOURCE on the compiler command line (not config.h).
6818 AC_MSG_CHECKING([for large file support])
6819 AC_COMPILE_IFELSE(
6820         [AC_LANG_SOURCE([
6821                 #include <sys/types.h>
6822                 off64_t dummy = 0;
6823         ])], [
6824                 AC_MSG_RESULT(yes)
6825                 # FIXME The ramifications of _LARGEFILE64_SOURCE are not understood.
6826                 # ZLIB_CFLAGS="$ZLIB_CFLAGS -D_LARGEFILE64_SOURCE=1"
6827         ], [
6828                 AC_MSG_RESULT(no)
6829         ])
6831 # for icu shim
6832 ICU_SHIM_PATH=.
6833 if test x$with_core = xonly; then
6834         if test x$cross_compiling = xno; then
6835                 AC_CHECK_FILE($srcdir/../libraries/Native/Unix/System.Globalization.Native/pal_icushim.h, [have_shim_globalization=yes], [have_shim_globalization=no])
6836         fi
6837         if test x$have_shim_globalization = xyes || test x$cross_compiling = xyes; then
6838                 ICU_SHIM_PATH=../../../libraries/Native/Unix/System.Globalization.Native
6839                 if test x$target_osx = xyes; then
6840                         ORIG_CPPFLAGS=$CPPFLAGS
6841                         # adding icu path to pkg_config_path
6842                         PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig
6843                         export PKG_CONFIG_PATH
6844                         CPPFLAGS="`pkg-config --cflags-only-I icu-uc`"
6845                         AC_CHECK_LIB(icucore, ucol_open, LIBS=$LIBS,
6846                                 [AC_MSG_ERROR([Cannot find libicucore, skipping build for System.Globalization.Native. .NET globalization is not expected to function.])])
6847                         AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
6848                         if test x$have_sys_icu = xyes; then
6849                                 ICU_CFLAGS="$CPPFLAGS -DPALEXPORT="" -DOSX_ICU_LIBRARY_PATH=AS_ESCAPE(\"/usr/lib/libicucore.dylib\", '\"') -DTARGET_UNIX -DU_DISABLE_RENAMING -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option -Wno-deprecated-declarations"
6850                         fi
6851                         CPPFLAGS=$ORIG_CPPFLAGS
6852                 elif test x$platform_android = xyes; then
6853                         ICU_CFLAGS="-DPALEXPORT="" -DHAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS -DHAVE_SET_MAX_VARIABLE -DTARGET_UNIX -DTARGET_ANDROID -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
6854                         have_sys_icu=yes
6855                 elif test x$host_linux = xyes; then
6856                         AC_CHECK_LIB(icuuc, main, LIBS=$LIBS,
6857                                 [AC_MSG_ERROR([Cannot find libicuuc, try installing libicu-dev (or the appropriate package for your platform).])])
6858                         AC_CHECK_LIB(icui18n, main, LIBS=$LIBS,
6859                                 [AC_MSG_ERROR([Cannot find libicui18n, try installing libicu-dev (or the appropriate package for your platform).])])
6860                         AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
6861                         if test x$have_sys_icu = xyes; then
6862                                 ICU_CFLAGS="-DPALEXPORT="" -DTARGET_UNIX -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
6863                         fi
6864                 elif test x$host_sunos = xyes; then
6865                         ICU_CFLAGS="-DPALEXPORT="" -DTARGET_UNIX -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
6866                         have_sys_icu=yes
6867                 else
6868                         GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6869                 fi
6870                 AC_SUBST(ICU_CFLAGS)
6871         else
6872                 GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6873         fi
6874 else
6875         GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6878 AC_SUBST(GLOBALIZATION_SHIM_DEFINES)
6879 AC_SUBST(ICU_SHIM_PATH)
6880 AM_CONDITIONAL(HAVE_SYS_ICU, test x$have_sys_icu = xyes)
6882 AC_SUBST(CFLAGS)
6883 AC_SUBST(CPPFLAGS)
6884 AC_SUBST(LDFLAGS)
6885 AC_SUBST(CCLDFLAGS)
6886 AC_SUBST(ZLIB_CFLAGS)
6888 # Update all submodules recursively to ensure everything is checked out
6889 if test "x$with_core" != "xonly"; then
6890         (cd $srcdir && scripts/update_submodules.sh)
6893 AC_MONO_OUTPUT()
6895 if test x$host_win32 = xyes; then
6896    # Get rid of 'cyg' prefixes in library names
6897    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6898    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6899    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6900    # executable doesn't work...
6901    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6904 if test x$host_darwin = xyes; then
6905    # This doesn't seem to be required and it slows down parallel builds
6906    sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6910   case $prefix in
6911   NONE) prefix=$ac_default_prefix ;;
6912   esac
6913   case $exec_prefix in
6914   NONE) exec_prefix='${prefix}' ;;
6915   esac
6917   #
6918   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
6919   # any existing config.make.  This allows people to share the same source tree
6920   # with different build directories, one native and one cross
6921   #
6922   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6924     test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6926     echo "prefix=$prefix" > $mcs_topdir/build/config.make
6927     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6928     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6929     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6930     echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6931     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6932     echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6933     echo "VERSION = $VERSION" >> $mcs_topdir/build/config.make
6935     case $INSTALL in
6936     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6937     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6938     esac
6940     echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6942     export VERSION
6943     [myver=$($AWK 'BEGIN {
6944       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6945       if(length(vsplit [1]) > 4) {
6946         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6947       }
6948       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6949     }')]
6951     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6952     echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6954     if test x$host_darwin = xyes; then
6955       echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6956       echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6957       echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6958     elif test x$host_win32 = xyes; then
6959       echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6960       echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6961       echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6962     elif test x$host_linux = xyes; then
6963       echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6964       echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6965       echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6966     else
6967       echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6968       echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6969       echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6970     fi
6972     echo "PLATFORM_AOT_PREFIX = $PLATFORM_AOT_PREFIX" >> $mcs_topdir/build/config.make
6973     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6974       echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6975     fi
6977         if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6978            enable_system_aot=yes
6979         fi
6981     if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6982       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6983     fi
6985     if test x$DISABLE_MCS_DOCS = xyes; then
6986       echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6987     fi
6989     if test x$has_extension_module != xno; then
6990         echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6991     fi
6992     
6993     echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6994     
6995     if test "x$test_bcl_opt" = "xyes"; then    
6996       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6997     fi
6999     echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
7000     echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
7001     echo "VBCS_LOCATION?=$VBCS_LOCATION" >> $srcdir/$mcsdir/build/config.make
7003     if test $csc_compiler = mcs; then
7004       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
7005     fi
7007     if test "x$AOT_BUILD_FLAGS" != "x" ; then
7008       echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
7009       echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
7011       if test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" = "xno"; then
7012         echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS,$MONO_LLVM_PATH_OPTION" >> $srcdir/$mcsdir/build/config.make
7013       else
7014         echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
7015       fi
7016     fi
7018     if test "x$AOT_MODE" != "x" ; then
7019       echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
7020     fi
7022     if test "x$enable_btls" = "xyes"; then
7023       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
7024     fi
7026     if test "x$mono_native" = "xyes"; then
7027       echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
7028     else
7029       echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
7030     fi
7032     if test x$mono_native_compat = xyes; then
7033       echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
7034     else
7035       echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
7036     fi
7038     force_enable_compiler_server=no;
7040     AC_MSG_CHECKING([compiler server])
7041     AC_ARG_WITH(compiler-server, [  --with-compiler-server=yes,no,default,force      Enables or disables compiler server],[
7042        if test x$withval = xyes; then
7043            enable_compiler_server=yes;
7044        # force will bypass any automatic disables to allow you to test the compiler server
7045        #  in scenarios where it is disabled
7046        elif test x$withval = xforce; then
7047            enable_compiler_server=yes;
7048            force_enable_compiler_server=yes;
7049        elif test x$withval = xno; then
7050            enable_compiler_server=no;
7051        elif test x$withval = xdefault; then
7052            enable_compiler_server=yes;
7053        else
7054            AC_MSG_ERROR([You must supply one of "yes", "no", "default" or "force" to the --with-compiler-server option])
7055        fi
7056     ],[enable_compiler_server=yes])
7058     AC_MSG_RESULT($enable_compiler_server)
7060     if test x$enable_compiler_server = xyes; then
7061        if test x$force_enable_compiler_server = xyes; then
7062            AC_MSG_WARN([forcing compiler server to stay enabled])
7063        elif test x$host_darwin = xyes || test x$host_win32 = xyes; then
7064            AC_MSG_WARN([compiler server temporarily disabled on darwin and win32])
7065            enable_compiler_server=no;
7066        elif test x$csc_compiler = xmcs; then
7067            AC_MSG_WARN([mcs does not support the compiler server])
7068            enable_compiler_server=no;
7069        fi
7070     fi
7072     echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
7073     echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
7074     if test x$enable_compiler_server = xyes; then
7075       echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
7076     else
7077       echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
7078     fi
7079     echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
7081         if test x$enable_msvc_only = xyes; then
7082                 echo "ENABLE_MSVC_ONLY=1" >> $srcdir/$mcsdir/build/config.make
7083         fi
7085   fi
7089 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
7091 btls_platform_string=
7092 if test x$enable_btls = xyes; then
7093         if test x$btls_android = xyes; then
7094                 btls_platform_string=" (android:$BTLS_PLATFORM)"
7095         else
7096                 btls_platform_string=" ($BTLS_PLATFORM)"
7097         fi
7100 thread_suspend_msg=
7101 if test x$buildsgen = xyes; then
7102         if test x$enable_cooperative_suspend != xno; then
7103                 thread_suspend_msg="Suspend:       Cooperative"
7104         elif test x$enable_hybrid_suspend != xno; then
7105                 thread_suspend_msg="Suspend:       Hybrid"
7106         else
7107                 thread_suspend_msg="Suspend:       Preemptive"
7108         fi
7111 if test "x$with_core" = "xonly"; then
7112   if test ! -e netcore/Makefile; then
7113     # Out of tree builds
7114     mkdir -p netcore
7115     echo "all:" > netcore/Makefile
7116   fi
7117   echo "VERSION = $VERSION" > netcore/config.make
7118   echo "RID = $RID" >> netcore/config.make
7119   echo "COREARCH = $COREARCH" >> netcore/config.make
7120   echo "CORETARGETS = $CORETARGETS" >> netcore/config.make
7121   echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> netcore/config.make
7123   if test x$build_darwin = xyes; then
7124     echo "HOST_PLATFORM ?= macos" >> netcore/config.make
7125   elif test x$host_darwin = xyes; then
7126     echo "HOST_PLATFORM ?= macos" >> netcore/config.make
7127   elif test x$host_win32 = xyes; then
7128     echo "HOST_PLATFORM ?= win32" >> netcore/config.make
7129   elif test x$host_linux = xyes; then
7130     echo "HOST_PLATFORM ?= linux" >> netcore/config.make
7131   else
7132     echo "HOST_PLATFORM ?= unix" >> netcore/config.make
7133   fi
7136         
7137 echo "
7138         mcs source:    $mcsdir
7139         C# Compiler:   $csc_compiler
7140         CompilerServer:$enable_compiler_server
7142    Engine:
7143         Host:          $host
7144         Target:        $target
7145         GC:            $gc_msg 
7146         $thread_suspend_msg
7147         TLS:           $with_tls
7148         SIGALTSTACK:   $with_sigaltstack
7149         Engine:        $jit_status
7150         BigArrays:     $enable_big_arrays
7151         DTrace:        $enable_dtrace
7152         LLVM Back End: $enable_llvm (built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
7153         Spectre:       $spectre_mitigation_status
7154         Mono.Native:   $mono_native_text
7156    Libraries:
7157         .NET 4.x:        $with_profile4_x
7158         Xamarin.Android: $with_monodroid
7159         Xamarin.iOS:     $with_monotouch
7160         Xamarin.WatchOS: $with_monotouch_watch
7161         Xamarin.TVOS:    $with_monotouch_tv
7162         Xamarin.Mac:     $with_xammac
7163         Windows AOT:     $with_winaot
7164         Orbis:           $with_orbis
7165         Unreal:          $with_unreal
7166         WebAssembly:     $with_wasm
7167         Test profiles:   AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid), AOT Full Interp ($with_testing_aot_full_interp), Windows Full AOT Interp ($with_testing_winaot_interp)
7168         JNI support:     $jdk_headers_found
7169         libgdiplus:      $libgdiplus_msg
7170         zlib:            $zlib_msg
7171         BTLS:            $enable_btls$btls_platform_string
7172         jemalloc:        $with_jemalloc (always use: $with_jemalloc_always)
7173         crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
7174         .NET Core:       $with_core
7175         $disabled
7177 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
7178    AC_MSG_WARN([Turning off static Mono is a risk, you might run into unexpected bugs])