[wasm] Restrict the changes in #20113 to netcore only. (#20114)
[mono-project.git] / configure.ac
blob9e3b75b2ba26cf7cdc719dc3964838a97e284160
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                 host_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$host_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       case "$host" in
1128         s390x*) csc_compiler=roslyn ;;
1129         *) csc_compiler=mcs
1130       esac
1131    elif test $endian = little; then
1132       case "$host" in
1133         powerpc*) csc_compiler=mcs ;;
1134         *) csc_compiler=roslyn ;;
1135       esac
1136    else
1137       csc_compiler=mcs
1138    fi
1140 AC_MSG_RESULT($csc_compiler)
1142 AC_ARG_WITH(jemalloc,             [  --with-jemalloc=yes,no               If jemalloc is enabled (defaults to no)],                                     [], [with_jemalloc=no])
1143 AC_ARG_WITH(jemalloc-always,      [  --with-jemalloc_always=yes,no        If jemalloc is enabled and always used (defaults to yes)],                    [], [with_jemalloc_always=no])
1144 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])
1147 if test x$target_win32 = xyes; then
1148 with_jemalloc=no
1149 with_jemalloc_assert=no
1150 with_jemalloc_always=no
1153 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
1154 if test "x$with_jemalloc_assert" = "xyes"; then
1155 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
1156 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
1157 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
1160 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
1161 if test "x$with_jemalloc_always" = "xyes"; then
1162 with_jemalloc=yes
1163 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
1164 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
1165 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
1168 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
1169 if test "x$with_jemalloc" = "xyes"; then
1170 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
1171 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
1172 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
1174 if test "x$target_mach" = "xyes"; then
1175         JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
1178 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
1179 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
1181 AC_SUBST(JEMALLOC_CFLAGS)
1182 AC_SUBST(JEMALLOC_CPPFLAGS)
1183 AC_SUBST(JEMALLOC_LDFLAGS)
1184 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1187 # Terminology:
1188 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1189 # MERP - The MS telemetry profile. Not for general use.
1190 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1192 # 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.
1194 #--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.
1195 #--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.
1196 #--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.
1197 #--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.
1199 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])
1200 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])
1201 AC_ARG_ENABLE(crash-reporting,  [  --disable-crash-reporting            Enable or Disable crash reporting subsystem],        [crash_reporting=$enableval], [crash_reporting=yes])
1203 if test "x$with_crash_privacy" = "xyes"; then
1204 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1207 if test "x$with_structured_crashes" = "xno"; then
1208 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1211 case "$host" in
1212         *-mingw*|*-*-cygwin*)
1213                 crash_reporting=no
1214                 ;;
1215 esac
1217 if test "x$crash_reporting" != "xyes"; then
1218 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1219 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1222 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1223 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1225 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1226 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1228 if test x$enable_monodroid = xyes; then
1229         AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1232 if test x$enable_monotouch = xyes; then
1233         AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1236 AC_ARG_ENABLE(cxx, [  --enable-cxx   compile some code as C++])
1237 AM_CONDITIONAL(ENABLE_CXX, test x$enable_cxx = xyes)
1239 # mono/corefx/native has a lot of invalid C++98 in its headers
1240 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1241 # use these C99 print macros in the command line, since glib may not win first inttypes include
1242 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1243 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1244 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1245 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1247 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1248 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1249 # and add it whenever we're running clang on Darwin.
1250 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1251         CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1254 AC_SUBST(CXXFLAGS_COMMON)
1256 if test "x$enable_cxx" = "xyes"; then
1258         CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1260         # -std=gnu99 -xc++ is not allowed and errors.
1261         CXX_REMOVE_CFLAGS=-std=gnu99
1262         # These give warnings and should be removed. They are C-only.
1263         # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1264         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1265         # Likewise with CentOS 6 gcc 4.4.
1266         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1268         # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1269         # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1270         # generates a warning every time we run gcc which is very unsightly.
1271         # The warning is for e.g. sprintf(foo, "") which can just be
1272         # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1273         # and completely legal and valid.
1274         # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1275         # Alternatively, just run $CXX -xc++ -c /dev/null.
1276         AC_LANG_PUSH(C++)
1277         ORIG_CXXFLAGS=$CXXFLAGS
1278         CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1279         AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1280         AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1281                                  [ AC_MSG_RESULT(no)
1282                                    CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1283         CXXFLAGS=$ORIG_CXXFLAGS
1284         AC_LANG_POP(C++)
1286 AC_SUBST(CXX_ADD_CFLAGS)
1287 AC_SUBST(CXX_REMOVE_CFLAGS)
1290 # Set the build profiles and options before things which use them
1293 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])
1294 AC_ARG_WITH(monodroid,           [  --with-monodroid=yes,no             If you want to build the MonoDroid assemblies (defaults to no)],            [], [with_monodroid=default])
1295 AC_ARG_WITH(monotouch,           [  --with-monotouch=yes,no             If you want to build the Xamarin.iOS assemblies (defaults to no)],          [], [with_monotouch=default])
1296 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])
1297 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])
1298 AC_ARG_WITH(bitcode,             [  --with-bitcode=yes,no               If bitcode is enabled (defaults to no)],                                    [], [with_bitcode=default])
1299 AC_ARG_WITH(xammac,              [  --with-xammac=yes,no                If you want to build the Xamarin.Mac assemblies (defaults to no)],          [], [with_xammac=default])
1300 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])
1301 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])
1302 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])
1303 AC_ARG_WITH(winaot,              [  --with-winaot=yes,no                If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1304 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])
1305 AC_ARG_WITH(orbis,               [  --with-orbis=yes,no                 If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1306 AC_ARG_WITH(unreal,              [  --with-unreal=yes,no                If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1307 AC_ARG_WITH(wasm,                [  --with-wasm=yes,no                  If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1310 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])
1311 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])
1312 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])
1313 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])
1316 dnl Spectre compiler mitigation flag checks
1318 if test "x$with_spectre_mitigation" = "xyes"; then
1319    AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1320    SPECTRE_CFLAGS=
1321    SPECTRE_INDIRECT_BRANCH_KIND=
1322    case "x$with_spectre_indirect_branch_choice" in
1323        xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1324        xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1325        xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1326        xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1327        *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1328    esac
1330    SPECTRE_FUNCTION_RETURN_KIND=""
1331    case "x$with_spectre_function_return_choice" in
1332        xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1333        xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1334        xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1335        xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1336        *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1337    esac
1339    AX_CHECK_COMPILE_FLAG(
1340         [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1341         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1342    )
1344    AX_CHECK_COMPILE_FLAG(
1345         [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1346         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1347    )
1349    if test "x$SPECTRE_CFLAGS" != "x" ; then
1350         CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1351         CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1352         spectre_mitigation_status="mitigation enabled"
1353    fi
1354 else
1355         spectre_mitigation_status="no mitigation"
1359 dnl Profile defaults
1361 TEST_PROFILE=default
1362 enable_llvm_default=no
1364 with_profile4_x_default=no
1365 with_monodroid_default=no
1366 with_monotouch_default=no
1367 with_monotouch_watch_default=no
1368 with_monotouch_tv_default=no
1369 with_xammac_default=no
1370 with_testing_aot_full_interp_default=no
1371 with_testing_aot_hybrid_default=no
1372 with_testing_aot_full_default=no
1373 with_winaot_default=no
1374 with_testing_winaot_interp_default=no
1375 with_orbis_default=no
1376 with_unreal_default=no
1377 with_wasm_default=no
1379 with_bitcode_default=no
1380 enable_cooperative_suspend_default=no
1381 enable_hybrid_suspend_default=no
1383 # For the sake of clearer error messages, these numbers should all be different from each other.
1384 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4400,nftnptr-arg-trampolines=4000,nrgctx-trampolines=21000
1386 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1388 MONO_LLVM_PATH_OPTION=llvm-path="`pwd`/llvm/usr/bin"
1390 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1391    DISABLE_MCS_DOCS_default=yes
1394 if test x$with_runtime_preset = xnetcore; then
1395    # Keep in sync with winconfig.h netcore configuration.
1396    DISABLE_MCS_DOCS_default=yes
1397    BTLS_SUPPORTED=no
1398    enable_mcs_build=no
1399    enable_support_build=no
1401    mono_feature_disable_remoting='yes'
1402    mono_feature_disable_reflection_emit_save='yes'
1403    mono_feature_disable_appdomains='yes'
1404    mono_feature_disable_cleanup='yes'
1405    mono_feature_disable_assembly_remapping='yes'
1406    mono_feature_disable_security='yes'
1407    mono_feature_disable_mdb='yes'
1408    mono_feature_disable_com='yes'
1409    mono_feature_disable_gac='yes'
1410    mono_feature_disable_perfcounters='yes'
1411    mono_feature_disable_attach='yes'
1412    mono_feature_disable_cfgdir_config='yes'
1413    if test "x$enable_monodroid" = "x" -a "x$enable_monotouch" = "x"; then
1414      mono_feature_disable_dllmap='yes' # FIXME: the mobile products use this
1415    fi
1416    disable_mono_native=yes
1417    support_boehm=no
1418 elif test x$with_runtime_preset = xnet_4_x; then
1419    with_profile4_x_default=yes
1420    TEST_PROFILE=net_4_x
1421 elif test x$with_runtime_preset = xall; then
1422    with_profile4_x_default=yes
1423    with_monodroid_default=yes
1424    with_monotouch_default=yes
1425    with_monotouch_watch_default=yes
1426    with_monotouch_tv_default=yes
1427    with_xammac_default=yes
1428    with_winaot_default=yes
1429    with_testing_winaot_interp_default=yes
1430    with_orbis_default=yes
1431    with_unreal_default=yes
1432    with_wasm_default=yes
1433    with_testing_aot_full_interp_default=yes
1434    with_testing_aot_hybrid_default=yes
1435    with_testing_aot_full_default=yes
1436    TEST_PROFILE=net_4_x
1437 elif test x$with_runtime_preset = xbitcode; then
1438    DISABLE_MCS_DOCS_default=yes
1439    with_testing_aot_full_default=yes
1440    with_bitcode_default=yes
1441    enable_cooperative_suspend_default=yes
1442    # FIXME: use TEST_PROFILE=testing_aot_full
1443    TEST_PROFILE=testing_aot_bitcode
1444    PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1445    enable_llvm_default=yes
1447    mono_feature_disable_com='yes'
1448    mono_feature_disable_remoting='yes'
1449    mono_feature_disable_reflection_emit_save='yes'
1450    mono_feature_disable_reflection_emit='yes'
1451    mono_feature_disable_appdomains='yes'
1453    # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1454    AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1455    AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1456    AOT_MODE="llvmonly"
1457 elif test x$with_runtime_preset = xbitcodeinterp; then
1458    with_testing_aot_full_interp_default=yes
1459    with_bitcode_default=yes
1460    enable_cooperative_suspend_default=yes
1461    # FIXME: use TEST_PROFILE=testing_aot_full_interp
1462    TEST_PROFILE=testing_aot_bitcode_interp
1463    PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1464    enable_llvm_default=yes
1466    # mscorlib.dll aot compilation crashes
1467    mono_feature_disable_com='yes'
1469    # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1470    AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1471    AOT_RUN_FLAGS="--llvmonly-interp"
1472 elif test x$with_runtime_preset = xfullaot; then
1473    DISABLE_MCS_DOCS_default=yes
1474    with_testing_aot_full_default=yes
1475    TEST_PROFILE=testing_aot_full
1477    mono_feature_disable_com='yes'
1478    mono_feature_disable_remoting='yes'
1479    mono_feature_disable_reflection_emit_save='yes'
1480    mono_feature_disable_reflection_emit='yes'
1481    mono_feature_disable_appdomains='yes'
1483    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1484    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1485    AOT_MODE="full"
1486 elif test x$with_runtime_preset = xfullaot_llvm; then
1487    DISABLE_MCS_DOCS_default=yes
1488    with_testing_aot_full_default=yes
1489    TEST_PROFILE=testing_aot_full
1491    mono_feature_disable_com='yes'
1492    mono_feature_disable_remoting='yes'
1493    mono_feature_disable_reflection_emit_save='yes'
1494    mono_feature_disable_reflection_emit='yes'
1495    mono_feature_disable_appdomains='yes'
1497    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1498    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1499    AOT_MODE="full"
1500 elif test x$with_runtime_preset = xhybridaot; then
1501    DISABLE_MCS_DOCS_default=yes
1502    with_testing_aot_hybrid_default=yes
1503    TEST_PROFILE=testing_aot_hybrid 
1505    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1506    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1507 elif test x$with_runtime_preset = xhybridaot_llvm; then
1508    DISABLE_MCS_DOCS_default=yes
1509    with_testing_aot_hybrid_default=yes
1510    TEST_PROFILE=testing_aot_hybrid
1512    AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1513    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1514 elif test x$with_runtime_preset = xfullaotinterp; then
1515    with_testing_aot_full_interp_default=yes
1516    TEST_PROFILE=testing_aot_full_interp
1518    # mscorlib.dll aot compilation crashes
1519    mono_feature_disable_com='yes'
1521    AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1522    AOT_RUN_FLAGS="--full-aot-interp"
1523 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1524    with_testing_aot_full_interp_default=yes
1525    TEST_PROFILE=testing_aot_full_interp
1527    # mscorlib.dll aot compilation crashes
1528    mono_feature_disable_com='yes'
1530    AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1531    AOT_RUN_FLAGS="--full-aot-interp"
1532 elif test x$with_runtime_preset = xaot; then
1533    with_profile4_x_default=yes
1535    AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1536    AOT_RUN_FLAGS=""
1538    DISABLE_MCS_DOCS_default=yes
1539 elif test x$with_runtime_preset = xaot_llvm; then
1540    with_profile4_x_default=yes
1542    AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1543    AOT_RUN_FLAGS=""
1545    DISABLE_MCS_DOCS_default=yes
1546 elif test x$with_runtime_preset = xwinaot; then
1547    DISABLE_MCS_DOCS_default=yes
1548    with_winaot_default=yes
1549    TEST_PROFILE=winaot
1551    mono_feature_disable_com='yes'
1552    mono_feature_disable_remoting='yes'
1553    mono_feature_disable_reflection_emit_save='yes'
1554    mono_feature_disable_reflection_emit='yes'
1555    mono_feature_disable_appdomains='yes'
1557    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1558    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1559    AOT_MODE="full"
1560 elif test x$with_runtime_preset = xwinaotinterp; then
1561    DISABLE_MCS_DOCS_default=yes
1562    with_testing_winaot_interp_default=yes
1563    TEST_PROFILE=testing_winaot_interp
1565    mono_feature_disable_com='yes'
1566    mono_feature_disable_remoting='yes'
1567    mono_feature_disable_appdomains='yes'
1569    AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1570    AOT_RUN_FLAGS="--full-aot-interp"
1571 elif test x$with_runtime_preset = xwinaotinterp_llvm; then
1572    DISABLE_MCS_DOCS_default=yes
1573    with_testing_winaot_interp_default=yes
1574    TEST_PROFILE=testing_winaot_interp
1576    mono_feature_disable_com='yes'
1577    mono_feature_disable_remoting='yes'
1578    mono_feature_disable_appdomains='yes'
1580    INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1581    AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1582    AOT_RUN_FLAGS="--full-aot-interp"
1583 elif test x$with_runtime_preset = xwinaot_llvm; then
1584    DISABLE_MCS_DOCS_default=yes
1585    with_winaot_default=yes
1586    TEST_PROFILE=winaot
1588    mono_feature_disable_com='yes'
1589    mono_feature_disable_remoting='yes'
1590    mono_feature_disable_reflection_emit_save='yes'
1591    mono_feature_disable_reflection_emit='yes'
1592    mono_feature_disable_appdomains='yes'
1594    INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1595    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1596    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1597    AOT_MODE="full"
1598 elif test x$with_runtime_preset = xorbis; then
1599    DISABLE_MCS_DOCS_default=yes
1600    with_orbis_default=yes
1601    TEST_PROFILE=orbis
1603    mono_feature_disable_com='yes'
1604    mono_feature_disable_remoting='yes'
1605    mono_feature_disable_reflection_emit_save='yes'
1606    mono_feature_disable_reflection_emit='yes'
1607    mono_feature_disable_appdomains='yes'
1609    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1610    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1611    AOT_MODE="full"
1612 elif test x$with_runtime_preset = xunreal; then
1613    DISABLE_MCS_DOCS_default=yes
1614    with_unreal_default=yes
1615    TEST_PROFILE=unreal
1617    mono_feature_disable_com='yes'
1618    mono_feature_disable_remoting='yes'
1619    mono_feature_disable_appdomains='no'
1621    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1622    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1623 elif test x$with_runtime_preset = xwasm; then
1624    DISABLE_MCS_DOCS_default=yes
1625    with_wasm_default=yes
1626    TEST_PROFILE=wasm
1628    mono_feature_disable_com='yes'
1629    mono_feature_disable_remoting='yes'
1630    mono_feature_disable_reflection_emit_save='yes'
1631    mono_feature_disable_reflection_emit='yes'
1632    mono_feature_disable_appdomains='yes'
1634    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1635    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1636 else
1637    TEST_PROFILE=net_4_x
1638    with_profile4_x_default=yes
1641 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1642    AC_SUBST(AOT_BUILD_FLAGS)
1643    AC_SUBST(AOT_RUN_FLAGS)
1644    # For llvmonlycheck + fullaotcheck
1645    AC_SUBST(INVARIANT_AOT_OPTIONS)
1648 AC_SUBST(TEST_PROFILE)
1650 if test "x$with_profile4_x" = "xdefault"; then
1651    with_profile4_x=$with_profile4_x_default
1653 if test "x$with_monodroid" = "xdefault"; then
1654    with_monodroid=$with_monodroid_default
1656 if test "x$with_monotouch" = "xdefault"; then
1657    with_monotouch=$with_monotouch_default
1659 if test "x$with_monotouch_watch" = "xdefault"; then
1660    with_monotouch_watch=$with_monotouch_watch_default
1662 if test "x$with_monotouch_tv" = "xdefault"; then
1663    with_monotouch_tv=$with_monotouch_tv_default
1665 if test "x$with_bitcode" = "xdefault"; then
1666    with_bitcode=$with_bitcode_default
1668 if test "x$with_xammac" = "xdefault"; then
1669    with_xammac=$with_xammac_default
1671 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1672    with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1674 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1675    with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1677 if test "x$with_testing_aot_full" = "xdefault"; then
1678    with_testing_aot_full=$with_testing_aot_full_default
1680 if test "x$with_winaot" = "xdefault"; then
1681    with_winaot=$with_winaot_default
1683 if test "x$with_testing_winaot_interp" = "xdefault"; then
1684    with_testing_winaot_interp=$with_testing_winaot_interp_default
1686 if test "x$with_orbis" = "xdefault"; then
1687    with_orbis=$with_orbis_default
1689 if test "x$with_unreal" = "xdefault"; then
1690    with_unreal=$with_unreal_default
1692 if test "x$with_wasm" = "xdefault"; then
1693    with_wasm=$with_wasm_default
1697 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1698 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1699 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1700 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1701 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1702 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1703 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1704 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1705 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1706 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1707 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1708 AM_CONDITIONAL(INSTALL_TESTING_WINAOT_INTERP, [test "x$with_testing_winaot_interp" != "xno"])
1709 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1710 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1711 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1712 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1714 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1715 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"])
1716 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"])
1717 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1719 default_profile=net_4_x
1720 if test -z "$INSTALL_MONODROID_TRUE"; then :
1721    default_profile=monodroid
1723 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1724    default_profile=monotouch
1726 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1727    default_profile=xammac
1729 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1730    default_profile=testing_aot_full_interp
1732 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1733    default_profile=testing_aot_hybrid
1735 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1736    default_profile=testing_aot_full
1738 if test -z "$INSTALL_WINAOT_TRUE"; then :
1739    default_profile=winaot
1741 if test -z "$INSTALL_TESTING_WINAOT_INTERP_TRUE"; then :
1742    default_profile=testing_winaot_interp
1744 if test -z "$INSTALL_ORBIS_TRUE"; then :
1745    default_profile=orbis
1747 if test -z "$INSTALL_UNREAL_TRUE"; then :
1748    default_profile=unreal
1750 if test -z "$INSTALL_WASM_TRUE"; then :
1751    default_profile=wasm
1753 if test -z "$INSTALL_4_x_TRUE"; then :
1754    default_profile=net_4_x
1756 DEFAULT_PROFILE=$default_profile
1757 AC_SUBST(DEFAULT_PROFILE)
1760 # End build profile configuration
1763 if test x$USE_NLS = xprofile_default; then
1765         AC_MSG_CHECKING([NLS used])
1767         # We make the default value for USE_NLS
1768         # "no" on OSX because it isn't available on most
1769         # default OSX installs. The most common configurations will
1770         # all disable it, so this saves us typing.
1771         if test x$host_darwin = xyes; then
1772                 USE_NLS=no;
1773         else
1774                 USE_NLS=yes;
1775         fi
1777         AC_SUBST([USE_NLS])
1778         AC_MSG_RESULT([$USE_NLS])
1781 AC_ARG_ENABLE(static-gcc-libs, [  --enable-static-gcc-libs      Statically link GCC support libs (for MinGW32)])
1782 if test "x$enable_static_gcc_libs" = "xyes"; then
1783         # llvm/build.mk doesn't use automake, so make a regular make variable for it.
1784         AC_SUBST(STATIC_GCC_LIBS,1)
1786 AM_CONDITIONAL(ENABLE_STATIC_GCC_LIBS, test "x$enable_static_gcc_libs" = "xyes")
1788 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
1789      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, dllmap,
1790      reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1791          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.],
1793         for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1794                 eval "mono_feature_disable_$feature='yes'"
1795         done
1796         DISABLED_FEATURES=$enable_minimal
1797         disabled="Disabled:      $enable_minimal"
1798 ],[])
1800 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1802 if test "x$mono_feature_disable_aot" = "xyes"; then
1803         AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1804         enable_system_aot=no
1805         AC_MSG_NOTICE([Disabled AOT compiler])
1808 if test "x$mono_feature_disable_profiler" = "xyes"; then
1809         AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1810         AC_MSG_NOTICE([Disabled support for the profiler])
1812 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1814 if test "x$mono_feature_disable_decimal" = "xyes"; then
1815         AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1816         AC_MSG_NOTICE([Disabled support for decimal])
1819 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1820         AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1821         AC_MSG_NOTICE([Disabled support for P/Invoke])
1824 if test "x$mono_feature_disable_debug" = "xyes"; then
1825         AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1826         AC_MSG_NOTICE([Disabled support for runtime debugging])
1829 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1830         AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1831         mono_feature_disable_reflection_emit_save=yes
1832         AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1835 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1836         AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1837         AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1840 if test "x$mono_feature_disable_large_code" = "xyes"; then
1841         AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1842         AC_MSG_NOTICE([Disabled support for large assemblies])
1845 if test "x$mono_feature_disable_logging" = "xyes"; then
1846         AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1847         AC_MSG_NOTICE([Disabled support for logging])
1850 if test "x$mono_feature_disable_com" = "xyes"; then
1851         AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1852         AC_MSG_NOTICE([Disabled COM support])
1855 if test "x$mono_feature_disable_ssa" = "xyes"; then
1856         AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1857         AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1860 if test "x$mono_feature_disable_generics" = "xyes"; then
1861         AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1862         AC_MSG_NOTICE([Disabled Generics Support])
1865 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1866         AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1867         AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1870 if test "x$mono_feature_disable_portability" = "xyes"; then
1871         AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1872         AC_MSG_NOTICE([Disabled IO Portability layer])
1875 if test "x$mono_feature_disable_attach" = "xyes"; then
1876         AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1877         AC_MSG_NOTICE([Disabled agent attach])
1880 if test "x$mono_feature_disable_verifier" = "xyes"; then
1881         AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1882         AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1885 if test "x$mono_feature_disable_jit" = "xyes"; then
1886         AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1887         AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1890 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1892 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1893         AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1894         AC_MSG_NOTICE([Disabled the interpreter])
1897 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1899 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1900         AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1903 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1905 if test "x$mono_feature_disable_simd" = "xyes"; then
1906         AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1907         AC_MSG_NOTICE([Disabled SIMD support])
1910 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1911         AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1912         AC_MSG_NOTICE([Disabled Soft Debugger.])
1915 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1917 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1918         AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1919         AC_MSG_NOTICE([Disabled Performance Counters.])
1921 if test "x$mono_feature_disable_normalization" = "xyes"; then
1922         AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1923         AC_MSG_NOTICE([Disabled String normalization support.])
1926 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1927 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1928         AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1929         AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1932 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1933         AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1934         AC_MSG_NOTICE([Disabled Shared perfcounters.])
1937 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1938         AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1939         AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1942 if test "x$mono_feature_disable_remoting" = "xyes"; then
1943         AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1944         AC_MSG_NOTICE([Disabled remoting])
1947 if test "x$mono_feature_disable_security" = "xyes"; then
1948         AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1949         AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1952 if test "x$mono_feature_disable_lldb" = "xyes"; then
1953         AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1954         AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1957 if test "x$mono_feature_disable_mdb" = "xyes"; then
1958         AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1959         AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1962 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1963         AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1964         AC_MSG_NOTICE([Disabled assertion messages.])
1967 if test "x$mono_feature_disable_cfgdir_config" = "xyes"; then
1968         AC_DEFINE(DISABLE_CFGDIR_CONFIG, 1, [Disable config directories.])
1969         AC_MSG_NOTICE([Disabled config directories.])
1972 if test "x$mono_feature_disable_config" = "xyes"; then
1973         AC_DEFINE(DISABLE_CONFIG, 1, [Disable .config file support.])
1974         AC_MSG_NOTICE([Disabled .config file support.])
1977 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1978         AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1979         AC_MSG_NOTICE([Disabled runtime cleanup.])
1982 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1983         AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1984         AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1988 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1989         AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1990         AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1993 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1994         AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1995         AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1998 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1999         AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
2000         AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
2003 if test "x$mono_feature_disable_sockets" = "xyes"; then
2004         AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
2005         AC_MSG_NOTICE([Disabled sockets])
2008 if test "x$mono_feature_disable_gac" = "xyes"; then
2009         AC_DEFINE(DISABLE_GAC, 1, [Disable GAC])
2010         AC_MSG_NOTICE([Disabled GAC support])
2013 if test "x$mono_feature_disable_dllmap" = "xyes"; then
2014     AC_DEFINE(DISABLE_DLLMAP,1,[Disables use of DllMaps in MonoVM])
2015     AC_MSG_NOTICE([Disabled DllMap in the loader.])
2018 if test "x$mono_feature_disable_threads" = "xyes"; then
2019         AC_DEFINE(DISABLE_THREADS, 1, [Disable Threads])
2020         AC_MSG_NOTICE([Disabled threading support])
2023 if test "x$mono_feature_disable_processes" = "xyes"; then
2024         AC_DEFINE(DISABLE_PROCESSES, 1, [Disable process support])
2025         AC_MSG_NOTICE([Disabled process support])
2028 AC_ARG_ENABLE(executables, [  --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
2029 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
2031 has_extension_module=no
2032 AC_ARG_ENABLE(extension-module, [  --enable-extension-module=LIST enable the core-extensions from LIST],
2034         for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
2035                 if test x$extension = xdefault ; then
2036                         has_extension_module=yes;
2037                 fi
2038         done
2039         if test x$enable_extension_module = xyes; then
2040                 has_extension_module=yes;
2041         fi
2042 ], [])
2044 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
2046 if test x$has_extension_module != xno ; then
2047         AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
2048         AC_MSG_NOTICE([Enabling mono extension module.])
2051 # Deprecated
2052 AC_ARG_ENABLE(gsharedvt, [  --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
2054 AC_MSG_CHECKING(for visibility __attribute__)
2055 AC_COMPILE_IFELSE([
2056         AC_LANG_SOURCE([[
2057                 void __attribute__ ((visibility ("hidden"))) doit (void) {}
2058                 int main () { doit (); return 0; }
2059         ]])
2060 ], [
2061    have_visibility_hidden=yes
2062    AC_MSG_RESULT(yes)
2063 ], [
2064    have_visibility_hidden=no
2065    AC_MSG_RESULT(no)
2069 dnl Boehm GC configuration
2072 AC_ARG_WITH(libgc,   [  --with-libgc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
2074 AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
2075 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
2077 if test "x$support_boehm" = "xyes"; then
2079         AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
2080         if test x$enable_parallel_mark = xyes; then
2081                 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
2082         fi
2084         gc_msg=""
2085         LIBGC_CPPFLAGS=
2086         LIBGC_LIBS=
2087         LIBGC_STATIC_LIBS=
2088         case "x$libgc" in
2089                 xincluded)
2090                         LIBGC_CPPFLAGS='-I$(top_srcdir)/external/bdwgc/include -I$(top_srcdir)/external/bdwgc/libatomic_ops/src'
2091                         LIBGC_LIBS='$(top_builddir)/external/bdwgc/libgc.la'
2092                         LIBGC_STATIC_LIBS='$(top_builddir)/external/bdwgc/libgc-static.la'
2094                         BOEHM_DEFINES="-DHAVE_BOEHM_GC -DGC_THREADS"
2096                         if test x$target_win32 = xyes; then
2097                                 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
2098                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
2099                         fi
2101                         gc_msg="Included Boehm GC with typed GC"
2102                         if test x$enable_parallel_mark = xyes; then
2103                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
2104                                 gc_msg="$gc_msg and parallel mark"
2105                         else
2106                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
2107                         fi
2108                         ;;
2110                 xboehm|xbohem|xyes)
2111                         AC_MSG_WARN("External Boehm is no longer supported")
2112                         ;;
2114                 xsgen)
2115                         AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
2116                         ;;
2118                 xnone)
2119                         AC_MSG_WARN("Compiling mono without GC.")
2120                         AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
2121                         AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
2122                         gc_msg="none"
2123                         ;;
2124                 *)
2125                         AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
2126                         ;;
2127         esac
2129         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])
2130         if test "x$large_heap" = "xyes"; then
2131            CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
2132         fi
2134         AC_SUBST(LIBGC_CPPFLAGS)
2135         AC_SUBST(LIBGC_LIBS)
2136         AC_SUBST(LIBGC_STATIC_LIBS)
2137         AC_SUBST(BOEHM_DEFINES)
2140 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
2143 dnl End of Boehm GC Configuration
2146 dnl *************************************
2147 dnl *** Checks for zero length arrays ***
2148 dnl *************************************
2149 AC_MSG_CHECKING(whether $CC supports zero length arrays)
2150 AC_TRY_COMPILE([
2151         struct s {
2152                 int  length;
2153                 char data [0];
2154         };
2155 ], [], [
2156         AC_MSG_RESULT(yes)
2157         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
2158 ], [
2159         AC_MSG_RESULT(no)
2160         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
2163 dnl ***********************************
2164 dnl *** Checks for signals
2165 dnl ***********************************
2166 AC_CHECK_HEADERS(signal.h)
2167 AC_CHECK_FUNCS(sigaction)
2168 AC_CHECK_FUNCS(kill)
2169 AC_CHECK_FUNCS(signal)
2171 # signal() is declared inline in Android headers
2172 # so we need to workaround it by overriding the check.
2173 if test x$platform_android = xyes; then
2174         AC_DEFINE(HAVE_SIGNAL,1)
2177 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
2178 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
2180 if test x$host_win32 = xno; then
2181         dnl *************************************
2182         dnl *** Checks for time capabilities ***
2183         dnl *************************************
2185         AC_MSG_CHECKING(for CLOCK_MONOTONIC)
2186         AC_TRY_COMPILE([#include <time.h>], [
2187                 const int foo = CLOCK_MONOTONIC;
2188         ],[
2189                 AC_MSG_RESULT(yes)
2190                 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
2191         ], [
2192                 AC_MSG_RESULT(no)
2193         ])
2195         AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
2196         AC_TRY_COMPILE([#include <time.h>], [
2197                 const int foo = CLOCK_MONOTONIC_COARSE;
2198         ],[
2199                 AC_MSG_RESULT(yes)
2200                 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
2201         ], [
2202                 AC_MSG_RESULT(no)
2203         ])
2205         AC_MSG_CHECKING(for CLOCK_REALTIME)
2206         AC_TRY_COMPILE([#include <time.h>], [
2207                 const int foo = CLOCK_REALTIME;
2208         ],[
2209                 AC_MSG_RESULT(yes)
2210                 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
2211         ], [
2212                 AC_MSG_RESULT(no)
2213         ])
2215         AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
2216         AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
2217         AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
2218         AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
2219         AC_CHECK_FUNC(futimes,            [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
2220         AC_CHECK_FUNC(futimens,           [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
2222         AC_CHECK_TYPES([clockid_t], [AC_DEFINE(HAVE_CLOCKID_T)], [],
2223                 [#include <sys/types.h>])
2225         dnl hires monotonic clock support
2226         AC_SEARCH_LIBS(clock_gettime, rt)
2227         AC_CHECK_FUNCS(clock_nanosleep)
2229         dnl dynamic loader support
2230         AC_CHECK_FUNC(dlopen, DL_LIB="",
2231                 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
2232         )
2233         if test x$dl_support = xno; then
2234                 AC_MSG_WARN([No dynamic loading support available])
2235         else
2236                 LIBS="$LIBS $DL_LIB"
2237                 dnl from glib's configure.ac
2238                 if test "x$cross_compiling" = "xyes"; then
2239                    AC_MSG_RESULT(cross compiling, assuming no)
2240                    mono_cv_uscore=no
2241                 else
2242                         AC_CACHE_CHECK([for preceeding underscore in symbols],
2243                           mono_cv_uscore,[
2244                           AC_TRY_RUN([#include <dlfcn.h>
2245                           int mono_underscore_test (void) { return 42; }
2246                           int main() {
2247                             void *f1 = (void*)0, *f2 = (void*)0, *handle;
2248                             handle = dlopen ((void*)0, 0);
2249                             if (handle) {
2250                               f1 = dlsym (handle, "mono_underscore_test");
2251                               f2 = dlsym (handle, "_mono_underscore_test");
2252                             } return (!f2 || f1);
2253                           }],
2254                                 [mono_cv_uscore=yes],
2255                                 [mono_cv_uscore=no],
2256                           [])
2257                   ])
2258                 fi
2259                 if test "x$mono_cv_uscore" = "xyes"; then
2260                         AC_DEFINE(MONO_DL_NEED_USCORE, 1, [Does dlsym require leading underscore.])
2261                 fi
2262                 AC_CHECK_FUNC(dlerror)
2263         fi
2265         dnl ******************************************************************
2266         dnl *** Checks for the IKVM JNI interface library                  ***
2267         dnl ******************************************************************
2268         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])
2270         if test x$with_ikvm_native = xyes; then
2271                 jdk_headers_found="IKVM Native"
2272         fi
2274         AC_CHECK_HEADERS(execinfo.h)
2276         AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2278         AC_CHECK_FUNCS(getgrgid_r)
2279         AC_CHECK_FUNCS(getgrnam_r)
2280         AC_CHECK_FUNCS(getresuid)
2281         AC_CHECK_FUNCS(setresuid)
2282         AC_CHECK_FUNCS(kqueue)
2283         # IBM provides a compatibility library for offering this function.
2284         # BSDs and others, have execinfo in base or packages.
2285         AC_SEARCH_LIBS(backtrace_symbols, execinfo util)
2286         # Two-step so it sets it in config.h
2287         AC_CHECK_FUNCS(backtrace_symbols)
2288         AC_CHECK_FUNCS(mkstemp)
2289         AC_CHECK_FUNCS(mmap)
2290         AC_CHECK_FUNCS(getrusage)
2291         AC_CHECK_FUNCS(getpriority)
2292         AC_CHECK_FUNCS(setpriority)
2293         AC_CHECK_FUNCS(dl_iterate_phdr)
2294         AC_CHECK_FUNCS(dladdr)
2295         AC_CHECK_FUNCS(sysconf)
2296         AC_CHECK_FUNCS(getrlimit)
2297         AC_CHECK_FUNCS(prctl)
2298         AC_CHECK_FUNCS(arc4random)
2299         AC_CHECK_FUNCS(nl_langinfo)
2301         AC_CHECK_FUNCS(sched_getaffinity)
2302         AC_CHECK_FUNCS(sched_setaffinity)
2303         AC_CHECK_FUNCS(sched_getcpu)
2305         if test x$platform_android != xyes; then
2306                 AC_CHECK_FUNCS(getpwnam_r)
2307                 AC_CHECK_FUNCS(getpwuid_r)
2308         fi
2310         AC_CHECK_FUNCS(readlink)
2311         AC_CHECK_FUNCS(chmod)
2312         AC_CHECK_FUNCS(lstat)
2313         AC_CHECK_FUNCS(getdtablesize)
2315         AC_CHECK_FUNCS(ftruncate)
2316         AC_CHECK_FUNCS(msync)
2318         AC_CHECK_FUNCS(gethostname getpeername)
2319         AC_CHECK_FUNCS(utime utimes)
2321         AC_CHECK_FUNCS(openlog closelog)
2322         AC_CHECK_FUNCS(atexit)
2323         AC_CHECK_FUNCS(popen)
2325         AC_FUNC_STRERROR_R()
2327         dnl ****************************************************************
2328         dnl *** Check for sched_setaffinity from glibc versions before   ***
2329         dnl *** 2.3.4. The older versions of the function only take 2    ***
2330         dnl *** parameters, not 3.                                       ***
2331         dnl ***                                                          ***
2332         dnl *** Because the interface change was not made in a minor     ***
2333         dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros    ***
2334         dnl *** won't always indicate the interface sched_affinity has.  ***
2335         dnl ****************************************************************
2336         AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2337         AC_TRY_COMPILE([#include <sched.h>], [
2338             int mask = 1; 
2339             sched_setaffinity(0, &mask);
2340         ], [
2341                 # Yes, we have it...
2342                 AC_MSG_RESULT(yes)
2343                 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2344         ], [
2345                 # We have the new, three-parameter version
2346                 AC_MSG_RESULT(no)
2347         ])
2348         AC_TRY_COMPILE([#include <sched.h>], [
2349              CPU_COUNT((void *) 0);
2350         ], [
2351                 AC_MSG_RESULT(yes)
2352                 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2353         ], [
2354                 # We have the new, three-parameter version
2355                 AC_MSG_RESULT(no)
2356         ])
2358         dnl ******************************************************************
2359         dnl *** Check for large file support                               ***
2360         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2361         dnl ******************************************************************
2362         
2363         # Check that off_t can represent 2**63 - 1 correctly, working around
2364         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
2365         # CPPFLAGS and sets $large_offt to yes if the test succeeds
2366         large_offt=no
2367         AC_DEFUN([LARGE_FILES], [
2368                 large_CPPFLAGS=$CPPFLAGS
2369                 CPPFLAGS="$CPPFLAGS $1"
2370                 AC_TRY_COMPILE([
2371                         #include <sys/types.h>
2372                         #include <limits.h>
2373                 ], [
2374                         /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2375                         #define COMPILE_TIME_ASSERT(pred) \
2376                                 switch(0){case 0:case pred:;}
2377                         COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2378                 ], [
2379                         AC_MSG_RESULT(ok)
2380                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2381                         large_CPPFLAGS="$large_CPPFLAGS $1"
2382                         large_offt=yes
2383                 ], [
2384                         AC_MSG_RESULT(no)
2385                 ])
2386                 CPPFLAGS=$large_CPPFLAGS
2387         ])
2389         AC_MSG_CHECKING(if off_t is 64 bits wide)
2390         LARGE_FILES("")
2391         if test $large_offt = no; then
2392                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2393                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2394         fi
2395         if test $large_offt = no; then
2396                 AC_MSG_WARN([No 64 bit file size support available])
2397         fi
2398         
2399         dnl *****************************
2400         dnl *** Checks for libsocket  ***
2401         dnl *****************************
2402         AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2404         dnl *****************************
2405         dnl *** Checks for IPPROTO_IP ***
2406         dnl *****************************
2407         AC_MSG_CHECKING(for IPPROTO_IP)
2408         AC_TRY_COMPILE([#include <netinet/in.h>], [
2409                 int level = IPPROTO_IP;
2410         ], [
2411                 # Yes, we have it...
2412                 AC_MSG_RESULT(yes)
2413                 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2414         ], [
2415                 # We'll have to use getprotobyname
2416                 AC_MSG_RESULT(no)
2417         ])
2419         dnl *******************************
2420         dnl *** Checks for IPPROTO_IPV6 ***
2421         dnl *******************************
2422         AC_MSG_CHECKING(for IPPROTO_IPV6)
2423         AC_TRY_COMPILE([#include <netinet/in.h>], [
2424                 int level = IPPROTO_IPV6;
2425         ], [
2426                 # Yes, we have it...
2427                 AC_MSG_RESULT(yes)
2428                 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2429         ], [
2430                 # We'll have to use getprotobyname
2431                 AC_MSG_RESULT(no)
2432         ])
2434         dnl ******************************
2435         dnl *** Checks for IPPROTO_TCP ***
2436         dnl ******************************
2437         AC_MSG_CHECKING(for IPPROTO_TCP)
2438         AC_TRY_COMPILE([#include <netinet/in.h>], [
2439                 int level = IPPROTO_TCP;
2440         ], [
2441                 # Yes, we have it...
2442                 AC_MSG_RESULT(yes)
2443                 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2444         ], [
2445                 # We'll have to use getprotobyname
2446                 AC_MSG_RESULT(no)
2447         ])
2449         dnl *****************************
2450         dnl *** Checks for SOL_IP     ***
2451         dnl *****************************
2452         AC_MSG_CHECKING(for SOL_IP)
2453         AC_TRY_COMPILE([#include <netdb.h>], [
2454                 int level = SOL_IP;
2455         ], [
2456                 # Yes, we have it...
2457                 AC_MSG_RESULT(yes)
2458                 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2459         ], [
2460                 # We'll have to use getprotobyname
2461                 AC_MSG_RESULT(no)
2462         ])
2464         dnl *****************************
2465         dnl *** Checks for SOL_IPV6     ***
2466         dnl *****************************
2467         AC_MSG_CHECKING(for SOL_IPV6)
2468         AC_TRY_COMPILE([#include <netdb.h>], [
2469                 int level = SOL_IPV6;
2470         ], [
2471                 # Yes, we have it...
2472                 AC_MSG_RESULT(yes)
2473                 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2474         ], [
2475                 # We'll have to use getprotobyname
2476                 AC_MSG_RESULT(no)
2477         ])
2479         dnl *****************************
2480         dnl *** Checks for SOL_TCP    ***
2481         dnl *****************************
2482         AC_MSG_CHECKING(for SOL_TCP)
2483         AC_TRY_COMPILE([#include <netdb.h>], [
2484                 int level = SOL_TCP;
2485         ], [
2486                 # Yes, we have it...
2487                 AC_MSG_RESULT(yes)
2488                 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2489         ], [
2490                 # We'll have to use getprotobyname
2491                 AC_MSG_RESULT(no)
2492         ])
2494         dnl *****************************
2495         dnl *** Checks for IP_PKTINFO ***
2496         dnl *****************************
2497         AC_MSG_CHECKING(for IP_PKTINFO)
2498         AC_TRY_COMPILE([#include <linux/in.h>], [
2499                 int level = IP_PKTINFO;
2500         ], [
2501                 # Yes, we have it...
2502                 AC_MSG_RESULT(yes)
2503                 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2504         ], [
2505                 AC_MSG_RESULT(no)
2506         ])
2508         dnl *****************************
2509         dnl *** Checks for IPV6_PKTINFO ***
2510         dnl *****************************
2511         AC_MSG_CHECKING(for IPV6_PKTINFO)
2512         AC_TRY_COMPILE([#include <netdb.h>], [
2513                 int level = IPV6_PKTINFO;
2514         ], [
2515                 # Yes, we have it...
2516                 AC_MSG_RESULT(yes)
2517                 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2518         ], [
2519                 AC_MSG_RESULT(no)
2520         ])
2522         dnl **********************************
2523         dnl *** Checks for IP_DONTFRAG     ***
2524         dnl **********************************
2525         AC_MSG_CHECKING(for IP_DONTFRAG)
2526         AC_TRY_COMPILE([#include <netinet/in.h>], [
2527                 int level = IP_DONTFRAG;
2528         ], [
2529                 # Yes, we have it...
2530                 AC_MSG_RESULT(yes)
2531                 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2532         ], [
2533                 AC_MSG_RESULT(no)
2534         ])
2536         dnl **********************************
2537         dnl *** Checks for IP_DONTFRAGMENT ***
2538         dnl **********************************
2539         AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2540         AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2541                 int level = IP_DONTFRAGMENT;
2542         ], [
2543                 # Yes, we have it...
2544                 AC_MSG_RESULT(yes)
2545                 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2546         ], [
2547                 AC_MSG_RESULT(no)
2548         ])
2550         dnl **********************************
2551         dnl *** Checks for IP_MTU_DISCOVER ***
2552         dnl **********************************
2553         AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2554         AC_TRY_COMPILE([#include <linux/in.h>], [
2555                 int level = IP_MTU_DISCOVER;
2556         ], [
2557                 # Yes, we have it...
2558                 AC_MSG_RESULT(yes)
2559                 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2560         ], [
2561                 AC_MSG_RESULT(no)
2562         ])
2564         dnl **********************************
2565         dnl *** Checks for  IP_PMTUDISC_DO ***
2566         dnl **********************************
2567         AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2568         AC_TRY_COMPILE([#include <linux/in.h>], [
2569                 int level = IP_PMTUDISC_DO;
2570         ], [
2571                 # Yes, we have it...
2572                 AC_MSG_RESULT(yes)
2573                 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2574         ], [
2575                 AC_MSG_RESULT(no)
2576         ])
2578         dnl *********************************
2579         dnl *** Check for struct ip_mreqn ***
2580         dnl *********************************
2581         AC_MSG_CHECKING(for struct ip_mreqn)
2582         AC_TRY_COMPILE([#include <netinet/in.h>], [
2583                 struct ip_mreqn mreq;
2584                 mreq.imr_address.s_addr = 0;
2585         ], [
2586                 # Yes, we have it...
2587                 AC_MSG_RESULT(yes)
2588                 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2589         ], [
2590                 # We'll just have to try and use struct ip_mreq
2591                 AC_MSG_RESULT(no)
2592                 AC_MSG_CHECKING(for struct ip_mreq)
2593                 AC_TRY_COMPILE([#include <netinet/in.h>], [
2594                         struct ip_mreq mreq;
2595                         mreq.imr_interface.s_addr = 0;
2596                 ], [
2597                         # Yes, we have it...
2598                         AC_MSG_RESULT(yes)
2599                         AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2600                 ], [
2601                         # No multicast support
2602                         AC_MSG_RESULT(no)
2603                 ])
2604         ])
2605         
2606         dnl **********************************
2607         dnl *** Check for getaddrinfo ***
2608         dnl **********************************
2609         AC_MSG_CHECKING(for getaddrinfo)
2610                 AC_TRY_LINK([
2611                 #include <stdio.h>
2612                 #include <netdb.h>
2613         ], [
2614                 getaddrinfo(NULL,NULL,NULL,NULL);
2615         ], [
2616                 # Yes, we have it...
2617                 AC_MSG_RESULT(yes)
2618                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2619         ], [
2620                 AC_MSG_RESULT(no)
2621         ])
2623         dnl **********************************
2624         dnl *** Check for gethostbyname2_r ***
2625         dnl **********************************
2626         AC_MSG_CHECKING(for gethostbyname2_r)
2627                 AC_TRY_LINK([
2628                 #include <stdio.h>
2629                 #include <netdb.h>
2630         ], [
2632                 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2633         ], [
2634                 # Yes, we have it...
2635                 AC_MSG_RESULT(yes)
2636                 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2637         ], [
2638                 AC_MSG_RESULT(no)
2639         ])
2641         dnl **********************************
2642         dnl *** Check for gethostbyname2 ***
2643         dnl **********************************
2644         AC_MSG_CHECKING(for gethostbyname2)
2645                 AC_TRY_LINK([
2646                 #include <stdio.h>
2647                 #include <netdb.h>
2648         ], [
2649                 gethostbyname2(NULL,0);
2650         ], [
2651                 # Yes, we have it...
2652                 AC_MSG_RESULT(yes)
2653                 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2654         ], [
2655                 AC_MSG_RESULT(no)
2656         ])
2658         dnl **********************************
2659         dnl *** Check for gethostbyname ***
2660         dnl **********************************
2661         AC_MSG_CHECKING(for gethostbyname)
2662                 AC_TRY_LINK([
2663                 #include <stdio.h>
2664                 #include <netdb.h>
2665         ], [
2666                 gethostbyname(NULL);
2667         ], [
2668                 # Yes, we have it...
2669                 AC_MSG_RESULT(yes)
2670                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2671         ], [
2672                 AC_MSG_RESULT(no)
2673         ])
2675         dnl **********************************
2676         dnl *** Check for getprotobyname ***
2677         dnl **********************************
2678         AC_MSG_CHECKING(for getprotobyname)
2679                 AC_TRY_LINK([
2680                 #include <stdio.h>
2681                 #include <netdb.h>
2682         ], [
2683                 getprotobyname(NULL);
2684         ], [
2685                 # Yes, we have it...
2686                 AC_MSG_RESULT(yes)
2687                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2688         ], [
2689                 AC_MSG_RESULT(no)
2690         ])
2692         dnl **********************************
2693         dnl *** Check for getprotobyname_r ***
2694         dnl **********************************
2695         AC_MSG_CHECKING(for getprotobyname_r)
2696                 AC_TRY_LINK([
2697                 #include <stdio.h>
2698                 #include <netdb.h>
2699         ], [
2700                 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2701         ], [
2702                 # Yes, we have it...
2703                 AC_MSG_RESULT(yes)
2704                 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2705         ], [
2706                 AC_MSG_RESULT(no)
2707         ])
2709         dnl **********************************
2710         dnl *** Check for getnameinfo ***
2711         dnl **********************************
2712         AC_MSG_CHECKING(for getnameinfo)
2713                 AC_TRY_LINK([
2714                 #include <stdio.h>
2715                 #include <netdb.h>
2716         ], [
2717                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2718         ], [
2719                 # Yes, we have it...
2720                 AC_MSG_RESULT(yes)
2721                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2722         ], [
2723                 AC_MSG_RESULT(no)
2724         ])
2727         dnl **********************************
2728         dnl *** Check for inet_ntop ***
2729         dnl **********************************
2730         AC_MSG_CHECKING(for inet_ntop)
2731                 AC_TRY_LINK([
2732                 #include <stdio.h>
2733                 #include <arpa/inet.h>
2734         ], [
2735                 inet_ntop (0, NULL, NULL, 0);
2736         ], [
2737                 # Yes, we have it...
2738                 AC_MSG_RESULT(yes)
2739                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2740         ], [
2741                 AC_MSG_RESULT(no)
2742         ])
2744         dnl *****************************
2745         dnl *** Checks for libnsl     ***
2746         dnl *****************************
2747         AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2749         AC_CHECK_FUNCS(inet_pton inet_aton)
2751         dnl *****************************
2752         dnl *** Checks for libxnet    ***
2753         dnl *****************************
2754         case "${host}" in
2755                 *solaris*)
2756                         AC_MSG_CHECKING(for Solaris XPG4 support)
2757                         if test -f /usr/lib/libxnet.so; then
2758                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2759                                 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2760                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2761                                 LIBS="$LIBS -lxnet"
2762                                 AC_MSG_RESULT(yes)
2763                         else
2764                                 AC_MSG_RESULT(no)
2765                         fi
2767                         if test "$GCC" = "yes"; then
2768                                 CFLAGS="$CFLAGS -Wno-char-subscripts"
2769                         fi
2770                 ;;
2771         esac
2773         dnl *****************************
2774         dnl *** Checks for libpthread ***
2775         dnl *****************************
2776 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2777 # and libpthread does not exist
2779         case "${host}" in
2780                 *-*-*haiku*)
2781                         dnl Haiku has pthread in libroot (libc equiv)
2782                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2783                 ;;
2784                 *-*-*freebsd*)
2785                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2786                 ;;
2787                 *-*-*openbsd*)
2788                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2789                 ;;
2790                 *)
2791                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2792                 ;;
2793         esac
2794         AC_CHECK_HEADERS(pthread.h)
2795         AC_CHECK_HEADERS(pthread_np.h)
2796         AC_CHECK_FUNCS(pthread_mutex_timedlock)
2797         AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2798         AC_CHECK_FUNCS(pthread_kill)
2799         AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2800         AC_TRY_COMPILE([ #include <pthread.h>], [
2801                 pthread_mutexattr_t attr;
2802                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2803         ], [
2804                 AC_MSG_RESULT(ok)
2805         ], [
2806                 AC_MSG_RESULT(no)
2807                 AC_ERROR(Posix system lacks support for recursive mutexes)
2808         ])
2809         AC_CHECK_FUNCS(pthread_attr_setstacksize)
2810         AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2811         AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2812         dnl check that pthread_mutexattr_setprotocol is declared
2813         AC_CHECK_DECLS([pthread_mutexattr_setprotocol], [], [], [[#include <pthread.h>]])
2814         AC_CHECK_FUNCS(mincore mlock munlock)
2816         dnl ***********************************
2817         dnl *** Checks for working __thread ***
2818         dnl ***********************************
2819         AC_MSG_CHECKING(for working __thread)
2820         if test "x$with_tls" != "x__thread"; then
2821                 AC_MSG_RESULT(disabled)
2822         elif test "x$cross_compiling" = "xyes"; then
2823                 AC_MSG_RESULT(cross compiling, assuming yes)
2824         else
2825                 AC_TRY_RUN([
2826                         #if defined(__APPLE__) && defined(__clang__)
2827                         #error "__thread does not currently work with clang on Mac OS X"
2828                         #endif
2829                         
2830                         #include <unistd.h>
2831                         #include <pthread.h>
2832                         __thread int i;
2833                         static int res1, res2;
2835                         void thread_main (void *arg)
2836                         {
2837                                 i = arg;
2838                                 sleep (1);
2839                                 if (arg == 1)
2840                                         res1 = (i == arg);
2841                                 else
2842                                         res2 = (i == arg);
2843                         }
2845                         int main () {
2846                                 pthread_t t1, t2;
2848                                 i = 5;
2850                                 pthread_create (&t1, NULL, thread_main, 1);
2851                                 pthread_create (&t2, NULL, thread_main, 2);
2853                                 pthread_join (t1, NULL);
2854                                 pthread_join (t2, NULL);
2856                                 return !(res1 + res2 == 2);
2857                         }
2858                 ], [
2859                                 AC_MSG_RESULT(yes)
2860                 ], [
2861                                 AC_MSG_RESULT(no)
2862                                 with_tls=pthread
2863                 ])
2864         fi
2866         dnl **************************************
2867         dnl *** Checks for working sigaltstack ***
2868         dnl **************************************
2869         AC_MSG_CHECKING(for working sigaltstack)
2870         if test "x$with_sigaltstack" != "xyes"; then
2871                 AC_MSG_RESULT(disabled)
2872         elif test "x$cross_compiling" = "xyes"; then
2873                 AC_MSG_RESULT(cross compiling, assuming no)
2874                 with_sigaltstack=no
2875         else
2876                 AC_TRY_RUN([
2877                         #include <stdio.h>
2878                         #include <stdlib.h>
2879                         #include <unistd.h>
2880                         #include <signal.h>
2881                         #include <pthread.h>
2882                         #include <sys/wait.h>
2883                         #if defined(__FreeBSD__) || defined(__NetBSD__)
2884                         #define SA_STACK SA_ONSTACK
2885                         #endif
2886                         static void
2887                         sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2888                         {
2889                                 exit (0);
2890                         }
2892                         volatile char*__ptr = NULL;
2893                         static void *
2894                         loop (void *ignored)
2895                         {
2896                                 *__ptr = 0;
2897                                 return NULL;
2898                         }
2900                         static void
2901                         child ()
2902                         {
2903                                 struct sigaction sa;
2904                                 stack_t sas;
2905                                 pthread_t id;
2906                                 pthread_attr_t attr;
2908                                 sa.sa_sigaction = sigsegv_signal_handler;
2909                                 sigemptyset (&sa.sa_mask);
2910                                 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2911                                 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2912                                         perror ("sigaction");
2913                                         return;
2914                                 }
2916                                 /* x86 darwin deliver segfaults using SIGBUS */
2917                                 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2918                                         perror ("sigaction");
2919                                         return;
2920                                 }
2921                                 sas.ss_sp = malloc (SIGSTKSZ);
2922                                 sas.ss_size = SIGSTKSZ;
2923                                 sas.ss_flags = 0;
2924                                 if (sigaltstack (&sas, NULL) == -1) {
2925                                         perror ("sigaltstack");
2926                                         return;
2927                                 }
2929                                 pthread_attr_init (&attr);
2930                                 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2931                                         printf ("pthread_create\n");
2932                                         return;
2933                                 }
2935                                 sleep (100);
2936                         }
2938                         int
2939                         main ()
2940                         {
2941                                 pid_t son;
2942                                 int status;
2943                                 int i;
2945                                 son = fork ();
2946                                 if (son == -1) {
2947                                         return 1;
2948                                 }
2950                                 if (son == 0) {
2951                                         child ();
2952                                         return 0;
2953                                 }
2955                                 for (i = 0; i < 300; ++i) {
2956                                         waitpid (son, &status, WNOHANG);
2957                                         if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2958                                                 return 0;
2959                                         usleep (10000);
2960                                 }
2962                                 kill (son, SIGKILL);
2963                                 return 1;
2964                         }
2966                 ], [
2967                                 AC_MSG_RESULT(yes)
2968                                 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2969                 ], [
2970                                 with_sigaltstack=no
2971                                 AC_MSG_RESULT(no)
2972                 ])
2973         fi
2975         dnl ********************************
2976         dnl *** Checks for sys_signame ***
2977         dnl ********************************
2978         AC_MSG_CHECKING(for sys_signame)
2979                 AC_TRY_LINK([
2980                 #include <signal.h>
2981         ], [
2982                 const char *signame = sys_signame[0];
2983         ], [
2984                 # Yes, we have it...
2985                 AC_MSG_RESULT(yes)
2986                 AC_DEFINE(HAVE_SYSSIGNAME, 1, [Have sys_signame])
2987         ], [
2988                 AC_MSG_RESULT(no)
2989         ])
2992         dnl ********************************
2993         dnl *** Checks for semaphore lib ***
2994         dnl ********************************
2995         # 'Real Time' functions on Solaris
2996         # posix4 on Solaris 2.6
2997         # pthread (first!) on Linux
2998         AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
3000         AC_SEARCH_LIBS(shm_open, pthread rt posix4) 
3001         AC_CHECK_FUNCS(shm_open)
3003         dnl ********************************
3004         dnl *** Checks for timezone stuff **
3005         dnl ********************************
3006         AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
3007                 AC_TRY_COMPILE([
3008                         #include <time.h>
3009                         ], [
3010                         struct tm tm;
3011                         tm.tm_gmtoff = 1;
3012                         ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
3013         if test $ac_cv_struct_tm_gmtoff = yes; then
3014                 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
3015         else
3016                 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
3017                         AC_TRY_COMPILE([
3018                                 #include <time.h>
3019                         ], [
3020                                 timezone = 1;
3021                         ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
3022                 if test $ac_cv_var_timezone = yes; then
3023                         AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
3024                 else
3025                         AC_ERROR(unable to find a way to determine timezone)
3026                 fi
3027         fi
3029         dnl *********************************
3030         dnl *** Checks for math functions ***
3031         dnl *********************************
3032         AC_SEARCH_LIBS(sqrtf, m)
3034         dnl ****************************************************************
3035         dnl *** Checks for working poll() (macosx defines it but doesn't ***
3036         dnl *** have it in the library (duh))                            ***
3037         dnl ****************************************************************
3038         AC_CHECK_FUNCS(poll)
3040         dnl **********************************
3041         dnl *** epoll                      ***
3042         dnl **********************************
3043         AC_CHECK_HEADERS(sys/epoll.h)
3044         haveepoll=no
3045         AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
3046         if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
3047                 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
3048         fi
3050         havekqueue=no
3052         AC_CHECK_HEADERS(sys/event.h)
3053         AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
3055         dnl **************************************
3056         dnl * Darwin has a race that prevents us from using reliably:
3057         dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
3058         dnl * Since kqueue is mostly used for scaling large web servers, 
3059         dnl * and very few folks run Mono on large web servers on OSX, falling
3060         dnl * back 
3061         dnl **************************************
3062         if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
3063                 if test "x$host_darwin" = "xno"; then
3064                         AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
3065                 fi
3066         fi
3068         dnl ******************************
3069         dnl *** Checks for SIOCGIFCONF ***
3070         dnl ******************************
3071         AC_CHECK_HEADERS(sys/ioctl.h)
3072         AC_CHECK_HEADERS(net/if.h, [], [],
3073            [
3074            #ifdef HAVE_SYS_TYPES_H
3075            # include <sys/types.h>
3076            #endif
3077            #ifdef HAVE_SYS_SOCKET_H
3078            # include <sys/socket.h>
3079            #endif
3080            ])
3081         AC_MSG_CHECKING(for ifreq)
3082         AC_TRY_COMPILE([
3083                 #include <stdio.h>
3084                 #include <sys/ioctl.h>
3085                 #include <net/if.h>
3086                 ], [
3087                 struct ifconf ifc;
3088                 struct ifreq *ifr;
3089                 void *x;
3090                 ifc.ifc_len = 0;
3091                 ifc.ifc_buf = NULL;
3092                 x = (void *) &ifr->ifr_addr;
3093                 ],[
3094                         AC_MSG_RESULT(yes)
3095                         AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
3096                 ], [
3097                         AC_MSG_RESULT(no)
3098                 ])
3099         dnl **********************************
3100         dnl ***     Checks for sin_len     ***
3101         dnl **********************************
3102         AC_MSG_CHECKING(for sockaddr_in.sin_len)
3103         AC_TRY_COMPILE([
3104                 #include <netinet/in.h>
3105                 ], [
3106                 struct sockaddr_in saddr;
3107                 saddr.sin_len = sizeof (saddr);
3108                 ],[
3109                         AC_MSG_RESULT(yes)
3110                         AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
3111                 ], [
3112                         AC_MSG_RESULT(no)
3113                 ])      
3114         dnl **********************************
3115         dnl ***    Checks for sin6_len     ***
3116         dnl **********************************
3117         AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
3118         AC_TRY_COMPILE([
3119                 #include <netinet/in.h>
3120                 ], [
3121                 struct sockaddr_in6 saddr6;
3122                 saddr6.sin6_len = sizeof (saddr6);
3123                 ],[
3124                         AC_MSG_RESULT(yes)
3125                         AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
3126                 ], [
3127                         AC_MSG_RESULT(no)
3128                 ])
3129         dnl **********************************
3130         dnl *** Check for getifaddrs       ***
3131         dnl **********************************
3132         AC_MSG_CHECKING(for getifaddrs)
3133                 AC_TRY_LINK([
3134                 #include <stdio.h>
3135                 #include <sys/types.h>
3136                 #include <sys/socket.h>
3137                 #ifdef HAVE_NET_IF_H
3138                 #include <net/if.h>
3139                 #endif
3140                 #include <ifaddrs.h>
3141         ], [
3142                 getifaddrs(NULL);
3143         ], [
3144                 # Yes, we have it...
3145                 AC_MSG_RESULT(yes)
3146                 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
3147         ], [
3148                 AC_MSG_RESULT(no)
3149         ])
3150         dnl **********************************
3151         dnl *** Check for if_nametoindex   ***
3152         dnl **********************************
3153         AC_MSG_CHECKING(for if_nametoindex)
3154                 AC_TRY_LINK([
3155                 #include <stdio.h>
3156                 #include <sys/types.h>
3157                 #include <sys/socket.h>
3158                 #include <net/if.h>
3159         ], [
3160                 if_nametoindex(NULL);
3161         ], [
3162                 # Yes, we have it...
3163                 AC_MSG_RESULT(yes)
3164                 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
3165         ], [
3166                 AC_MSG_RESULT(no)
3167         ])
3168         dnl **********************************
3169         dnl *** Check for access ***
3170         dnl **********************************
3171         AC_MSG_CHECKING(for access)
3172                 AC_TRY_LINK([
3173                 #include <unistd.h>
3174         ], [
3175                 access(NULL,0);
3176         ], [
3177                 # Yes, we have it...
3178                 AC_MSG_RESULT(yes)
3179                 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
3180         ], [
3181                 AC_MSG_RESULT(no)
3182         ])
3183                         
3184         dnl **********************************
3185         dnl *** Checks for proclib         ***
3186         dnl **********************************
3187         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.)])
3188         dnl **********************************
3189         dnl *** Checks for MonoPosixHelper ***
3190         dnl **********************************
3191         AC_CHECK_HEADERS(checklist.h)
3192         AC_CHECK_HEADERS(pathconf.h)
3193         AC_CHECK_HEADERS(fstab.h)
3194         AC_CHECK_HEADERS(attr/xattr.h)
3195         AC_CHECK_HEADERS(sys/extattr.h)
3196         AC_CHECK_HEADERS(sys/sendfile.h)
3197         AC_CHECK_HEADERS(sys/statvfs.h)
3198         AC_CHECK_HEADERS(sys/statfs.h)
3199         AC_CHECK_HEADERS(sys/vfstab.h)
3200         AC_CHECK_HEADERS(sys/xattr.h)
3201         AC_CHECK_HEADERS(sys/mman.h)
3202         AC_CHECK_HEADERS(sys/param.h)
3203         AC_CHECK_HEADERS(sys/mount.h, [], [],
3204                 [
3205                 #ifdef HAVE_SYS_PARAM_H
3206                 # include <sys/param.h>
3207                 #endif
3208                 ])
3209         AC_CHECK_HEADERS(sys/mount.h)
3210         AC_CHECK_FUNCS(confstr)
3211         AC_CHECK_FUNCS(seekdir telldir)
3212         AC_CHECK_FUNCS(getdomainname)
3213         AC_CHECK_FUNCS(setdomainname)
3214         AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
3215         AC_CHECK_FUNCS(setgroups)
3216         AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
3217         AC_CHECK_FUNCS(getfsstat)
3218         AC_CHECK_FUNCS(lutimes futimes)
3219         AC_CHECK_FUNCS(mremap)
3220         AC_CHECK_FUNCS(remap_file_pages)
3221         AC_CHECK_FUNCS(posix_fadvise)
3222         AC_CHECK_FUNCS(posix_fallocate)
3223         AC_CHECK_FUNCS(vsnprintf)
3224         AC_CHECK_FUNCS(sendfile)
3225         AC_CHECK_FUNCS(gethostid sethostid)
3226         AC_CHECK_FUNCS(sethostname)
3227         AC_CHECK_FUNCS(statfs)
3228         AC_CHECK_FUNCS(fstatfs)
3229         AC_CHECK_FUNCS(statvfs)
3230         AC_CHECK_FUNCS(fstatvfs)
3231         AC_CHECK_FUNCS(stime)
3232         AC_CHECK_FUNCS(ttyname_r)
3233         AC_CHECK_FUNCS(psignal)
3234         AC_CHECK_FUNCS(getlogin_r)
3235         AC_CHECK_FUNCS(lockf)
3236         AC_CHECK_FUNCS(swab)
3237         AC_CHECK_FUNCS(setusershell endusershell)
3238         AC_CHECK_FUNCS(futimens utimensat)
3239         AC_CHECK_FUNCS(fstatat mknodat readlinkat)
3240         AC_CHECK_FUNCS(readv writev preadv pwritev)
3241         AC_CHECK_FUNCS(setpgid)
3242         AC_CHECK_FUNCS(system)
3243         AC_CHECK_FUNCS(fork execv execve)
3244         AC_CHECK_FUNCS(waitpid)
3245         AC_CHECK_FUNCS(accept4)
3246         AC_CHECK_FUNCS(localtime_r)
3247         AC_CHECK_FUNCS(mkdtemp)
3248         AC_CHECK_SIZEOF(size_t)
3249         AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
3250                 [#include <sys/types.h>
3251                  #include <sys/stat.h>
3252                  #include <unistd.h>])
3253         AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
3254                 [#include <sys/types.h>
3255                  #include <sys/stat.h>
3256                  #include <unistd.h>])
3257         AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
3258                 [#include <sys/time.h>])
3259         AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
3260                 [#include <sys/socket.h>])
3261         AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
3262                 [#include <unistd.h>
3263                  #include <fcntl.h>])
3264         AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
3265                 [#include <sys/uio.h>])
3266         AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
3267                 [#include <sys/socket.h>])
3268         AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
3269                 [#include <sys/poll.h>])
3270         AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
3271                 [#include <sys/socket.h>])
3272         AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
3273                 [#include <sys/socket.h>])
3274         AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
3275                 [#include <netinet/in.h>])
3276         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3277                 [#include <netinet/in.h>])
3278         AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3279                 [#include <sys/un.h>])
3280         AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3281                 [#include <sys/types.h>
3282                  #include <sys/stat.h>
3283                  #include <unistd.h>])
3284         AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3285                 [#include <time.h>])
3286         AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3287                 [#include <sys/time.h>
3288                  #include <sys/types.h>
3289                  #include <utime.h>])
3290         AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3291                 [#include <sys/time.h>])
3292         AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3293                 [#include <sys/types.h>
3294                  #include <utime.h>])
3295         AC_CHECK_MEMBERS(
3296                 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,, 
3297                 [#include <sys/types.h>
3298                  #include <dirent.h>])
3299         AC_CHECK_MEMBERS(
3300                 [struct passwd.pw_gecos],,, 
3301                 [#include <sys/types.h>
3302                  #include <pwd.h>])
3303         AC_CHECK_MEMBERS(
3304                 [struct statfs.f_flags],,, 
3305                 [#include <sys/types.h>
3306                  #include <sys/vfs.h>])
3307         AC_CHECK_MEMBERS(
3308                 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,, 
3309                 [#include <sys/types.h>
3310                  #include <sys/stat.h>
3311                  #include <unistd.h>])
3313         dnl Favour xattr through glibc, but use libattr if we have to
3314         AC_CHECK_FUNC(lsetxattr, ,
3315                 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3316         )
3317         AC_SUBST(XATTR_LIB)
3319         dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3320         AC_CHECK_MEMBERS(
3321                 [struct kinfo_proc.kp_proc],,, 
3322                 [#include <sys/types.h>
3323                  #include <sys/param.h>
3324                  #include <sys/sysctl.h>
3325                  #include <sys/proc.h>
3326                  ])
3328         dnl *********************************
3329         dnl *** Checks for Windows compilation ***
3330         dnl *********************************
3331         AC_CHECK_HEADERS(sys/time.h)
3332         AC_CHECK_HEADERS(sys/param.h)
3333         AC_CHECK_HEADERS(dirent.h)
3335         dnl ******************************************
3336         dnl *** Checks for OSX and iOS compilation ***
3337         dnl ******************************************
3338         AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3340         dnl *********************************
3341         dnl *** Check for Console 2.0 I/O ***
3342         dnl *********************************
3343         AC_CHECK_HEADERS([curses.h])
3344         AC_CHECK_HEADERS([term.h], [], [],
3345         [#if HAVE_CURSES_H
3346          #include <curses.h>
3347          #endif
3348         ])
3349         AC_CHECK_HEADERS([termios.h])
3351         dnl *********************************
3352         dnl *** Checks for random         ***
3353         dnl *********************************
3354         if test x$host_darwin = xno; then
3355                 AC_CHECK_HEADERS(sys/random.h)
3356                 AC_CHECK_FUNCS(getrandom getentropy)
3357         fi
3359         dnl *********************************
3360         dnl *** Checks for Mono.Native    ***
3361         dnl *********************************
3363         # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3364         # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3366         AC_MSG_CHECKING(for linux/in.h)
3367         AC_TRY_COMPILE([
3368                 #include <sys/socket.h>
3369                 #include <linux/in.h>
3370         ], [
3371         ],[
3372                 AC_MSG_RESULT(yes)
3373                 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3374         ], [
3375                 AC_MSG_RESULT(no)
3376         ])
3378         AC_CHECK_HEADERS([linux/if_packet.h])
3380         AC_MSG_CHECKING(for struct in_pktinfo)
3381         AC_TRY_COMPILE([
3382                 #ifdef HAVE_LINUX_IN_H
3383                 #include <sys/socket.h>
3384                 #include <linux/in.h>
3385                 #else
3386                 #include <netinet/in.h>
3387                 #endif
3388         ], [
3389                 struct in_pktinfo pktinfo;
3390         ],[
3391                 AC_MSG_RESULT(yes)
3392                 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3393         ], [
3394                 AC_MSG_RESULT(no)
3395         ])
3397         AC_MSG_CHECKING(for struct ip_mreqn)
3398         AC_TRY_COMPILE([
3399                 #if HAVE_LINUX_IN_H
3400                 #include <sys/socket.h>
3401                 #include <linux/in.h>
3402                 #else
3403                 #include <netinet/in.h>
3404                 #endif
3405         ], [
3406                 struct ip_mreqn mreqn;
3407         ],[
3408                 AC_MSG_RESULT(yes)
3409                 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3410         ], [
3411                 AC_MSG_RESULT(no)
3412         ])
3414         if test x$host_darwin = xno; then
3415                 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3416         fi
3418         AC_CHECK_DECL(O_CLOEXEC,         [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3419         AC_CHECK_DECL(F_DUPFD_CLOEXEC,   [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3421         # AC_CHECK_FUNC(getifaddrs,           [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3422         AC_CHECK_FUNC(Qp2getifaddrs,     [AC_DEFINE(HAVE_QP2GETIFADDRS, 1, [Qp2getifaddrs])])
3424         AC_CHECK_FUNC(lseek64,           [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3425         AC_CHECK_FUNC(mmap64,            [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3426         AC_CHECK_FUNC(ftruncate64,       [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3427         AC_CHECK_FUNC(posix_fadvise64,   [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3429         if test "x$mono_native_platform_ios" = "xno"; then
3430                 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3431                 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3432                 AC_CHECK_FUNC(stat64,            [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3433         fi
3435         AC_CHECK_DECL(pipe2,             [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3436         AC_CHECK_FUNC(getmntinfo,        [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3437         AC_CHECK_FUNC(strcpy_s,          [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3438         AC_CHECK_FUNC(strlcpy,           [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3439         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
3440         AC_CHECK_FUNC(ioctl,             [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3441         AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3442         AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3444         if test "x$platform_android" != "xyes"; then
3445                 AC_CHECK_FUNC(arc4random_buf,    [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3446         fi
3448         AC_CHECK_DECL(TIOCGWINSZ,        [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3449         AC_CHECK_FUNC(tcgetattr,         [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3450         AC_CHECK_FUNC(tcsetattr,         [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3451         AC_CHECK_DECL(ECHO,              [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3452         AC_CHECK_DECL(ICANON,            [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3453         AC_CHECK_DECL(TCSANOW,           [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3455         AC_CHECK_DECL(lchflags,          [AC_DEFINE(HAVE_LCHFLAGS, 1, [lchflags])], [], 
3456                 [[#include <sys/types.h> 
3457                 #include <sys/stat.h>]])
3458         AC_CHECK_MEMBER(struct stat.st_flags,
3459                 [AC_DEFINE(HAVE_STAT_FLAGS, 1, [struct stat.st_flags])],
3460                 [],
3461                 [#include <sys/types.h>
3462                 #include <sys/stat.h>])
3464         AC_CHECK_MEMBER(struct stat.st_birthtimespec,
3465                 [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtimespec])],
3466                 [],
3467                 [#include <sys/types.h>
3468                 #include <sys/stat.h>])
3469         AC_CHECK_MEMBER(struct stat.st_atimespec,
3470                 [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])],
3471                 [],
3472                 [#include <sys/types.h>
3473                 #include <sys/stat.h>])
3474         AC_CHECK_MEMBER(struct stat.st_atim,
3475                 [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])],
3476                 [],
3477                 [#include <sys/types.h>
3478                 #include <sys/stat.h>])
3479         AC_CHECK_MEMBER(struct stat.st_atimensec,
3480                 [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])],
3481                 [],
3482                 [#include <sys/types.h>
3483                 #include <sys/stat.h>])
3484         AC_CHECK_MEMBER(struct dirent.d_namlen,       [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [#include <dirent.h>])
3485         AC_CHECK_MEMBER(struct statfs.f_fstypename,   [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [#include <sys/mount.h>])
3486         AC_CHECK_MEMBER(struct statvfs.f_fstypename,  [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [#include <sys/mount.h>])
3488         AC_MSG_CHECKING(for struct statfs)
3489         AC_TRY_COMPILE([
3490                 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3491                 #include <sys/mount.h>
3492                 #else
3493                 #include <sys/statfs.h>
3494                 #endif
3495         ], [
3496                 struct statfs;
3497         ],[
3498                 AC_MSG_RESULT(yes)
3499                 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3500         ], [
3501                 AC_MSG_RESULT(no)
3502         ])
3504         if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3505                 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3506         fi
3508         AC_MSG_CHECKING(for readdir_r)
3509         AC_TRY_LINK([
3510                 #include <dirent.h>
3511         ], [
3512                 DIR* dir;
3513                 struct dirent* entry;
3514                 struct dirent* result;
3515                 readdir_r(dir, entry, &result);
3516         ],[
3517                 AC_MSG_RESULT(yes)
3518                 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3519         ], [
3520                 AC_MSG_RESULT(no)
3521         ])
3523         AC_MSG_CHECKING(for kevent with void *data)
3524         AC_TRY_LINK([
3525                 #include <sys/types.h>
3526                 #include <sys/event.h>
3527         ], [
3528                 struct kevent event;
3529                 void* data;
3530                 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3531         ],[
3532                 AC_MSG_RESULT(yes)
3533                 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3534         ], [
3535                 AC_MSG_RESULT(no)
3536         ])
3538         AC_CHECK_MEMBER(struct fd_set.fds_bits,   [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3539         AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3541         AC_MSG_CHECKING(for sendfile with 4 arguments)
3542         AC_TRY_LINK([
3543                 #include <sys/sendfile.h>
3544         ], [
3545                 #if defined(TARGET_ANDROID)
3546                 #if !defined(__ANDROID_API__)
3547                 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3548                 #elif __ANDROID_API__ < 21
3549                 #error sendfile is not supported on this Android API level
3550                 #endif
3551                 #endif
3553                 int result = sendfile(0, 0, 0, 0);
3554         ],[
3555                 AC_MSG_RESULT(yes)
3556                 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3557         ], [
3558                 AC_MSG_RESULT(no)
3559         ])
3561         ORIG_CFLAGS="$CFLAGS"
3562         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3564         AC_MSG_CHECKING(for sendfile with 6 arguments)
3565         AC_TRY_LINK([
3566                 #include <stdlib.h>
3567                 #include <sys/types.h>
3568                 #include <sys/socket.h>
3569                 #include <sys/uio.h>
3570         ], [
3571                 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3572         ],[
3573                 AC_MSG_RESULT(yes)
3574                 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3575         ], [
3576                 AC_MSG_RESULT(no)
3577         ])
3579         CFLAGS="$ORIG_CFLAGS"
3581         AC_CHECK_FUNC(fcopyfile,     [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3582         AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3583         AC_CHECK_FUNC(accept4,       [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3584         AC_CHECK_FUNC(kqueue,        [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3586         ORIG_CFLAGS="$CFLAGS"
3587         CFLAGS="$CFLAGS -Werror=sign-conversion"
3589         AC_MSG_CHECKING(for getnameinfo with signed flags)
3590         AC_TRY_LINK([
3591                 #include <sys/types.h>
3592                 #include <netdb.h>
3593         ], [
3594                 const struct sockaddr *addr;
3595                 socklen_t addrlen;
3596                 char *host;
3597                 socklen_t hostlen;
3598                 char *serv;
3599                 socklen_t servlen;
3600                 int flags;
3601                 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3602         ],[
3603                 AC_MSG_RESULT(yes)
3604                 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3605         ], [
3606                 AC_MSG_RESULT(no)
3607         ])
3609         CFLAGS="$ORIG_CFLAGS"
3611         if test "x$host_linux" = "xyes"; then
3612                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3613         else
3614                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3615         fi
3617         # HAVE_CLOCK_MONOTONIC check already done above
3618         # HAVE_CLOCK_REALTIME check already done above
3619         # HAVE_MACH_ABSOLUTE_TIME check already done above
3620         # HAVE_MACH_TIMEBASE_INFO check already done above
3621         # HAVE_FUTIMES check already done above
3622         # HAVE_FUTIMENS check already done above
3624         ORIG_CFLAGS="$CFLAGS"
3625         CFLAGS="$CFLAGS -Werror=sign-conversion"
3627         AC_MSG_CHECKING(for bind with unsigned addrlen)
3628         AC_TRY_LINK([
3629                 #include <sys/socket.h>
3630         ], [
3631                 int fd;
3632                 struct sockaddr* addr;
3633                 socklen_t addrLen;
3634                 bind(fd, addr, addrLen);
3635         ],[
3636                 AC_MSG_RESULT(yes)
3637                 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3638         ], [
3639                 AC_MSG_RESULT(no)
3640         ])
3642         AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3643         AC_TRY_LINK([
3644                 #include <netinet/in.h>
3645                 #include <netinet/tcp.h>
3646         ], [
3647                 struct ipv6_mreq opt;
3648                 unsigned int index = 0;
3649                 opt.ipv6mr_interface = index;
3650         ],[
3651                 AC_MSG_RESULT(yes)
3652                 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3653         ], [
3654                 AC_MSG_RESULT(no)
3655         ])
3657         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3658         AC_TRY_LINK([
3659                 #include <sys/inotify.h>
3660         ], [
3661                 intptr_t fd;
3662                 uint32_t wd;
3663                 int result = inotify_rm_watch(fd, wd);
3664         ],[
3665                 AC_MSG_RESULT(yes)
3666                 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3667         ], [
3668                 AC_MSG_RESULT(no)
3669         ])
3671         case "$host" in
3672                 *-*-*freebsd*)
3673                         dnl *****************************
3674                         dnl *** Checks for libinotify ***
3675                         dnl *****************************
3676                         AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
3677                         if test "x$ac_cv_lib_inotify_inotify_init" = "xyes" ; then
3678                                 AC_DEFINE(HAVE_LIBINOTIFY, 1, [FreeBSD libinotify kqueue shim])
3679                                 dnl Needs to be done this way to avoid collision with various 
3680                                 dnl ports including glib and llvm*
3681                                 METADATA_CFLAGS="-I/usr/local/include"
3682                                 AC_SUBST(METADATA_CFLAGS)
3683                         fi
3684                         dnl Workaround due to inotify_rm_watch check failing without -I
3685                         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd in libinotify)
3686                         AC_TRY_LINK([
3687                                 #include </usr/local/include/sys/inotify.h>
3688                         ], [
3689                                 intptr_t fd;
3690                                 uint32_t wd;
3691                                 int result = inotify_rm_watch(fd, wd);
3692                         ],[
3693                            AC_MSG_RESULT(yes)
3694                            AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3695                         ], [
3696                                 AC_MSG_RESULT(no)
3697                         ])
3698         esac
3700         CFLAGS="$ORIG_CFLAGS"
3702         AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3703         if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3704                 AC_MSG_RESULT(no)
3705         elif test "x$cross_compiling" = "xyes"; then
3706                 AC_MSG_RESULT(cross compiling, assuming yes)
3707                 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3708         else
3709                 AC_TRY_RUN([
3710                         #include <sys/mman.h>
3711                         #include <fcntl.h>
3712                         #include <unistd.h>
3714                         int main ()
3715                         {
3716                         #ifdef __PASE__
3717                                 /* IBM i doesn't implement this and returns SIGILL */
3718                                 return -1;
3719                         #endif
3720                                 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3721                                 if (fd == -1)
3722                                         return -1;
3724                                 shm_unlink("/mono_configure_shm_open");
3726                                 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3727                                 //       on at least the current version of Mac OS X
3729                                 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3730                                         return -1;
3732                                 return 0;
3733                         }
3734                 ],[
3735                         AC_MSG_RESULT(yes)
3736                         AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3737                 ], [
3738                         AC_MSG_RESULT(no)
3739                 ])
3740         fi
3742         AC_MSG_CHECKING(for getpriority with int who)
3743         AC_TRY_LINK([
3744                 #include <sys/resource.h>
3745         ], [
3746                 int which;
3747                 int who;
3748                 int result = getpriority(which, who);
3749         ],[
3750                 AC_MSG_RESULT(yes)
3751                 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3752         ], [
3753                 AC_MSG_RESULT(no)
3754         ])
3756         AC_MSG_CHECKING(for kevent with int parameters)
3757         AC_TRY_LINK([
3758                 #include <sys/types.h>
3759                 #include <sys/event.h>
3760         ], [
3761                 int kg;
3762                 const struct kevent* chagelist;
3763                 int nchanges;
3764                 struct kevent* eventlist;
3765                 int nevents;
3766                 const struct timespec* timeout;
3767                 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3768         ],[
3769                 AC_MSG_RESULT(yes)
3770                 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3771         ], [
3772                 AC_MSG_RESULT(no)
3773         ])
3775         AC_CHECK_FUNCS(mkstemps)
3776         # AC_CHECK_FUNCS(mkstemp) # already done above
3778         if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3779                 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3780         fi
3782         AC_MSG_CHECKING(for tcp/var.h)
3783         AC_TRY_LINK([
3784                 #include <sys/types.h>
3785                 #include <sys/socketvar.h>
3786                 #include <netinet/ip.h>
3787                 #include <netinet/tcp.h>
3788                 #include <netinet/tcp_var.h>
3789         ], [
3790         ],[
3791                 AC_MSG_RESULT(yes)
3792                 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3793         ], [
3794                 AC_MSG_RESULT(no)
3795         ])
3797         AC_CHECK_HEADERS([sys/cdefs.h])
3799         AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3800         AC_TRY_LINK([
3801                 #ifdef HAVE_SYS_CDEFS_H
3802                 #include <sys/cdefs.h>
3803                 #endif
3804                 #include <netinet/tcp.h>
3805         ], [
3806                 int result = TCP_ESTABLISHED;
3807         ],[
3808                 AC_MSG_RESULT(yes)
3809                 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3810         ], [
3811                 AC_MSG_RESULT(no)
3812         ])
3814         AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3816         AC_MSG_CHECKING(for struct rt_msghdr)
3817         AC_TRY_COMPILE([
3818                 #include <sys/types.h>
3819                 #include <net/route.h>
3820         ], [
3821                 struct rt_msghdr;
3822         ],[
3823                 AC_MSG_RESULT(yes)
3824                 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3825         ], [
3826                 AC_MSG_RESULT(no)
3827         ])
3829         AC_CHECK_HEADERS([sys/sysctl.h])
3830         AC_CHECK_HEADERS([linux/rtnetlink.h])
3832         AC_CHECK_FUNC(getpeereid,    [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3833         #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3834         AC_CHECK_FUNC(uname,         [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3836         ORIG_CFLAGS="$CFLAGS"
3837         CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3839         AC_MSG_CHECKING(for getdomainname with size_t namelen)
3840         AC_TRY_LINK([
3841                 #include <unistd.h>
3842         ], [
3843                 size_t namelen = 20;
3844                 char name[20];
3845                 int result = getdomainname(name, namelen);
3846         ],[
3847                 AC_MSG_RESULT(yes)
3848                 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3849         ], [
3850                 AC_MSG_RESULT(no)
3851         ])
3853         CFLAGS="$ORIG_CFLAGS"
3855         AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3856         AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3857         AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3859         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
3860                 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3861         elif test "x$host_linux" = "xyes"; then
3862                 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3863         fi
3865         # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3866         # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3867         # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3868         # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3870         enable_gss=no;
3871         AC_MSG_CHECKING(for GSS/GSS.h)
3872         AC_TRY_COMPILE([
3873                         #include <GSS/GSS.h>
3874         ], [
3875         ],[
3876                         AC_MSG_RESULT(yes)
3877                         AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3878                         AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3879                         enable_gss=yes
3880                         AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3881         ], [
3882                         AC_MSG_RESULT(no)
3883         ])
3885         AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3886         AC_TRY_COMPILE([
3887                         #include <gssapi/gssapi_ext.h>
3888         ], [
3889         ],[
3890                         AC_MSG_RESULT(yes)
3891                         enable_gss=yes
3892                         AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3893         ], [
3894                         AC_MSG_RESULT(no)
3895         ])
3897         AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3898         AC_TRY_COMPILE([
3899                         #include <gssapi/gssapi_ext.h>
3900                         #include <gssapi/gssapi_krb5.h>
3901                         gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3902         ], [
3903         ],[
3904                         AC_MSG_RESULT(yes)
3905                         AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3906         ], [
3907                         AC_MSG_RESULT(no)
3908         ])
3910         AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3912         AC_CHECK_HEADERS([crt_externs.h])
3914         AC_MSG_CHECKING(for _NSGetEnviron)
3915         AC_TRY_LINK([
3916                 #include <crt_externs.h>
3917         ], [
3918                 char **result = *(_NSGetEnviron());
3919         ],[
3920                 AC_MSG_RESULT(yes)
3921                 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3922         ], [
3923                 AC_MSG_RESULT(no)
3924         ])
3926         AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3928         if test x$host_sunos = xyes; then
3929                 # set -Werror=strict-prototypes, to match the flags used during the compilation.
3930                 ORIG_CFLAGS="$CFLAGS"
3931                 CFLAGS="$CFLAGS -Werror=strict-prototypes"
3932         fi
3934         AC_CHECK_FUNCS(madvise)
3935         AC_CHECK_FUNCS(posix_madvise)
3937         if test x$host_sunos = xyes; then
3938                 CFLAGS="$ORIG_CFLAGS"
3939         fi
3941         # *** End of Mono.Native checks ***
3942 else
3943         AM_CONDITIONAL(ENABLE_GSS, false)
3945         dnl *********************************
3946         dnl *** Checks for Windows compilation ***
3947         dnl *********************************
3948         AC_CHECK_HEADERS(winternl.h)
3950         jdk_headers_found=no
3951         AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3952         AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3953         AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3954         AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3955         AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3956         AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3957         AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3959         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], , [#include <ws2tcpip.h>])
3961         dnl *********************************
3962         dnl *** Check for struct ip_mreqn ***
3963         dnl *********************************
3964         AC_MSG_CHECKING(for struct ip_mreqn)
3965         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3966                 struct ip_mreqn mreq;
3967                 mreq.imr_address.s_addr = 0;
3968         ], [
3969                 # Yes, we have it...
3970                 AC_MSG_RESULT(yes)
3971                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3972         ], [
3973                 # We'll just have to try and use struct ip_mreq
3974                 AC_MSG_RESULT(no)
3975                 AC_MSG_CHECKING(for struct ip_mreq)
3976                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3977                         struct ip_mreq mreq;
3978                         mreq.imr_interface.s_addr = 0;
3979                 ], [
3980                         # Yes, we have it...
3981                         AC_MSG_RESULT(yes)
3982                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3983                 ], [
3984                         # No multicast support
3985                         AC_MSG_RESULT(no)
3986                 ])
3987         ])
3989         dnl **********************************
3990         dnl *** Check for getaddrinfo ***
3991         dnl **********************************
3992         AC_MSG_CHECKING(for getaddrinfo)
3993                 AC_TRY_LINK([
3994                 #include <stdio.h>
3995                 #include <winsock2.h>
3996                 #include <ws2tcpip.h>
3997         ], [
3998                 getaddrinfo(NULL,NULL,NULL,NULL);
3999         ], [
4000                 # Yes, we have it...
4001                 AC_MSG_RESULT(yes)
4002                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
4003         ], [
4004                 AC_MSG_RESULT(no)
4005         ])
4007         dnl **********************************
4008         dnl *** Check for gethostbyname ***
4009         dnl **********************************
4010         AC_MSG_CHECKING(for gethostbyname)
4011                 AC_TRY_LINK([
4012                 #include <stdio.h>
4013                 #include <winsock2.h>
4014                 #include <ws2tcpip.h>
4015         ], [
4016                 gethostbyname(NULL);
4017         ], [
4018                 # Yes, we have it...
4019                 AC_MSG_RESULT(yes)
4020                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
4021         ], [
4022                 AC_MSG_RESULT(no)
4023         ])
4025         dnl **********************************
4026         dnl *** Check for getprotobyname ***
4027         dnl **********************************
4028         AC_MSG_CHECKING(for getprotobyname)
4029                 AC_TRY_LINK([
4030                 #include <stdio.h>
4031                 #include <winsock2.h>
4032                 #include <ws2tcpip.h>
4033         ], [
4034                 getprotobyname(NULL);
4035         ], [
4036                 # Yes, we have it...
4037                 AC_MSG_RESULT(yes)
4038                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
4039         ], [
4040                 AC_MSG_RESULT(no)
4041         ])
4043         dnl **********************************
4044         dnl *** Check for getnameinfo ***
4045         dnl **********************************
4046         AC_MSG_CHECKING(for getnameinfo)
4047                 AC_TRY_LINK([
4048                 #include <stdio.h>
4049                 #include <winsock2.h>
4050                 #include <ws2tcpip.h>
4051         ], [
4052                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
4053         ], [
4054                 # Yes, we have it...
4055                 AC_MSG_RESULT(yes)
4056                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
4057         ], [
4058                 AC_MSG_RESULT(no)
4059         ])
4061         dnl **********************************
4062         dnl *** Check for inet_ntop ***
4063         dnl **********************************
4064         AC_MSG_CHECKING(for inet_ntop)
4065                 AC_TRY_LINK([
4066                 #include <stdio.h>
4067                 #include <winsock2.h>
4068                 #include <ws2tcpip.h>
4069         ], [
4070                 inet_ntop (0, NULL, NULL, 0);
4071         ], [
4072                 # Yes, we have it...
4073                 AC_MSG_RESULT(yes)
4074                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
4075         ], [
4076                 AC_MSG_RESULT(no)
4077         ])
4079         dnl **********************************
4080         dnl *** Check for inet_pton ***
4081         dnl **********************************
4082         AC_MSG_CHECKING(for inet_pton)
4083                 AC_TRY_LINK([
4084                 #include <stdio.h>
4085                 #include <winsock2.h>
4086                 #include <ws2tcpip.h>
4087         ], [
4088                 #ifndef inet_pton
4089                 (void) inet_pton;
4090                 #endif
4091                 inet_pton (0, NULL, NULL);
4092         ], [
4093                 # Yes, we have it...
4094                 AC_MSG_RESULT(yes)
4095                 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
4096         ], [
4097                 AC_MSG_RESULT(no)
4098         ])
4101 dnl socklen_t check
4102 AC_MSG_CHECKING(for socklen_t)
4103 AC_TRY_COMPILE([
4104 #include <sys/types.h>
4105 #include <sys/socket.h>
4107   socklen_t foo;
4109 ac_cv_c_socklen_t=yes
4110         AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
4111         AC_MSG_RESULT(yes)
4113         AC_MSG_RESULT(no)
4116 AC_CHECK_FUNCS(execvp)
4118 dnl ****************************
4119 dnl *** Look for /dev/random ***
4120 dnl ****************************
4122 AC_MSG_CHECKING([if usage of random device is requested])
4123 AC_ARG_ENABLE(dev-random,
4124 [  --disable-dev-random    disable the use of the random device (enabled by default)],
4125 try_dev_random=$enableval, try_dev_random=yes)
4127 AC_MSG_RESULT($try_dev_random)
4129 case "{$build}" in
4131 dnl IBM i does not have /dev/random, use unblocking only
4133     *-*-os400*)
4134     NAME_DEV_RANDOM="/dev/urandom"
4135     ;;
4137 dnl Win32 does not have /dev/random, they have their own method...
4139     *-mingw*|*-*-cygwin*)
4140     ac_cv_have_dev_random=no
4141     ;;
4143 dnl Everywhere else, it's /dev/random
4145     *)
4146     NAME_DEV_RANDOM="/dev/random"
4147     ;;
4148 esac
4150 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
4152 dnl Now check if the device actually exists
4154 if test "x$try_dev_random" = "xyes"; then
4155     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
4156     [if test -r "$NAME_DEV_RANDOM" ; then
4157         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
4158     if test "x$ac_cv_have_dev_random" = "xyes"; then
4159         AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
4160     fi
4161 else
4162     AC_MSG_CHECKING(for random device)
4163     ac_cv_have_dev_random=no
4164     AC_MSG_RESULT(has been disabled)
4167 if test "x$host_win32" = "xyes"; then
4168     AC_DEFINE(HAVE_CRYPT_RNG)
4171 if test "x$ac_cv_have_dev_random" = "xno" \
4172     && test "x$host_win32" = "xno"; then
4173     AC_MSG_WARN([[
4175 *** A system-provided entropy source was not found on this system.
4176 *** Because of this, the System.Security.Cryptography random number generator
4177 *** will throw a NotImplemented exception.
4179 *** If you are seeing this message, and you know your system DOES have an
4180 *** entropy collection in place, please report an issue on GitHub and
4181 *** provide information about the system and how to access the random device.
4183 *** Otherwise you can install either egd or prngd and set the environment
4184 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
4185 ***]])
4188 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)
4190 AC_MSG_CHECKING([if big-arrays are to be enabled])
4191 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)
4192 if test "x$enable_big_arrays" = "xyes" ; then
4193     if  test "x$ac_cv_sizeof_void_p" = "x8"; then
4194         AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
4195     else
4196         AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
4197     fi
4199 AC_MSG_RESULT($enable_big_arrays)
4201 dnl **************
4202 dnl *** DTRACE ***
4203 dnl **************
4205 AC_ARG_ENABLE(dtrace,[  --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
4207 if test "x$enable_dtrace" = "xyes"; then
4208    if test "x$has_dtrace" = "xno"; then
4209           AC_MSG_ERROR([DTrace probes are not supported on this platform.])
4210    fi
4211    AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
4212    if test "x$DTRACE" = "xno"; then
4213           AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
4214           enable_dtrace=no
4215    elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
4216           AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
4217           enable_dtrace=no
4218    fi
4221 dtrace_g=no
4222 if test "x$enable_dtrace" = "xyes"; then
4223         AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
4224         DTRACEFLAGS=
4225         if test "x$ac_cv_sizeof_void_p" = "x8"; then
4226                 case "$host" in
4227                         powerpc-*-darwin*)
4228                         DTRACEFLAGS="-arch ppc64"
4229                         ;;
4230                         i*86-*-darwin*)
4231                         DTRACEFLAGS="-arch x86_64"
4232                         ;;
4233                         *)
4234                         DTRACEFLAGS=-64
4235                         ;;
4236                 esac
4237         else
4238                 case "$host" in
4239                         powerpc-*-darwin*)
4240                         DTRACEFLAGS="-arch ppc"
4241                         ;;
4242                         i*86-*-darwin*)
4243                         DTRACEFLAGS="-arch i386"
4244                         ;;
4245                         *)
4246                         DTRACEFLAGS=-32
4247                         ;;
4248                 esac
4249         fi
4250         AC_SUBST(DTRACEFLAGS)
4251         case "$host" in
4252                 *-*-solaris*)
4253                 dtrace_g=yes
4254                 ;;
4255         esac
4256         AC_CHECK_HEADERS([sys/sdt.h])
4258 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
4259 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
4261 dnl **************************
4262 dnl *** AOT cross offsets  ***
4263 dnl **************************
4265 AC_ARG_WITH(cross-offsets, [  --with-cross-offsets=<offsets file path>    Explicit AOT cross offsets file],
4266     AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
4268 dnl **************
4269 dnl ***  LLVM  ***
4270 dnl **************
4272 AC_ARG_ENABLE(llvm,[  --enable-llvm     Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
4273 AC_ARG_ENABLE(loadedllvm,[  --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
4274 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)
4275 AC_ARG_ENABLE(llvm-runtime,[  --enable-llvm-runtime     Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
4276 AC_ARG_ENABLE(llvm-asserts,[  --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
4278 AC_ARG_WITH(llvm, [  --with-llvm=<llvm prefix>    Enable the LLVM back-end], enable_llvm=yes,)
4280 if test "x$enable_llvm" = "xdefault"; then
4281    enable_llvm=$enable_llvm_default
4284 if test "x$enable_loadedllvm" = "xyes"; then
4285    AC_MSG_WARN("Loadable LLVM is no longer supported. Enabling default LLVM support instead.")
4286    enable_llvm=yes
4289 enable_llvm_msvc_only="no"
4290 if test "x$enable_llvm" = "xyes"; then
4291         if test "x$host_win32" = "xyes"; then
4292                 if test "x$cross_compiling" = "xno"; then
4293                         case "$target" in
4294                         x86_64*)
4295                                 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
4296                                 enable_llvm_msvc_only="yes"
4297                                 ;;
4298                         i686*)
4299                                 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
4300                                 ;;
4301                         esac
4302                 fi
4303         fi
4306 internal_llvm="no"
4307 if test "x$enable_llvm" = "xyes"; then
4308         if test "x$with_llvm" != "x"; then
4309                 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
4310                 if test x$host_win32 = xyes; then
4311                         EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
4312                 fi
4313                 if test ! -x $EXTERNAL_LLVM_CONFIG; then
4314                         AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
4315                 fi
4316         else
4317                 internal_llvm=yes
4318         fi
4320         LLVM_CODEGEN_LIBS="x86codegen"
4321         case "$target" in
4322         arm*)
4323                 LLVM_CODEGEN_LIBS="armcodegen"
4324                 ;;
4325         aarch64*)
4326                 LLVM_CODEGEN_LIBS="aarch64codegen"
4327                 ;;
4328         powerpc*)
4329                 LLVM_CODEGEN_LIBS="powerpccodegen"
4330                 ;;
4331         esac
4332         if test "x$host" != "x$target"; then
4333                 # No need for jit libs
4334                 LLVM_CODEGEN_LIBS=
4335         fi
4337         AC_SUBST(LLVM_CODEGEN_LIBS)
4338         AC_SUBST(EXTERNAL_LLVM_CONFIG)
4340         if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" &&  test "x$internal_llvm" = "xno"; then
4341                 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4342                 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4343         fi
4344         if test "x$enable_llvm_msvc_only" != "xyes"; then
4345                 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4346         else
4347                 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4348         fi
4349 fi # ENABLE_LLVM
4351 # AC_DEFINE necessary for correct restore behavior on Linux
4352 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4353 if test "x$internal_llvm" != "xno"; then
4354         if test "x$enable_llvm_msvc_only" != "xyes"; then
4355                 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4356         else
4357                 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4358         fi
4361 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4362 if test "x$enable_llvm_asserts" != "xno"; then
4363         if test "x$enable_llvm_msvc_only" != "xyes"; then
4364                 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4365         else
4366                 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4367         fi
4370 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4372 if test "x$enable_llvm" = "xyes"; then
4373         enable_llvm_runtime=yes
4376 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4377 if test "x$enable_llvm_runtime" = "xyes"; then
4378         if test "x$enable_llvm_msvc_only" != "xyes"; then
4379                 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4380         else
4381                 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4382         fi
4385 TARGET="unknown"
4386 ACCESS_UNALIGNED="yes"
4388 LIBC="libc.so.6"
4389 INTL="libc.so.6"
4390 SQLITE="libsqlite.so.0"
4391 SQLITE3="libsqlite3.so.0"
4392 ODBC="libodbc.so.2"
4393 X11="libX11.so"
4394 GDKX11="libgdk-x11-2.0.so.0"
4395 GTKX11="libgtk-x11-2.0.so.0"
4396 XINERAMA="libXinerama.so.1"
4398 sizeof_register="SIZEOF_VOID_P"
4400 jit_wanted=true
4401 boehm_supported=true
4402 BTLS_SUPPORTED=no
4403 BTLS_PLATFORM=
4404 INTERP_CFLAGS=""
4406 case "$host" in
4407         wasm32*)
4408                 TARGET=WASM
4409                 arch_target=wasm
4410                 BTLS_SUPPORTED=no
4411                 ACCESS_UNALIGNED="no"
4412                 with_tls=pthread
4413                 target_wasm=yes
4414                 if test "x$mono_cv_clang" = "xyes"; then
4415                    INTERP_CFLAGS="-mllvm -join-liveintervals=false"
4416                    AC_SUBST(INTERP_CFLAGS)
4417                 fi
4418                 ;;
4419         mips*)
4420                 TARGET=MIPS;
4421                 arch_target=mips;
4422                 with_tls=pthread;
4423                 ACCESS_UNALIGNED="no"
4425                 AC_MSG_CHECKING(for mips n32)
4426                 AC_TRY_COMPILE([],[
4427                 #if _MIPS_SIM != _ABIN32
4428                 #error Not mips n32
4429                 #endif
4430                 ],[
4431                 AC_MSG_RESULT(yes)
4432                 sizeof_register=8
4433                 ],[
4434                 AC_MSG_RESULT(no)
4435                 ])
4436                 ;;
4437         i*86-*-*)
4438                 TARGET=X86;
4439                 arch_target=x86;
4440                 case $host_os in
4441                   solaris*)
4442                         LIBC="libc.so"
4443                         INTL="libintl.so"
4444                         if test "x$ac_cv_sizeof_void_p" = "x8"; then
4445                                 TARGET=AMD64
4446                                 arch_target=amd64
4447                         fi
4449                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4450                         # int astruct __attribute__ ((visibility ("hidden")));
4451                         # void foo ()
4452                         # {
4453                         #       void *p = &astruct;
4454                         # }
4455                         # gcc -fPIC --shared -o libfoo.so foo.c
4456                         # yields:
4457                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4458                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4459                         have_visibility_hidden=no
4460                         ;;
4461                   mingw*|cygwin*)
4462                         have_visibility_hidden=no
4463                         BTLS_SUPPORTED=no
4464                         BTLS_PLATFORM=i386
4465                         ;;
4466                   haiku*)
4467                         LIBC=libroot.so
4468                         ;;
4469                   linux*)
4470                         AOT_SUPPORTED="yes"
4471                         BTLS_SUPPORTED=yes
4472                         BTLS_PLATFORM=i386
4473                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4474                         ;;
4475                   darwin*)
4476                         AOT_SUPPORTED="yes"
4477                         BTLS_SUPPORTED=yes
4478                         BTLS_PLATFORM=i386
4479                         ;;
4480                   openbsd*|freebsd*|kfreebsd-gnu*)
4481                         AOT_SUPPORTED="yes"
4482                         BTLS_SUPPORTED=yes
4483                         BTLS_PLATFORM=i386
4484                         ;;
4485                 esac
4486                 ;;
4487         x86_64-*-* | amd64-*-*)
4488                 TARGET=AMD64;
4489                 arch_target=amd64;
4490                 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4491                         AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4492                         sizeof_register=8
4493                 fi
4494                 case $host_os in
4495                   linux*)
4496                         AOT_SUPPORTED="yes"
4497                         BTLS_SUPPORTED=yes
4498                         BTLS_PLATFORM=x86_64
4499                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4500                         ;;
4501                   darwin*)
4502                         AOT_SUPPORTED="yes"
4503                         BTLS_SUPPORTED=yes
4504                         BTLS_PLATFORM=x86_64
4505                         boehm_supported=false
4506                         ;;
4507                   openbsd*|freebsd*|kfreebsd-gnu*)
4508                         AOT_SUPPORTED="yes"
4509                         BTLS_SUPPORTED=yes
4510                         BTLS_PLATFORM=x86_64
4511                         ;;
4512                   mingw*|cygwin*)
4513                         BTLS_SUPPORTED=no
4514                         BTLS_PLATFORM=x86_64
4515                         ;;
4516                 esac
4517                 ;;
4518         sparc*-*-*)
4519                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4520                    TARGET=SPARC64
4521                 else
4522                         TARGET=SPARC
4523                 fi
4524                 arch_target=sparc;
4525                 ACCESS_UNALIGNED="no"
4526                 case $host_os in
4527                   linux*) ;;
4528                   *)
4529                         LIBC="libc.so"
4530                         INTL="libintl.so"
4531                 esac
4532                 if test x"$GCC" = xyes; then
4533                         # We don't support v8 cpus
4534                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4535                 fi
4536                 if test x"$AR" = xfalse; then
4537                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4538                 fi
4539                 ;;
4540         *-mingw*|*-*-cygwin*)
4541                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4542                 have_visibility_hidden=no
4543                 INTL="intl"
4544                 case "$host" in
4545                         x86_64*mingw*)
4546                                 # Old Boehm fails to compile for x86_64-mingw.
4547                                 # It is trivial to fix, but just silently drop it.
4548                                 boehm_supported=false
4549                                 ;;
4550                 esac
4551                 ;;
4552         macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4553         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4554         powerpc*-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4555                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4556                         TARGET=POWERPC64;
4557                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4558                         # mono#18554 - be more robust in testing for -mminimal-toc
4559                         AC_MSG_NOTICE([Checking for PowerPC ISA -mminimal-toc support])
4560                         AX_CHECK_COMPILE_FLAG(
4561                                 [-mminimal-toc],
4562                                 [CFLAGS="$CFLAGS -mminimal-toc"],
4563                                 [CFLAGS="$CFLAGS"]
4564                         )
4565                         case "$host" in
4566                                 powerpc*-*-freebsd*)
4567                                         # We need to be aware if we are ELFv1 or v2 here
4568                                         AC_MSG_NOTICE([Checking FreeBSD ELF version])
4569                                         if ! ( echo | cc -dM -E - | awk '/_CALL_ELF/ {print $NF}'); then
4570                                                 AC_DEFINE([POWERPC_ELF], 1, [PowerPC ELFv1])
4571                                         else
4572                                                 AC_DEFINE([POWERPC_ELFV2], 1, [PowerPC ELFv2])
4573                                         fi
4574                                         ;;
4575                         esac
4576                 else
4577                         TARGET=POWERPC;
4578                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4579                 fi
4580                 arch_target=ppc;
4581                 case $host_os in
4582                   aix*|os400*)
4583                         BTLS_SUPPORTED=yes
4584                         BTLS_PLATFORM=powerpc
4585                         ;;
4586                   linux*)
4587                         BTLS_SUPPORTED=yes
4588                         BTLS_PLATFORM=powerpc
4589                         ;;
4590                   freebsd*)
4591                         BTLS_SUPPORTED=yes
4592                         BTLS_PLATFORM=powerpc
4593                         ;;
4594                 esac
4595                 ;;
4596         armv7k-*-darwin*)
4597                 TARGET=ARM;
4598                 TARGET_SYS=WATCHOS
4599                 arch_target=arm;
4600                 arm_fpu=VFP_HARD
4601                 ACCESS_UNALIGNED="no"
4602                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4603                 ;;
4605         arm*-darwin*)
4606                 TARGET=ARM;
4607                 arch_target=arm;
4608                 ACCESS_UNALIGNED="no"
4609                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4610                 ;;
4611         arm*-linux*)
4612                 TARGET=ARM;
4613                 arch_target=arm;
4614                 ACCESS_UNALIGNED="no"
4615                 AOT_SUPPORTED="yes"
4616                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4617                 BTLS_SUPPORTED=yes
4618                 BTLS_PLATFORM=arm
4619                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4620                 case "$target" in
4621                 arm*-linux*-gnueabi)
4622                         BTLS_PLATFORM=armsoft
4623                         ;;
4624                 esac
4625                 ;;
4626         arm*-netbsd*-eabi*)
4627                 TARGET=ARM;
4628                 arch_target=arm;
4629                 ACCESS_UNALIGNED="no"
4630                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4631                 ;;
4632         aarch64-*darwin*ilp32)
4633                 TARGET=ARM6432
4634                 arch_target=arm64
4635                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4636                 sizeof_register=8
4637                 # assuming no other target other than watchOS is using aarch64*darwin triple
4638                 TARGET_SYS=WATCHOS
4639                 ;;
4640         aarch64-*)
4641                 # https://lkml.org/lkml/2012/7/15/133
4642                 TARGET=ARM64
4643                 arch_target=arm64
4644                 boehm_supported=false
4645                 AOT_SUPPORTED="yes"
4646                 BTLS_SUPPORTED=yes
4647                 BTLS_PLATFORM=aarch64
4648                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4649                 ;;
4650         s390x-*-linux*)
4651                 TARGET=S390X;
4652                 arch_target=s390x;
4653                 ACCESS_UNALIGNED="yes"
4654                 BTLS_SUPPORTED=yes
4655                 BTLS_PLATFORM=s390x
4656                 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4657                 ;;
4658         riscv32-*)
4659                 TARGET=RISCV32
4660                 ACCESS_UNALIGNED=no
4661                 AOT_SUPPORTED=no
4662                 BTLS_SUPPORTED=yes
4663                 BTLS_PLATFORM=riscv32
4664                 arch_target=riscv32
4665                 boehm_supported=false
4666                 ;;
4667         riscv64*)
4668                 TARGET=RISCV64
4669                 ACCESS_UNALIGNED=no
4670                 AOT_SUPPORTED=no
4671                 BTLS_SUPPORTED=yes
4672                 BTLS_PLATFORM=riscv64
4673                 arch_target=riscv64
4674                 boehm_supported=false
4675                 ;;
4676 esac
4678 HOST=$TARGET
4680 if test "x$host" != "x$target"; then
4681    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4682    enable_mcs_build=no
4683    enable_support_build=no
4684    BTLS_SUPPORTED=no
4685    # Can't use tls, since it depends on the runtime detection of tls offsets
4686    # in mono-compiler.h
4687    with_tls=pthread
4688    target_mach=no
4689    case "$target" in
4690    wasm32*)
4691                 TARGET=WASM
4692                 arch_target=wasm
4693                 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4694                 ;;
4695    arm*-darwin*)
4696                 TARGET=ARM;
4697                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4698                 case "$target" in
4699                 armv7k-*)
4700                         arm_fpu=VFP_HARD
4701                         AC_DEFINE(TARGET_WATCHOS, 1, [...])
4702                         ;;
4703                 esac            
4704                 ;;
4705    powerpc64-ps3-linux-gnu)
4706                 TARGET=POWERPC64
4707                 arch_target=powerpc64
4708                 AC_DEFINE(TARGET_PS3, 1, [...])
4709                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4710                 # uses this define
4711                 AC_DEFINE(__mono_ppc64__, 1, [...])
4712                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4713                 sizeof_register=8
4714                 target_byte_order=G_BIG_ENDIAN
4715                 ;;
4716    powerpc64-xbox360-linux-gnu)
4717                 TARGET=POWERPC64
4718                 arch_target=powerpc64
4719                 AC_DEFINE(TARGET_XBOX360, 1, [...])
4720                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4721                 # uses this define
4722                 sizeof_register=8
4723                 target_byte_order=G_BIG_ENDIAN
4724                 ;;
4725    arm*-linux-*)
4726                 TARGET=ARM;
4727                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4728                 ;;
4729    arm*-netbsd*-eabi*)
4730                 TARGET=ARM;
4731                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4732                 ;;
4733    i686*-linux-*)
4734                 TARGET=X86;
4735                 ;;
4736    i*86-apple-*)
4737                 TARGET=X86;
4738                 ;;
4739    x86_64*-linux-*)
4740                 TARGET=AMD64;
4741                 ;;
4742    x86_64-ps4-freebsd)
4743                 TARGET=AMD64;
4744                 AC_DEFINE(TARGET_PS4, 1, [...])
4745                 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4746                 CPPFLAGS="$CPPFLAGS"
4747                 target_win32=no
4748                 ;;
4749         aarch64*darwin*_ilp32)
4750                 TARGET=ARM6432;
4751                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4752                 sizeof_register=8
4753                 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4754                 ;;
4755         aarch64-*)
4756                 TARGET=ARM64
4757                 ;;
4758         riscv32*)
4759                 TARGET=RISCV32
4760                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4761                 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4762                 arch_target=riscv32
4763                 target_mach=no
4764                 with_tls=pthread
4765                 ;;
4766         riscv64*)
4767                 TARGET=RISCV64
4768                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4769                 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4770                 arch_target=riscv64
4771                 target_mach=no
4772                 with_tls=pthread
4773                 ;;
4774         x86_64-google-fuchsia)
4775                 TARGET=AMD64
4776                 target_win32=nop
4777                 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
4778                 ;;
4779         *)
4780                 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4781         esac
4783         case "$target" in
4784         *-darwin*)
4785                 target_mach=yes
4786                 ;;
4787         *-linux-android*)
4788                 AC_DEFINE(TARGET_ANDROID, 1, [...])
4789                 ;;
4790         esac
4793 case "$TARGET" in
4794 WASM)
4795         AC_DEFINE(TARGET_WASM, 1, [...])
4796         arch_target=wasm
4797         ;;
4798 X86)
4799         AC_DEFINE(TARGET_X86, 1, [...])
4800         arch_target=x86
4801         ;;
4802 AMD64)
4803         AC_DEFINE(TARGET_AMD64, 1, [...])
4804         arch_target=amd64
4805         ;;
4806 ARM)
4807         AC_DEFINE(TARGET_ARM, 1, [...])
4808         arch_target=arm
4809         ACCESS_UNALIGNED="no"
4810         ;;
4811 ARM64|ARM6432)
4812         AC_DEFINE(TARGET_ARM64, 1, [...])
4813         arch_target=arm64
4814         ;;
4815 POWERPC)
4816         AC_DEFINE(TARGET_POWERPC, 1, [...])
4817         ;;
4818 POWERPC64)
4819         AC_DEFINE(TARGET_POWERPC, 1, [...])
4820         AC_DEFINE(TARGET_POWERPC64, 1, [...])
4821         ;;
4822 S390X)
4823         AC_DEFINE(TARGET_S390X, 1, [...])
4824         ;;
4825 MIPS)
4826         AC_DEFINE(TARGET_MIPS, 1, [...])
4827         ;;
4828 SPARC)
4829         AC_DEFINE(TARGET_SPARC, 1, [...])
4830         ;;
4831 SPARC64)
4832         AC_DEFINE(TARGET_SPARC64, 1, [...])
4833         ;;
4834 RISCV32)
4835         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4836         AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4837         ;;
4838 RISCV64)
4839         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4840         AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4841         ;;
4842 esac
4844 case "$TARGET" in
4845 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4846     target_sizeof_void_p=4
4847     ;;
4848 *64* | S390X)
4849     target_sizeof_void_p=8
4850     ;;
4852     AC_MSG_ERROR([unknown target])
4853     ;;
4854 esac
4856 case "$HOST" in
4857 WASM)
4858         AC_DEFINE(HOST_WASM, 1, [...])
4859         ;;
4860 X86)
4861         AC_DEFINE(HOST_X86, 1, [...])
4862         ;;
4863 AMD64)
4864         AC_DEFINE(HOST_AMD64, 1, [...])
4865         ;;
4866 ARM)
4867         AC_DEFINE(HOST_ARM, 1, [...])
4868         ;;
4869 ARM64)
4870         AC_DEFINE(HOST_ARM64, 1, [...])
4871         ;;
4872 POWERPC)
4873         AC_DEFINE(HOST_POWERPC, 1, [...])
4874         ;;
4875 POWERPC64)
4876         AC_DEFINE(HOST_POWERPC, 1, [...])
4877         AC_DEFINE(HOST_POWERPC64, 1, [...])
4878         ;;
4879 S390X)
4880         AC_DEFINE(HOST_S390X, 1, [...])
4881         ;;
4882 MIPS)
4883         AC_DEFINE(HOST_MIPS, 1, [...])
4884         ;;
4885 SPARC)
4886         AC_DEFINE(HOST_SPARC, 1, [...])
4887         ;;
4888 SPARC64)
4889         AC_DEFINE(HOST_SPARC64, 1, [...])
4890         ;;
4891 RISCV32)
4892         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4893         AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4894         ;;
4895 RISCV64)
4896         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4897         AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4898         ;;
4899 esac
4901 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4902 case "$HOST" in
4903 X86 | AMD64 | ARM | ARM64)
4904         MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4905         ;;
4906 esac
4908 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4909 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4911 dnl *************
4912 dnl *** VTUNE ***
4913 dnl *************
4915 AC_ARG_ENABLE(vtune,[  --enable-vtune   Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4916 AC_ARG_WITH(vtune, [  --with-vtune=<vtune prefix>       Enable jit vtune profiling], enable_vtune=yes,)
4918 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4920 if test "x$enable_vtune" = "xyes"; then
4921         if test "x$with_vtune" = "x"; then
4922                 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4923         else
4924                 VTUNE_PATH=$with_vtune
4925         fi
4926         VTUNE_INCLUDE=$VTUNE_PATH/include
4927         case "$TARGET" in
4928         X86)
4929                 VTUNE_LIB=$VTUNE_PATH/lib32
4930                 ;;
4931         AMD64)
4932                 VTUNE_LIB=$VTUNE_PATH/lib64
4933                 ;;
4934         *)
4935                 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4936                 ;;
4937         esac
4938         if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4939                 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4940         fi
4941         if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4942                 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4943         fi
4945         VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4946         VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4948         AC_SUBST(VTUNE_LIBS)
4949         AC_SUBST(VTUNE_CFLAGS)
4951 dnl Use GCC atomic ops if they work on the target.
4952 if test x$GCC = "xyes"; then
4953         case $TARGET in
4954         X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4955                 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4956                 ;;
4957         esac
4960 if test "x$target_mach" = "xyes"; then
4962    if test "x$TARGET_SYS" = "xWATCHOS"; then
4963           AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4964           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4965           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4966           BTLS_SUPPORTED=no
4967    elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64" -o "x$TARGET" = "xARM6432"; then
4968           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4969           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4970           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4971           BTLS_SUPPORTED=no
4972           target_ios=yes
4973    else
4974        AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4975        #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4976        #error fail this for ios
4977        #endif
4978        ], [
4979                   AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4980           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4981           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4982           target_osx=yes
4983        ], [
4984           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4985           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4986           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4987           BTLS_SUPPORTED=no
4988                   target_ios=yes
4989        ])
4990         fi
4991    AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4994 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4996 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4998 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4999    AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
5000 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
5001    AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
5002 else
5003    AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
5006 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
5008 if test "x$sizeof_register" = "x4"; then
5009   AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
5010 elif test "x$sizeof_register" = "x8"; then
5011   AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
5012 else
5013   AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
5016 # zlib/configure detects visibility support similarly and defines HAVE_HIDDEN
5017 # on the compiler command line (not config.h).
5018 if test "x$have_visibility_hidden" = "xyes"; then
5019    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
5020    ZLIB_CFLAGS="$ZLIB_CFLAGS -DHAVE_HIDDEN"
5023 if test "x$have_deprecated" = "xyes"; then
5024    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
5027 dnl 
5028 dnl Simple Generational checks (sgen)
5030 SGEN_DEFINES=
5031 AC_ARG_WITH(sgen,                    [  --with-sgen=yes,no             Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
5032 AC_ARG_WITH(sgen-default-concurrent, [  --with-sgen-default-concurrent=yes,no             Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
5033 if test x$buildsgen = xyes; then
5034    AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
5035    SGEN_DEFINES="-DHAVE_SGEN_GC"
5037         conc_gc_msg=""
5038    if test x$with_sgen_default_concurrent != xno; then
5039        AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
5040            conc_gc_msg=" (concurrent by default)"
5041    fi
5043    if test "x$gc_msg" = "x"; then
5044       gc_msg="sgen$conc_gc_msg"
5045    else
5046       gc_msg="sgen$conc_gc_msg and $gc_msg"
5047    fi
5049 AC_SUBST(SGEN_DEFINES)
5050 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
5052 jit_status="Building and using the JIT"
5054 libsuffix=".so"
5056 case "$host" in
5057      *-*-aix*)
5058         dnl on AIX/PASE, shared libraries can be and usually are inside archives
5059         dnl so, we specify them by libfoo.a(libfoo.so.0) for libtool's conventions,
5060         dnl or libfoo.a(shr[_64].o) for the AIX system convention,
5061         dnl or lib.so[.0](shr[_64].o) for libtool's hybrid convention
5062         dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX
5063         LIBC="libc.a(shr_64.o)"
5064         # Thanks, I hate it! This is crumbly, especially the one-liner.
5065         AC_MSG_CHECKING([how to dlopen libintl])
5066         AC_LINK_IFELSE([AC_LANG_SOURCE([
5067                 /* XXX: Check for libintl header/gettext func better? */
5068                 #include <libintl.h>
5070                 int main (void) {
5071                         gettext("Dummy for autoconf");
5072                         return 1;
5073                 }
5074         ])],
5075         [
5076         INTL="$(dump -X64 -Hp conftest$EXEEXT | grep libintl | cut -c 38- | tr -s " " | awk '{print $1"("$2")"}')"
5077         AC_MSG_RESULT([yes, $INTL])
5078         ],
5079         [
5080         INTL="libintl.a(libintl.so.8)"
5081         AC_MSG_RESULT([no, falling back to $INTL])
5082         ])
5083         SQLITE3="libsqlite3.a(libsqlite3.so.0)"
5084         # it's very tempting to set a libsuffix, but it depends on the soname value
5085         ;;
5086      *-*-os400*)
5087         dnl However, IBM's packages for i try to be more "normal" than the AIX world, naming wise.
5088         dnl The library archives has "normal" .so names, but they're members with predictable "shr" names for fat libraries.
5089         LIBC="libc.a(shr_64.o)"
5090         INTL="libintl.so(shr_64.o)"
5091         SQLITE3="libsqlite3.so(shr_64.o)"
5092         # 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
5093         # it may be worth revisiting this in the future
5094         ;;
5095      *-*-darwin*)
5096         libsuffix=".dylib"
5097         LIBC="libc.dylib"
5098         INTL="libintl.dylib"
5099         SQLITE="libsqlite.0.dylib"
5100         SQLITE3="libsqlite3.0.dylib"
5101         X11="libX11.dylib"
5102         GDKX11="libgdk-x11-2.0.dylib"
5103         GTKX11="libgtk-x11-2.0.dylib"
5104         ;;
5105      *-*-*netbsd*)
5106         LIBC="libc.so"
5107         INTL="libintl.so"
5108         SQLITE="libsqlite.so"
5109         SQLITE3="libsqlite3.so"
5110         ;;
5111      *-*-kfreebsd*-gnu)
5112         LIBC="libc.so.0.1"
5113         INTL="libc.so.0.1"
5114         X11="libX11.so.6"
5115         ;;
5116     *-*-*freebsd*)
5117         LIBC="libc.so.7"
5118         INTL="libintl.so"
5119         SQLITE="libsqlite.so"
5120         SQLITE3="libsqlite3.so"
5121         ;;
5122     *-*-*openbsd*)
5123         LIBC="libc.so"
5124         INTL="libintl.so"
5125         SQLITE="libsqlite.so"
5126         SQLITE3="libsqlite3.so"
5127         ;;
5128     *-*-*linux*)
5129         if test "x$with_core" != "xonly"; then
5130                 AC_PATH_X
5131                 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
5132                 AC_MSG_CHECKING(for the soname of libX11.so)
5133                 for i in $x_libraries $dlsearch_path; do
5134                         for r in 4 5 6; do
5135                                 if test -f $i/libX11.so.$r; then
5136                                         X11=libX11.so.$r
5137                                         AC_MSG_RESULT($X11)
5138                                 fi
5139                         done
5140                 done
5141                 
5142                 if test "x$X11" = "xlibX11.so"; then
5143                         AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
5144                         X11=libX11.so.6
5145                 fi
5146         fi
5147         ;;
5148 esac
5150 AC_SUBST(libsuffix)
5152 ######################################
5153 # EGLIB CHECKS
5154 ######################################
5156 GNUC_PRETTY=
5157 GNUC_UNUSED=
5158 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
5159 if test x$GCC = xyes; then
5160    GNUC_UNUSED='__attribute__((__unused__))'
5161    GNUC_NORETURN='__attribute__((__noreturn__))'
5162    case $host_cpu in
5163      i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
5164    esac
5166 AC_SUBST(GNUC_PRETTY)
5167 AC_SUBST(GNUC_UNUSED)
5168 AC_SUBST(GNUC_NORETURN)
5169 AC_SUBST(BREAKPOINT)
5171 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
5173 case $host in
5174 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
5175     PATHSEP='\\'
5176     SEARCHSEP=';'
5177     OS="WIN32"
5178     PIDTYPE='void *'
5179     ;;
5181     PATHSEP='/'
5182     SEARCHSEP=':'
5183     OS="UNIX"
5184     PIDTYPE='int'
5185     ;;
5186 esac
5188 case $host in
5189         *-*-solaris*)
5190         CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
5191         ;;
5192 esac
5194 case $target in
5195 arm*-darwin*|aarch64*-*|riscv*)
5196     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
5197     ;;
5198 i*86-*-darwin*)
5199     ORDER=G_LITTLE_ENDIAN
5200     ;;
5201 *-*-haiku*)
5202     LDFLAGS="$LDFLAGS -ltextencoding"
5203     ;;
5204 *-*-openbsd*)
5205     CFLAGS="$CFLAGS -pthread"
5206     LDFLAGS="$LDFLAGS -pthread"
5207     ;;
5208 esac
5210 AC_SUBST(ORDER)
5211 AC_SUBST(PATHSEP)
5212 AC_SUBST(SEARCHSEP)
5213 AC_SUBST(OS)
5214 AC_SUBST(PIDTYPE)
5216 # Defined for all targets/platforms using classic Windows API support.
5217 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
5218 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
5220 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
5221 AC_CHECK_FUNCS(getrlimit)
5222 AC_CHECK_FUNCS(fork execv execve)
5223 AC_CHECK_FUNCS(waitpid)
5225 AC_ARG_WITH([overridable-allocators], [  --with-overridable-allocators  allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
5227 if test x$with_overridable_allocators = xyes; then
5228         AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5229   AC_MSG_NOTICE([Overridable allocator support enabled])
5230 else
5231   AC_MSG_NOTICE([Overridable allocator support disabled])
5235 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
5236 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
5237 # removed once support for 10.6 is dropped.
5239 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
5241 if test x$target_osx = xyes; then
5242 AC_CHECK_FUNCS(getpwuid_r)
5243 elif test x$target_ios = xno; then
5244 AC_CHECK_FUNCS(strndup getpwuid_r)
5247 AC_SEARCH_LIBS(sqrtf, m)
5249 # nanosleep may not be part of libc, also search it in other libraries
5250 AC_SEARCH_LIBS(nanosleep, rt)
5252 AC_SEARCH_LIBS(dlopen, dl)
5254 # AIX/OS400 -bsymbolic
5255 # Apple -bind_at_load
5256 # The rest GNU.
5258 export_link_flags=--export-dynamic
5259 case $host_os in
5260 mingw*|cygwin*)
5261         export_link_flags=--export-all-symbols
5262         ;;
5263 *-*-darwin*)
5264         export_link_flags=--export_dynamic
5265         ;;
5266 esac
5267 AX_APPEND_LINK_FLAGS([-Wl,$export_link_flags -Wl,-Bsymbolic -bsymbolic -Wl,-z,now -Wl,-bind_at_load])
5269 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
5270 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
5271 AC_CHECK_LIB(iconv, iconv_open)
5272 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
5273 AC_SUBST(HAVE_ALLOCA_H)
5275 # Get the exact type of size_t, not just its size.
5276 # This is so we can find an exact printf format among u, lu, llu, I64u.
5277 # To avoid warnings about slight mismatches.
5278 # C99 runtime "zu" dependency is being avoided here.
5280 # We have to compile as C++ because C is too lenient
5281 # and lets the wrong thing compile, with warnings.
5283 # Note: "zu" or ifdef <something> have the advantage
5284 # of producing installable "biarch" headers. i.e. one Mac header
5285 # for Mac/x86 and Mac/amd64.
5287 AC_LANG_PUSH(C++)
5289 # Check long before int because it is the overwhelming Unix answer,
5290 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
5292 # long ahead of int also tends to produce biarch-compatible headers except Windows.
5294 AC_MSG_CHECKING(if size_t is unsigned long)
5295 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5296         #include <stddef.h>
5297         unsigned long *a = (size_t*)0;
5298 ])], [
5299         AC_MSG_RESULT(yes)
5300         AC_SUBST(GSIZE_FORMAT, '"lu"')
5301 ], [
5302         AC_MSG_RESULT(no)
5303         AC_MSG_CHECKING(if size_t is unsigned int)
5304         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5305                 #include <stddef.h>
5306                 unsigned *a = (size_t*)0;
5307         ])], [
5308                 AC_MSG_RESULT(yes)
5309                 AC_SUBST(GSIZE_FORMAT, '"u"')
5310         ], [
5311 # At this point the majority of systems have their answer,
5312 # and we descend into non-standard or new-standard territory.
5314 # Check __int64 first because I64 on some systems predates ll, enabling
5315 # new compiler/old runtime interop, and the types always have the same size.
5316                 AC_MSG_RESULT(no)
5317                 AC_MSG_CHECKING(if size_t is unsigned __int64)
5318                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5319                         #include <stddef.h>
5320                         unsigned __int64 *a = (size_t*)0;
5321                 ])], [
5322                         AC_MSG_RESULT(yes)
5323                         AC_SUBST(GSIZE_FORMAT, '"I64u"')
5324                 ], [
5325                         AC_MSG_RESULT(no)
5326                         AC_MSG_CHECKING(if size_t is unsigned long long)
5327                         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5328                                 #include <stddef.h>
5329                                 unsigned long long *a = (size_t*)0;
5330                         ])], [
5331                                 AC_MSG_RESULT(yes)
5332                                 AC_SUBST(GSIZE_FORMAT, '"llu"')
5333                         ], [
5334                                 AC_MSG_RESULT(no)
5335                                 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
5336                         ] )
5337                 ] )
5338         ] )
5339 ] )
5341 AC_LANG_POP
5343 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
5344 # This provides for an exact match with functions that
5345 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
5346 # uintptr_t is not necessarily the same.
5348 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
5349 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
5351 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
5352    GSIZE="size_t"
5353    GSSIZE="ptrdiff_t"
5354 else
5355    GSIZE="uintptr_t"
5356    GSSIZE="intptr_t"
5359 AC_SUBST(GSIZE)
5360 AC_SUBST(GSSIZE)
5361 AC_SUBST(GSIZE_FORMAT)
5364 # END OF EGLIB CHECKS
5367 AC_ARG_WITH([libgdiplus],
5368         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)],
5369         [], [with_libgdiplus=installed])
5371 # default install location
5372 libgdiplus_install_loc=libgdiplus${libsuffix}
5373 case "$host" in
5374     *-*-*linux*)
5375     libgdiplus_install_loc=libgdiplus${libsuffix}.0
5376     ;;
5377 esac
5379 case $with_libgdiplus in
5380     no)
5381     libgdiplus_loc=
5382     ;;
5384     installed)
5385     libgdiplus_loc=
5386     if test x$cross_compiling = xno; then
5387         if test x$host_darwin = xyes; then
5388             a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
5389             if test -x $a; then
5390               libgdiplus_install_loc=$a
5391               libgdiplus_loc=$a
5392             fi
5393         fi
5394     fi
5395     ;;
5397     yes|sibling)
5398     libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5399     ;;
5401     /*) # absolute path, assume it is an install location
5402     libgdiplus_loc=$with_libgdiplus
5403     libgdiplus_install_loc=$with_libgdiplus
5404     ;;
5406     *)
5407     libgdiplus_loc=`pwd`/$with_libgdiplus
5408     ;;
5409 esac
5410 AC_SUBST(libgdiplus_loc)
5411 AC_SUBST(libgdiplus_install_loc)
5413 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)
5414 if test "x$icall_symbol_map" = "xyes"; then
5415    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5418 AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5419 if test "x$icall_export" = "xyes"; then
5420    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5423 AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5424 if test "x$icall_tables" = "xno"; then
5425    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5428 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5430 if test "x$with_tls" = "x__thread"; then
5431         AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5432         # Pass the information to libgc
5433         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5434         AC_MSG_CHECKING(if the tls_model attribute is supported)
5435         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5436                 ], [
5437                         AC_MSG_RESULT(yes)
5438                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5439                 ], [
5440                         AC_MSG_RESULT(no)
5441         ])
5444 if test ${TARGET} = ARM; then
5445         dnl ******************************************
5446         dnl *** Check to see what FPU is available ***
5447         dnl ******************************************
5448         AC_MSG_CHECKING(which FPU to use)
5450         #
5451         # This is a bit tricky:
5452         #
5453         # if (__ARM_PCS_VFP) {
5454         #       /* mfloat-abi=hard == VFP with hard ABI */
5455         # } elif (!__SOFTFP__) {
5456         #       /* mfloat-abi=softfp == VFP with soft ABI */
5457         # } else {
5458         #       /* mfloat-abi=soft == no VFP */
5459         # }
5460         #
5461         # The exception is iOS (w/ GCC) where none of the above
5462         # are defined (but iOS always uses the 'softfp' ABI).
5463         #
5464         # No support for FPA.
5465         #
5467         fpu=NONE
5469         # iOS GCC always uses the 'softfp' ABI.
5470         if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5471                 fpu=VFP
5472         fi
5474         # Are we using the 'hard' ABI?
5475         if test x$fpu = xNONE; then
5476                 AC_TRY_COMPILE([], [
5477                         #ifndef __ARM_PCS_VFP
5478                         #error "Float ABI is not 'hard'"
5479                         #endif
5480                 ], [
5481                         fpu=VFP_HARD
5482                 ], [
5483                         fpu=NONE
5484                 ])
5485         fi
5487         # No 'hard' ABI. 'soft' or 'softfp'?
5488         if test x$fpu = xNONE; then
5489                 AC_TRY_COMPILE([], [
5490                         #ifdef __SOFTFP__
5491                         #error "Float ABI is not 'softfp'"
5492                         #endif
5493                 ], [
5494                         fpu=VFP
5495                 ], [
5496                         fpu=NONE
5497                 ])
5498         fi
5500         if test x$arm_fpu != x; then
5501            fpu=$arm_fpu
5502         fi
5504         AC_MSG_RESULT($fpu)
5505         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5506         unset fpu
5508         dnl *********************************************
5509         dnl *** Check which ARM version(s) we can use ***
5510         dnl *********************************************
5511         AC_MSG_CHECKING(which ARM version to use)
5513         AC_TRY_COMPILE([], [
5514                 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5515                 #error Not on ARM v5.
5516                 #endif
5517         ], [
5518                 arm_v5=yes
5520                 arm_ver=ARMv5
5521         ], [])
5523         AC_TRY_COMPILE([], [
5524                 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5525                 #error Not on ARM v6.
5526                 #endif
5527         ], [
5528                 arm_v5=yes
5529                 arm_v6=yes
5531                 arm_ver=ARMv6
5532         ], [])
5534         AC_TRY_COMPILE([], [
5535                 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5536                 #error Not on ARM v7.
5537                 #endif
5538         ], [
5539                 arm_v5=yes
5540                 arm_v6=yes
5541                 arm_v7=yes
5543                 arm_ver=ARMv7
5544         ], [])
5546         AC_MSG_RESULT($arm_ver)
5548         if test x$arm_v5 = xyes; then
5549                 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5550                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5551         fi
5553         if test x$arm_v6 = xyes; then
5554                 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5555                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5556         fi
5558         if test x$arm_v7 = xyes; then
5559                 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5560                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5561         fi
5563         if test x$host_linux = xyes; then
5564                 RID="linux-arm"
5565                 COREARCH="arm"
5566                 if test x$fpu = xNONE; then
5567                         RID="linux-armel"
5568                         COREARCH="armel"
5569                 fi
5570         fi
5573 AC_SUBST(RID)
5574 AC_SUBST(COREARCH)
5575 AC_SUBST(CORETARGETS)
5577 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5578         AC_ARG_WITH([riscv-fpabi], [  --with-riscv-fpabi=auto,double,soft   Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5580         AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5582         if test x$fpabi = xauto; then
5583                 AC_TRY_COMPILE([], [
5584                         #ifdef __riscv_float_abi_double
5585                         #error "double"
5586                         #endif
5587                 ], [
5588                         fpabi=auto
5589                 ], [
5590                         fpabi=double
5591                 ])
5592         fi
5594         if test x$fpabi = xauto; then
5595                 AC_TRY_COMPILE([], [
5596                         #ifdef __riscv_float_abi_single
5597                         #error "single"
5598                         #endif
5599                 ], [
5600                         fpabi=auto
5601                 ], [
5602                         fpabi=single
5603                 ])
5604         fi
5606         if test x$fpabi = xauto; then
5607                 AC_TRY_COMPILE([], [
5608                         #ifdef __riscv_float_abi_soft
5609                         #error "soft"
5610                         #endif
5611                 ], [
5612                         fpabi=auto
5613                 ], [
5614                         fpabi=soft
5615                 ])
5616         fi
5618         case $fpabi in
5619         double)
5620                 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5621                 AC_MSG_RESULT([double-precision])
5622                 ;;
5623         single)
5624                 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5625                 AC_MSG_ERROR([single-precision, not supported])
5626                 ;;
5627         soft)
5628                 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5629                 AC_MSG_RESULT([soft float])
5630                 ;;
5631         auto)
5632                 AC_MSG_ERROR([unknown])
5633                 ;;
5634         *)
5635                 AC_MSG_ERROR([invalid option: $fpabi])
5636                 ;;
5637         esac
5640 if test ${TARGET} = unknown; then
5641         CPPFLAGS="$CPPFLAGS -DNO_PORT"
5642         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5645 if test "x$platform_android" = "xyes"; then
5646         case "x${TARGET}" in
5647         xARM)
5648                 case "x$arm_ver" in
5649                 xARMv5)
5650                         BTLS_SUPPORTED=yes
5651                         BTLS_PLATFORM=android-armv5
5652                         ;;
5653                 xARMv6)
5654                         BTLS_SUPPORTED=yes
5655                         BTLS_PLATFORM=android-armv6
5656                         ;;
5657                 xARMv7)
5658                         BTLS_SUPPORTED=yes
5659                         BTLS_PLATFORM=android-armv7
5660                         ;;
5661                 *)
5662                         BTLS_SUPPORTED=no
5663                         ;;
5664                 esac
5665                 ;;
5666         xARM64)
5667                 BTLS_SUPPORTED=yes
5668                 BTLS_PLATFORM=android-v8a
5669                 ;;
5670         xX86)
5671                 BTLS_SUPPORTED=yes
5672                 BTLS_PLATFORM=android-x86
5673                 ;;
5674         xAMD64)
5675                 BTLS_SUPPORTED=yes
5676                 BTLS_PLATFORM=android-x64
5677                 ;;
5678         *)
5679                 BTLS_SUPPORTED=no
5680                 ;;
5681         esac
5684 if test ${ACCESS_UNALIGNED} = no; then
5685         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5688 if test x$host_darwin = xyes; then
5689         AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5690         AS_IF(
5691                 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5692                 [AC_MSG_RESULT([no])],
5693                 [
5694                         # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5695                         AR_FLAGS="Scru"
5696                         RANLIB="$RANLIB -no_warning_for_no_symbols"
5697                         AC_MSG_RESULT([yes])
5698                 ]
5699         )
5702 case "x$libgc" in
5703         xincluded)
5704                 # Pass CPPFLAGS to libgc configure
5705                 # We should use a separate variable for this to avoid passing useless and
5706                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5707                 # This should be executed late so we pick up the final version of CPPFLAGS
5708                 # The problem with this approach, is that during a reconfigure, the main
5709                 # configure scripts gets invoked with these arguments, so we use separate
5710                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5711                 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5712                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5713                         TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5714                 fi
5715                 # Don't pass -finstrument-for-thread-suspension in, 
5716                 # if these are instrumented it will be very bad news 
5717                 # (infinite recursion, undefined parking behavior, etc)
5718                 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5719                 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\""
5720                 if test "x$support_boehm" = "xyes"; then
5721                         AC_CONFIG_SUBDIRS(external/bdwgc)
5722                 fi
5723                 ;;
5724 esac
5726 MALLOC_MEMPOOLS=no
5727 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5728         if test x$with_malloc_mempools = xyes; then
5729                 MALLOC_MEMPOOLS=yes
5730                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5731         fi
5735 DISABLE_MCS_DOCS=default
5736 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
5737         if test x$with_mcs_docs != xyes; then
5738                 DISABLE_MCS_DOCS=yes
5739         fi
5741 if test -n "$INSTALL_4_x_TRUE"; then :
5742         DISABLE_MCS_DOCS=yes
5744 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5745    DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5748 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)],[
5749         if test x$with_lazy_gc_thread_creation != xno ; then
5750                 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5751         fi
5752 ], [with_lazy_gc_thread_creation=no])
5754 dnl *****************************
5755 dnl *** Thread suspend policy ***
5756 dnl *****************************
5758 dnl Set a default hybrid or cooperative suspend on some platforms
5760 dnl Coop default is set by the bitcode preset.
5762 dnl If coop isn't on by default, maybe hybrid should be?
5763 if test x$enable_cooperative_suspend_default != xyes; then
5764         case $HOST in
5765         X86 | AMD64)
5766                 dnl Some host/target confusion, there's no host_osx (and
5767                 dnl host_darwin would be true on iOS not just macOS).
5768                 if test x$target_osx = xyes; then
5769                         enable_hybrid_suspend_default=yes
5770                 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5771                         enable_hybrid_suspend_default=yes
5772                 fi
5773                 ;;
5774         esac
5777 dnl Now check if there were flags overriding the defaults
5779 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])
5780 AC_ARG_ENABLE(cooperative_suspend, [  --enable-cooperative-suspend      Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5782 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5783         enable_cooperative_suspend=$with_cooperative_gc
5786 if test x$enable_cooperative_suspend = xdefault; then
5787         enable_cooperative_suspend=$enable_cooperative_suspend_default
5790 if test x$enable_cooperative_suspend != xno; then
5791         AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5792         enable_hybrid_suspend_default=no
5795 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5797 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])
5799 if test x$enable_hybrid_suspend = xdefault; then
5800    enable_hybrid_suspend=$enable_hybrid_suspend_default
5803 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5804         AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5807 if test x$enable_hybrid_suspend != xno ; then
5808         AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5811 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5813 dnl End of thread suspend policy
5815 dnl ***************************
5816 dnl *** feature experiments ***
5817 dnl ***************************
5819 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5820 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST       Enable experimental fatures from the comma-separate LIST.  Available experiments: null,tiered],[
5822         if test x$enable_experiment != x ; then
5823                 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5824         fi
5825         for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5826                 eval "mono_experiment_test_enable_$feature='yes'"
5827         done
5829         if test "x$mono_experiment_test_enable_all" = "xyes"; then
5830                 eval "mono_experiment_test_enable_null='yes'"
5831                 eval "mono_experiment_test_enable_tiered='yes'"
5832                 true
5833         fi
5835         if test "x$mono_experiment_test_enable_null" = "xyes"; then
5836                 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5837         fi
5838         if test "x$mono_experiment_test_enable_tiered" = "xyes"; then
5839                 AC_DEFINE(ENABLE_EXPERIMENT_TIERED, 1, [Enable experiment 'Tiered Compilation'])
5840         fi
5841 ],[])
5843 AM_CONDITIONAL(ENABLE_EXPERIMENT_TIERED, test x$mono_experiment_test_enable_tiered = xyes)
5845 dnl **********************
5846 dnl *** checked builds ***
5847 dnl **********************
5849 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],[
5851         if test x$enable_checked_build != x ; then
5852                 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5853         fi
5854         for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5855                 eval "mono_checked_build_test_enable_$feature='yes'"
5856         done
5858         if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5859                 eval "mono_checked_build_test_enable_gc='yes'"
5860                 eval "mono_checked_build_test_enable_metadata='yes'"
5861                 eval "mono_checked_build_test_enable_thread='yes'"
5862                 eval "mono_checked_build_test_enable_private_types='yes'"
5863                 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5864         fi
5866         if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5867                 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5868         fi
5870         if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5871                 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5872         fi
5874         if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5875                 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5876         fi
5878         if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5879                 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5880         fi
5882         if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5883                 # Required
5884                 with_overridable_allocators=yes
5885                 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5887                 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5888         fi
5889 ], [])
5891 dnl End of checked builds
5893 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5895 AC_CHECK_HEADER([malloc.h], 
5896                 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
5897                         [Define to 1 if you have /usr/include/malloc.h.])],,)
5899 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5900 # instead of libmono-static.a
5901 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5902    LIBMONO_LA=libmini-static.la
5903 else
5904    if test x$buildsgen = xyes; then
5905       LIBMONO_LA=libmonosgen-$API_VER.la
5906    else
5907       LIBMONO_LA=libmonoboehm-$API_VER.la
5908    fi
5910 AC_SUBST(LIBMONO_LA)
5912 dnl **************
5913 dnl ***  Btls  ***
5914 dnl **************
5916 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5917 AC_ARG_ENABLE(btls-lib, [  --disable-btls-lib             Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5918 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
5919 AC_ARG_WITH(btls_android_api, [  --with-btls-android-api        Android NDK API level for BTLS build])
5920 AC_ARG_WITH(btls_android_cmake_toolchain, [  --with-btls-android-cmake-toolchain        Path to the cmake toolchain file for Android])
5921 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])
5923 if test "x$with_btls_android_api" = "x" ; then
5924         case "$BTLS_PLATFORM" in
5925                 android-armv5)
5926                         with_btls_android_api=16" ;;
5927                 android-armv6)
5928                         with_btls_android_api=16" ;;
5929                 android-armv7)
5930                         with_btls_android_api=16 ;;
5931                 android-v8a)
5932                         with_btls_android_api=21 ;;
5933                 android-x86)
5934                         with_btls_android_api=16 ;;
5935                 android-x64)
5936                         with_btls_android_api=21 ;;
5937         esac
5940 if test "x$enable_btls" = "xno"; then
5941    enable_btls_lib=no
5944 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5946 btls_android=no
5947 if test "x$enable_btls" = "xyes"; then
5948         AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5949         if test "x$CMAKE" = "xno"; then
5950                 AC_MSG_ERROR("cmake not found")
5951         fi
5953         BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5954         AC_SUBST(BTLS_ROOT)
5956         btls_arch=
5957         btls_cflags=
5958         BTLS_CMAKE_ARGS=
5960         if test "x$host_win32" = "xyes"; then
5961                 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5962         fi
5964         case "$BTLS_PLATFORM" in
5965         i386)
5966                 btls_arch=i386
5967                 btls_cflags="-m32"
5968                 case $host_os in
5969                         darwin*)
5970                                 btls_cflags="$btls_cflags -arch i386"
5971                                 ;;
5972                         mingw*|cygwin*)
5973                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5974                                 if test "x$HAVE_YASM" != "xyes"; then
5975                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5976                                 fi
5977                                 ;;
5978                 esac
5979                 ;;
5980         x86_64)
5981                 btls_arch=x86_64
5982                 case $host_os in
5983                         mingw*|cygwin*)
5984                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5985                                 if test "x$HAVE_YASM" != "xyes"; then
5986                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5987                                 fi
5988                                 ;;
5989                 esac
5990                 ;;
5991         arm)
5992                 btls_arch=arm
5993                 btls_cflags="-DOPENSSL_NO_ASM=1"
5994                 ;;
5995         armsoft)
5996                 btls_arch=arm
5997                 btls_cflags="-DOPENSSL_NO_ASM=1"
5998                 ;;
5999         aarch64)
6000                 btls_arch=aarch64
6001                 btls_cflags="-march=armv8-a+crypto"
6002                 ;;
6003         s390x)
6004                 btls_arch=s390x
6005                 ;;
6006         powerpc)
6007                 btls_arch=powerpc
6008                 case $host_os in
6009                         aix*|os400*)
6010                                 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
6011                                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
6012                 esac
6013                 ;;
6014         android-armv5)
6015                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6016                 ;;
6017         android-armv6)
6018                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6019                 ;;
6020         android-armv7)
6021                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6022                 ;;
6023         android-v8a)
6024                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6025                 ;;
6026         android-x86)
6027                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6028                 ;;
6029         android-x64)
6030                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6031                 ;;
6032         riscv32)
6033                 btls_arch=riscv32
6034                 ;;
6035         riscv64)
6036                 btls_arch=riscv64
6037                 ;;
6038         *)
6039                 AC_MSG_ERROR(Invalid BTLS platform)
6040         esac
6042         if test "x$platform_android" = "xyes"; then
6043                 if test "x$with_btls_android_cmake_toolchain" = "x"; then
6044                    with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
6045                 fi
6047                 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
6048                    BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
6049                 fi
6051                 btls_android=yes
6052                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
6053                 if test "x$with_btls_android_ndk" != "x"; then
6054                         BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
6055                 else
6056                         AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
6057                 fi
6058         fi
6060         if test "x$btls_arch" != "x"; then
6061                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
6062         fi
6064         BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
6065         AC_SUBST(BTLS_ARCH)
6066         AC_SUBST(BTLS_CFLAGS)
6067         AC_SUBST(BTLS_PLATFORM)
6068         AC_SUBST(BTLS_CMAKE_ARGS)
6070         AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
6071 else
6072         enable_btls=no
6075 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
6077 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
6078 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
6079 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
6081 libmono_ldflags="$libmono_ldflags $LIBS"
6083 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
6084 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
6085 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
6086 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
6087 AM_CONDITIONAL(X86, test x$TARGET = xX86)
6088 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
6089 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
6090 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
6091 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
6092 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
6093 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
6094 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
6095 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
6096 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
6097 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
6098 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
6099 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
6100 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
6101 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
6102 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
6103 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
6104 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
6105 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
6106 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
6108 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
6110 AC_SUBST(LIBC)
6111 AC_SUBST(INTL)
6112 AC_SUBST(SQLITE)
6113 AC_SUBST(SQLITE3)
6114 AC_SUBST(ODBC)
6115 AC_SUBST(X11)
6116 AC_SUBST(GDKX11)
6117 AC_SUBST(GTKX11)
6118 AC_SUBST(XINERAMA)
6119 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
6120 AC_SUBST(arch_target)
6122 #This must always be defined when building the runtime
6123 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
6125 mono_build_root=`pwd`
6126 AC_SUBST(mono_build_root)
6128 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)
6129 if test x$host_win32 = xno; then
6130         if test x$enable_msvc_only = xyes; then
6131                 echo "Error, --enable-msvc-only only supported for Windows builds."
6132                 exit 1
6133         fi
6135 AM_CONDITIONAL(ENABLE_MSVC_ONLY, test x$enable_msvc_only = xyes)
6137 AC_ARG_ENABLE(msvc,[  --enable-msvc    Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
6138 if test x$host_win32 = xno; then
6139         if test x$enable_msvc = xyes; then
6140                 echo "Error, --enable-msvc only supported for Windows builds."
6141                 exit 1
6142         fi
6144 if test x$enable_msvc_only = xyes; then
6145         enable_msvc=yes
6147 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
6149 if test "x$enable_msvc" = "xyes"; then
6150         mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
6151         if test "x$host_cpu" = "xi686"; then
6152                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
6153                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
6154                 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
6155                 mono_runtime_wrapper=$mono_runtime
6156         else
6157                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
6158                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
6159                 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
6160                 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
6161         fi
6162         AC_SUBST(mono_msvc_build_dir)
6163         AC_SUBST(mono_msvc_build_lib_dir)
6164         AC_SUBST(mono_msvc_build_bin_dir)
6165 else
6166         mono_runtime=mono/mini/mono
6167         mono_runtime_wrapper=$mono_runtime
6170 AC_SUBST(mono_runtime)
6171 AC_SUBST(mono_runtime_wrapper)
6173 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.7.0/csc.exe
6174 VBCS_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.7.0/VBCSCompiler.exe
6176 if test $csc_compiler = mcs; then
6177   CSC=$mcs_topdir/class/lib/build/mcs.exe
6178 else
6179   CSC=$CSC_LOCATION
6182 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
6184 mono_cfg_root=$mono_build_root/runtime
6185 if test x$host_win32 = xyes; then
6186   if test "x$cross_compiling" = "xno"; then
6187     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
6188     CSC=`cygpath -m -a $CSC`
6189     CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
6190     VBCS_LOCATION=`cygpath -m -a $VBCS_LOCATION`
6191   else
6192     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
6193   fi
6194 else
6195   mono_cfg_dir=$mono_cfg_root/etc
6198 if test "x$platform_android" = "xyes"; then
6199   mono_cfg_dir=
6202 AC_SUBST(mono_cfg_dir)
6204 AC_SUBST(CSC)
6206 if test "x$with_core" != "xonly"; then
6208         AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
6209         [   depth=../../../..
6210                 case $srcdir in
6211                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6212                 .) reldir=$depth ;;
6213                 *) reldir=$depth/$srcdir ;;
6214                 esac
6215                 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
6216                 cd runtime/etc/mono/1.0
6217                 rm -f machine.config
6218                 $LN_S $reldir/data/net_1_1/machine.config machine.config
6219                 cd $depth
6220         ],[LN_S='$LN_S'])
6222         AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
6223         [   depth=../../../..
6224                 case $srcdir in
6225                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6226                 .) reldir=$depth ;;
6227                 *) reldir=$depth/$srcdir ;;
6228                 esac
6229                 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6230                 cd runtime/etc/mono/2.0
6231                 rm -f machine.config
6232                 $LN_S $reldir/data/net_2_0/machine.config machine.config
6233                 cd $depth
6234         ],[LN_S='$LN_S'])
6236         AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
6237         [   depth=../../../..
6238                 case $srcdir in
6239                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6240                 .) reldir=$depth ;;
6241                 *) reldir=$depth/$srcdir ;;
6242                 esac
6243                 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6244                 cd runtime/etc/mono/2.0
6245                 rm -f web.config
6246                 $LN_S $reldir/data/net_2_0/web.config web.config
6247                 cd $depth
6248         ],[LN_S='$LN_S'])
6250         AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
6251         [   depth=../../..
6252                 case $srcdir in
6253                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6254                 .) reldir=$depth ;;
6255                 *) reldir=$depth/$srcdir ;;
6256                 esac
6257                 $ac_aux_dir/install-sh -d runtime/etc/mono/
6258                 cd runtime/etc/mono/
6259                 rm -f browscap.ini
6260                 $LN_S $reldir/data/browscap.ini browscap.ini
6261                 cd $depth
6262         ],[LN_S='$LN_S'])
6264         AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
6265         [   depth=../../../../..
6266                 case $srcdir in
6267                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6268                 .) reldir=$depth ;;
6269                 *) reldir=$depth/$srcdir ;;
6270                 esac
6271                 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
6272                 cd runtime/etc/mono/2.0/Browsers
6273                 rm -f Compat.browser
6274                 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6275                 cd $depth
6276         ],[LN_S='$LN_S'])
6278         AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
6279         [   depth=../../../../..
6280                 case $srcdir in
6281                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6282                 .) reldir=$depth ;;
6283                 *) reldir=$depth/$srcdir ;;
6284                 esac
6285                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
6286                 cd runtime/etc/mono/4.0/Browsers
6287                 rm -f Compat.browser
6288                 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6289                 cd $depth
6290         ],[LN_S='$LN_S'])
6292         AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
6293         [   depth=../../../../..
6294                 case $srcdir in
6295                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6296                 .) reldir=$depth ;;
6297                 *) reldir=$depth/$srcdir ;;
6298                 esac
6299                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
6300                 cd runtime/etc/mono/4.5/Browsers
6301                 rm -f Compat.browser
6302                 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6303                 cd $depth
6304         ],[LN_S='$LN_S'])
6306         AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
6307         [   depth=../../../..
6308                 case $srcdir in
6309                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6310                 .) reldir=$depth ;;
6311                 *) reldir=$depth/$srcdir ;;
6312                 esac
6313                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6314                 cd runtime/etc/mono/4.0
6315                 rm -f machine.config
6316                 $LN_S $reldir/data/net_4_0/machine.config machine.config
6317                 cd $depth
6318         ],[LN_S='$LN_S'])
6320         AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
6321         [   depth=../../../..
6322                 case $srcdir in
6323                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6324                 .) reldir=$depth ;;
6325                 *) reldir=$depth/$srcdir ;;
6326                 esac
6327                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6328                 cd runtime/etc/mono/4.0
6329                 rm -f web.config
6330                 $LN_S $reldir/data/net_4_0/web.config web.config
6331                 cd $depth
6332         ],[LN_S='$LN_S'])
6334         AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
6335         [   depth=../../../..
6336                 case $srcdir in
6337                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6338                 .) reldir=$depth ;;
6339                 *) reldir=$depth/$srcdir ;;
6340                 esac
6341                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6342                 cd runtime/etc/mono/4.5
6343                 rm -f machine.config
6344                 $LN_S $reldir/data/net_4_5/machine.config machine.config
6345                 cd $depth
6346         ],[LN_S='$LN_S'])
6348         AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
6349         [   depth=../../../..
6350                 case $srcdir in
6351                 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6352                 .) reldir=$depth ;;
6353                 *) reldir=$depth/$srcdir ;;
6354                 esac
6355                 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6356                 cd runtime/etc/mono/4.5
6357                 rm -f web.config
6358                 $LN_S $reldir/data/net_4_5/web.config web.config
6359                 cd $depth
6360         ],[LN_S='$LN_S'])
6363 # Top level Makefile.am subdirs
6364 if test "x$with_core" = "xonly"; then
6365         MONO_SUBDIRS="llvm mono"
6366 else
6367         if test "x$support_boehm" = "xyes" -a "x$libgc" = "xincluded"; then
6368                 mono_subdirs_libgc=external/bdwgc
6369         fi
6371         if test x$enable_support_build != xno; then
6372                 mono_subdirs_support=support
6373         fi
6375         if test x$cross_compiling = xno; then
6376                 # Some tools might not build when cross-compiling
6377                 mono_subdirs_tools=tools
6378         fi
6380         if test x$DISABLE_MCS_DOCS != xyes; then
6381                 mono_subdirs_docs=docs
6382         fi
6384         if test x$with_ikvm_native = xyes; then
6385                 mono_subdirs_ikvm_native=ikvm-native
6386         fi
6388         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"
6389         MONO_NOINST_SUBDIRS="$mono_subdirs_libgc"
6392 AC_SUBST(MONO_SUBDIRS)
6393 AC_SUBST(MONO_NOINST_SUBDIRS)
6395 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])
6396 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])
6397 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
6400 # Mono.Native Support
6401 # -------------------
6402 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
6403 # It is built as a stand-alone shared library and not bundled with the runtime because we
6404 # may need to build two different versions of it.
6406 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
6407 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
6409 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
6410 # implementation accordingly.  We build a single `libmono-native` shared library.
6412 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
6414 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
6415 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
6416 # depending on platform.
6418 # We build two versions of the shared library:
6419 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
6420 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
6422 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
6423 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
6424 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
6426 # This can be called by automated tests both to ensure that the library has been correctly installed and also
6427 # to verify that it's the correct version of it.
6430 AC_MSG_CHECKING([Mono.Native support])
6431 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
6432 if test x$disable_mono_native = xyes; then
6433         mono_native=no
6434 elif test x$target_osx = xyes; then
6435         MONO_NATIVE_CC=$CC
6436         MONO_NATIVE_CXX=$CXX
6437         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6438         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6439         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6440         MONO_NATIVE_CFLAGS=$CFLAGS
6441         MONO_NATIVE_LDFLAGS=$LDFLAGS
6443         mono_native=yes
6444         MONO_NATIVE_PLATFORM=macos
6445         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
6447         if test x$enable_gss = xyes; then
6448                 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -framework GSS"
6449         fi
6451         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
6452                 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6454         if test x$mono_native_compat = xyes; then
6455                 mono_native_compat=yes
6456                 mono_native_text="Mac OSX (compat + unified v10.12)"
6457                 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6458                 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6459                 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6460                 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6461                 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6463                 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6464                 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6465                 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6466                 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6467                 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6468                 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6469         else
6470                 mono_native_compat=no
6471                 mono_native_text="Mac OSX"
6472         fi
6473 elif test x$mono_native_platform_ios = xyes; then
6474         AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6476         AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6477                 if test x$mono_native_ios_sim = xyes; then
6478                         mono_native_ios_target=ios-simulator
6479                         mono_native_text="iOS Simulator"
6480                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6481                 else
6482                         mono_native_ios_target=iphoneos
6483                         mono_native_text="iOS Device"
6484                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6485                 fi
6486                 mono_native_unified_version="10.0"
6487                 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6488         ], [
6489                 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6490                         if test x$mono_native_ios_sim = xyes; then
6491                                 mono_native_ios_target=tvos-simulator
6492                                 mono_native_text="AppleTV Simulator"
6493                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6494                         else
6495                                 mono_native_ios_target=tvos
6496                                 mono_native_text="AppleTV Device"
6497                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6498                         fi
6499                         mono_native_unified_version="10.0"
6500                         mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6501                 ], [
6502                         AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6503                                 if test x$mono_native_ios_sim = xyes; then
6504                                         mono_native_ios_target=watchos-simulator
6505                                         mono_native_text="Apple Watch Simulator"
6506                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6507                                 else
6508                                         mono_native_ios_target=watchos
6509                                         mono_native_text="Apple Watch Device"
6510                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6511                                 fi
6512                                 mono_native_unified_version="5.0"
6513                                 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6514                         ], [
6515                                 AC_MSG_ERROR([Unknown iOS Target])
6516                         ])
6517                 ])
6518         ])
6520         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6522         if test x$with_bitcode = xyes; then
6523                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6524                 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6525         else
6526                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6527         fi
6529         if test x$enable_gss = xyes; then
6530                 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6531         fi
6533         MONO_NATIVE_CC=$CC
6534         MONO_NATIVE_CXX=$CXX
6535         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6536         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6537         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6538         MONO_NATIVE_CFLAGS=$CFLAGS
6539         MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6541         if test x$mono_native_compat = xyes; then
6542                 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6543                 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6544                 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6545                 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6546                 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6547                 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6549                 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6550                 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6551                 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6552                 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6553                 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6554                 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"
6555         fi
6557         mono_native=yes
6558         MONO_NATIVE_PLATFORM=ios
6559 elif test x$host_linux = xyes; then
6560         mono_native_text="Linux"
6561         MONO_NATIVE_CC=$CC
6562         MONO_NATIVE_CXX=$CXX
6563         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6564         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6565         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6566         MONO_NATIVE_CFLAGS=$CFLAGS
6567         MONO_NATIVE_LDFLAGS=$LDFLAGS
6568         if test x$enable_gss = xyes; then
6569                 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -lgssapi_krb5"
6570         else
6571                 AC_MSG_WARN([GSS is not enabled, it requires libkrb5-dev package])
6572         fi
6573         mono_native=yes
6574         mono_native_compat=no
6575         MONO_NATIVE_PLATFORM=linux
6577         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6578 elif test x$target_wasm = xyes; then
6579         mono_native_text="wasm"
6580         MONO_NATIVE_CC=$CC
6581         MONO_NATIVE_CXX=$CXX
6582         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6583         # The system.native code uses _WASM_ to check for wasm
6584         MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6585         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6586         MONO_NATIVE_CFLAGS=$CFLAGS
6587         MONO_NATIVE_LDFLAGS=$LDFLAGS
6589         mono_native=yes
6590         mono_native_compat=no
6591         MONO_NATIVE_PLATFORM=linux
6593         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6594 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6595         mono_native_text="AIX"
6596         MONO_NATIVE_CC=$CC
6597         MONO_NATIVE_CXX=$CXX
6598         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6599         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6600         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6601         MONO_NATIVE_CFLAGS=$CFLAGS
6602         dnl nosymbolic- is a hack in case -G for linking is used, as -G seems
6603         dnl to change the way unresolved symbols work on library load in an
6604         dnl incompatible manner. (as references to runtime functions are
6605         dnl resolved later) Default params otherwise are that, so seems OK.
6606         dnl Likewise, we don't seem to need to cover the entire runtime with
6607         dnl it either, on both AIX and PASE. -brtl from -G does seem to spew
6608         dnl Big Scary TOC Warnings (tm) from the linker, but it doesn't seem
6609         dnl problematic with gcc's -mminimal-toc.
6610         dnl ----
6611         dnl flock in AIX exists in libbsd (not the same as freedesktop.org
6612         dnl libbsd) which Mono.Native needs.
6613         dnl Because of the way that the library is built by default, unresolved
6614         dnl references are kept and resolved at runtime. Often, the dependency
6615         dnl chain means libbsd is loaded anyways, but not necessarily. It's
6616         dnl better to explicitly link it, even though it has it shadows libc's
6617         dnl ioctl with its own. (As for the other unresolved imports, those
6618         dnl should be provided by the Mono runtime loaded.)
6619         MONO_NATIVE_LDFLAGS="$LDFLAGS -lbsd -Wl,-bnosymbolic-"
6621         mono_native=yes
6622         mono_native_compat=no
6623         MONO_NATIVE_PLATFORM=aix
6625         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6626 elif case $host_os in freebsd*) true;; *) false;; esac; then
6627         mono_native_text="FreeBSD"
6628         MONO_NATIVE_CC=$CC
6629         MONO_NATIVE_CXX=$CXX
6630         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6631         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6632         MONO_NATIVE_CFLAGS="$CFLAGS -I/usr/local/include"
6633         MONO_NATIVE_LDFLAGS=$LDFLAGS
6635         mono_native=yes
6636         mono_native_compat=no
6637         MONO_NATIVE_PLATFORM=freebsd
6638         AC_MSG_CHECKING([Mono.Native support])
6639         AC_MSG_RESULT(freebsd)
6641         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_FREEBSD"
6642 elif case $host_os in netbsd*) true;; *) false;; esac; then
6643         mono_native_text="NetBSD"
6644         MONO_NATIVE_CC=$CC
6645         MONO_NATIVE_CXX=$CXX
6646         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6647         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6648         MONO_NATIVE_CFLAGS=$CFLAGS
6649         MONO_NATIVE_LDFLAGS=$LDFLAGS
6651         mono_native=yes
6652         mono_native_compat=no
6653         MONO_NATIVE_PLATFORM=netbsd
6654         AC_MSG_CHECKING([Mono.Native support])
6655         AC_MSG_RESULT(netbsd)
6657         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_NETBSD"
6658 elif case $host_os in haiku*) true;; *) false;; esac; then
6659         mono_native_text="Haiku"
6660         MONO_NATIVE_CC=$CC
6661         MONO_NATIVE_CXX=$CXX
6662         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6663         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6664         MONO_NATIVE_CFLAGS=$CFLAGS
6665         MONO_NATIVE_LDFLAGS=$LDFLAGS
6667         mono_native=yes
6668         mono_native_compat=no
6669         MONO_NATIVE_PLATFORM=haiku
6670         AC_MSG_CHECKING([Mono.Native support])
6671         AC_MSG_RESULT(haiku)
6673         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_HAIKU"
6674 elif test x$platform_android = xyes; then
6675         mono_native_text="Android"
6676         MONO_NATIVE_CC=$CC
6677         MONO_NATIVE_CXX=$CXX
6678         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6679         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6680         MONO_NATIVE_CFLAGS=$CFLAGS
6681         MONO_NATIVE_LDFLAGS=$LDFLAGS
6682         MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6684         mono_native=yes
6685         mono_native_compat=no
6686         MONO_NATIVE_PLATFORM=android
6688         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6689 else
6690         mono_native=no
6691         mono_native_text="no"
6694 AC_MSG_RESULT($mono_native_text)
6696 if test x$mono_native_compat = xyes; then
6697         MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6698 else
6699         MONO_NATIVE_LIBRARY_NAME=libmono-native
6702 AC_SUBST(MONO_NATIVE_PLATFORM)
6703 AC_SUBST(MONO_NATIVE_CC)
6704 AC_SUBST(MONO_NATIVE_CXX)
6705 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6706 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6707 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6708 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6709 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6710 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6711 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6712 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6713 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6714 AC_SUBST(MONO_NATIVE_CFLAGS)
6715 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6716 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6717 AC_SUBST(MONO_NATIVE_LDFLAGS)
6718 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6719 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6720 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6721 AC_SUBST(MONO_NATIVE_LIBADD)
6723 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6724 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6725 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6726 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6727 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6728 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6729 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6730 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_FREEBSD, test x$MONO_NATIVE_PLATFORM = xfreebsd)
6731 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_NETBSD, test x$MONO_NATIVE_PLATFORM = xnetbsd)
6732 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_HAIKU, test x$MONO_NATIVE_PLATFORM = xhaiku)
6734 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6735 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6736 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6737 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6738 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6740 ### C++ Linker selection
6742 # We have to lie to autotools, sometimes.
6744 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6745 # otherwise to CC.  We want C linking even if we're compiling with C++ enabled
6746 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6747 # except if we're linking with LLVM which relies on it.
6749 # Explanation of the hack:
6751 # According to
6752 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6753 # automake chooses the linker that it used to compile a target based on the
6754 # _SOURCES for that target.  If the target is comprised of only C code, it
6755 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6756 # linker arguments and a -o).  If the target _SOURCES include at least one C++ file, 
6757 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6759 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6760 # or libc++) linked in - even when Mono is written in C++, we take care not to
6761 # require the runtime library.  As a result, we don't want g++ or clang++ to do
6762 # the linking.  On the other hand if LLVM is enabled, then we _must_ use the
6763 # C++ linker - LLVM doesn't have the same restrictions.
6765 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6766 #  mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6767 #  automake's autodetection and lets us use the linker that we want.
6769 if test "x$enable_llvm_runtime" = "xyes"; then
6770         AC_SUBST(MONO_CXXLD, [$CXX])
6771         AC_SUBST(MONO_LIBTOOL_TAG, '--tag=CXX')
6772 else
6773         AC_SUBST(MONO_CXXLD, [$CC])
6774         AC_SUBST(MONO_LIBTOOL_TAG, '')
6777 ### Set -Werror options
6779 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6781 if test x"$GCC" = xyes; then
6783         if test "x$with_jemalloc" != "xyes"; then
6785                 # incompatible-pointer-types requires gcc circa 5.x
6787                 ORIG_CFLAGS=$CFLAGS
6788                 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6789                 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6790                 AC_TRY_COMPILE([],[
6791                 ], [
6792                         AC_MSG_RESULT(yes)
6793                         CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6794                 ], [
6795                         AC_MSG_RESULT(no)
6796                         CFLAGS=$ORIG_CFLAGS
6797                 ])
6799                 CFLAGS="$CFLAGS -Werror=return-type"
6800         fi
6802         # Implicit function declarations are not 64 bit safe
6803         # Do this late, since this causes lots of configure tests to fail
6804         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6805         # jay has a lot of implicit declarations
6806         JAY_CFLAGS="-Wno-implicit-function-declaration"
6808         ORIG_CFLAGS=$CFLAGS
6809         CFLAGS="$CFLAGS -Wsometimes-uninitialized -Werror"
6810         AC_MSG_CHECKING(for -Wsometimes-uninitialized option to gcc)
6811         AC_TRY_COMPILE([],[
6812         ], [
6813                 AC_MSG_RESULT(yes)
6814                 CFLAGS="$ORIG_CFLAGS -Werror=sometimes-uninitialized"
6815         ], [
6816                 AC_MSG_RESULT(no)
6817                 CFLAGS=$ORIG_CFLAGS
6818         ])
6821 # zlib/configure checks if this program compiles and if so
6822 # defines _LARGEFILE64_SOURCE on the compiler command line (not config.h).
6824 AC_MSG_CHECKING([for large file support])
6825 AC_COMPILE_IFELSE(
6826         [AC_LANG_SOURCE([
6827                 #include <sys/types.h>
6828                 off64_t dummy = 0;
6829         ])], [
6830                 AC_MSG_RESULT(yes)
6831                 # FIXME The ramifications of _LARGEFILE64_SOURCE are not understood.
6832                 # ZLIB_CFLAGS="$ZLIB_CFLAGS -D_LARGEFILE64_SOURCE=1"
6833         ], [
6834                 AC_MSG_RESULT(no)
6835         ])
6837 # for icu shim
6838 ICU_SHIM_PATH=.
6839 if test x$with_core = xonly; then
6840         if test x$cross_compiling = xno; then
6841                 AC_CHECK_FILE($srcdir/../libraries/Native/Unix/System.Globalization.Native/pal_icushim.h, [have_shim_globalization=yes], [have_shim_globalization=no])
6842         fi
6843         if test x$have_shim_globalization = xyes || test x$cross_compiling = xyes; then
6844                 ICU_SHIM_PATH=../../../libraries/Native/Unix/System.Globalization.Native
6845                 if test x$target_osx = xyes; then
6846                         ORIG_CPPFLAGS=$CPPFLAGS
6847                         # adding icu path to pkg_config_path
6848                         PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig
6849                         export PKG_CONFIG_PATH
6850                         CPPFLAGS="`pkg-config --cflags-only-I icu-uc`"
6851                         AC_CHECK_LIB(icucore, ucol_open, LIBS=$LIBS,
6852                                 [AC_MSG_ERROR([Cannot find libicucore, skipping build for System.Globalization.Native. .NET globalization is not expected to function.])])
6853                         AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
6854                         if test x$have_sys_icu = xyes; then
6855                                 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"
6856                         fi
6857                         CPPFLAGS=$ORIG_CPPFLAGS
6858                 elif test x$platform_android = xyes; then
6859                         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"
6860                         have_sys_icu=yes
6861                 elif test x$host_linux = xyes; then
6862                         AC_CHECK_LIB(icuuc, main, LIBS=$LIBS,
6863                                 [AC_MSG_ERROR([Cannot find libicuuc, try installing libicu-dev (or the appropriate package for your platform).])])
6864                         AC_CHECK_LIB(icui18n, main, LIBS=$LIBS,
6865                                 [AC_MSG_ERROR([Cannot find libicui18n, try installing libicu-dev (or the appropriate package for your platform).])])
6866                         AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
6867                         if test x$have_sys_icu = xyes; then
6868                                 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"
6869                         fi
6870                 elif test x$host_sunos = xyes; then
6871                         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"
6872                         have_sys_icu=yes
6873                 elif test x$host_wasm = xyes; then
6874                         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"
6875                         have_sys_icu=yes
6876                 else
6877                         GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6878                 fi
6879                 AC_SUBST(ICU_CFLAGS)
6880         else
6881                 GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6882         fi
6883 else
6884         GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6887 AC_SUBST(GLOBALIZATION_SHIM_DEFINES)
6888 AC_SUBST(ICU_SHIM_PATH)
6889 AM_CONDITIONAL(HAVE_SYS_ICU, test x$have_sys_icu = xyes)
6891 AC_SUBST(CFLAGS)
6892 AC_SUBST(CPPFLAGS)
6893 AC_SUBST(LDFLAGS)
6894 AC_SUBST(CCLDFLAGS)
6895 AC_SUBST(ZLIB_CFLAGS)
6897 # Update all submodules recursively to ensure everything is checked out
6898 if test "x$with_core" != "xonly"; then
6899         (cd $srcdir && scripts/update_submodules.sh)
6902 AC_MONO_OUTPUT()
6904 if test x$host_win32 = xyes; then
6905    # Get rid of 'cyg' prefixes in library names
6906    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6907    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6908    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6909    # executable doesn't work...
6910    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6913 if test x$host_darwin = xyes; then
6914    # This doesn't seem to be required and it slows down parallel builds
6915    sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6919   case $prefix in
6920   NONE) prefix=$ac_default_prefix ;;
6921   esac
6922   case $exec_prefix in
6923   NONE) exec_prefix='${prefix}' ;;
6924   esac
6926   #
6927   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
6928   # any existing config.make.  This allows people to share the same source tree
6929   # with different build directories, one native and one cross
6930   #
6931   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6933     test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6935     echo "prefix=$prefix" > $mcs_topdir/build/config.make
6936     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6937     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6938     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6939     echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6940     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6941     echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6942     echo "VERSION = $VERSION" >> $mcs_topdir/build/config.make
6944     case $INSTALL in
6945     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6946     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6947     esac
6949     echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6951     export VERSION
6952     [myver=$($AWK 'BEGIN {
6953       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6954       if(length(vsplit [1]) > 4) {
6955         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6956       }
6957       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6958     }')]
6960     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6961     echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6963     if test x$host_darwin = xyes; then
6964       echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6965       echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6966       echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6967     elif test x$host_win32 = xyes; then
6968       echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6969       echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6970       echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6971     elif test x$host_linux = xyes; then
6972       echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6973       echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6974       echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6975     else
6976       echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6977       echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6978       echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6979     fi
6981     echo "PLATFORM_AOT_PREFIX = $PLATFORM_AOT_PREFIX" >> $mcs_topdir/build/config.make
6982     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6983       echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6984     fi
6986         if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6987            enable_system_aot=yes
6988         fi
6990     if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6991       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6992     fi
6994     if test x$DISABLE_MCS_DOCS = xyes; then
6995       echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6996     fi
6998     if test x$has_extension_module != xno; then
6999         echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
7000     fi
7001     
7002     echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
7003     
7004     if test "x$test_bcl_opt" = "xyes"; then    
7005       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
7006     fi
7008     echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
7009     echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
7010     echo "VBCS_LOCATION?=$VBCS_LOCATION" >> $srcdir/$mcsdir/build/config.make
7012     if test $csc_compiler = mcs; then
7013       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
7014     fi
7016     if test "x$AOT_BUILD_FLAGS" != "x" ; then
7017       echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
7018       echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
7020       if test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" = "xno"; then
7021         echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS,$MONO_LLVM_PATH_OPTION" >> $srcdir/$mcsdir/build/config.make
7022       else
7023         echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
7024       fi
7025     fi
7027     if test "x$AOT_MODE" != "x" ; then
7028       echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
7029     fi
7031     if test "x$enable_btls" = "xyes"; then
7032       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
7033     fi
7035     if test "x$mono_native" = "xyes"; then
7036       echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
7037     else
7038       echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
7039     fi
7041     if test x$mono_native_compat = xyes; then
7042       echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
7043     else
7044       echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
7045     fi
7047     force_enable_compiler_server=no;
7049     AC_MSG_CHECKING([compiler server])
7050     AC_ARG_WITH(compiler-server, [  --with-compiler-server=yes,no,default,force      Enables or disables compiler server],[
7051        if test x$withval = xyes; then
7052            enable_compiler_server=yes;
7053        # force will bypass any automatic disables to allow you to test the compiler server
7054        #  in scenarios where it is disabled
7055        elif test x$withval = xforce; then
7056            enable_compiler_server=yes;
7057            force_enable_compiler_server=yes;
7058        elif test x$withval = xno; then
7059            enable_compiler_server=no;
7060        elif test x$withval = xdefault; then
7061            enable_compiler_server=yes;
7062        else
7063            AC_MSG_ERROR([You must supply one of "yes", "no", "default" or "force" to the --with-compiler-server option])
7064        fi
7065     ],[enable_compiler_server=yes])
7067     AC_MSG_RESULT($enable_compiler_server)
7069     if test x$enable_compiler_server = xyes; then
7070        if test x$force_enable_compiler_server = xyes; then
7071            AC_MSG_WARN([forcing compiler server to stay enabled])
7072        elif test x$host_darwin = xyes || test x$host_win32 = xyes; then
7073            AC_MSG_WARN([compiler server temporarily disabled on darwin and win32])
7074            enable_compiler_server=no;
7075        elif test x$csc_compiler = xmcs; then
7076            AC_MSG_WARN([mcs does not support the compiler server])
7077            enable_compiler_server=no;
7078        fi
7079     fi
7081     echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
7082     echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
7083     if test x$enable_compiler_server = xyes; then
7084       echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
7085     else
7086       echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
7087     fi
7088     echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
7090         if test x$enable_msvc_only = xyes; then
7091                 echo "ENABLE_MSVC_ONLY=1" >> $srcdir/$mcsdir/build/config.make
7092         fi
7094   fi
7098 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
7100 btls_platform_string=
7101 if test x$enable_btls = xyes; then
7102         if test x$btls_android = xyes; then
7103                 btls_platform_string=" (android:$BTLS_PLATFORM)"
7104         else
7105                 btls_platform_string=" ($BTLS_PLATFORM)"
7106         fi
7109 thread_suspend_msg=
7110 if test x$buildsgen = xyes; then
7111         if test x$enable_cooperative_suspend != xno; then
7112                 thread_suspend_msg="Suspend:       Cooperative"
7113         elif test x$enable_hybrid_suspend != xno; then
7114                 thread_suspend_msg="Suspend:       Hybrid"
7115         else
7116                 thread_suspend_msg="Suspend:       Preemptive"
7117         fi
7120 if test "x$with_core" = "xonly"; then
7121   if test ! -e netcore/Makefile; then
7122     # Out of tree builds
7123     mkdir -p netcore
7124     echo "all:" > netcore/Makefile
7125   fi
7126   echo "VERSION = $VERSION" > netcore/config.make
7127   echo "RID = $RID" >> netcore/config.make
7128   echo "COREARCH = $COREARCH" >> netcore/config.make
7129   echo "CORETARGETS = $CORETARGETS" >> netcore/config.make
7130   echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> netcore/config.make
7132   if test x$build_darwin = xyes; then
7133     echo "HOST_PLATFORM ?= macos" >> netcore/config.make
7134   elif test x$host_darwin = xyes; then
7135     echo "HOST_PLATFORM ?= macos" >> netcore/config.make
7136   elif test x$host_win32 = xyes; then
7137     echo "HOST_PLATFORM ?= win32" >> netcore/config.make
7138   elif test x$host_linux = xyes; then
7139     echo "HOST_PLATFORM ?= linux" >> netcore/config.make
7140   else
7141     echo "HOST_PLATFORM ?= unix" >> netcore/config.make
7142   fi
7145         
7146 echo "
7147         mcs source:    $mcsdir
7148         C# Compiler:   $csc_compiler
7149         CompilerServer:$enable_compiler_server
7151    Engine:
7152         Host:          $host
7153         Target:        $target
7154         GC:            $gc_msg 
7155         $thread_suspend_msg
7156         TLS:           $with_tls
7157         SIGALTSTACK:   $with_sigaltstack
7158         Engine:        $jit_status
7159         BigArrays:     $enable_big_arrays
7160         DTrace:        $enable_dtrace
7161         LLVM Back End: $enable_llvm (built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
7162         Spectre:       $spectre_mitigation_status
7163         Mono.Native:   $mono_native_text
7165    Libraries:
7166         .NET 4.x:        $with_profile4_x
7167         Xamarin.Android: $with_monodroid
7168         Xamarin.iOS:     $with_monotouch
7169         Xamarin.WatchOS: $with_monotouch_watch
7170         Xamarin.TVOS:    $with_monotouch_tv
7171         Xamarin.Mac:     $with_xammac
7172         Windows AOT:     $with_winaot
7173         Orbis:           $with_orbis
7174         Unreal:          $with_unreal
7175         WebAssembly:     $with_wasm
7176         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)
7177         JNI support:     $jdk_headers_found
7178         libgdiplus:      $libgdiplus_msg
7179         zlib:            $zlib_msg
7180         BTLS:            $enable_btls$btls_platform_string
7181         jemalloc:        $with_jemalloc (always use: $with_jemalloc_always)
7182         crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
7183         .NET Core:       $with_core
7184         $disabled
7186 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
7187    AC_MSG_WARN([Turning off static Mono is a risk, you might run into unexpected bugs])