Bump nuget.exe to 6.6.2
[mono-project.git] / configure.ac
blobdbc4904d9b2e42f61d50fca686b51a27913f1c10
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*-darwin20*)
453                                 # OSX/arm64
454                                 support_boehm=no
455                                 ;;
456                         aarch64*-darwin*)
457                                 platform_ios=yes
458                                 ;;
459                 esac
460                 ;;
461         *-*-haiku*)
462                 dnl BSD_SOURCE is for getifaddrs
463                 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
464                 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
465                 LIBS="$LIBS -lnetwork -ltextencoding"
466                 need_link_unlink=yes
467                 AC_DEFINE(PTHREAD_POINTER_ID)
468                 dnl Haiku does not support static TLS with __thread
469                 with_tls=pthread
470                 libgc_threads=pthreads
471                 use_sigposix=yes
472                 with_sigaltstack=no
473                 ;;
474         *-*-fuchsia*)
475                 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
476                 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
477                 fuchsia=true
478                 with_tls=pthread
479                 with_sigaltstack=yes
480                 with_static_mono=no
481                 support_boehm=no
482                 with_gc=sgen
483                 mono_cv_uscore=yes
484                 mono_cv_clang=no
485                 ;;
486         *-*-aix*|*-*-os400*)
487                 AC_DEFINE(HOST_AIX,1,[Targeting the AIX and PASE platforms])
488                 host_aix=yes
489                 dnl IMPORTANT: For svr4 sonames on AIX, you should set
490                 dnl `OBJECT_MODE=64` when configuring.
491                 dnl libtool cannot generate functioning svr4 sonames on
492                 dnl 64-bit without it.
493                 dnl Unfortunately, everything is complicated by the fact that
494                 dnl gcc doesn't respect this variable. (otherwise we could set
495                 dnl it for build time for configure and make)
496                 dnl On IBM i PASE using IBM's packages, GCC *does* respect this
497                 dnl variable, and builds are 64-bit by default. svr4 sonames
498                 dnl must still be specified when configuring on i, however.
499                 dnl As such, because Mono doesn't support 32-bit AIX or PASE,
500                 dnl set up a 64-bit build (assming GCC; XLC not supported)
501                 dnl regardless of what variable is used.
502                 case $host_os in
503                         aix*)
504                         if test "x$OBJECT_MODE" = "x64" && test "x$CC" = "x" && test "x$CXX" = "x"; then
505                                 dnl HACK: Set -maix64 at the GCC invocation
506                                 dnl level explicitly to work around the fact
507                                 dnl GCC in default maix32 mode explodes when
508                                 dnl binutils respects OBJECT_MODE.
509                                 dnl When that check occurs, flags are not
510                                 dnl passed to to the compiler, so GCC has no
511                                 dnl chance to change its mode.
512                                 dnl Otherwise, it may enter a state where it
513                                 dnl runs, but uses the libtool "compile"
514                                 dnl wrapper, which subtly breaks other things.
515                                 dnl This should propagate to all uses of CC.
516                                 dnl This is only set if not manually set.
517                                 CC="gcc -maix64"
518                                 CXX="g++ -maix64"
519                                 echo
520                         fi
521                         ;;
522                         dnl Not needed on i because it defaults to 64-bit and
523                         dnl has a GCC smart enough to respect OBJECT_MODE.
524                 esac
525                 dnl We still set this for *FLAGS, however, because we may not
526                 dnl be setting OBJECT_MODE.
527                 LDFLAGS="$LDFLAGS -maix64"
528                 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -pthread -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
529                 libmono_cflags="-pthread -D_THREAD_SAFE -D_REENTRANT"
530                 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
531                 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
532                 dnl specifiy 64-bit mode for tools. (OBJECT_MODE is finicky with cmake.)
533                 dnl XXX: We should stop the hardcoding madness
534                 AR="/usr/bin/ar -X64"
535                 NM="/usr/bin/nm -X64"
536                 STRIP="/usr/bin/strip -X64"
537                 RANLIB="/usr/bin/ranlib -X64"
538                 dnl SGen is the future (changes to Boehm support code would be
539                 dnl required if you wish to re-enable Boehm)
540                 support_boehm=no
541                 with_gc=sgen
542                 need_link_unlink=yes
543                 use_sigposix=yes
544                 dnl Similar limitation to macOS about the first thread and the
545                 dnl guard page, except sometimes the runtime hangs. Disable for
546                 dnl now until cause can be determined or it seems OK enough.
547                 with_sigaltstack=no
548                 dnl use pthread TLS, __thread has issues with the compiler flags we use
549                 with_tls=pthread
550                 dnl ppc Linux is the same? test further
551                 disable_munmap=yes
552                 RID="aix-ppc64"
553                 CORETARGETS="-p:TargetsUnix=true"
554                 ;;
555         *)
556                 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
557                 ;;
558 esac
560 AC_MSG_RESULT(ok)
562 if test x$need_link_unlink = xyes; then
563    AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
566 if test x$host_win32 = xyes; then
567    AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
570 if test x$target_win32 = xyes; then
571    AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
574 if test x$host_darwin = xyes; then
575    AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
578 # Defined for all targets/platforms using classic Windows API support.
579 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
580 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
582 AC_SUBST(extra_runtime_ldflags)
583 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
584 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
585 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
586 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
587 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
588 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
589 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
590 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
591 AM_CONDITIONAL(HOST_WASM, test x$host_wasm = xyes)
592 AM_CONDITIONAL(HOST_AIX, test x$host_aix = xyes)
594 if test -z "$HOST_DARWIN_TRUE"; then :
595 PLATFORM_AOT_SUFFIX=.dylib
596 PLATFORM_AOT_PREFIX=lib
599 if test -z "$HOST_LINUX_TRUE"; then :
600 PLATFORM_AOT_SUFFIX=.so
601 PLATFORM_AOT_PREFIX=lib
604 if test -z "$HOST_WIN32_TRUE"; then :
605 PLATFORM_AOT_SUFFIX=.dll
606 PLATFORM_AOT_PREFIX=
609 AC_SUBST(PLATFORM_AOT_SUFFIX)
610 AC_SUBST(PLATFORM_AOT_PREFIX)
612 if test -z "$HOST_WASM_TRUE"; then :
613 AC_DEFINE(HAVE_UTIME)
614 AC_DEFINE(HAVE_UTIMES)
617 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
619 AC_CHECK_TOOL(CC, gcc, gcc)
620 AC_PROG_CC
621 AC_CHECK_TOOL(CXX, g++, g++)
622 AC_PROG_CXX
623 AM_PATH_PYTHON([3.2])
624 AM_PROG_AS
625 AC_PROG_INSTALL
626 AC_PROG_AWK
627 AM_PROG_CC_C_O
628 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
629 : ${CCAS='$(CC)'}
630 # Set ASFLAGS if not already set.
631 : ${CCASFLAGS='$(CFLAGS)'}
632 AC_SUBST(CCAS)
633 AC_SUBST(CCASFLAGS)
635 if test "x$CXX" = "xno"; then
636         AC_MSG_ERROR([No c++ compiler found. You need to install a c++ compiler])
639 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
640 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
641 if test "x$CXX" = "xg++"; then
642         if test "x$GXX" != "xyes"; then
643                 # automake/libtool is so broken, it requires g++ even if the c++ sources
644                 # are inside automake conditionals
645                 AC_MSG_ERROR([You need to install g++])
646         fi
649 dnl may require a specific autoconf version
650 dnl AC_PROG_CC_FOR_BUILD
651 dnl CC_FOR_BUILD not automatically detected
652 CC_FOR_BUILD=$CC
653 CFLAGS_FOR_BUILD=$CFLAGS
654 BUILD_EXEEXT=
655 if test "x$cross_compiling" = "xyes"; then
656         CC_FOR_BUILD=cc
657         CFLAGS_FOR_BUILD=
658         BUILD_EXEEXT=""
660 AC_SUBST(CC_FOR_BUILD)
661 AC_SUBST(CFLAGS_FOR_BUILD)
662 AC_SUBST(HOST_CC)
663 AC_SUBST(BUILD_EXEEXT)
665 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
666 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
668 # Set STDC_HEADERS
669 AC_HEADER_STDC
670 AC_LIBTOOL_WIN32_DLL
671 # This causes monodis to not link correctly
672 #AC_DISABLE_FAST_INSTALL
674 #lookup makedev() header
675 AC_HEADER_MAJOR
677 AM_PROG_LIBTOOL
678 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
679 DOLT
681 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
682 AC_SUBST(export_ldflags)
684 # Test whenever ld supports -version-script
685 AC_PROG_LD
686 AC_PROG_LD_GNU
688 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)
689 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)
691 # zlib/configure checks for unistd.h existence and defines HAVE_UNISTD_H on the compiler
692 # command line (not config.h) if it is present.
693 AC_CHECK_HEADER(unistd.h,
694     [HAVE_UNISTD_H=1
695      ZLIB_CFLAGS="$ZLIB_CFLAGS -DHAVE_UNISTD_H"],
696     [HAVE_UNISTD_H=0])
698 AC_SUBST(HAVE_UNISTD_H)
700 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
701                   [], [], [#include <stddef.h>
702                   #include <sys/socket.h>
703                   #include <linux/socket.h>])
705 AC_CHECK_HEADERS(sys/user.h, [], [],
707 #ifdef HAVE_SYS_PARAM_H
708 # include <sys/param.h>
709 #endif
712 AC_CHECK_HEADERS(linux/serial.h)
714 case "$host" in
715         # Use bundled zlib on Windows to be sure it is static.
716         *-mingw*|*-cygwin*)
717                 have_sys_zlib=no
718                 zlib_msg="bundled zlib"
719                 ;;
720         # Use bundled zlib on RISC-V for now to make cross-compiling easier.
721         riscv*)
722                 have_sys_zlib=no
723                 zlib_msg="bundled zlib"
724                 ;;
725         *)
726                 AC_CHECK_HEADER(zlib.h, [have_sys_zlib=yes], [have_sys_zlib=no])
727                 if test x$have_sys_zlib = xyes; then
728                         AC_TRY_COMPILE([#include <zlib.h>], [
729                                 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
730                                 #else
731                                 #error No good zlib found
732                                 #endif
733                         ],[
734                                 AC_MSG_RESULT(Using system zlib)
735                                 zlib_msg="system zlib"
736                                 have_sys_zlib=yes
737                         ],[
738                                 AC_MSG_RESULT(zlib too old, using embedded zlib)
739                                 have_sys_zlib=no
740                                 zlib_msg="bundled zlib"
741                         ])
742                 else
743                         AC_MSG_RESULT(zlib not found, using embedded zlib)
744                         have_sys_zlib=no
745                         zlib_msg="bundled zlib"
746                 fi
747                 ;;
748 esac
750 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=])
751 if test "x$STATIC_ZLIB_PATH" != "x"; then
752         have_static_zlib=yes
753         have_sys_zlib=no
754         zlib_msg="static zlib from $STATIC_ZLIB_PATH"
755         AC_SUBST(STATIC_ZLIB_PATH)
758 AM_CONDITIONAL(HAVE_STATIC_ZLIB, test x$have_static_zlib = xyes)
759 AM_CONDITIONAL(HAVE_SYS_ZLIB, test x$have_sys_zlib = xyes)
760 if test x$have_static_zlib = xyes; then
761         AC_DEFINE(HAVE_STATIC_ZLIB, 1, [Use static zlib])
763 if test x$have_sys_zlib = xyes; then
764         AC_DEFINE(HAVE_SYS_ZLIB, 1, [Use OS-provided zlib])
766 # for mono/metadata/debug-symfile.c
767 AC_CHECK_HEADERS(elf.h)
769 # for perf jit dump support
770 AC_CHECK_HEADERS(sys/mman.h)
771 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
772         AC_DEFINE(ENABLE_JIT_DUMP, 1, [Enable jit dump support on Linux])
775 # for support
776 AC_CHECK_HEADERS(poll.h)
777 AC_CHECK_HEADERS(sys/poll.h)
778 AC_CHECK_HEADERS(sys/wait.h)
779 AC_CHECK_HEADERS(grp.h)
780 AC_CHECK_HEADERS(syslog.h)
781 AC_CHECK_FUNCS(vsyslog)
783 # for mono/dis
784 AC_CHECK_HEADERS(wchar.h)
786 # for Linux statfs support
787 AC_CHECK_HEADERS(linux/magic.h)
789 # For Android NDK unified headers
790 if test x$platform_android = xyes; then
791         AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
792         AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
793         AC_CHECK_HEADERS(android/ndk-version.h)
795         # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
796         # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
797         # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
798         # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
799         # doesn't contain the required definitions (NDK 14)
800         if test x$have_android_signal_inlines = xyes; then
801                 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
802                 AC_COMPILE_IFELSE([
803                         AC_LANG_PROGRAM([#include <signal.h>
804                                 #include <android/legacy_signal_inlines.h>],[
805                                 int i;
806                                 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
807                                 }
808                         ])],[
809                                 AC_MSG_RESULT(yes)
810                                 android_sigrtminmax_work=yes
811                         ],[
812                                 AC_MSG_RESULT(no)
813                                 android_sigrtminmax_work=no
814                         ]
815                 )
817                 if test x$android_sigrtminmax_work = xno; then
818                         AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
819                 fi
820         fi
822         # Attempt to detect whether we're using Android NDK unified headers
823         AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
824         AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
826         android_unified_headers=no
827         if test x$have_android_api_level = xyes; then
828                 if test x$have_android_versioning = xyes; then
829                         AC_MSG_CHECKING([whether using Android NDK unified headers])
831                         # Both macros are defined only in the NDK unified headers
832                         AC_COMPILE_IFELSE([
833                                 AC_LANG_PROGRAM([
834                                         #include <android/api-level.h>
835                                         #include <android/versioning.h>
836                                 ],[
837                                         #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
838                                         #else
839                                                 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
840                                         #endif
841                                 ])],[
842                                         AC_MSG_RESULT(yes)
843                                         android_unified_headers=yes
844                                 ],[
845                                         AC_MSG_RESULT(no)
846                                         android_unified_headers=no
847                                 ]
848                         )
849                 fi
850         fi
852         if test x$android_unified_headers = xyes; then
853                 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
854         fi
855 else
856         AC_CHECK_HEADER(linux/cgroupstats.h, [AC_DEFINE(HAVE_CGROUP_SUPPORT, 1, Define to 1 if you have the <linux/cgroupstats.h> header file.)])
857 fi # Android
859 # not 64 bit clean in cross-compile
860 AC_CHECK_SIZEOF(void *)
861 AC_CHECK_SIZEOF(long)
863 AC_CHECK_SIZEOF(int)
864 AC_CHECK_SIZEOF(long long)
866 AC_CACHE_CHECK([for clang],
867         mono_cv_clang,[
868         AC_TRY_COMPILE([], [
869                 #ifdef __clang__
870                 #else
871                 #error "FAILED"
872                 #endif
873         ],
874         [mono_cv_clang=yes],
875         [mono_cv_clang=no],
876         [])
879 AC_ARG_ENABLE(visibility-hidden,
880 [  --disable-visibility-hidden    disable usage of -fvisiblity=hidden],
881    disable_visibility_hidden=yes, disable_visibility_hidden=no)
883 WARN=''
884 if test x"$GCC" = xyes; then
885                 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
886                 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length -Wc++-compat"
888                 # We require C99 with some GNU extensions, e.g. `linux` macro
889                 CFLAGS="$CFLAGS -std=gnu99"
891                 # The runtime code does not respect ANSI C strict aliasing rules
892                 CFLAGS="$CFLAGS -fno-strict-aliasing"
894                 # We rely on signed overflow to behave
895                 CFLAGS="$CFLAGS -fwrapv"
897                 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
898                 if test x"$disable_visibility_hidden" = xno; then
899                    # Don't export any symbols by default
900                    SHARED_CFLAGS="-fvisibility=hidden"
901                    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
902                 fi
904                 ORIG_CFLAGS=$CFLAGS
905                 # Check for the normal version, since gcc ignores unknown -Wno options
906                 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
907                 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
908                 AC_TRY_COMPILE([],[
909                 ], [
910                    AC_MSG_RESULT(yes)
911                    CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
912                 ], [
913                    AC_MSG_RESULT(no)
914                    CFLAGS=$ORIG_CFLAGS
915                 ])
917                 if test "x$mono_cv_clang" = "xyes"; then
918                    # https://bugzilla.samba.org/show_bug.cgi?id=8118
919                    WARN="$WARN -Qunused-arguments"
920                    WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
921                    # We rely on zero length arrays in structs
922                    WARN="$WARN -Wno-zero-length-array"
923                 fi
924 else
925         # The Sun Forte compiler complains about inline functions that access static variables
926         # so disable all inlining.
927         case "$host" in
928         *-*-solaris*)
929                 CFLAGS="$CFLAGS -Dinline="
930                 ;;
931         esac
933 CFLAGS="$WARN $CFLAGS -g"
934 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
935 CPPFLAGS="$WARN $CPPFLAGS -g"
937 # Where's the 'mcs' source tree?
938 if test -d $srcdir/mcs; then
939   mcsdir=mcs
940 else
941   mcsdir=../mcs
944 AC_ARG_WITH(mcs-path, [  --with-mcs-path=/path/to/mcs      Specify an alternate mcs source tree],
945         if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
946                 mcsdir=$with_mcs_path
947         fi
950 AC_ARG_WITH(jumptables, [  --with-jumptables=yes,no      enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
953 # A sanity check to catch cases where the package was unpacked
954 # with an ancient tar program (Solaris)
956 AC_ARG_ENABLE(solaris-tar-check,
957 [  --disable-solaris-tar-check    disable solaris tar check],
958    do_solaris_tar_check=no, do_solaris_tar_check=yes)
960 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
961         AC_MSG_CHECKING(integrity of package)
962         if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
963         then
964                 AC_MSG_RESULT(ok)
965         else
966                 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"
967                 AC_MSG_ERROR([$errorm])
968         fi
971 if test "x$with_mcs_path" != "x"; then
972 mcs_topdir=$(cd "$mcsdir" && pwd)
973 mcs_topdir_from_srcdir=$mcs_topdir
974 else
975 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
976 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
979 # Convert mcs_topdir* paths to Windows syntax.
980 if test x$cross_compiling$host_win32 = xnoyes; then
981   mcs_topdir=$(cygpath -m $mcs_topdir)
982   case $mcs_topdir_from_srcdir in
983     /cygdrive/*)
984         mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
985         ;;
986   esac
989 AC_SUBST([mcs_topdir])
990 AC_SUBST([mcs_topdir_from_srcdir])
992 # gettext: prepare the translation directories. 
993 # we do not configure the full gettext, as we consume it dynamically from C#
994 AM_PO_SUBDIRS
996 if test "x$USE_NLS" = "xyes"; then
997    AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
999    if test "x$HAVE_MSGFMT" = "xno"; then
1000           AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
1001    fi
1004 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
1006 pkg_config_path=
1007 AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir],
1008         if test x$with_crosspkgdir = "x"; then
1009                 if test -s $PKG_CONFIG_PATH; then
1010                         pkg_config_path=$PKG_CONFIG_PATH
1011                 fi
1012         else
1013                 pkg_config_path=$with_crosspkgdir
1014                 PKG_CONFIG_PATH=$pkg_config_path
1015                 export PKG_CONFIG_PATH
1016         fi
1019 AC_ARG_ENABLE(ninja,[  --enable-ninja    Enable using ninja where available], enable_ninja=$enableval)
1020 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
1021 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
1023 AC_ARG_ENABLE(werror, [  --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
1024 if test x$werror_flag = xyes; then
1025         SHARED_CFLAGS="$SHARED_CFLAGS -Werror"
1027 AC_SUBST([SHARED_CFLAGS])
1029 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
1030   
1031 AC_SUBST(GLIB_CFLAGS)
1033 # Enable support for fast thread-local storage
1034 # Some systems have broken support, so we allow to disable it.
1035 AC_ARG_WITH(tls, [  --with-tls=__thread,pthread    select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
1037 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
1038 # This does not work on some platforms (bug #55253)
1039 AC_ARG_WITH(sigaltstack, [  --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
1041 AC_ARG_WITH(static_mono, [  --with-static_mono=yes,no      link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
1042 AC_ARG_WITH(shared_mono, [  --with-shared_mono=yes,no      build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
1043 # Same as --with-shared_mono=no
1044 AC_ARG_ENABLE(libraries, [  --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
1046 if test "x$enable_static" = "xno"; then
1047    with_static_mono=no
1050 if test "x$enable_shared" = "xno"; then
1051    with_shared_mono=no
1054 if test "x$enable_libraries" = "xno"; then
1055    with_shared_mono=no
1058 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
1060 if test "x$host_win32" = "xyes"; then
1061    # Boehm GC requires the runtime to be in its own dll
1062    with_static_mono=no
1065 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
1066 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
1067 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
1068 AC_ARG_ENABLE(support-build, [  --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
1070 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
1071 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
1072         AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
1073         ORIG_CFLAGS=$CFLAGS
1074         CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
1075         AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
1076         AC_TRY_COMPILE([], [
1077         ], [
1078            AC_MSG_RESULT(yes)
1079            # Pass it to libgc as well
1080            CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
1081         ], [
1082            AC_MSG_RESULT(no)
1083            CFLAGS=$ORIG_CFLAGS
1084         ])
1087 AC_ARG_ENABLE(small-config, [  --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
1089 if test x$enable_small_config = xyes; then
1090         AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
1091         CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
1094 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)
1096 DISABLED_FEATURES=none
1097 csc_compiler=default
1098 endian=unknown
1099 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
1100 AC_MSG_CHECKING([CSharp compiler to use])
1101 AC_ARG_WITH(csc, [  --with-csc=mcs,roslyn,default      Configures the CSharp compiler to use],[
1102    if test x$withval = xmcs; then
1103        csc_compiler=mcs
1104    elif test x$withval = xroslyn; then
1105        csc_compiler=roslyn
1106    elif test x$withval = xdefault; then
1107        :
1108    else
1109        AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
1110    fi
1111 ],[csc_compiler=default])
1113 if test $csc_compiler = default; then
1114    if test $endian = big; then
1115       case "$host" in
1116         s390x*) csc_compiler=roslyn ;;
1117         *) csc_compiler=mcs
1118       esac
1119    elif test $endian = little; then
1120       case "$host" in
1121         powerpc*) csc_compiler=mcs ;;
1122         *) csc_compiler=roslyn ;;
1123       esac
1124    else
1125       csc_compiler=mcs
1126    fi
1128 AC_MSG_RESULT($csc_compiler)
1130 AC_ARG_WITH(jemalloc,             [  --with-jemalloc=yes,no               If jemalloc is enabled (defaults to no)],                                     [], [with_jemalloc=no])
1131 AC_ARG_WITH(jemalloc-always,      [  --with-jemalloc_always=yes,no        If jemalloc is enabled and always used (defaults to yes)],                    [], [with_jemalloc_always=no])
1132 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])
1135 if test x$target_win32 = xyes; then
1136 with_jemalloc=no
1137 with_jemalloc_assert=no
1138 with_jemalloc_always=no
1141 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
1142 if test "x$with_jemalloc_assert" = "xyes"; then
1143 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
1144 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
1145 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
1148 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
1149 if test "x$with_jemalloc_always" = "xyes"; then
1150 with_jemalloc=yes
1151 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
1152 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
1153 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
1156 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
1157 if test "x$with_jemalloc" = "xyes"; then
1158 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
1159 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
1160 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
1162 if test "x$target_mach" = "xyes"; then
1163         JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
1166 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
1167 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
1169 AC_SUBST(JEMALLOC_CFLAGS)
1170 AC_SUBST(JEMALLOC_CPPFLAGS)
1171 AC_SUBST(JEMALLOC_LDFLAGS)
1172 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1175 # Terminology:
1176 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1177 # MERP - The MS telemetry profile. Not for general use.
1178 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1180 # 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.
1182 #--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.
1183 #--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.
1184 #--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.
1185 #--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.
1187 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])
1188 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])
1189 AC_ARG_ENABLE(crash-reporting,  [  --disable-crash-reporting            Enable or Disable crash reporting subsystem],        [crash_reporting=$enableval], [crash_reporting=yes])
1191 if test "x$with_crash_privacy" = "xyes"; then
1192 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1195 if test "x$with_structured_crashes" = "xno"; then
1196 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1199 case "$host" in
1200         *-mingw*|*-*-cygwin*)
1201                 crash_reporting=no
1202                 ;;
1203 esac
1205 if test "x$crash_reporting" != "xyes"; then
1206 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1207 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1209 AM_CONDITIONAL(DISABLE_CRASH_REPORTING, test x$crash_reporting != xyes)
1211 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1212 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1214 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1215 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1217 if test x$enable_monodroid = xyes; then
1218         AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1221 if test x$enable_monotouch = xyes; then
1222         AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1225 AC_ARG_ENABLE(cxx, [  --enable-cxx   compile some code as C++])
1226 AM_CONDITIONAL(ENABLE_CXX, test x$enable_cxx = xyes)
1228 # mono/corefx/native has a lot of invalid C++98 in its headers
1229 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1230 # use these C99 print macros in the command line, since glib may not win first inttypes include
1231 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1232 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1233 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1234 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1236 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1237 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1238 # and add it whenever we're running clang on Darwin.
1239 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1240         CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1243 AC_SUBST(CXXFLAGS_COMMON)
1245 if test "x$enable_cxx" = "xyes"; then
1247         CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1249         # -std=gnu99 -xc++ is not allowed and errors.
1250         CXX_REMOVE_CFLAGS=-std=gnu99
1251         # These give warnings and should be removed. They are C-only.
1252         # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1253         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wc++-compat"
1254         # Likewise with CentOS 6 gcc 4.4.
1255         CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1257         # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1258         # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1259         # generates a warning every time we run gcc which is very unsightly.
1260         # The warning is for e.g. sprintf(foo, "") which can just be
1261         # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1262         # and completely legal and valid.
1263         # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1264         # Alternatively, just run $CXX -xc++ -c /dev/null.
1265         AC_LANG_PUSH(C++)
1266         ORIG_CXXFLAGS=$CXXFLAGS
1267         CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1268         AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1269         AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1270                                  [ AC_MSG_RESULT(no)
1271                                    CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1272         CXXFLAGS=$ORIG_CXXFLAGS
1273         AC_LANG_POP(C++)
1275 AC_SUBST(CXX_ADD_CFLAGS)
1276 AC_SUBST(CXX_REMOVE_CFLAGS)
1279 # Set the build profiles and options before things which use them
1282 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])
1283 AC_ARG_WITH(monodroid,           [  --with-monodroid=yes,no             If you want to build the MonoDroid assemblies (defaults to no)],            [], [with_monodroid=default])
1284 AC_ARG_WITH(monotouch,           [  --with-monotouch=yes,no             If you want to build the Xamarin.iOS assemblies (defaults to no)],          [], [with_monotouch=default])
1285 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])
1286 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])
1287 AC_ARG_WITH(bitcode,             [  --with-bitcode=yes,no               If bitcode is enabled (defaults to no)],                                    [], [with_bitcode=default])
1288 AC_ARG_WITH(xammac,              [  --with-xammac=yes,no                If you want to build the Xamarin.Mac assemblies (defaults to no)],          [], [with_xammac=default])
1289 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])
1290 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])
1291 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])
1292 AC_ARG_WITH(winaot,              [  --with-winaot=yes,no                If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1293 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])
1294 AC_ARG_WITH(orbis,               [  --with-orbis=yes,no                 If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1295 AC_ARG_WITH(unreal,              [  --with-unreal=yes,no                If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1296 AC_ARG_WITH(wasm,                [  --with-wasm=yes,no                  If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1299 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])
1300 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])
1301 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])
1302 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])
1304 AC_ARG_WITH(static_icu, [  --with-static-icu=yes|no      Integrate ICU statically into the runtime (defaults to no)],[
1305         if test x$with_static_icu = xyes ; then
1306                 AC_DEFINE(STATIC_ICU,1,[Integrate ICU statically into the runtime.])
1307         fi
1308 ], [with_static_icu=no])
1311 dnl Spectre compiler mitigation flag checks
1313 if test "x$with_spectre_mitigation" = "xyes"; then
1314    AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1315    SPECTRE_CFLAGS=
1316    SPECTRE_INDIRECT_BRANCH_KIND=
1317    case "x$with_spectre_indirect_branch_choice" in
1318        xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1319        xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1320        xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1321        xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1322        *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1323    esac
1325    SPECTRE_FUNCTION_RETURN_KIND=""
1326    case "x$with_spectre_function_return_choice" in
1327        xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1328        xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1329        xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1330        xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1331        *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1332    esac
1334    AX_CHECK_COMPILE_FLAG(
1335         [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1336         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1337    )
1339    AX_CHECK_COMPILE_FLAG(
1340         [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1341         [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1342    )
1344    if test "x$SPECTRE_CFLAGS" != "x" ; then
1345         CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1346         CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1347         spectre_mitigation_status="mitigation enabled"
1348    fi
1349 else
1350         spectre_mitigation_status="no mitigation"
1354 dnl Profile defaults
1356 TEST_PROFILE=default
1357 enable_llvm_default=no
1359 with_profile4_x_default=no
1360 with_monodroid_default=no
1361 with_monotouch_default=no
1362 with_monotouch_watch_default=no
1363 with_monotouch_tv_default=no
1364 with_xammac_default=no
1365 with_testing_aot_full_interp_default=no
1366 with_testing_aot_hybrid_default=no
1367 with_testing_aot_full_default=no
1368 with_winaot_default=no
1369 with_testing_winaot_interp_default=no
1370 with_orbis_default=no
1371 with_unreal_default=no
1372 with_wasm_default=no
1374 with_bitcode_default=no
1375 enable_cooperative_suspend_default=no
1376 enable_hybrid_suspend_default=no
1378 # For the sake of clearer error messages, these numbers should all be different from each other.
1379 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4400,nftnptr-arg-trampolines=4000,nrgctx-trampolines=21000
1381 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1383 MONO_LLVM_PATH_OPTION=llvm-path="`pwd`/llvm/usr/bin"
1385 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1386    DISABLE_MCS_DOCS_default=yes
1389 if test x$with_runtime_preset = xnet_4_x; then
1390    with_profile4_x_default=yes
1391    TEST_PROFILE=net_4_x
1392 elif test x$with_runtime_preset = xall; then
1393    with_profile4_x_default=yes
1394    with_monodroid_default=yes
1395    with_monotouch_default=yes
1396    with_monotouch_watch_default=yes
1397    with_monotouch_tv_default=yes
1398    with_xammac_default=yes
1399    with_winaot_default=yes
1400    with_testing_winaot_interp_default=yes
1401    with_orbis_default=yes
1402    with_unreal_default=yes
1403    with_wasm_default=yes
1404    with_testing_aot_full_interp_default=yes
1405    with_testing_aot_hybrid_default=yes
1406    with_testing_aot_full_default=yes
1407    TEST_PROFILE=net_4_x
1408 elif test x$with_runtime_preset = xbitcode; then
1409    DISABLE_MCS_DOCS_default=yes
1410    with_testing_aot_full_default=yes
1411    with_bitcode_default=yes
1412    enable_cooperative_suspend_default=yes
1413    # FIXME: use TEST_PROFILE=testing_aot_full
1414    TEST_PROFILE=testing_aot_bitcode
1415    PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1416    enable_llvm_default=yes
1418    mono_feature_disable_com='yes'
1419    mono_feature_disable_remoting='yes'
1420    mono_feature_disable_reflection_emit_save='yes'
1421    mono_feature_disable_reflection_emit='yes'
1422    mono_feature_disable_appdomains='yes'
1424    # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1425    AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1426    AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1427    AOT_MODE="llvmonly"
1428 elif test x$with_runtime_preset = xbitcodeinterp; then
1429    with_testing_aot_full_interp_default=yes
1430    with_bitcode_default=yes
1431    enable_cooperative_suspend_default=yes
1432    # FIXME: use TEST_PROFILE=testing_aot_full_interp
1433    TEST_PROFILE=testing_aot_bitcode_interp
1434    PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1435    enable_llvm_default=yes
1437    # mscorlib.dll aot compilation crashes
1438    mono_feature_disable_com='yes'
1440    # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1441    AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1442    AOT_RUN_FLAGS="--llvmonly-interp"
1443 elif test x$with_runtime_preset = xfullaot; then
1444    DISABLE_MCS_DOCS_default=yes
1445    with_testing_aot_full_default=yes
1446    TEST_PROFILE=testing_aot_full
1448    mono_feature_disable_com='yes'
1449    mono_feature_disable_remoting='yes'
1450    mono_feature_disable_reflection_emit_save='yes'
1451    mono_feature_disable_reflection_emit='yes'
1452    mono_feature_disable_appdomains='yes'
1454    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1455    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1456    AOT_MODE="full"
1457 elif test x$with_runtime_preset = xfullaot_llvm; then
1458    DISABLE_MCS_DOCS_default=yes
1459    with_testing_aot_full_default=yes
1460    TEST_PROFILE=testing_aot_full
1462    mono_feature_disable_com='yes'
1463    mono_feature_disable_remoting='yes'
1464    mono_feature_disable_reflection_emit_save='yes'
1465    mono_feature_disable_reflection_emit='yes'
1466    mono_feature_disable_appdomains='yes'
1468    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1469    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1470    AOT_MODE="full"
1471 elif test x$with_runtime_preset = xhybridaot; then
1472    DISABLE_MCS_DOCS_default=yes
1473    with_testing_aot_hybrid_default=yes
1474    TEST_PROFILE=testing_aot_hybrid 
1476    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1477    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1478 elif test x$with_runtime_preset = xhybridaot_llvm; then
1479    DISABLE_MCS_DOCS_default=yes
1480    with_testing_aot_hybrid_default=yes
1481    TEST_PROFILE=testing_aot_hybrid
1483    AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1484    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1485 elif test x$with_runtime_preset = xfullaotinterp; then
1486    with_testing_aot_full_interp_default=yes
1487    TEST_PROFILE=testing_aot_full_interp
1489    # mscorlib.dll aot compilation crashes
1490    mono_feature_disable_com='yes'
1492    AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1493    AOT_RUN_FLAGS="--full-aot-interp"
1494 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1495    with_testing_aot_full_interp_default=yes
1496    TEST_PROFILE=testing_aot_full_interp
1498    # mscorlib.dll aot compilation crashes
1499    mono_feature_disable_com='yes'
1501    AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1502    AOT_RUN_FLAGS="--full-aot-interp"
1503 elif test x$with_runtime_preset = xaot; then
1504    with_profile4_x_default=yes
1506    AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1507    AOT_RUN_FLAGS=""
1509    DISABLE_MCS_DOCS_default=yes
1510 elif test x$with_runtime_preset = xaot_llvm; then
1511    with_profile4_x_default=yes
1513    AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1514    AOT_RUN_FLAGS=""
1516    DISABLE_MCS_DOCS_default=yes
1517 elif test x$with_runtime_preset = xwinaot; then
1518    DISABLE_MCS_DOCS_default=yes
1519    with_winaot_default=yes
1520    TEST_PROFILE=winaot
1522    mono_feature_disable_com='yes'
1523    mono_feature_disable_remoting='yes'
1524    mono_feature_disable_reflection_emit_save='yes'
1525    mono_feature_disable_reflection_emit='yes'
1526    mono_feature_disable_appdomains='yes'
1528    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1529    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1530    AOT_MODE="full"
1531 elif test x$with_runtime_preset = xwinaotinterp; then
1532    DISABLE_MCS_DOCS_default=yes
1533    with_testing_winaot_interp_default=yes
1534    TEST_PROFILE=testing_winaot_interp
1536    mono_feature_disable_com='yes'
1537    mono_feature_disable_remoting='yes'
1538    mono_feature_disable_appdomains='yes'
1540    AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1541    AOT_RUN_FLAGS="--full-aot-interp"
1542 elif test x$with_runtime_preset = xwinaotinterp_llvm; then
1543    DISABLE_MCS_DOCS_default=yes
1544    with_testing_winaot_interp_default=yes
1545    TEST_PROFILE=testing_winaot_interp
1547    mono_feature_disable_com='yes'
1548    mono_feature_disable_remoting='yes'
1549    mono_feature_disable_appdomains='yes'
1551    INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1552    AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1553    AOT_RUN_FLAGS="--full-aot-interp"
1554 elif test x$with_runtime_preset = xwinaot_llvm; then
1555    DISABLE_MCS_DOCS_default=yes
1556    with_winaot_default=yes
1557    TEST_PROFILE=winaot
1559    mono_feature_disable_com='yes'
1560    mono_feature_disable_remoting='yes'
1561    mono_feature_disable_reflection_emit_save='yes'
1562    mono_feature_disable_reflection_emit='yes'
1563    mono_feature_disable_appdomains='yes'
1565    INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1566    AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1567    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1568    AOT_MODE="full"
1569 elif test x$with_runtime_preset = xorbis; then
1570    DISABLE_MCS_DOCS_default=yes
1571    with_orbis_default=yes
1572    TEST_PROFILE=orbis
1574    mono_feature_disable_com='yes'
1575    mono_feature_disable_remoting='yes'
1576    mono_feature_disable_reflection_emit_save='yes'
1577    mono_feature_disable_reflection_emit='yes'
1578    mono_feature_disable_appdomains='yes'
1580    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1581    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1582    AOT_MODE="full"
1583 elif test x$with_runtime_preset = xunreal; then
1584    DISABLE_MCS_DOCS_default=yes
1585    with_unreal_default=yes
1586    TEST_PROFILE=unreal
1588    mono_feature_disable_com='yes'
1589    mono_feature_disable_remoting='yes'
1590    mono_feature_disable_appdomains='no'
1592    AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1593    AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1594 elif test x$with_runtime_preset = xwasm; then
1595    DISABLE_MCS_DOCS_default=yes
1596    with_wasm_default=yes
1597    TEST_PROFILE=wasm
1599    mono_feature_disable_com='yes'
1600    mono_feature_disable_remoting='yes'
1601    mono_feature_disable_reflection_emit_save='yes'
1602    mono_feature_disable_reflection_emit='yes'
1603    mono_feature_disable_appdomains='yes'
1605    AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1606    AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1607 else
1608    TEST_PROFILE=net_4_x
1609    with_profile4_x_default=yes
1612 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1613    AC_SUBST(AOT_BUILD_FLAGS)
1614    AC_SUBST(AOT_RUN_FLAGS)
1615    # For llvmonlycheck + fullaotcheck
1616    AC_SUBST(INVARIANT_AOT_OPTIONS)
1619 AC_SUBST(TEST_PROFILE)
1621 if test "x$with_profile4_x" = "xdefault"; then
1622    with_profile4_x=$with_profile4_x_default
1624 if test "x$with_monodroid" = "xdefault"; then
1625    with_monodroid=$with_monodroid_default
1627 if test "x$with_monotouch" = "xdefault"; then
1628    with_monotouch=$with_monotouch_default
1630 if test "x$with_monotouch_watch" = "xdefault"; then
1631    with_monotouch_watch=$with_monotouch_watch_default
1633 if test "x$with_monotouch_tv" = "xdefault"; then
1634    with_monotouch_tv=$with_monotouch_tv_default
1636 if test "x$with_bitcode" = "xdefault"; then
1637    with_bitcode=$with_bitcode_default
1639 if test "x$with_xammac" = "xdefault"; then
1640    with_xammac=$with_xammac_default
1642 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1643    with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1645 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1646    with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1648 if test "x$with_testing_aot_full" = "xdefault"; then
1649    with_testing_aot_full=$with_testing_aot_full_default
1651 if test "x$with_winaot" = "xdefault"; then
1652    with_winaot=$with_winaot_default
1654 if test "x$with_testing_winaot_interp" = "xdefault"; then
1655    with_testing_winaot_interp=$with_testing_winaot_interp_default
1657 if test "x$with_orbis" = "xdefault"; then
1658    with_orbis=$with_orbis_default
1660 if test "x$with_unreal" = "xdefault"; then
1661    with_unreal=$with_unreal_default
1663 if test "x$with_wasm" = "xdefault"; then
1664    with_wasm=$with_wasm_default
1668 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1669 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1670 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1671 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1672 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1673 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1674 AM_CONDITIONAL(STATIC_ICU, test "x$with_static_icu" = "xyes")
1675 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1676 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1677 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1678 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1679 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1680 AM_CONDITIONAL(INSTALL_TESTING_WINAOT_INTERP, [test "x$with_testing_winaot_interp" != "xno"])
1681 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1682 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1683 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1685 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1686 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"])
1687 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"])
1688 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1690 default_profile=net_4_x
1691 if test -z "$INSTALL_MONODROID_TRUE"; then :
1692    default_profile=monodroid
1694 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1695    default_profile=monotouch
1697 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1698    default_profile=xammac
1700 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1701    default_profile=testing_aot_full_interp
1703 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1704    default_profile=testing_aot_hybrid
1706 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1707    default_profile=testing_aot_full
1709 if test -z "$INSTALL_WINAOT_TRUE"; then :
1710    default_profile=winaot
1712 if test -z "$INSTALL_TESTING_WINAOT_INTERP_TRUE"; then :
1713    default_profile=testing_winaot_interp
1715 if test -z "$INSTALL_ORBIS_TRUE"; then :
1716    default_profile=orbis
1718 if test -z "$INSTALL_UNREAL_TRUE"; then :
1719    default_profile=unreal
1721 if test -z "$INSTALL_WASM_TRUE"; then :
1722    default_profile=wasm
1724 if test -z "$INSTALL_4_x_TRUE"; then :
1725    default_profile=net_4_x
1727 DEFAULT_PROFILE=$default_profile
1728 AC_SUBST(DEFAULT_PROFILE)
1731 # End build profile configuration
1734 if test x$USE_NLS = xprofile_default; then
1736         AC_MSG_CHECKING([NLS used])
1738         # We make the default value for USE_NLS
1739         # "no" on OSX because it isn't available on most
1740         # default OSX installs. The most common configurations will
1741         # all disable it, so this saves us typing.
1742         if test x$host_darwin = xyes; then
1743                 USE_NLS=no;
1744         else
1745                 USE_NLS=yes;
1746         fi
1748         AC_SUBST([USE_NLS])
1749         AC_MSG_RESULT([$USE_NLS])
1752 AC_ARG_ENABLE(static-gcc-libs, [  --enable-static-gcc-libs      Statically link GCC support libs (for MinGW32)])
1753 if test "x$enable_static_gcc_libs" = "xyes"; then
1754         # llvm/build.mk doesn't use automake, so make a regular make variable for it.
1755         AC_SUBST(STATIC_GCC_LIBS,1)
1757 AM_CONDITIONAL(ENABLE_STATIC_GCC_LIBS, test "x$enable_static_gcc_libs" = "xyes")
1759 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
1760      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, dllmap, reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting, security, lldb, mdb, assert_messages, config, cfgdir_config, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_toggleref, sgen_debug_helpers, sgen_binary_protocol, sockets, gac, threads, processes.],
1762         for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1763                 eval "mono_feature_disable_$feature='yes'"
1764         done
1765         DISABLED_FEATURES=$enable_minimal
1766         disabled="Disabled:      $enable_minimal"
1767 ],[])
1769 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1771 if test "x$mono_feature_disable_aot" = "xyes"; then
1772         AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1773         enable_system_aot=no
1774         AC_MSG_NOTICE([Disabled AOT compiler])
1777 if test "x$mono_feature_disable_profiler" = "xyes"; then
1778         AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1779         AC_MSG_NOTICE([Disabled support for the profiler])
1781 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1783 if test "x$mono_feature_disable_decimal" = "xyes"; then
1784         AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1785         AC_MSG_NOTICE([Disabled support for decimal])
1788 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1789         AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1790         AC_MSG_NOTICE([Disabled support for P/Invoke])
1793 if test "x$mono_feature_disable_debug" = "xyes"; then
1794         AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1795         AC_MSG_NOTICE([Disabled support for runtime debugging])
1798 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1799         AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1800         mono_feature_disable_reflection_emit_save=yes
1801         AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1804 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1805         AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1806         AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1809 if test "x$mono_feature_disable_large_code" = "xyes"; then
1810         AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1811         AC_MSG_NOTICE([Disabled support for large assemblies])
1814 if test "x$mono_feature_disable_logging" = "xyes"; then
1815         AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1816         AC_MSG_NOTICE([Disabled support for logging])
1819 if test "x$mono_feature_disable_com" = "xyes"; then
1820         AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1821         AC_MSG_NOTICE([Disabled COM support])
1824 if test "x$mono_feature_disable_ssa" = "xyes"; then
1825         AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1826         AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1829 if test "x$mono_feature_disable_generics" = "xyes"; then
1830         AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1831         AC_MSG_NOTICE([Disabled Generics Support])
1834 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1835         AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1836         AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1839 if test "x$mono_feature_disable_portability" = "xyes"; then
1840         AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1841         AC_MSG_NOTICE([Disabled IO Portability layer])
1844 if test "x$mono_feature_disable_attach" = "xyes"; then
1845         AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1846         AC_MSG_NOTICE([Disabled agent attach])
1849 if test "x$mono_feature_disable_verifier" = "xyes"; then
1850         AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1851         AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1854 if test "x$mono_feature_disable_jit" = "xyes"; then
1855         AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1856         AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1859 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1861 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1862         AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1863         AC_MSG_NOTICE([Disabled the interpreter])
1866 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1868 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1869         AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1872 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1874 if test "x$mono_feature_disable_simd" = "xyes"; then
1875         AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1876         AC_MSG_NOTICE([Disabled SIMD support])
1879 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1880         AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1881         AC_MSG_NOTICE([Disabled Soft Debugger.])
1884 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1886 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1887         AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1888         AC_MSG_NOTICE([Disabled Performance Counters.])
1890 if test "x$mono_feature_disable_normalization" = "xyes"; then
1891         AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1892         AC_MSG_NOTICE([Disabled String normalization support.])
1895 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1896 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1897         AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1898         AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1901 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1902         AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1903         AC_MSG_NOTICE([Disabled Shared perfcounters.])
1906 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1907         AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1908         AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1911 if test "x$mono_feature_disable_remoting" = "xyes"; then
1912         AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1913         AC_MSG_NOTICE([Disabled remoting])
1916 if test "x$mono_feature_disable_security" = "xyes"; then
1917         AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1918         AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1921 if test "x$mono_feature_disable_lldb" = "xyes"; then
1922         AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1923         AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1926 if test "x$mono_feature_disable_mdb" = "xyes"; then
1927         AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1928         AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1931 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1932         AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1933         AC_MSG_NOTICE([Disabled assertion messages.])
1936 if test "x$mono_feature_disable_cfgdir_config" = "xyes"; then
1937         AC_DEFINE(DISABLE_CFGDIR_CONFIG, 1, [Disable config directories.])
1938         AC_MSG_NOTICE([Disabled config directories.])
1941 if test "x$mono_feature_disable_config" = "xyes"; then
1942         AC_DEFINE(DISABLE_CONFIG, 1, [Disable .config file support.])
1943         AC_MSG_NOTICE([Disabled .config file support.])
1946 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1947         AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1948         AC_MSG_NOTICE([Disabled runtime cleanup.])
1951 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1952         AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1953         AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1956 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1957         AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1958         AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1961 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1962         AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1963         AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1966 if test "x$mono_feature_disable_sgen_toggleref" = "xyes"; then
1967         AC_DEFINE(DISABLE_SGEN_TOGGLEREF, 1, [Disable toggleref support in SGEN.])
1968         AC_MSG_NOTICE([Disabled toggleref support in SGEN.])
1971 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1972         AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1973         AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1976 if test "x$mono_feature_disable_sgen_binary_protocol" = "xyes"; then
1977         AC_DEFINE(DISABLE_SGEN_BINARY_PROTOCOL, 1, [Disable binary protocol logging in SGEN.])
1978         AC_MSG_NOTICE([Disabled binary protocol logging in SGEN.])
1981 if test "x$mono_feature_disable_sockets" = "xyes"; then
1982         AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
1983         AC_MSG_NOTICE([Disabled sockets])
1986 if test "x$mono_feature_disable_gac" = "xyes"; then
1987         AC_DEFINE(DISABLE_GAC, 1, [Disable GAC])
1988         AC_MSG_NOTICE([Disabled GAC support])
1991 if test "x$mono_feature_disable_dllmap" = "xyes"; then
1992     AC_DEFINE(DISABLE_DLLMAP,1,[Disables use of DllMaps in MonoVM])
1993     AC_MSG_NOTICE([Disabled DllMap in the loader.])
1996 if test "x$mono_feature_disable_threads" = "xyes"; then
1997         AC_DEFINE(DISABLE_THREADS, 1, [Disable Threads])
1998         AC_MSG_NOTICE([Disabled threading support])
2001 if test "x$mono_feature_disable_processes" = "xyes"; then
2002         AC_DEFINE(DISABLE_PROCESSES, 1, [Disable process support])
2003         AC_MSG_NOTICE([Disabled process support])
2006 AC_ARG_ENABLE(executables, [  --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
2007 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
2009 has_extension_module=no
2010 AC_ARG_ENABLE(extension-module, [  --enable-extension-module=LIST enable the core-extensions from LIST],
2012         for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
2013                 if test x$extension = xdefault ; then
2014                         has_extension_module=yes;
2015                 fi
2016         done
2017         if test x$enable_extension_module = xyes; then
2018                 has_extension_module=yes;
2019         fi
2020 ], [])
2022 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
2024 if test x$has_extension_module != xno ; then
2025         AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
2026         AC_MSG_NOTICE([Enabling mono extension module.])
2029 # Deprecated
2030 AC_ARG_ENABLE(gsharedvt, [  --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
2032 AC_MSG_CHECKING(for visibility __attribute__)
2033 AC_COMPILE_IFELSE([
2034         AC_LANG_SOURCE([[
2035                 void __attribute__ ((visibility ("hidden"))) doit (void) {}
2036                 int main () { doit (); return 0; }
2037         ]])
2038 ], [
2039    have_visibility_hidden=yes
2040    AC_MSG_RESULT(yes)
2041 ], [
2042    have_visibility_hidden=no
2043    AC_MSG_RESULT(no)
2047 dnl Boehm GC configuration
2050 AC_ARG_WITH(libgc,   [  --with-libgc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
2052 AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
2053 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
2055 if test "x$support_boehm" = "xyes"; then
2057         AC_ARG_ENABLE(parallel-mark, [  --enable-parallel-mark     Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
2058         if test x$enable_parallel_mark = xyes; then
2059                 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
2060         fi
2062         gc_msg=""
2063         LIBGC_CPPFLAGS=
2064         LIBGC_LIBS=
2065         LIBGC_STATIC_LIBS=
2066         case "x$libgc" in
2067                 xincluded)
2068                         LIBGC_CPPFLAGS='-I$(top_srcdir)/external/bdwgc/include -I$(top_srcdir)/external/bdwgc/libatomic_ops/src'
2069                         LIBGC_LIBS='$(top_builddir)/external/bdwgc/libgc.la'
2070                         LIBGC_STATIC_LIBS='$(top_builddir)/external/bdwgc/libgc-static.la'
2072                         BOEHM_DEFINES="-DHAVE_BOEHM_GC -DGC_THREADS"
2074                         if test x$target_win32 = xyes; then
2075                                 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
2076                                 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
2077                         fi
2079                         gc_msg="Included Boehm GC with typed GC"
2080                         if test x$enable_parallel_mark = xyes; then
2081                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
2082                                 gc_msg="$gc_msg and parallel mark"
2083                         else
2084                                 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
2085                         fi
2086                         ;;
2088                 xboehm|xbohem|xyes)
2089                         AC_MSG_WARN("External Boehm is no longer supported")
2090                         ;;
2092                 xsgen)
2093                         AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
2094                         ;;
2096                 xnone)
2097                         AC_MSG_WARN("Compiling mono without GC.")
2098                         AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
2099                         AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
2100                         gc_msg="none"
2101                         ;;
2102                 *)
2103                         AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
2104                         ;;
2105         esac
2107         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])
2108         if test "x$large_heap" = "xyes"; then
2109            CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
2110         fi
2112         AC_SUBST(LIBGC_CPPFLAGS)
2113         AC_SUBST(LIBGC_LIBS)
2114         AC_SUBST(LIBGC_STATIC_LIBS)
2115         AC_SUBST(BOEHM_DEFINES)
2118 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
2121 dnl End of Boehm GC Configuration
2124 dnl *************************************
2125 dnl *** Checks for zero length arrays ***
2126 dnl *************************************
2127 AC_MSG_CHECKING(whether $CC supports zero length arrays)
2128 AC_TRY_COMPILE([
2129         struct s {
2130                 int  length;
2131                 char data [0];
2132         };
2133 ], [], [
2134         AC_MSG_RESULT(yes)
2135         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
2136 ], [
2137         AC_MSG_RESULT(no)
2138         AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
2141 dnl ***********************************
2142 dnl *** Checks for signals
2143 dnl ***********************************
2144 AC_CHECK_HEADERS(signal.h)
2145 AC_CHECK_FUNCS(sigaction)
2146 AC_CHECK_FUNCS(kill)
2147 AC_CHECK_FUNCS(signal)
2149 # signal() is declared inline in Android headers
2150 # so we need to workaround it by overriding the check.
2151 if test x$platform_android = xyes; then
2152         AC_DEFINE(HAVE_SIGNAL,1)
2155 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
2156 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
2158 if test x$host_win32 = xno; then
2159         dnl *************************************
2160         dnl *** Checks for time capabilities ***
2161         dnl *************************************
2163         AC_MSG_CHECKING(for CLOCK_MONOTONIC)
2164         AC_TRY_COMPILE([#include <time.h>], [
2165                 const int foo = CLOCK_MONOTONIC;
2166         ],[
2167                 AC_MSG_RESULT(yes)
2168                 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
2169         ], [
2170                 AC_MSG_RESULT(no)
2171         ])
2173         AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
2174         AC_TRY_COMPILE([#include <time.h>], [
2175                 const int foo = CLOCK_MONOTONIC_COARSE;
2176         ],[
2177                 AC_MSG_RESULT(yes)
2178                 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
2179         ], [
2180                 AC_MSG_RESULT(no)
2181         ])
2183         AC_MSG_CHECKING(for CLOCK_REALTIME)
2184         AC_TRY_COMPILE([#include <time.h>], [
2185                 const int foo = CLOCK_REALTIME;
2186         ],[
2187                 AC_MSG_RESULT(yes)
2188                 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
2189         ], [
2190                 AC_MSG_RESULT(no)
2191         ])
2193         AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
2194         AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
2195         AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
2196         AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
2197         AC_CHECK_FUNC(futimes,            [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
2198         AC_CHECK_FUNC(futimens,           [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
2200         AC_CHECK_TYPES([clockid_t], [AC_DEFINE(HAVE_CLOCKID_T)], [],
2201                 [#include <sys/types.h>])
2203         dnl hires monotonic clock support
2205         # Check for clock_gettime
2206         if test x$target_osx = xyes; then
2207                 # On OSX, clock_gettime is only really available on 10.12 or later
2208                 # However, it exists as a weak symbol on earlier versions, so hard-code a version check
2209                 AC_MONO_APPLE_AVAILABLE(clock_gettime_available, [whether clock_gettime is available on OSX],
2210                 [(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
2211                 if test x$clock_gettime_available = xyes; then
2212                         AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [clock_gettime])
2213                 fi
2214         else
2215                 AC_CHECK_FUNC(clock_gettime, [
2216                         AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [clock_gettime])
2217                 ], [
2218                         # Old glibc (< 2.17) has clock_gettime in librt, so check there too
2219                         AC_CHECK_LIB(rt, clock_gettime, [
2220                                 AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [clock_gettime])
2221                                 LIBS="$LIBS -lrt"
2222                         ])
2223                 ])
2224         fi
2226         AC_CHECK_FUNCS(clock_nanosleep)
2228         dnl dynamic loader support
2229         AC_CHECK_FUNC(dlopen, DL_LIB="",
2230                 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
2231         )
2232         if test x$dl_support = xno; then
2233                 AC_MSG_WARN([No dynamic loading support available])
2234         else
2235                 LIBS="$LIBS $DL_LIB"
2236                 dnl from glib's configure.ac
2237                 if test "x$cross_compiling" = "xyes"; then
2238                    AC_MSG_RESULT(cross compiling, assuming no)
2239                    mono_cv_uscore=no
2240                 else
2241                         AC_CACHE_CHECK([for preceeding underscore in symbols],
2242                           mono_cv_uscore,[
2243                           AC_TRY_RUN([#include <dlfcn.h>
2244                           int mono_underscore_test (void) { return 42; }
2245                           int main() {
2246                             void *f1 = (void*)0, *f2 = (void*)0, *handle;
2247                             handle = dlopen ((void*)0, 0);
2248                             if (handle) {
2249                               f1 = dlsym (handle, "mono_underscore_test");
2250                               f2 = dlsym (handle, "_mono_underscore_test");
2251                             } return (!f2 || f1);
2252                           }],
2253                                 [mono_cv_uscore=yes],
2254                                 [mono_cv_uscore=no],
2255                           [])
2256                   ])
2257                 fi
2258                 if test "x$mono_cv_uscore" = "xyes"; then
2259                         AC_DEFINE(MONO_DL_NEED_USCORE, 1, [Does dlsym require leading underscore.])
2260                 fi
2261                 AC_CHECK_FUNC(dlerror)
2262         fi
2264         dnl ******************************************************************
2265         dnl *** Checks for the IKVM JNI interface library                  ***
2266         dnl ******************************************************************
2267         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])
2269         if test x$with_ikvm_native = xyes; then
2270                 jdk_headers_found="IKVM Native"
2271         fi
2273         AC_CHECK_HEADERS(execinfo.h)
2275         AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2277         AC_CHECK_FUNCS(getgrgid_r)
2278         AC_CHECK_FUNCS(getgrnam_r)
2279         AC_CHECK_FUNCS(getresuid)
2280         AC_CHECK_FUNCS(setresuid)
2281         AC_CHECK_FUNCS(kqueue)
2282         # IBM provides a compatibility library for offering this function.
2283         # BSDs and others, have execinfo in base or packages.
2284         AC_SEARCH_LIBS(backtrace_symbols, execinfo util)
2285         # Two-step so it sets it in config.h
2286         AC_CHECK_FUNCS(backtrace_symbols)
2287         AC_CHECK_FUNCS(mkstemp)
2288         AC_CHECK_FUNCS(mmap)
2289         AC_CHECK_FUNCS(getrusage)
2290         AC_CHECK_FUNCS(getpriority)
2291         AC_CHECK_FUNCS(setpriority)
2292         AC_CHECK_FUNCS(dl_iterate_phdr)
2293         AC_CHECK_FUNCS(dladdr)
2294         AC_CHECK_FUNCS(sysconf)
2295         AC_CHECK_FUNCS(getrlimit)
2296         AC_CHECK_FUNCS(prctl)
2297         AC_CHECK_FUNCS(arc4random)
2298         AC_CHECK_FUNCS(nl_langinfo)
2300         AC_CHECK_FUNCS(sched_getaffinity)
2301         AC_CHECK_FUNCS(sched_setaffinity)
2302         AC_CHECK_FUNCS(sched_getcpu)
2304         if test x$platform_android != xyes; then
2305                 AC_CHECK_FUNCS(getpwnam_r)
2306                 AC_CHECK_FUNCS(getpwuid_r)
2307         fi
2309         AC_CHECK_FUNCS(readlink)
2310         AC_CHECK_FUNCS(chmod)
2311         AC_CHECK_FUNCS(lstat)
2312         AC_CHECK_FUNCS(getdtablesize)
2314         AC_CHECK_FUNCS(ftruncate)
2315         AC_CHECK_FUNCS(msync)
2317         AC_CHECK_FUNCS(gethostname getpeername)
2318         AC_CHECK_FUNCS(utime utimes)
2320         AC_CHECK_FUNCS(openlog closelog)
2321         AC_CHECK_FUNCS(atexit)
2322         AC_CHECK_FUNCS(popen)
2324         AC_FUNC_STRERROR_R()
2326         dnl ****************************************************************
2327         dnl *** Check for sched_setaffinity from glibc versions before   ***
2328         dnl *** 2.3.4. The older versions of the function only take 2    ***
2329         dnl *** parameters, not 3.                                       ***
2330         dnl ***                                                          ***
2331         dnl *** Because the interface change was not made in a minor     ***
2332         dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros    ***
2333         dnl *** won't always indicate the interface sched_affinity has.  ***
2334         dnl ****************************************************************
2335         AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2336         AC_TRY_COMPILE([#include <sched.h>], [
2337             int mask = 1; 
2338             sched_setaffinity(0, &mask);
2339         ], [
2340                 # Yes, we have it...
2341                 AC_MSG_RESULT(yes)
2342                 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2343         ], [
2344                 # We have the new, three-parameter version
2345                 AC_MSG_RESULT(no)
2346         ])
2347         AC_TRY_COMPILE([#include <sched.h>], [
2348              CPU_COUNT((void *) 0);
2349         ], [
2350                 AC_MSG_RESULT(yes)
2351                 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2352         ], [
2353                 # We have the new, three-parameter version
2354                 AC_MSG_RESULT(no)
2355         ])
2357         dnl ******************************************************************
2358         dnl *** Check for large file support                               ***
2359         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2360         dnl ******************************************************************
2361         
2362         # Check that off_t can represent 2**63 - 1 correctly, working around
2363         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
2364         # CPPFLAGS and sets $large_offt to yes if the test succeeds
2365         large_offt=no
2366         AC_DEFUN([LARGE_FILES], [
2367                 large_CPPFLAGS=$CPPFLAGS
2368                 CPPFLAGS="$CPPFLAGS $1"
2369                 AC_TRY_COMPILE([
2370                         #include <sys/types.h>
2371                         #include <limits.h>
2372                 ], [
2373                         /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2374                         #define COMPILE_TIME_ASSERT(pred) \
2375                                 switch(0){case 0:case pred:;}
2376                         COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2377                 ], [
2378                         AC_MSG_RESULT(ok)
2379                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2380                         large_CPPFLAGS="$large_CPPFLAGS $1"
2381                         large_offt=yes
2382                 ], [
2383                         AC_MSG_RESULT(no)
2384                 ])
2385                 CPPFLAGS=$large_CPPFLAGS
2386         ])
2388         AC_MSG_CHECKING(if off_t is 64 bits wide)
2389         LARGE_FILES("")
2390         if test $large_offt = no; then
2391                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2392                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2393         fi
2394         if test $large_offt = no; then
2395                 AC_MSG_WARN([No 64 bit file size support available])
2396         fi
2397         
2398         dnl *****************************
2399         dnl *** Checks for libsocket  ***
2400         dnl *****************************
2401         AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2403         dnl *****************************
2404         dnl *** Checks for IPPROTO_IP ***
2405         dnl *****************************
2406         AC_MSG_CHECKING(for IPPROTO_IP)
2407         AC_TRY_COMPILE([#include <netinet/in.h>], [
2408                 int level = IPPROTO_IP;
2409         ], [
2410                 # Yes, we have it...
2411                 AC_MSG_RESULT(yes)
2412                 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2413         ], [
2414                 # We'll have to use getprotobyname
2415                 AC_MSG_RESULT(no)
2416         ])
2418         dnl *******************************
2419         dnl *** Checks for IPPROTO_IPV6 ***
2420         dnl *******************************
2421         AC_MSG_CHECKING(for IPPROTO_IPV6)
2422         AC_TRY_COMPILE([#include <netinet/in.h>], [
2423                 int level = IPPROTO_IPV6;
2424         ], [
2425                 # Yes, we have it...
2426                 AC_MSG_RESULT(yes)
2427                 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2428         ], [
2429                 # We'll have to use getprotobyname
2430                 AC_MSG_RESULT(no)
2431         ])
2433         dnl ******************************
2434         dnl *** Checks for IPPROTO_TCP ***
2435         dnl ******************************
2436         AC_MSG_CHECKING(for IPPROTO_TCP)
2437         AC_TRY_COMPILE([#include <netinet/in.h>], [
2438                 int level = IPPROTO_TCP;
2439         ], [
2440                 # Yes, we have it...
2441                 AC_MSG_RESULT(yes)
2442                 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2443         ], [
2444                 # We'll have to use getprotobyname
2445                 AC_MSG_RESULT(no)
2446         ])
2448         dnl *****************************
2449         dnl *** Checks for SOL_IP     ***
2450         dnl *****************************
2451         AC_MSG_CHECKING(for SOL_IP)
2452         AC_TRY_COMPILE([#include <netdb.h>], [
2453                 int level = SOL_IP;
2454         ], [
2455                 # Yes, we have it...
2456                 AC_MSG_RESULT(yes)
2457                 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2458         ], [
2459                 # We'll have to use getprotobyname
2460                 AC_MSG_RESULT(no)
2461         ])
2463         dnl *****************************
2464         dnl *** Checks for SOL_IPV6     ***
2465         dnl *****************************
2466         AC_MSG_CHECKING(for SOL_IPV6)
2467         AC_TRY_COMPILE([#include <netdb.h>], [
2468                 int level = SOL_IPV6;
2469         ], [
2470                 # Yes, we have it...
2471                 AC_MSG_RESULT(yes)
2472                 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2473         ], [
2474                 # We'll have to use getprotobyname
2475                 AC_MSG_RESULT(no)
2476         ])
2478         dnl *****************************
2479         dnl *** Checks for SOL_TCP    ***
2480         dnl *****************************
2481         AC_MSG_CHECKING(for SOL_TCP)
2482         AC_TRY_COMPILE([#include <netdb.h>], [
2483                 int level = SOL_TCP;
2484         ], [
2485                 # Yes, we have it...
2486                 AC_MSG_RESULT(yes)
2487                 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2488         ], [
2489                 # We'll have to use getprotobyname
2490                 AC_MSG_RESULT(no)
2491         ])
2493         dnl *****************************
2494         dnl *** Checks for IP_PKTINFO ***
2495         dnl *****************************
2496         AC_MSG_CHECKING(for IP_PKTINFO)
2497         AC_TRY_COMPILE([#include <linux/in.h>], [
2498                 int level = IP_PKTINFO;
2499         ], [
2500                 # Yes, we have it...
2501                 AC_MSG_RESULT(yes)
2502                 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2503         ], [
2504                 AC_MSG_RESULT(no)
2505         ])
2507         dnl *****************************
2508         dnl *** Checks for IPV6_PKTINFO ***
2509         dnl *****************************
2510         AC_MSG_CHECKING(for IPV6_PKTINFO)
2511         AC_TRY_COMPILE([#include <netdb.h>], [
2512                 int level = IPV6_PKTINFO;
2513         ], [
2514                 # Yes, we have it...
2515                 AC_MSG_RESULT(yes)
2516                 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2517         ], [
2518                 AC_MSG_RESULT(no)
2519         ])
2521         dnl **********************************
2522         dnl *** Checks for IP_DONTFRAG     ***
2523         dnl **********************************
2524         AC_MSG_CHECKING(for IP_DONTFRAG)
2525         AC_TRY_COMPILE([#include <netinet/in.h>], [
2526                 int level = IP_DONTFRAG;
2527         ], [
2528                 # Yes, we have it...
2529                 AC_MSG_RESULT(yes)
2530                 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2531         ], [
2532                 AC_MSG_RESULT(no)
2533         ])
2535         dnl **********************************
2536         dnl *** Checks for IP_DONTFRAGMENT ***
2537         dnl **********************************
2538         AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2539         AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2540                 int level = IP_DONTFRAGMENT;
2541         ], [
2542                 # Yes, we have it...
2543                 AC_MSG_RESULT(yes)
2544                 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2545         ], [
2546                 AC_MSG_RESULT(no)
2547         ])
2549         dnl **********************************
2550         dnl *** Checks for IP_MTU_DISCOVER ***
2551         dnl **********************************
2552         AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2553         AC_TRY_COMPILE([#include <linux/in.h>], [
2554                 int level = IP_MTU_DISCOVER;
2555         ], [
2556                 # Yes, we have it...
2557                 AC_MSG_RESULT(yes)
2558                 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2559         ], [
2560                 AC_MSG_RESULT(no)
2561         ])
2563         dnl **********************************
2564         dnl *** Checks for  IP_PMTUDISC_DO ***
2565         dnl **********************************
2566         AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2567         AC_TRY_COMPILE([#include <linux/in.h>], [
2568                 int level = IP_PMTUDISC_DO;
2569         ], [
2570                 # Yes, we have it...
2571                 AC_MSG_RESULT(yes)
2572                 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2573         ], [
2574                 AC_MSG_RESULT(no)
2575         ])
2577         dnl *********************************
2578         dnl *** Check for struct ip_mreqn ***
2579         dnl *********************************
2580         AC_MSG_CHECKING(for struct ip_mreqn)
2581         AC_TRY_COMPILE([#include <netinet/in.h>], [
2582                 struct ip_mreqn mreq;
2583                 mreq.imr_address.s_addr = 0;
2584         ], [
2585                 # Yes, we have it...
2586                 AC_MSG_RESULT(yes)
2587                 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2588         ], [
2589                 # We'll just have to try and use struct ip_mreq
2590                 AC_MSG_RESULT(no)
2591                 AC_MSG_CHECKING(for struct ip_mreq)
2592                 AC_TRY_COMPILE([#include <netinet/in.h>], [
2593                         struct ip_mreq mreq;
2594                         mreq.imr_interface.s_addr = 0;
2595                 ], [
2596                         # Yes, we have it...
2597                         AC_MSG_RESULT(yes)
2598                         AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2599                 ], [
2600                         # No multicast support
2601                         AC_MSG_RESULT(no)
2602                 ])
2603         ])
2604         
2605         dnl **********************************
2606         dnl *** Check for getaddrinfo ***
2607         dnl **********************************
2608         AC_MSG_CHECKING(for getaddrinfo)
2609                 AC_TRY_LINK([
2610                 #include <stdio.h>
2611                 #include <netdb.h>
2612         ], [
2613                 getaddrinfo(NULL,NULL,NULL,NULL);
2614         ], [
2615                 # Yes, we have it...
2616                 AC_MSG_RESULT(yes)
2617                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2618         ], [
2619                 AC_MSG_RESULT(no)
2620         ])
2622         dnl **********************************
2623         dnl *** Check for gethostbyname2_r ***
2624         dnl **********************************
2625         AC_MSG_CHECKING(for gethostbyname2_r)
2626                 AC_TRY_LINK([
2627                 #include <stdio.h>
2628                 #include <netdb.h>
2629         ], [
2631                 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2632         ], [
2633                 # Yes, we have it...
2634                 AC_MSG_RESULT(yes)
2635                 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2636         ], [
2637                 AC_MSG_RESULT(no)
2638         ])
2640         dnl **********************************
2641         dnl *** Check for gethostbyname2 ***
2642         dnl **********************************
2643         AC_MSG_CHECKING(for gethostbyname2)
2644                 AC_TRY_LINK([
2645                 #include <stdio.h>
2646                 #include <netdb.h>
2647         ], [
2648                 gethostbyname2(NULL,0);
2649         ], [
2650                 # Yes, we have it...
2651                 AC_MSG_RESULT(yes)
2652                 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2653         ], [
2654                 AC_MSG_RESULT(no)
2655         ])
2657         dnl **********************************
2658         dnl *** Check for gethostbyname ***
2659         dnl **********************************
2660         AC_MSG_CHECKING(for gethostbyname)
2661                 AC_TRY_LINK([
2662                 #include <stdio.h>
2663                 #include <netdb.h>
2664         ], [
2665                 gethostbyname(NULL);
2666         ], [
2667                 # Yes, we have it...
2668                 AC_MSG_RESULT(yes)
2669                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2670         ], [
2671                 AC_MSG_RESULT(no)
2672         ])
2674         dnl **********************************
2675         dnl *** Check for getprotobyname ***
2676         dnl **********************************
2677         AC_MSG_CHECKING(for getprotobyname)
2678                 AC_TRY_LINK([
2679                 #include <stdio.h>
2680                 #include <netdb.h>
2681         ], [
2682                 getprotobyname(NULL);
2683         ], [
2684                 # Yes, we have it...
2685                 AC_MSG_RESULT(yes)
2686                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2687         ], [
2688                 AC_MSG_RESULT(no)
2689         ])
2691         dnl **********************************
2692         dnl *** Check for getprotobyname_r ***
2693         dnl **********************************
2694         AC_MSG_CHECKING(for getprotobyname_r)
2695                 AC_TRY_LINK([
2696                 #include <stdio.h>
2697                 #include <netdb.h>
2698         ], [
2699                 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2700         ], [
2701                 # Yes, we have it...
2702                 AC_MSG_RESULT(yes)
2703                 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2704         ], [
2705                 AC_MSG_RESULT(no)
2706         ])
2708         dnl **********************************
2709         dnl *** Check for getnameinfo ***
2710         dnl **********************************
2711         AC_MSG_CHECKING(for getnameinfo)
2712                 AC_TRY_LINK([
2713                 #include <stdio.h>
2714                 #include <netdb.h>
2715         ], [
2716                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2717         ], [
2718                 # Yes, we have it...
2719                 AC_MSG_RESULT(yes)
2720                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2721         ], [
2722                 AC_MSG_RESULT(no)
2723         ])
2726         dnl **********************************
2727         dnl *** Check for inet_ntop ***
2728         dnl **********************************
2729         AC_MSG_CHECKING(for inet_ntop)
2730                 AC_TRY_LINK([
2731                 #include <stdio.h>
2732                 #include <arpa/inet.h>
2733         ], [
2734                 inet_ntop (0, NULL, NULL, 0);
2735         ], [
2736                 # Yes, we have it...
2737                 AC_MSG_RESULT(yes)
2738                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2739         ], [
2740                 AC_MSG_RESULT(no)
2741         ])
2743         dnl *****************************
2744         dnl *** Checks for libnsl     ***
2745         dnl *****************************
2746         AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2748         AC_CHECK_FUNCS(inet_pton inet_aton)
2750         dnl *****************************
2751         dnl *** Checks for libxnet    ***
2752         dnl *****************************
2753         case "${host}" in
2754                 *solaris*)
2755                         AC_MSG_CHECKING(for Solaris XPG4 support)
2756                         if test -f /usr/lib/libxnet.so; then
2757                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2758                                 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2759                                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2760                                 LIBS="$LIBS -lxnet"
2761                                 AC_MSG_RESULT(yes)
2762                         else
2763                                 AC_MSG_RESULT(no)
2764                         fi
2766                         if test "$GCC" = "yes"; then
2767                                 CFLAGS="$CFLAGS -Wno-char-subscripts"
2768                         fi
2769                 ;;
2770         esac
2772         dnl *****************************
2773         dnl *** Checks for libpthread ***
2774         dnl *****************************
2775 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2776 # and libpthread does not exist
2778         case "${host}" in
2779                 *-*-*haiku*)
2780                         dnl Haiku has pthread in libroot (libc equiv)
2781                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2782                 ;;
2783                 *-*-*freebsd*)
2784                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2785                 ;;
2786                 *-*-*openbsd*)
2787                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2788                 ;;
2789                 *)
2790                         AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2791                 ;;
2792         esac
2793         AC_CHECK_HEADERS(pthread.h)
2794         AC_CHECK_HEADERS(pthread_np.h)
2795         AC_CHECK_FUNCS(pthread_mutex_timedlock)
2796         AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2797         AC_CHECK_FUNCS(pthread_kill pthread_jit_write_protect_np)
2798         AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2799         AC_TRY_COMPILE([ #include <pthread.h>], [
2800                 pthread_mutexattr_t attr;
2801                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2802         ], [
2803                 AC_MSG_RESULT(ok)
2804         ], [
2805                 AC_MSG_RESULT(no)
2806                 AC_ERROR(Posix system lacks support for recursive mutexes)
2807         ])
2808         AC_CHECK_FUNCS(pthread_attr_setstacksize)
2809         AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2810         AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2811         dnl check that pthread_mutexattr_setprotocol is declared
2812         AC_CHECK_DECLS([pthread_mutexattr_setprotocol], [], [], [[#include <pthread.h>]])
2813         AC_CHECK_FUNCS(mincore mlock munlock)
2815         dnl ***********************************
2816         dnl *** Checks for working __thread ***
2817         dnl ***********************************
2818         AC_MSG_CHECKING(for working __thread)
2819         if test "x$with_tls" != "x__thread"; then
2820                 AC_MSG_RESULT(disabled)
2821         elif test "x$cross_compiling" = "xyes"; then
2822                 AC_MSG_RESULT(cross compiling, assuming yes)
2823         else
2824                 AC_TRY_RUN([
2825                         #if defined(__APPLE__) && defined(__clang__)
2826                         #error "__thread does not currently work with clang on Mac OS X"
2827                         #endif
2828                         
2829                         #include <unistd.h>
2830                         #include <pthread.h>
2831                         __thread int i;
2832                         static int res1, res2;
2834                         void thread_main (void *arg)
2835                         {
2836                                 i = arg;
2837                                 sleep (1);
2838                                 if (arg == 1)
2839                                         res1 = (i == arg);
2840                                 else
2841                                         res2 = (i == arg);
2842                         }
2844                         int main () {
2845                                 pthread_t t1, t2;
2847                                 i = 5;
2849                                 pthread_create (&t1, NULL, thread_main, 1);
2850                                 pthread_create (&t2, NULL, thread_main, 2);
2852                                 pthread_join (t1, NULL);
2853                                 pthread_join (t2, NULL);
2855                                 return !(res1 + res2 == 2);
2856                         }
2857                 ], [
2858                                 AC_MSG_RESULT(yes)
2859                 ], [
2860                                 AC_MSG_RESULT(no)
2861                                 with_tls=pthread
2862                 ])
2863         fi
2865         dnl **************************************
2866         dnl *** Checks for working sigaltstack ***
2867         dnl **************************************
2868         AC_MSG_CHECKING(for working sigaltstack)
2869         if test "x$with_sigaltstack" != "xyes"; then
2870                 AC_MSG_RESULT(disabled)
2871         elif test "x$cross_compiling" = "xyes"; then
2872                 AC_MSG_RESULT(cross compiling, assuming no)
2873                 with_sigaltstack=no
2874         else
2875                 AC_TRY_RUN([
2876                         #include <stdio.h>
2877                         #include <stdlib.h>
2878                         #include <unistd.h>
2879                         #include <signal.h>
2880                         #include <pthread.h>
2881                         #include <sys/wait.h>
2882                         #if defined(__FreeBSD__) || defined(__NetBSD__)
2883                         #define SA_STACK SA_ONSTACK
2884                         #endif
2885                         static void
2886                         sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2887                         {
2888                                 exit (0);
2889                         }
2891                         volatile char*__ptr = NULL;
2892                         static void *
2893                         loop (void *ignored)
2894                         {
2895                                 *__ptr = 0;
2896                                 return NULL;
2897                         }
2899                         static void
2900                         child ()
2901                         {
2902                                 struct sigaction sa;
2903                                 stack_t sas;
2904                                 pthread_t id;
2905                                 pthread_attr_t attr;
2907                                 sa.sa_sigaction = sigsegv_signal_handler;
2908                                 sigemptyset (&sa.sa_mask);
2909                                 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2910                                 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2911                                         perror ("sigaction");
2912                                         return;
2913                                 }
2915                                 /* x86 darwin deliver segfaults using SIGBUS */
2916                                 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2917                                         perror ("sigaction");
2918                                         return;
2919                                 }
2920                                 sas.ss_sp = malloc (SIGSTKSZ);
2921                                 sas.ss_size = SIGSTKSZ;
2922                                 sas.ss_flags = 0;
2923                                 if (sigaltstack (&sas, NULL) == -1) {
2924                                         perror ("sigaltstack");
2925                                         return;
2926                                 }
2928                                 pthread_attr_init (&attr);
2929                                 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2930                                         printf ("pthread_create\n");
2931                                         return;
2932                                 }
2934                                 sleep (100);
2935                         }
2937                         int
2938                         main ()
2939                         {
2940                                 pid_t son;
2941                                 int status;
2942                                 int i;
2944                                 son = fork ();
2945                                 if (son == -1) {
2946                                         return 1;
2947                                 }
2949                                 if (son == 0) {
2950                                         child ();
2951                                         return 0;
2952                                 }
2954                                 for (i = 0; i < 300; ++i) {
2955                                         waitpid (son, &status, WNOHANG);
2956                                         if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2957                                                 return 0;
2958                                         usleep (10000);
2959                                 }
2961                                 kill (son, SIGKILL);
2962                                 return 1;
2963                         }
2965                 ], [
2966                                 AC_MSG_RESULT(yes)
2967                                 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2968                 ], [
2969                                 with_sigaltstack=no
2970                                 AC_MSG_RESULT(no)
2971                 ])
2972         fi
2974         dnl ********************************
2975         dnl *** Checks for sys_signame ***
2976         dnl ********************************
2977         AC_MSG_CHECKING(for sys_signame)
2978                 AC_TRY_LINK([
2979                 #include <signal.h>
2980         ], [
2981                 const char *signame = sys_signame[0];
2982         ], [
2983                 # Yes, we have it...
2984                 AC_MSG_RESULT(yes)
2985                 AC_DEFINE(HAVE_SYSSIGNAME, 1, [Have sys_signame])
2986         ], [
2987                 AC_MSG_RESULT(no)
2988         ])
2991         dnl ********************************
2992         dnl *** Checks for semaphore lib ***
2993         dnl ********************************
2994         # 'Real Time' functions on Solaris
2995         # posix4 on Solaris 2.6
2996         # pthread (first!) on Linux
2997         AC_SEARCH_LIBS(sem_init, pthread rt posix4) 
2999         AC_SEARCH_LIBS(shm_open, pthread rt posix4) 
3000         AC_CHECK_FUNCS(shm_open)
3002         dnl ********************************
3003         dnl *** Checks for timezone stuff **
3004         dnl ********************************
3005         AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
3006                 AC_TRY_COMPILE([
3007                         #include <time.h>
3008                         ], [
3009                         struct tm tm;
3010                         tm.tm_gmtoff = 1;
3011                         ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
3012         if test $ac_cv_struct_tm_gmtoff = yes; then
3013                 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
3014         else
3015                 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
3016                         AC_TRY_COMPILE([
3017                                 #include <time.h>
3018                         ], [
3019                                 timezone = 1;
3020                         ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
3021                 if test $ac_cv_var_timezone = yes; then
3022                         AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
3023                 else
3024                         AC_ERROR(unable to find a way to determine timezone)
3025                 fi
3026         fi
3028         dnl *********************************
3029         dnl *** Checks for math functions ***
3030         dnl *********************************
3031         AC_SEARCH_LIBS(sqrtf, m)
3033         dnl ****************************************************************
3034         dnl *** Checks for working poll() (macosx defines it but doesn't ***
3035         dnl *** have it in the library (duh))                            ***
3036         dnl ****************************************************************
3037         AC_CHECK_FUNCS(poll)
3039         dnl **********************************
3040         dnl *** epoll                      ***
3041         dnl **********************************
3042         AC_CHECK_HEADERS(sys/epoll.h)
3043         haveepoll=no
3044         AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
3045         if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
3046                 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
3047         fi
3049         havekqueue=no
3051         AC_CHECK_HEADERS(sys/event.h)
3052         AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
3054         dnl **************************************
3055         dnl * Darwin has a race that prevents us from using reliably:
3056         dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
3057         dnl * Since kqueue is mostly used for scaling large web servers, 
3058         dnl * and very few folks run Mono on large web servers on OSX, falling
3059         dnl * back 
3060         dnl **************************************
3061         if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
3062                 if test "x$host_darwin" = "xno"; then
3063                         AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
3064                 fi
3065         fi
3067         dnl ******************************
3068         dnl *** Checks for SIOCGIFCONF ***
3069         dnl ******************************
3070         AC_CHECK_HEADERS(sys/ioctl.h)
3071         AC_CHECK_HEADERS(net/if.h, [], [],
3072            [
3073            #ifdef HAVE_SYS_TYPES_H
3074            # include <sys/types.h>
3075            #endif
3076            #ifdef HAVE_SYS_SOCKET_H
3077            # include <sys/socket.h>
3078            #endif
3079            ])
3080         AC_MSG_CHECKING(for ifreq)
3081         AC_TRY_COMPILE([
3082                 #include <stdio.h>
3083                 #include <sys/ioctl.h>
3084                 #include <net/if.h>
3085                 ], [
3086                 struct ifconf ifc;
3087                 struct ifreq *ifr;
3088                 void *x;
3089                 ifc.ifc_len = 0;
3090                 ifc.ifc_buf = NULL;
3091                 x = (void *) &ifr->ifr_addr;
3092                 ],[
3093                         AC_MSG_RESULT(yes)
3094                         AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
3095                 ], [
3096                         AC_MSG_RESULT(no)
3097                 ])
3098         dnl **********************************
3099         dnl ***     Checks for sin_len     ***
3100         dnl **********************************
3101         AC_MSG_CHECKING(for sockaddr_in.sin_len)
3102         AC_TRY_COMPILE([
3103                 #include <netinet/in.h>
3104                 ], [
3105                 struct sockaddr_in saddr;
3106                 saddr.sin_len = sizeof (saddr);
3107                 ],[
3108                         AC_MSG_RESULT(yes)
3109                         AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
3110                 ], [
3111                         AC_MSG_RESULT(no)
3112                 ])      
3113         dnl **********************************
3114         dnl ***    Checks for sin6_len     ***
3115         dnl **********************************
3116         AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
3117         AC_TRY_COMPILE([
3118                 #include <netinet/in.h>
3119                 ], [
3120                 struct sockaddr_in6 saddr6;
3121                 saddr6.sin6_len = sizeof (saddr6);
3122                 ],[
3123                         AC_MSG_RESULT(yes)
3124                         AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
3125                 ], [
3126                         AC_MSG_RESULT(no)
3127                 ])
3128         dnl **********************************
3129         dnl *** Check for getifaddrs       ***
3130         dnl **********************************
3131         AC_MSG_CHECKING(for getifaddrs)
3132                 AC_TRY_LINK([
3133                 #include <stdio.h>
3134                 #include <sys/types.h>
3135                 #include <sys/socket.h>
3136                 #ifdef HAVE_NET_IF_H
3137                 #include <net/if.h>
3138                 #endif
3139                 #include <ifaddrs.h>
3140         ], [
3141                 getifaddrs(NULL);
3142         ], [
3143                 # Yes, we have it...
3144                 AC_MSG_RESULT(yes)
3145                 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
3146         ], [
3147                 AC_MSG_RESULT(no)
3148         ])
3149         dnl **********************************
3150         dnl *** Check for if_nametoindex   ***
3151         dnl **********************************
3152         AC_MSG_CHECKING(for if_nametoindex)
3153                 AC_TRY_LINK([
3154                 #include <stdio.h>
3155                 #include <sys/types.h>
3156                 #include <sys/socket.h>
3157                 #include <net/if.h>
3158         ], [
3159                 if_nametoindex(NULL);
3160         ], [
3161                 # Yes, we have it...
3162                 AC_MSG_RESULT(yes)
3163                 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
3164         ], [
3165                 AC_MSG_RESULT(no)
3166         ])
3167         dnl **********************************
3168         dnl *** Check for access ***
3169         dnl **********************************
3170         AC_MSG_CHECKING(for access)
3171                 AC_TRY_LINK([
3172                 #include <unistd.h>
3173         ], [
3174                 access(NULL,0);
3175         ], [
3176                 # Yes, we have it...
3177                 AC_MSG_RESULT(yes)
3178                 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
3179         ], [
3180                 AC_MSG_RESULT(no)
3181         ])
3182                         
3183         dnl **********************************
3184         dnl *** Checks for proclib         ***
3185         dnl **********************************
3186         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.)])
3187         dnl **********************************
3188         dnl *** Checks for MonoPosixHelper ***
3189         dnl **********************************
3190         AC_CHECK_HEADERS(checklist.h)
3191         AC_CHECK_HEADERS(pathconf.h)
3192         AC_CHECK_HEADERS(fstab.h)
3193         AC_CHECK_HEADERS(attr/xattr.h)
3194         AC_CHECK_HEADERS(sys/extattr.h)
3195         AC_CHECK_HEADERS(sys/sendfile.h)
3196         AC_CHECK_HEADERS(sys/statvfs.h)
3197         AC_CHECK_HEADERS(sys/statfs.h)
3198         AC_CHECK_HEADERS(sys/vfstab.h)
3199         AC_CHECK_HEADERS(sys/xattr.h)
3200         AC_CHECK_HEADERS(sys/mman.h)
3201         AC_CHECK_HEADERS(sys/param.h)
3202         AC_CHECK_HEADERS(sys/mount.h, [], [],
3203                 [
3204                 #ifdef HAVE_SYS_PARAM_H
3205                 # include <sys/param.h>
3206                 #endif
3207                 ])
3208         AC_CHECK_HEADERS(sys/mount.h)
3209         AC_CHECK_FUNCS(confstr)
3210         AC_CHECK_FUNCS(seekdir telldir)
3211         AC_CHECK_FUNCS(getdomainname)
3212         AC_CHECK_FUNCS(setdomainname)
3213         AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
3214         AC_CHECK_FUNCS(setgroups)
3215         AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
3216         AC_CHECK_FUNCS(getfsstat)
3217         AC_CHECK_FUNCS(lutimes futimes)
3218         AC_CHECK_FUNCS(mremap)
3219         AC_CHECK_FUNCS(remap_file_pages)
3220         AC_CHECK_FUNCS(posix_fadvise)
3221         AC_CHECK_FUNCS(posix_fallocate)
3222         AC_CHECK_FUNCS(vsnprintf)
3223         AC_CHECK_FUNCS(sendfile)
3224         AC_CHECK_FUNCS(gethostid sethostid)
3225         AC_CHECK_FUNCS(sethostname)
3226         AC_CHECK_FUNCS(statfs)
3227         AC_CHECK_FUNCS(fstatfs)
3228         AC_CHECK_FUNCS(statvfs)
3229         AC_CHECK_FUNCS(fstatvfs)
3230         AC_CHECK_FUNCS(stime)
3231         AC_CHECK_FUNCS(ttyname_r)
3232         AC_CHECK_FUNCS(psignal)
3233         AC_CHECK_FUNCS(getlogin_r)
3234         AC_CHECK_FUNCS(lockf)
3235         AC_CHECK_FUNCS(swab)
3236         AC_CHECK_FUNCS(setusershell endusershell)
3237         AC_CHECK_FUNCS(futimens utimensat)
3238         AC_CHECK_FUNCS(fstatat mknodat readlinkat)
3239         AC_CHECK_FUNCS(readv writev preadv pwritev)
3240         AC_CHECK_FUNCS(setpgid)
3241         AC_CHECK_FUNCS(system)
3242         AC_CHECK_FUNCS(fork execv execve)
3243         AC_CHECK_FUNCS(waitpid)
3244         AC_CHECK_FUNCS(accept4)
3245         AC_CHECK_FUNCS(localtime_r)
3246         AC_CHECK_FUNCS(mkdtemp)
3247         AC_CHECK_SIZEOF(size_t)
3248         AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
3249                 [#include <sys/types.h>
3250                  #include <sys/stat.h>
3251                  #include <unistd.h>])
3252         AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
3253                 [#include <sys/types.h>
3254                  #include <sys/stat.h>
3255                  #include <unistd.h>])
3256         AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
3257                 [#include <sys/time.h>])
3258         AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
3259                 [#include <sys/socket.h>])
3260         AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
3261                 [#include <unistd.h>
3262                  #include <fcntl.h>])
3263         AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
3264                 [#include <sys/uio.h>])
3265         AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
3266                 [#include <sys/socket.h>])
3267         AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
3268                 [#include <sys/poll.h>])
3269         AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
3270                 [#include <sys/socket.h>])
3271         AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
3272                 [#include <sys/socket.h>])
3273         AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
3274                 [#include <netinet/in.h>])
3275         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3276                 [#include <netinet/in.h>])
3277         AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3278                 [#include <sys/un.h>])
3279         AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3280                 [#include <sys/types.h>
3281                  #include <sys/stat.h>
3282                  #include <unistd.h>])
3283         AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3284                 [#include <time.h>])
3285         AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3286                 [#include <sys/time.h>
3287                  #include <sys/types.h>
3288                  #include <utime.h>])
3289         AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3290                 [#include <sys/time.h>])
3291         AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3292                 [#include <sys/types.h>
3293                  #include <utime.h>])
3294         AC_CHECK_MEMBERS(
3295                 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,, 
3296                 [#include <sys/types.h>
3297                  #include <dirent.h>])
3298         AC_CHECK_MEMBERS(
3299                 [struct passwd.pw_gecos],,, 
3300                 [#include <sys/types.h>
3301                  #include <pwd.h>])
3302         AC_CHECK_MEMBERS(
3303                 [struct statfs.f_flags],,, 
3304                 [#include <sys/types.h>
3305                  #include <sys/vfs.h>])
3306         AC_CHECK_MEMBERS(
3307                 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,, 
3308                 [#include <sys/types.h>
3309                  #include <sys/stat.h>
3310                  #include <unistd.h>])
3312         dnl Favour xattr through glibc, but use libattr if we have to
3313         AC_CHECK_FUNC(lsetxattr, ,
3314                 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3315         )
3316         AC_SUBST(XATTR_LIB)
3318         dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3319         AC_CHECK_MEMBERS(
3320                 [struct kinfo_proc.kp_proc],,, 
3321                 [#include <sys/types.h>
3322                  #include <sys/param.h>
3323                  #include <sys/sysctl.h>
3324                  #include <sys/proc.h>
3325                  ])
3327         dnl *********************************
3328         dnl *** Checks for Windows compilation ***
3329         dnl *********************************
3330         AC_CHECK_HEADERS(sys/time.h)
3331         AC_CHECK_HEADERS(sys/param.h)
3332         AC_CHECK_HEADERS(dirent.h)
3334         dnl ******************************************
3335         dnl *** Checks for OSX and iOS compilation ***
3336         dnl ******************************************
3337         AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3339         AC_CHECK_MEMBER(struct objc_super.super_class,
3340                 [AC_DEFINE(HAVE_OBJC_SUPER_SUPER_CLASS, 1, [struct objc_super.super_class])],
3341                 [],
3342                 [#include <objc/runtime.h>
3343                 #include <objc/message.h>])
3345         dnl *********************************
3346         dnl *** Check for Console 2.0 I/O ***
3347         dnl *********************************
3348         AC_CHECK_HEADERS([curses.h])
3349         AC_CHECK_HEADERS([term.h], [], [],
3350         [#if HAVE_CURSES_H
3351          #include <curses.h>
3352          #endif
3353         ])
3354         AC_CHECK_HEADERS([termios.h])
3356         dnl *********************************
3357         dnl *** Checks for random         ***
3358         dnl *********************************
3359         if test x$host_darwin = xno; then
3360                 AC_CHECK_HEADERS(sys/random.h)
3361                 AC_CHECK_FUNCS(getrandom getentropy)
3362         fi
3364         dnl *********************************
3365         dnl *** Checks for Mono.Native    ***
3366         dnl *********************************
3368         # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3369         # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3371         AC_MSG_CHECKING(for linux/in.h)
3372         AC_TRY_COMPILE([
3373                 #include <sys/socket.h>
3374                 #include <linux/in.h>
3375         ], [
3376         ],[
3377                 AC_MSG_RESULT(yes)
3378                 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3379         ], [
3380                 AC_MSG_RESULT(no)
3381         ])
3383         AC_CHECK_HEADERS([linux/if_packet.h])
3385         AC_MSG_CHECKING(for struct in_pktinfo)
3386         AC_TRY_COMPILE([
3387                 #ifdef HAVE_LINUX_IN_H
3388                 #include <sys/socket.h>
3389                 #include <linux/in.h>
3390                 #else
3391                 #include <netinet/in.h>
3392                 #endif
3393         ], [
3394                 struct in_pktinfo pktinfo;
3395         ],[
3396                 AC_MSG_RESULT(yes)
3397                 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3398         ], [
3399                 AC_MSG_RESULT(no)
3400         ])
3402         AC_MSG_CHECKING(for struct ip_mreqn)
3403         AC_TRY_COMPILE([
3404                 #if HAVE_LINUX_IN_H
3405                 #include <sys/socket.h>
3406                 #include <linux/in.h>
3407                 #else
3408                 #include <netinet/in.h>
3409                 #endif
3410         ], [
3411                 struct ip_mreqn mreqn;
3412         ],[
3413                 AC_MSG_RESULT(yes)
3414                 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3415         ], [
3416                 AC_MSG_RESULT(no)
3417         ])
3419         if test x$host_darwin = xno; then
3420                 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3421         fi
3423         AC_CHECK_DECL(O_CLOEXEC,         [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3424         AC_CHECK_DECL(F_DUPFD_CLOEXEC,   [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3426         # AC_CHECK_FUNC(getifaddrs,           [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3427         AC_CHECK_FUNC(Qp2getifaddrs,     [AC_DEFINE(HAVE_QP2GETIFADDRS, 1, [Qp2getifaddrs])])
3429         AC_CHECK_FUNC(lseek64,           [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3430         AC_CHECK_FUNC(mmap64,            [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3431         AC_CHECK_FUNC(ftruncate64,       [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3432         AC_CHECK_FUNC(posix_fadvise64,   [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3434         if test "x$mono_native_platform_ios" = "xno"; then
3435                 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3436                 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3437                 AC_CHECK_FUNC(stat64,            [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3438         fi
3440         AC_CHECK_DECL(pipe2,             [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3441         AC_CHECK_FUNC(getmntinfo,        [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3442         AC_CHECK_FUNC(strcpy_s,          [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3443         AC_CHECK_FUNC(strlcpy,           [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3444         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
3445         AC_CHECK_FUNC(ioctl,             [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3446         AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3447         AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3449         if test "x$platform_android" != "xyes"; then
3450                 AC_CHECK_FUNC(arc4random_buf,    [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3451         fi
3453         AC_CHECK_DECL(TIOCGWINSZ,        [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3454         AC_CHECK_FUNC(tcgetattr,         [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3455         AC_CHECK_FUNC(tcsetattr,         [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3456         AC_CHECK_DECL(ECHO,              [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3457         AC_CHECK_DECL(ICANON,            [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3458         AC_CHECK_DECL(TCSANOW,           [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3460         AC_CHECK_DECL(lchflags,          [AC_DEFINE(HAVE_LCHFLAGS, 1, [lchflags])], [], 
3461                 [[#include <sys/types.h> 
3462                 #include <sys/stat.h>]])
3463         AC_CHECK_MEMBER(struct stat.st_flags,
3464                 [AC_DEFINE(HAVE_STAT_FLAGS, 1, [struct stat.st_flags])],
3465                 [],
3466                 [#include <sys/types.h>
3467                 #include <sys/stat.h>])
3469         AC_CHECK_MEMBER(struct stat.st_birthtimespec,
3470                 [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtimespec])],
3471                 [],
3472                 [#include <sys/types.h>
3473                 #include <sys/stat.h>])
3474         AC_CHECK_MEMBER(struct stat.st_atimespec,
3475                 [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])],
3476                 [],
3477                 [#include <sys/types.h>
3478                 #include <sys/stat.h>])
3479         AC_CHECK_MEMBER(struct stat.st_atim,
3480                 [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])],
3481                 [],
3482                 [#include <sys/types.h>
3483                 #include <sys/stat.h>])
3484         AC_CHECK_MEMBER(struct stat.st_atimensec,
3485                 [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])],
3486                 [],
3487                 [#include <sys/types.h>
3488                 #include <sys/stat.h>])
3489         AC_CHECK_MEMBER(struct dirent.d_namlen,       [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [#include <dirent.h>])
3490         AC_CHECK_MEMBER(struct statfs.f_fstypename,   [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [#include <sys/mount.h>])
3491         AC_CHECK_MEMBER(struct statvfs.f_fstypename,  [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [#include <sys/mount.h>])
3493         AC_MSG_CHECKING(for struct statfs)
3494         AC_TRY_COMPILE([
3495                 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3496                 #include <sys/mount.h>
3497                 #else
3498                 #include <sys/statfs.h>
3499                 #endif
3500         ], [
3501                 struct statfs;
3502         ],[
3503                 AC_MSG_RESULT(yes)
3504                 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3505         ], [
3506                 AC_MSG_RESULT(no)
3507         ])
3509         if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3510                 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3511         fi
3513         AC_MSG_CHECKING(for readdir_r)
3514         AC_TRY_LINK([
3515                 #include <dirent.h>
3516         ], [
3517                 DIR* dir;
3518                 struct dirent* entry;
3519                 struct dirent* result;
3520                 readdir_r(dir, entry, &result);
3521         ],[
3522                 AC_MSG_RESULT(yes)
3523                 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3524         ], [
3525                 AC_MSG_RESULT(no)
3526         ])
3528         AC_MSG_CHECKING(for kevent with void *data)
3529         AC_TRY_LINK([
3530                 #include <sys/types.h>
3531                 #include <sys/event.h>
3532         ], [
3533                 struct kevent event;
3534                 void* data;
3535                 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3536         ],[
3537                 AC_MSG_RESULT(yes)
3538                 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3539         ], [
3540                 AC_MSG_RESULT(no)
3541         ])
3543         AC_CHECK_MEMBER(struct fd_set.fds_bits,   [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3544         AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3546         AC_MSG_CHECKING(for sendfile with 4 arguments)
3547         AC_TRY_LINK([
3548                 #include <sys/sendfile.h>
3549         ], [
3550                 #if defined(TARGET_ANDROID)
3551                 #if !defined(__ANDROID_API__)
3552                 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3553                 #elif __ANDROID_API__ < 21
3554                 #error sendfile is not supported on this Android API level
3555                 #endif
3556                 #endif
3558                 int result = sendfile(0, 0, 0, 0);
3559         ],[
3560                 AC_MSG_RESULT(yes)
3561                 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3562         ], [
3563                 AC_MSG_RESULT(no)
3564         ])
3566         ORIG_CFLAGS="$CFLAGS"
3567         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3569         AC_MSG_CHECKING(for sendfile with 6 arguments)
3570         AC_TRY_LINK([
3571                 #include <stdlib.h>
3572                 #include <sys/types.h>
3573                 #include <sys/socket.h>
3574                 #include <sys/uio.h>
3575         ], [
3576                 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3577         ],[
3578                 AC_MSG_RESULT(yes)
3579                 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3580         ], [
3581                 AC_MSG_RESULT(no)
3582         ])
3584         CFLAGS="$ORIG_CFLAGS"
3586         AC_CHECK_FUNC(fcopyfile,     [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3587         AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3588         AC_CHECK_FUNC(accept4,       [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3589         AC_CHECK_FUNC(kqueue,        [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3591         ORIG_CFLAGS="$CFLAGS"
3592         CFLAGS="$CFLAGS -Werror=sign-conversion"
3594         AC_MSG_CHECKING(for getnameinfo with signed flags)
3595         AC_TRY_LINK([
3596                 #include <sys/types.h>
3597                 #include <netdb.h>
3598         ], [
3599                 const struct sockaddr *addr;
3600                 socklen_t addrlen;
3601                 char *host;
3602                 socklen_t hostlen;
3603                 char *serv;
3604                 socklen_t servlen;
3605                 int flags;
3606                 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3607         ],[
3608                 AC_MSG_RESULT(yes)
3609                 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3610         ], [
3611                 AC_MSG_RESULT(no)
3612         ])
3614         CFLAGS="$ORIG_CFLAGS"
3616         if test "x$host_linux" = "xyes"; then
3617                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3618         else
3619                 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3620         fi
3622         # HAVE_CLOCK_MONOTONIC check already done above
3623         # HAVE_CLOCK_REALTIME check already done above
3624         # HAVE_MACH_ABSOLUTE_TIME check already done above
3625         # HAVE_MACH_TIMEBASE_INFO check already done above
3626         # HAVE_FUTIMES check already done above
3627         # HAVE_FUTIMENS check already done above
3629         ORIG_CFLAGS="$CFLAGS"
3630         CFLAGS="$CFLAGS -Werror=sign-conversion"
3632         AC_MSG_CHECKING(for bind with unsigned addrlen)
3633         AC_TRY_LINK([
3634                 #include <sys/socket.h>
3635         ], [
3636                 int fd;
3637                 struct sockaddr* addr;
3638                 socklen_t addrLen;
3639                 bind(fd, addr, addrLen);
3640         ],[
3641                 AC_MSG_RESULT(yes)
3642                 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3643         ], [
3644                 AC_MSG_RESULT(no)
3645         ])
3647         AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3648         AC_TRY_LINK([
3649                 #include <netinet/in.h>
3650                 #include <netinet/tcp.h>
3651         ], [
3652                 struct ipv6_mreq opt;
3653                 unsigned int index = 0;
3654                 opt.ipv6mr_interface = index;
3655         ],[
3656                 AC_MSG_RESULT(yes)
3657                 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3658         ], [
3659                 AC_MSG_RESULT(no)
3660         ])
3662         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3663         AC_TRY_LINK([
3664                 #include <sys/inotify.h>
3665         ], [
3666                 intptr_t fd;
3667                 uint32_t wd;
3668                 int result = inotify_rm_watch(fd, wd);
3669         ],[
3670                 AC_MSG_RESULT(yes)
3671                 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3672         ], [
3673                 AC_MSG_RESULT(no)
3674         ])
3676         case "$host" in
3677                 *-*-*freebsd*)
3678                         dnl *****************************
3679                         dnl *** Checks for libinotify ***
3680                         dnl *****************************
3681                         AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
3682                         if test "x$ac_cv_lib_inotify_inotify_init" = "xyes" ; then
3683                                 AC_DEFINE(HAVE_LIBINOTIFY, 1, [FreeBSD libinotify kqueue shim])
3684                                 dnl Needs to be done this way to avoid collision with various 
3685                                 dnl ports including glib and llvm*
3686                                 METADATA_CFLAGS="-I/usr/local/include"
3687                                 AC_SUBST(METADATA_CFLAGS)
3688                         fi
3689                         dnl Workaround due to inotify_rm_watch check failing without -I
3690                         AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd in libinotify)
3691                         AC_TRY_LINK([
3692                                 #include </usr/local/include/sys/inotify.h>
3693                         ], [
3694                                 intptr_t fd;
3695                                 uint32_t wd;
3696                                 int result = inotify_rm_watch(fd, wd);
3697                         ],[
3698                            AC_MSG_RESULT(yes)
3699                            AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3700                         ], [
3701                                 AC_MSG_RESULT(no)
3702                         ])
3703         esac
3705         CFLAGS="$ORIG_CFLAGS"
3707         AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3708         if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3709                 AC_MSG_RESULT(no)
3710         elif test "x$cross_compiling" = "xyes"; then
3711                 AC_MSG_RESULT(cross compiling, assuming yes)
3712                 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3713         else
3714                 AC_TRY_RUN([
3715                         #include <sys/mman.h>
3716                         #include <fcntl.h>
3717                         #include <unistd.h>
3719                         int main ()
3720                         {
3721                         #ifdef __PASE__
3722                                 /* IBM i doesn't implement this and returns SIGILL */
3723                                 return -1;
3724                         #endif
3725                                 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3726                                 if (fd == -1)
3727                                         return -1;
3729                                 shm_unlink("/mono_configure_shm_open");
3731                                 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3732                                 //       on at least the current version of Mac OS X
3734                                 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3735                                         return -1;
3737                                 return 0;
3738                         }
3739                 ],[
3740                         AC_MSG_RESULT(yes)
3741                         AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3742                 ], [
3743                         AC_MSG_RESULT(no)
3744                 ])
3745         fi
3747         AC_MSG_CHECKING(for getpriority with int who)
3748         AC_TRY_LINK([
3749                 #include <sys/resource.h>
3750         ], [
3751                 int which;
3752                 int who;
3753                 int result = getpriority(which, who);
3754         ],[
3755                 AC_MSG_RESULT(yes)
3756                 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3757         ], [
3758                 AC_MSG_RESULT(no)
3759         ])
3761         AC_MSG_CHECKING(for kevent with int parameters)
3762         AC_TRY_LINK([
3763                 #include <sys/types.h>
3764                 #include <sys/event.h>
3765         ], [
3766                 int kg;
3767                 const struct kevent* chagelist;
3768                 int nchanges;
3769                 struct kevent* eventlist;
3770                 int nevents;
3771                 const struct timespec* timeout;
3772                 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3773         ],[
3774                 AC_MSG_RESULT(yes)
3775                 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3776         ], [
3777                 AC_MSG_RESULT(no)
3778         ])
3780         AC_CHECK_FUNCS(mkstemps)
3781         # AC_CHECK_FUNCS(mkstemp) # already done above
3783         if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3784                 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3785         fi
3787         AC_MSG_CHECKING(for tcp/var.h)
3788         AC_TRY_LINK([
3789                 #include <sys/types.h>
3790                 #include <sys/socketvar.h>
3791                 #include <netinet/ip.h>
3792                 #include <netinet/tcp.h>
3793                 #include <netinet/tcp_var.h>
3794         ], [
3795         ],[
3796                 AC_MSG_RESULT(yes)
3797                 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3798         ], [
3799                 AC_MSG_RESULT(no)
3800         ])
3802         AC_CHECK_HEADERS([sys/cdefs.h])
3804         AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3805         AC_TRY_LINK([
3806                 #ifdef HAVE_SYS_CDEFS_H
3807                 #include <sys/cdefs.h>
3808                 #endif
3809                 #include <netinet/tcp.h>
3810         ], [
3811                 int result = TCP_ESTABLISHED;
3812         ],[
3813                 AC_MSG_RESULT(yes)
3814                 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3815         ], [
3816                 AC_MSG_RESULT(no)
3817         ])
3819         AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3821         AC_MSG_CHECKING(for struct rt_msghdr)
3822         AC_TRY_COMPILE([
3823                 #include <sys/types.h>
3824                 #include <net/route.h>
3825         ], [
3826                 struct rt_msghdr;
3827         ],[
3828                 AC_MSG_RESULT(yes)
3829                 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3830         ], [
3831                 AC_MSG_RESULT(no)
3832         ])
3834         AC_CHECK_HEADERS([sys/sysctl.h])
3835         AC_CHECK_HEADERS([linux/rtnetlink.h])
3837         AC_CHECK_FUNC(getpeereid,    [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3838         #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3839         AC_CHECK_FUNC(uname,         [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3841         ORIG_CFLAGS="$CFLAGS"
3842         CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3844         AC_MSG_CHECKING(for getdomainname with size_t namelen)
3845         AC_TRY_LINK([
3846                 #include <unistd.h>
3847         ], [
3848                 size_t namelen = 20;
3849                 char name[20];
3850                 int result = getdomainname(name, namelen);
3851         ],[
3852                 AC_MSG_RESULT(yes)
3853                 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3854         ], [
3855                 AC_MSG_RESULT(no)
3856         ])
3858         CFLAGS="$ORIG_CFLAGS"
3860         AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3861         AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3862         AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3864         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
3865                 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3866         elif test "x$host_linux" = "xyes"; then
3867                 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3868         fi
3870         # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3871         # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3872         # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3873         # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3875         enable_gss=no;
3876         AC_MSG_CHECKING(for GSS/GSS.h)
3877         AC_TRY_COMPILE([
3878                         #include <GSS/GSS.h>
3879         ], [
3880         ],[
3881                         AC_MSG_RESULT(yes)
3882                         AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3883                         AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3884                         enable_gss=yes
3885                         AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3886         ], [
3887                         AC_MSG_RESULT(no)
3888         ])
3890         AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3891         AC_TRY_COMPILE([
3892                         #include <gssapi/gssapi_ext.h>
3893         ], [
3894         ],[
3895                         AC_MSG_RESULT(yes)
3896                         enable_gss=yes
3897                         AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3898         ], [
3899                         AC_MSG_RESULT(no)
3900         ])
3902         AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3903         AC_TRY_COMPILE([
3904                         #include <gssapi/gssapi_ext.h>
3905                         #include <gssapi/gssapi_krb5.h>
3906                         gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3907         ], [
3908         ],[
3909                         AC_MSG_RESULT(yes)
3910                         AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3911         ], [
3912                         AC_MSG_RESULT(no)
3913         ])
3915         AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3917         AC_CHECK_HEADERS([crt_externs.h])
3919         AC_MSG_CHECKING(for _NSGetEnviron)
3920         AC_TRY_LINK([
3921                 #include <crt_externs.h>
3922         ], [
3923                 char **result = *(_NSGetEnviron());
3924         ],[
3925                 AC_MSG_RESULT(yes)
3926                 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3927         ], [
3928                 AC_MSG_RESULT(no)
3929         ])
3931         AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3933         if test x$host_sunos = xyes; then
3934                 # set -Werror=strict-prototypes, to match the flags used during the compilation.
3935                 ORIG_CFLAGS="$CFLAGS"
3936                 CFLAGS="$CFLAGS -Werror=strict-prototypes"
3937         fi
3939         AC_CHECK_FUNCS(madvise)
3940         AC_CHECK_FUNCS(posix_madvise)
3942         if test x$host_sunos = xyes; then
3943                 CFLAGS="$ORIG_CFLAGS"
3944         fi
3946         # *** End of Mono.Native checks ***
3947 else
3948         AM_CONDITIONAL(ENABLE_GSS, false)
3950         dnl *********************************
3951         dnl *** Checks for Windows compilation ***
3952         dnl *********************************
3953         AC_CHECK_HEADERS(winternl.h)
3955         jdk_headers_found=no
3956         AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3957         AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3958         AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3959         AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3960         AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3961         AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3962         AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3964         AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], , [#include <ws2tcpip.h>])
3966         dnl *********************************
3967         dnl *** Check for struct ip_mreqn ***
3968         dnl *********************************
3969         AC_MSG_CHECKING(for struct ip_mreqn)
3970         AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3971                 struct ip_mreqn mreq;
3972                 mreq.imr_address.s_addr = 0;
3973         ], [
3974                 # Yes, we have it...
3975                 AC_MSG_RESULT(yes)
3976                 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3977         ], [
3978                 # We'll just have to try and use struct ip_mreq
3979                 AC_MSG_RESULT(no)
3980                 AC_MSG_CHECKING(for struct ip_mreq)
3981                 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3982                         struct ip_mreq mreq;
3983                         mreq.imr_interface.s_addr = 0;
3984                 ], [
3985                         # Yes, we have it...
3986                         AC_MSG_RESULT(yes)
3987                         AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3988                 ], [
3989                         # No multicast support
3990                         AC_MSG_RESULT(no)
3991                 ])
3992         ])
3994         dnl **********************************
3995         dnl *** Check for getaddrinfo ***
3996         dnl **********************************
3997         AC_MSG_CHECKING(for getaddrinfo)
3998                 AC_TRY_LINK([
3999                 #include <stdio.h>
4000                 #include <winsock2.h>
4001                 #include <ws2tcpip.h>
4002         ], [
4003                 getaddrinfo(NULL,NULL,NULL,NULL);
4004         ], [
4005                 # Yes, we have it...
4006                 AC_MSG_RESULT(yes)
4007                 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
4008         ], [
4009                 AC_MSG_RESULT(no)
4010         ])
4012         dnl **********************************
4013         dnl *** Check for gethostbyname ***
4014         dnl **********************************
4015         AC_MSG_CHECKING(for gethostbyname)
4016                 AC_TRY_LINK([
4017                 #include <stdio.h>
4018                 #include <winsock2.h>
4019                 #include <ws2tcpip.h>
4020         ], [
4021                 gethostbyname(NULL);
4022         ], [
4023                 # Yes, we have it...
4024                 AC_MSG_RESULT(yes)
4025                 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
4026         ], [
4027                 AC_MSG_RESULT(no)
4028         ])
4030         dnl **********************************
4031         dnl *** Check for getprotobyname ***
4032         dnl **********************************
4033         AC_MSG_CHECKING(for getprotobyname)
4034                 AC_TRY_LINK([
4035                 #include <stdio.h>
4036                 #include <winsock2.h>
4037                 #include <ws2tcpip.h>
4038         ], [
4039                 getprotobyname(NULL);
4040         ], [
4041                 # Yes, we have it...
4042                 AC_MSG_RESULT(yes)
4043                 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
4044         ], [
4045                 AC_MSG_RESULT(no)
4046         ])
4048         dnl **********************************
4049         dnl *** Check for getnameinfo ***
4050         dnl **********************************
4051         AC_MSG_CHECKING(for getnameinfo)
4052                 AC_TRY_LINK([
4053                 #include <stdio.h>
4054                 #include <winsock2.h>
4055                 #include <ws2tcpip.h>
4056         ], [
4057                 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
4058         ], [
4059                 # Yes, we have it...
4060                 AC_MSG_RESULT(yes)
4061                 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
4062         ], [
4063                 AC_MSG_RESULT(no)
4064         ])
4066         dnl **********************************
4067         dnl *** Check for inet_ntop ***
4068         dnl **********************************
4069         AC_MSG_CHECKING(for inet_ntop)
4070                 AC_TRY_LINK([
4071                 #include <stdio.h>
4072                 #include <winsock2.h>
4073                 #include <ws2tcpip.h>
4074         ], [
4075                 inet_ntop (0, NULL, NULL, 0);
4076         ], [
4077                 # Yes, we have it...
4078                 AC_MSG_RESULT(yes)
4079                 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
4080         ], [
4081                 AC_MSG_RESULT(no)
4082         ])
4084         dnl **********************************
4085         dnl *** Check for inet_pton ***
4086         dnl **********************************
4087         AC_MSG_CHECKING(for inet_pton)
4088                 AC_TRY_LINK([
4089                 #include <stdio.h>
4090                 #include <winsock2.h>
4091                 #include <ws2tcpip.h>
4092         ], [
4093                 #ifndef inet_pton
4094                 (void) inet_pton;
4095                 #endif
4096                 inet_pton (0, NULL, NULL);
4097         ], [
4098                 # Yes, we have it...
4099                 AC_MSG_RESULT(yes)
4100                 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
4101         ], [
4102                 AC_MSG_RESULT(no)
4103         ])
4106 dnl socklen_t check
4107 AC_MSG_CHECKING(for socklen_t)
4108 AC_TRY_COMPILE([
4109 #include <sys/types.h>
4110 #include <sys/socket.h>
4112   socklen_t foo;
4114 ac_cv_c_socklen_t=yes
4115         AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
4116         AC_MSG_RESULT(yes)
4118         AC_MSG_RESULT(no)
4121 AC_CHECK_FUNCS(execvp)
4123 dnl ****************************
4124 dnl *** Look for /dev/random ***
4125 dnl ****************************
4127 AC_MSG_CHECKING([if usage of random device is requested])
4128 AC_ARG_ENABLE(dev-random,
4129 [  --disable-dev-random    disable the use of the random device (enabled by default)],
4130 try_dev_random=$enableval, try_dev_random=yes)
4132 AC_MSG_RESULT($try_dev_random)
4134 case "{$build}" in
4136 dnl IBM i does not have /dev/random, use unblocking only
4138     *-*-os400*)
4139     NAME_DEV_RANDOM="/dev/urandom"
4140     ;;
4142 dnl Win32 does not have /dev/random, they have their own method...
4144     *-mingw*|*-*-cygwin*)
4145     ac_cv_have_dev_random=no
4146     ;;
4148 dnl Everywhere else, it's /dev/random
4150     *)
4151     NAME_DEV_RANDOM="/dev/random"
4152     ;;
4153 esac
4155 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
4157 dnl Now check if the device actually exists
4159 if test "x$try_dev_random" = "xyes"; then
4160     AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
4161     [if test -r "$NAME_DEV_RANDOM" ; then
4162         ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
4163     if test "x$ac_cv_have_dev_random" = "xyes"; then
4164         AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
4165     fi
4166 else
4167     AC_MSG_CHECKING(for random device)
4168     ac_cv_have_dev_random=no
4169     AC_MSG_RESULT(has been disabled)
4172 if test "x$host_win32" = "xyes"; then
4173     AC_DEFINE(HAVE_CRYPT_RNG)
4176 if test "x$ac_cv_have_dev_random" = "xno" \
4177     && test "x$host_win32" = "xno"; then
4178     AC_MSG_WARN([[
4180 *** A system-provided entropy source was not found on this system.
4181 *** Because of this, the System.Security.Cryptography random number generator
4182 *** will throw a NotImplemented exception.
4184 *** If you are seeing this message, and you know your system DOES have an
4185 *** entropy collection in place, please report an issue on GitHub and
4186 *** provide information about the system and how to access the random device.
4188 *** Otherwise you can install either egd or prngd and set the environment
4189 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
4190 ***]])
4193 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)
4195 AC_MSG_CHECKING([if big-arrays are to be enabled])
4196 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)
4197 if test "x$enable_big_arrays" = "xyes" ; then
4198     if  test "x$ac_cv_sizeof_void_p" = "x8"; then
4199         AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
4200     else
4201         AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
4202     fi
4204 AC_MSG_RESULT($enable_big_arrays)
4206 dnl **************
4207 dnl *** DTRACE ***
4208 dnl **************
4210 AC_ARG_ENABLE(dtrace,[  --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
4212 if test "x$enable_dtrace" = "xyes"; then
4213    if test "x$has_dtrace" = "xno"; then
4214           AC_MSG_ERROR([DTrace probes are not supported on this platform.])
4215    fi
4216    AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
4217    if test "x$DTRACE" = "xno"; then
4218           AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
4219           enable_dtrace=no
4220    elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
4221           AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
4222           enable_dtrace=no
4223    fi
4226 dtrace_g=no
4227 if test "x$enable_dtrace" = "xyes"; then
4228         AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
4229         DTRACEFLAGS=
4230         if test "x$ac_cv_sizeof_void_p" = "x8"; then
4231                 case "$host" in
4232                         powerpc-*-darwin*)
4233                         DTRACEFLAGS="-arch ppc64"
4234                         ;;
4235                         i*86-*-darwin*)
4236                         DTRACEFLAGS="-arch x86_64"
4237                         ;;
4238                         *)
4239                         DTRACEFLAGS=-64
4240                         ;;
4241                 esac
4242         else
4243                 case "$host" in
4244                         powerpc-*-darwin*)
4245                         DTRACEFLAGS="-arch ppc"
4246                         ;;
4247                         i*86-*-darwin*)
4248                         DTRACEFLAGS="-arch i386"
4249                         ;;
4250                         *)
4251                         DTRACEFLAGS=-32
4252                         ;;
4253                 esac
4254         fi
4255         AC_SUBST(DTRACEFLAGS)
4256         case "$host" in
4257                 *-*-solaris*)
4258                 dtrace_g=yes
4259                 ;;
4260         esac
4261         AC_CHECK_HEADERS([sys/sdt.h])
4263 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
4264 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
4266 dnl **************************
4267 dnl *** AOT cross offsets  ***
4268 dnl **************************
4270 AC_ARG_WITH(cross-offsets, [  --with-cross-offsets=<offsets file path>    Explicit AOT cross offsets file],
4271     AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
4273 dnl **************
4274 dnl ***  LLVM  ***
4275 dnl **************
4277 AC_ARG_ENABLE(llvm,[  --enable-llvm     Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
4278 AC_ARG_ENABLE(loadedllvm,[  --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
4279 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)
4280 AC_ARG_ENABLE(llvm-runtime,[  --enable-llvm-runtime     Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
4281 AC_ARG_ENABLE(llvm-asserts,[  --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
4283 AC_ARG_WITH(llvm, [  --with-llvm=<llvm prefix>    Enable the LLVM back-end], enable_llvm=yes,)
4285 if test "x$enable_llvm" = "xdefault"; then
4286    enable_llvm=$enable_llvm_default
4289 if test "x$enable_loadedllvm" = "xyes"; then
4290    AC_MSG_WARN("Loadable LLVM is no longer supported. Enabling default LLVM support instead.")
4291    enable_llvm=yes
4294 enable_llvm_msvc_only="no"
4295 if test "x$enable_llvm" = "xyes"; then
4296         if test "x$host_win32" = "xyes"; then
4297                 if test "x$cross_compiling" = "xno"; then
4298                         case "$target" in
4299                         x86_64*)
4300                                 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
4301                                 enable_llvm_msvc_only="yes"
4302                                 ;;
4303                         i686*)
4304                                 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
4305                                 ;;
4306                         esac
4307                 fi
4308         fi
4311 internal_llvm="no"
4312 if test "x$enable_llvm" = "xyes"; then
4313         if test "x$with_llvm" != "x"; then
4314                 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
4315                 if test x$host_win32 = xyes; then
4316                         EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
4317                 fi
4318                 if test ! -x $EXTERNAL_LLVM_CONFIG; then
4319                         AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
4320                 fi
4321         else
4322                 internal_llvm=yes
4323         fi
4325         LLVM_CODEGEN_LIBS="x86codegen"
4326         case "$target" in
4327         arm*)
4328                 LLVM_CODEGEN_LIBS="armcodegen"
4329                 ;;
4330         aarch64*)
4331                 LLVM_CODEGEN_LIBS="aarch64codegen"
4332                 ;;
4333         powerpc*)
4334                 LLVM_CODEGEN_LIBS="powerpccodegen"
4335                 ;;
4336         esac
4337         if test "x$host" != "x$target"; then
4338                 # No need for jit libs
4339                 LLVM_CODEGEN_LIBS=
4340         fi
4342         AC_SUBST(LLVM_CODEGEN_LIBS)
4343         AC_SUBST(EXTERNAL_LLVM_CONFIG)
4345         if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" &&  test "x$internal_llvm" = "xno"; then
4346                 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4347                 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4348         fi
4349         if test "x$enable_llvm_msvc_only" != "xyes"; then
4350                 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4351         else
4352                 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4353         fi
4354 fi # ENABLE_LLVM
4356 # AC_DEFINE necessary for correct restore behavior on Linux
4357 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4358 if test "x$internal_llvm" != "xno"; then
4359         if test "x$enable_llvm_msvc_only" != "xyes"; then
4360                 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4361         else
4362                 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4363         fi
4366 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4367 if test "x$enable_llvm_asserts" != "xno"; then
4368         if test "x$enable_llvm_msvc_only" != "xyes"; then
4369                 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4370         else
4371                 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4372         fi
4375 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4377 if test "x$enable_llvm" = "xyes"; then
4378         enable_llvm_runtime=yes
4381 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4382 if test "x$enable_llvm_runtime" = "xyes"; then
4383         if test "x$enable_llvm_msvc_only" != "xyes"; then
4384                 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4385         else
4386                 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4387         fi
4390 TARGET="unknown"
4391 ACCESS_UNALIGNED="yes"
4393 LIBC="libc.so.6"
4394 INTL="libc.so.6"
4395 SQLITE="libsqlite.so.0"
4396 SQLITE3="libsqlite3.so.0"
4397 ODBC="libodbc.so.2"
4398 X11="libX11.so"
4399 GDKX11="libgdk-x11-2.0.so.0"
4400 GTKX11="libgtk-x11-2.0.so.0"
4401 XINERAMA="libXinerama.so.1"
4403 sizeof_register="SIZEOF_VOID_P"
4405 jit_wanted=true
4406 boehm_supported=true
4407 BTLS_SUPPORTED=no
4408 BTLS_PLATFORM=
4409 INTERP_CFLAGS=""
4411 case "$host" in
4412         wasm32*)
4413                 TARGET=WASM
4414                 arch_target=wasm
4415                 BTLS_SUPPORTED=no
4416                 ACCESS_UNALIGNED="no"
4417                 with_tls=pthread
4418                 target_wasm=yes
4419                 if test "x$mono_cv_clang" = "xyes"; then
4420                    INTERP_CFLAGS="-mllvm -join-liveintervals=false"
4421                    AC_SUBST(INTERP_CFLAGS)
4422                 fi
4423                 ;;
4424         mips*)
4425                 TARGET=MIPS;
4426                 arch_target=mips;
4427                 with_tls=pthread;
4428                 ACCESS_UNALIGNED="no"
4430                 AC_MSG_CHECKING(for mips n32)
4431                 AC_TRY_COMPILE([],[
4432                 #if _MIPS_SIM != _ABIN32
4433                 #error Not mips n32
4434                 #endif
4435                 ],[
4436                 AC_MSG_RESULT(yes)
4437                 sizeof_register=8
4438                 ],[
4439                 AC_MSG_RESULT(no)
4440                 ])
4441                 ;;
4442         i*86-*-*)
4443                 TARGET=X86;
4444                 arch_target=x86;
4445                 case $host_os in
4446                   solaris*)
4447                         LIBC="libc.so"
4448                         INTL="libintl.so"
4449                         if test "x$ac_cv_sizeof_void_p" = "x8"; then
4450                                 TARGET=AMD64
4451                                 arch_target=amd64
4452                         fi
4454                         # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4455                         # int astruct __attribute__ ((visibility ("hidden")));
4456                         # void foo ()
4457                         # {
4458                         #       void *p = &astruct;
4459                         # }
4460                         # gcc -fPIC --shared -o libfoo.so foo.c
4461                         # yields:
4462                         # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4463                         # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4464                         have_visibility_hidden=no
4465                         ;;
4466                   mingw*|cygwin*)
4467                         have_visibility_hidden=no
4468                         BTLS_SUPPORTED=no
4469                         BTLS_PLATFORM=i386
4470                         ;;
4471                   haiku*)
4472                         LIBC=libroot.so
4473                         ;;
4474                   linux*)
4475                         AOT_SUPPORTED="yes"
4476                         BTLS_SUPPORTED=yes
4477                         BTLS_PLATFORM=i386
4478                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4479                         ;;
4480                   darwin*)
4481                         AOT_SUPPORTED="yes"
4482                         BTLS_SUPPORTED=yes
4483                         BTLS_PLATFORM=i386
4484                         ;;
4485                   openbsd*|freebsd*|kfreebsd-gnu*)
4486                         AOT_SUPPORTED="yes"
4487                         BTLS_SUPPORTED=yes
4488                         BTLS_PLATFORM=i386
4489                         ;;
4490                 esac
4491                 ;;
4492         x86_64-*-* | amd64-*-*)
4493                 TARGET=AMD64;
4494                 arch_target=amd64;
4495                 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4496                         AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4497                         sizeof_register=8
4498                 fi
4499                 case $host_os in
4500                   linux*)
4501                         AOT_SUPPORTED="yes"
4502                         BTLS_SUPPORTED=yes
4503                         BTLS_PLATFORM=x86_64
4504                         AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4505                         ;;
4506                   darwin*)
4507                         AOT_SUPPORTED="yes"
4508                         BTLS_SUPPORTED=yes
4509                         BTLS_PLATFORM=x86_64
4510                         boehm_supported=false
4511                         ;;
4512                   openbsd*|freebsd*|kfreebsd-gnu*)
4513                         AOT_SUPPORTED="yes"
4514                         BTLS_SUPPORTED=yes
4515                         BTLS_PLATFORM=x86_64
4516                         ;;
4517                   mingw*|cygwin*)
4518                         BTLS_SUPPORTED=no
4519                         BTLS_PLATFORM=x86_64
4520                         ;;
4521                 esac
4522                 ;;
4523         sparc*-*-*)
4524                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4525                    TARGET=SPARC64
4526                 else
4527                         TARGET=SPARC
4528                 fi
4529                 arch_target=sparc;
4530                 ACCESS_UNALIGNED="no"
4531                 case $host_os in
4532                   linux*) ;;
4533                   *)
4534                         LIBC="libc.so"
4535                         INTL="libintl.so"
4536                 esac
4537                 if test x"$GCC" = xyes; then
4538                         # We don't support v8 cpus
4539                         CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4540                 fi
4541                 if test x"$AR" = xfalse; then
4542                         AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4543                 fi
4544                 ;;
4545         *-mingw*|*-*-cygwin*)
4546                 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4547                 have_visibility_hidden=no
4548                 INTL="intl"
4549                 case "$host" in
4550                         x86_64*mingw*)
4551                                 # Old Boehm fails to compile for x86_64-mingw.
4552                                 # It is trivial to fix, but just silently drop it.
4553                                 boehm_supported=false
4554                                 ;;
4555                 esac
4556                 ;;
4557         macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4558         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4559         powerpc*-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4560                 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4561                         TARGET=POWERPC64;
4562                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4563                         # mono#18554 - be more robust in testing for -mminimal-toc
4564                         AC_MSG_NOTICE([Checking for PowerPC ISA -mminimal-toc support])
4565                         AX_CHECK_COMPILE_FLAG(
4566                                 [-mminimal-toc],
4567                                 [CFLAGS="$CFLAGS -mminimal-toc"],
4568                                 [CFLAGS="$CFLAGS"]
4569                         )
4570                         case "$host" in
4571                                 powerpc*-*-freebsd*)
4572                                         # We need to be aware if we are ELFv1 or v2 here
4573                                         AC_MSG_NOTICE([Checking FreeBSD ELF version])
4574                                         if ! ( echo | cc -dM -E - | awk '/_CALL_ELF/ {print $NF}'); then
4575                                                 AC_DEFINE([POWERPC_ELF], 1, [PowerPC ELFv1])
4576                                         else
4577                                                 AC_DEFINE([POWERPC_ELFV2], 1, [PowerPC ELFv2])
4578                                         fi
4579                                         ;;
4580                         esac
4581                 else
4582                         TARGET=POWERPC;
4583                         CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4584                 fi
4585                 arch_target=ppc;
4586                 case $host_os in
4587                   aix*|os400*)
4588                         BTLS_SUPPORTED=yes
4589                         BTLS_PLATFORM=powerpc
4590                         ;;
4591                   linux*)
4592                         BTLS_SUPPORTED=yes
4593                         BTLS_PLATFORM=powerpc
4594                         ;;
4595                   freebsd*)
4596                         BTLS_SUPPORTED=yes
4597                         BTLS_PLATFORM=powerpc
4598                         ;;
4599                 esac
4600                 ;;
4601         armv7k-*-darwin*)
4602                 TARGET=ARM;
4603                 TARGET_SYS=WATCHOS
4604                 arch_target=arm;
4605                 arm_fpu=VFP_HARD
4606                 ACCESS_UNALIGNED="no"
4607                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4608                 ;;
4610         arm*-darwin*)
4611                 TARGET=ARM;
4612                 arch_target=arm;
4613                 ACCESS_UNALIGNED="no"
4614                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4615                 ;;
4616         arm*-linux*)
4617                 TARGET=ARM;
4618                 arch_target=arm;
4619                 ACCESS_UNALIGNED="no"
4620                 AOT_SUPPORTED="yes"
4621                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4622                 BTLS_SUPPORTED=yes
4623                 BTLS_PLATFORM=arm
4624                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4625                 case "$target" in
4626                 arm*-linux*-gnueabi)
4627                         BTLS_PLATFORM=armsoft
4628                         ;;
4629                 esac
4630                 ;;
4631         arm*-netbsd*-eabi*)
4632                 TARGET=ARM;
4633                 arch_target=arm;
4634                 ACCESS_UNALIGNED="no"
4635                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4636                 ;;
4637         aarch64-*darwin*ilp32)
4638                 TARGET=ARM6432
4639                 arch_target=arm64
4640                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4641                 sizeof_register=8
4642                 # assuming no other target other than watchOS is using aarch64*darwin triple
4643                 TARGET_SYS=WATCHOS
4644                 ;;
4645         aarch64-*)
4646                 # https://lkml.org/lkml/2012/7/15/133
4647                 TARGET=ARM64
4648                 arch_target=arm64
4649                 boehm_supported=false
4650                 AOT_SUPPORTED="yes"
4651                 BTLS_SUPPORTED=yes
4652                 BTLS_PLATFORM=aarch64
4653                 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4654                 ;;
4655         s390x-*-linux*)
4656                 TARGET=S390X;
4657                 arch_target=s390x;
4658                 ACCESS_UNALIGNED="yes"
4659                 BTLS_SUPPORTED=yes
4660                 BTLS_PLATFORM=s390x
4661                 CFLAGS="$CFLAGS -mbackchain"
4662                 ;;
4663         riscv32-*)
4664                 TARGET=RISCV32
4665                 ACCESS_UNALIGNED=no
4666                 AOT_SUPPORTED=no
4667                 BTLS_SUPPORTED=yes
4668                 BTLS_PLATFORM=riscv32
4669                 arch_target=riscv32
4670                 boehm_supported=false
4671                 ;;
4672         riscv64*)
4673                 TARGET=RISCV64
4674                 ACCESS_UNALIGNED=no
4675                 AOT_SUPPORTED=no
4676                 BTLS_SUPPORTED=yes
4677                 BTLS_PLATFORM=riscv64
4678                 arch_target=riscv64
4679                 boehm_supported=false
4680                 ;;
4681 esac
4683 HOST=$TARGET
4685 if test "x$host" != "x$target"; then
4686    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4687    enable_mcs_build=no
4688    enable_support_build=no
4689    BTLS_SUPPORTED=no
4690    # Can't use tls, since it depends on the runtime detection of tls offsets
4691    # in mono-compiler.h
4692    with_tls=pthread
4693    target_mach=no
4694    case "$target" in
4695    wasm32*)
4696                 TARGET=WASM
4697                 arch_target=wasm
4698                 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4699                 ;;
4700    arm*-darwin*)
4701                 TARGET=ARM;
4702                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4703                 case "$target" in
4704                 armv7k-*)
4705                         arm_fpu=VFP_HARD
4706                         AC_DEFINE(TARGET_WATCHOS, 1, [...])
4707                         ;;
4708                 esac            
4709                 ;;
4710    powerpc64-ps3-linux-gnu)
4711                 TARGET=POWERPC64
4712                 arch_target=powerpc64
4713                 AC_DEFINE(TARGET_PS3, 1, [...])
4714                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4715                 # uses this define
4716                 AC_DEFINE(__mono_ppc64__, 1, [...])
4717                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4718                 sizeof_register=8
4719                 target_byte_order=G_BIG_ENDIAN
4720                 ;;
4721    powerpc64-xbox360-linux-gnu)
4722                 TARGET=POWERPC64
4723                 arch_target=powerpc64
4724                 AC_DEFINE(TARGET_XBOX360, 1, [...])
4725                 # It would be better to just use TARGET_POWERPC64, but lots of code already
4726                 # uses this define
4727                 sizeof_register=8
4728                 target_byte_order=G_BIG_ENDIAN
4729                 ;;
4730    arm*-linux-*)
4731                 TARGET=ARM;
4732                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4733                 ;;
4734    arm*-netbsd*-eabi*)
4735                 TARGET=ARM;
4736                 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4737                 ;;
4738    i686*-linux-*)
4739                 TARGET=X86;
4740                 ;;
4741    i*86-apple-*)
4742                 TARGET=X86;
4743                 ;;
4744    x86_64*-linux-*)
4745                 TARGET=AMD64;
4746                 ;;
4747    x86_64-ps4-freebsd)
4748                 TARGET=AMD64;
4749                 AC_DEFINE(TARGET_PS4, 1, [...])
4750                 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4751                 CPPFLAGS="$CPPFLAGS"
4752                 target_win32=no
4753                 ;;
4754         aarch64*darwin*_ilp32)
4755                 TARGET=ARM6432;
4756                 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4757                 sizeof_register=8
4758                 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4759                 ;;
4760         aarch64*darwin20*)
4761                 TARGET=ARM64
4762                 TARGET_SYS=OSX
4763                 ;;
4764         aarch64*darwin*)
4765                 TARGET=ARM64
4766                 TARGET_SYS=IOS
4767                 ;;
4768         aarch64-*)
4769                 TARGET=ARM64
4770                 ;;
4771         riscv32*)
4772                 TARGET=RISCV32
4773                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4774                 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4775                 arch_target=riscv32
4776                 target_mach=no
4777                 with_tls=pthread
4778                 ;;
4779         riscv64*)
4780                 TARGET=RISCV64
4781                 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4782                 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4783                 arch_target=riscv64
4784                 target_mach=no
4785                 with_tls=pthread
4786                 ;;
4787         x86_64-google-fuchsia)
4788                 TARGET=AMD64
4789                 target_win32=nop
4790                 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
4791                 ;;
4792         *)
4793                 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4794         esac
4796         case "$target" in
4797         *-darwin*)
4798                 target_mach=yes
4799                 ;;
4800         *-linux-android*)
4801                 AC_DEFINE(TARGET_ANDROID, 1, [...])
4802                 ;;
4803         esac
4806 case "$TARGET" in
4807 WASM)
4808         AC_DEFINE(TARGET_WASM, 1, [...])
4809         arch_target=wasm
4810         ;;
4811 X86)
4812         AC_DEFINE(TARGET_X86, 1, [...])
4813         arch_target=x86
4814         ;;
4815 AMD64)
4816         AC_DEFINE(TARGET_AMD64, 1, [...])
4817         arch_target=amd64
4818         ;;
4819 ARM)
4820         AC_DEFINE(TARGET_ARM, 1, [...])
4821         arch_target=arm
4822         ACCESS_UNALIGNED="no"
4823         ;;
4824 ARM64|ARM6432)
4825         AC_DEFINE(TARGET_ARM64, 1, [...])
4826         arch_target=arm64
4827         ;;
4828 POWERPC)
4829         AC_DEFINE(TARGET_POWERPC, 1, [...])
4830         ;;
4831 POWERPC64)
4832         AC_DEFINE(TARGET_POWERPC, 1, [...])
4833         AC_DEFINE(TARGET_POWERPC64, 1, [...])
4834         ;;
4835 S390X)
4836         AC_DEFINE(TARGET_S390X, 1, [...])
4837         ;;
4838 MIPS)
4839         AC_DEFINE(TARGET_MIPS, 1, [...])
4840         ;;
4841 SPARC)
4842         AC_DEFINE(TARGET_SPARC, 1, [...])
4843         ;;
4844 SPARC64)
4845         AC_DEFINE(TARGET_SPARC64, 1, [...])
4846         ;;
4847 RISCV32)
4848         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4849         AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4850         ;;
4851 RISCV64)
4852         AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4853         AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4854         ;;
4855 esac
4857 case "$TARGET" in
4858 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4859     target_sizeof_void_p=4
4860     ;;
4861 *64* | S390X)
4862     target_sizeof_void_p=8
4863     ;;
4865     AC_MSG_ERROR([unknown target])
4866     ;;
4867 esac
4869 case "$HOST" in
4870 WASM)
4871         AC_DEFINE(HOST_WASM, 1, [...])
4872         ;;
4873 X86)
4874         AC_DEFINE(HOST_X86, 1, [...])
4875         ;;
4876 AMD64)
4877         AC_DEFINE(HOST_AMD64, 1, [...])
4878         ;;
4879 ARM)
4880         AC_DEFINE(HOST_ARM, 1, [...])
4881         ;;
4882 ARM64)
4883         AC_DEFINE(HOST_ARM64, 1, [...])
4884         ;;
4885 POWERPC)
4886         AC_DEFINE(HOST_POWERPC, 1, [...])
4887         ;;
4888 POWERPC64)
4889         AC_DEFINE(HOST_POWERPC, 1, [...])
4890         AC_DEFINE(HOST_POWERPC64, 1, [...])
4891         ;;
4892 S390X)
4893         AC_DEFINE(HOST_S390X, 1, [...])
4894         ;;
4895 MIPS)
4896         AC_DEFINE(HOST_MIPS, 1, [...])
4897         ;;
4898 SPARC)
4899         AC_DEFINE(HOST_SPARC, 1, [...])
4900         ;;
4901 SPARC64)
4902         AC_DEFINE(HOST_SPARC64, 1, [...])
4903         ;;
4904 RISCV32)
4905         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4906         AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4907         ;;
4908 RISCV64)
4909         AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4910         AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4911         ;;
4912 esac
4914 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4915 case "$HOST" in
4916 X86 | AMD64 | ARM | ARM64)
4917         MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4918         ;;
4919 esac
4921 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4922 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4924 dnl *************
4925 dnl *** VTUNE ***
4926 dnl *************
4928 AC_ARG_ENABLE(vtune,[  --enable-vtune   Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4929 AC_ARG_WITH(vtune, [  --with-vtune=<vtune prefix>       Enable jit vtune profiling], enable_vtune=yes,)
4931 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4933 if test "x$enable_vtune" = "xyes"; then
4934         if test "x$with_vtune" = "x"; then
4935                 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4936         else
4937                 VTUNE_PATH=$with_vtune
4938         fi
4939         VTUNE_INCLUDE=$VTUNE_PATH/include
4940         case "$TARGET" in
4941         X86)
4942                 VTUNE_LIB=$VTUNE_PATH/lib32
4943                 ;;
4944         AMD64)
4945                 VTUNE_LIB=$VTUNE_PATH/lib64
4946                 ;;
4947         *)
4948                 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4949                 ;;
4950         esac
4951         if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4952                 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4953         fi
4954         if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4955                 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4956         fi
4958         VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4959         VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4961         AC_SUBST(VTUNE_LIBS)
4962         AC_SUBST(VTUNE_CFLAGS)
4964 dnl Use GCC atomic ops if they work on the target.
4965 if test x$GCC = "xyes"; then
4966         case $TARGET in
4967         X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4968                 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4969                 ;;
4970         esac
4973 if test "x$target_mach" = "xyes"; then
4975    if test "x$TARGET_SYS" = "xWATCHOS"; then
4976           AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4977           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4978           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4979           BTLS_SUPPORTED=no
4980    elif test "x$TARGET_SYS" = "xIOS" -o "x$TARGET" = "xARM" -o "x$TARGET" = "xARM6432"; then
4981           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4982           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4983           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4984           BTLS_SUPPORTED=no
4985           target_ios=yes
4986    else
4987        AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4988        #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4989        #error fail this for ios
4990        #endif
4991        ], [
4992                   AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4993           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4994           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4995           target_osx=yes
4996           if test "x$TARGET" = "xARM64"; then
4997              BTLS_SUPPORTED=no
4998           fi
4999        ], [
5000           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
5001           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
5002           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
5003           BTLS_SUPPORTED=no
5004                   target_ios=yes
5005        ])
5006         fi
5007    AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
5010 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
5012 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
5014 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
5015    AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
5016 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
5017    AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
5018 else
5019    AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
5022 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
5024 if test "x$sizeof_register" = "x4"; then
5025   AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
5026 elif test "x$sizeof_register" = "x8"; then
5027   AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
5028 else
5029   AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
5032 # zlib/configure detects visibility support similarly and defines HAVE_HIDDEN
5033 # on the compiler command line (not config.h).
5034 if test "x$have_visibility_hidden" = "xyes"; then
5035    AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
5036    ZLIB_CFLAGS="$ZLIB_CFLAGS -DHAVE_HIDDEN"
5039 if test "x$have_deprecated" = "xyes"; then
5040    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
5043 dnl 
5044 dnl Simple Generational checks (sgen)
5046 SGEN_DEFINES=
5047 AC_ARG_WITH(sgen,                    [  --with-sgen=yes,no             Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
5048 AC_ARG_WITH(sgen-default-concurrent, [  --with-sgen-default-concurrent=yes,no             Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
5049 if test x$buildsgen = xyes; then
5050    AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
5051    SGEN_DEFINES="-DHAVE_SGEN_GC"
5053         conc_gc_msg=""
5054    if test x$with_sgen_default_concurrent != xno; then
5055        AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
5056            conc_gc_msg=" (concurrent by default)"
5057    fi
5059    if test "x$gc_msg" = "x"; then
5060       gc_msg="sgen$conc_gc_msg"
5061    else
5062       gc_msg="sgen$conc_gc_msg and $gc_msg"
5063    fi
5065 AC_SUBST(SGEN_DEFINES)
5066 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
5068 jit_status="Building and using the JIT"
5070 libsuffix=".so"
5072 case "$host" in
5073      *-*-aix*)
5074         dnl on AIX/PASE, shared libraries can be and usually are inside archives
5075         dnl so, we specify them by libfoo.a(libfoo.so.0) for libtool's conventions,
5076         dnl or libfoo.a(shr[_64].o) for the AIX system convention,
5077         dnl or lib.so[.0](shr[_64].o) for libtool's hybrid convention
5078         dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX
5079         LIBC="libc.a(shr_64.o)"
5080         # Thanks, I hate it! This is crumbly, especially the one-liner.
5081         AC_MSG_CHECKING([how to dlopen libintl])
5082         AC_LINK_IFELSE([AC_LANG_SOURCE([
5083                 /* XXX: Check for libintl header/gettext func better? */
5084                 #include <libintl.h>
5086                 int main (void) {
5087                         gettext("Dummy for autoconf");
5088                         return 1;
5089                 }
5090         ])],
5091         [
5092         INTL="$(dump -X64 -Hp conftest$EXEEXT | grep libintl | cut -c 38- | tr -s " " | awk '{print $1"("$2")"}')"
5093         AC_MSG_RESULT([yes, $INTL])
5094         ],
5095         [
5096         INTL="libintl.a(libintl.so.8)"
5097         AC_MSG_RESULT([no, falling back to $INTL])
5098         ])
5099         SQLITE3="libsqlite3.a(libsqlite3.so.0)"
5100         # it's very tempting to set a libsuffix, but it depends on the soname value
5101         ;;
5102      *-*-os400*)
5103         dnl However, IBM's packages for i try to be more "normal" than the AIX world, naming wise.
5104         dnl The library archives has "normal" .so names, but they're members with predictable "shr" names for fat libraries.
5105         LIBC="libc.a(shr_64.o)"
5106         INTL="libintl.so(shr_64.o)"
5107         SQLITE3="libsqlite3.so(shr_64.o)"
5108         # 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
5109         # it may be worth revisiting this in the future
5110         ;;
5111      *-*-darwin*)
5112         libsuffix=".dylib"
5113         LIBC="libc.dylib"
5114         INTL="libintl.dylib"
5115         SQLITE="libsqlite.0.dylib"
5116         SQLITE3="libsqlite3.0.dylib"
5117         X11="libX11.dylib"
5118         GDKX11="libgdk-x11-2.0.dylib"
5119         GTKX11="libgtk-x11-2.0.dylib"
5120         ;;
5121      *-*-*netbsd*)
5122         LIBC="libc.so"
5123         INTL="libintl.so"
5124         SQLITE="libsqlite.so"
5125         SQLITE3="libsqlite3.so"
5126         ;;
5127      *-*-kfreebsd*-gnu)
5128         LIBC="libc.so.0.1"
5129         INTL="libc.so.0.1"
5130         X11="libX11.so.6"
5131         ;;
5132     *-*-*freebsd*)
5133         LIBC="libc.so.7"
5134         INTL="libintl.so"
5135         SQLITE="libsqlite.so"
5136         SQLITE3="libsqlite3.so"
5137         ;;
5138     *-*-*openbsd*)
5139         LIBC="libc.so"
5140         INTL="libintl.so"
5141         SQLITE="libsqlite.so"
5142         SQLITE3="libsqlite3.so"
5143         ;;
5144     *-*-*linux*)
5145                 AC_PATH_X
5146                 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
5147                 AC_MSG_CHECKING(for the soname of libX11.so)
5148                 for i in $x_libraries $dlsearch_path; do
5149                         for r in 4 5 6; do
5150                                 if test -f $i/libX11.so.$r; then
5151                                         X11=libX11.so.$r
5152                                         AC_MSG_RESULT($X11)
5153                                 fi
5154                         done
5155                 done
5156                 
5157                 if test "x$X11" = "xlibX11.so"; then
5158                         AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
5159                         X11=libX11.so.6
5160                 fi
5161         ;;
5162 esac
5164 AC_SUBST(libsuffix)
5166 ######################################
5167 # EGLIB CHECKS
5168 ######################################
5170 GNUC_PRETTY=
5171 GNUC_UNUSED=
5172 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
5173 if test x$GCC = xyes; then
5174    GNUC_UNUSED='__attribute__((__unused__))'
5175    GNUC_NORETURN='__attribute__((__noreturn__))'
5176    case $host_cpu in
5177      i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
5178    esac
5180 AC_SUBST(GNUC_PRETTY)
5181 AC_SUBST(GNUC_UNUSED)
5182 AC_SUBST(GNUC_NORETURN)
5183 AC_SUBST(BREAKPOINT)
5185 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
5187 case $host in
5188 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
5189     PATHSEP='\\'
5190     SEARCHSEP=';'
5191     OS="WIN32"
5192     PIDTYPE='void *'
5193     ;;
5195     PATHSEP='/'
5196     SEARCHSEP=':'
5197     OS="UNIX"
5198     PIDTYPE='int'
5199     ;;
5200 esac
5202 case $host in
5203         *-*-solaris*)
5204         CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
5205         ;;
5206 esac
5208 case $target in
5209 arm*-darwin*|aarch64*-*|riscv*)
5210     CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
5211     ;;
5212 i*86-*-darwin*)
5213     ORDER=G_LITTLE_ENDIAN
5214     ;;
5215 *-*-haiku*)
5216     LDFLAGS="$LDFLAGS -ltextencoding"
5217     ;;
5218 *-*-openbsd*)
5219     CFLAGS="$CFLAGS -pthread"
5220     LDFLAGS="$LDFLAGS -pthread"
5221     ;;
5222 esac
5224 AC_SUBST(ORDER)
5225 AC_SUBST(PATHSEP)
5226 AC_SUBST(SEARCHSEP)
5227 AC_SUBST(OS)
5228 AC_SUBST(PIDTYPE)
5230 # Defined for all targets/platforms using classic Windows API support.
5231 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
5232 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
5234 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
5235 AC_CHECK_FUNCS(getrlimit)
5236 AC_CHECK_FUNCS(fork execv execve)
5237 AC_CHECK_FUNCS(waitpid)
5239 AC_ARG_WITH([overridable-allocators], [  --with-overridable-allocators  allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
5241 if test x$with_overridable_allocators = xyes; then
5242         AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5243   AC_MSG_NOTICE([Overridable allocator support enabled])
5244 else
5245   AC_MSG_NOTICE([Overridable allocator support disabled])
5249 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
5250 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
5251 # removed once support for 10.6 is dropped.
5253 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
5255 if test x$target_osx = xyes; then
5256 AC_CHECK_FUNCS(getpwuid_r)
5257 elif test x$target_ios = xno; then
5258 AC_CHECK_FUNCS(strndup getpwuid_r)
5261 AC_SEARCH_LIBS(sqrtf, m)
5263 # nanosleep may not be part of libc, also search it in other libraries
5264 AC_SEARCH_LIBS(nanosleep, rt)
5266 AC_SEARCH_LIBS(dlopen, dl)
5268 # AIX/OS400 -bsymbolic
5269 # Apple -bind_at_load
5270 # The rest GNU.
5272 export_link_flags=--export-dynamic
5273 case $host_os in
5274 mingw*|cygwin*)
5275         export_link_flags=--export-all-symbols
5276         ;;
5277 *-*-darwin*)
5278         export_link_flags=--export_dynamic
5279         ;;
5280 esac
5281 AX_APPEND_LINK_FLAGS([-Wl,$export_link_flags -Wl,-Bsymbolic -bsymbolic -Wl,-z,now -Wl,-bind_at_load])
5283 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
5284 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
5285 AC_CHECK_LIB(iconv, iconv_open)
5286 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
5287 AC_SUBST(HAVE_ALLOCA_H)
5289 # Get the exact type of size_t, not just its size.
5290 # This is so we can find an exact printf format among u, lu, llu, I64u.
5291 # To avoid warnings about slight mismatches.
5292 # C99 runtime "zu" dependency is being avoided here.
5294 # We have to compile as C++ because C is too lenient
5295 # and lets the wrong thing compile, with warnings.
5297 # Note: "zu" or ifdef <something> have the advantage
5298 # of producing installable "biarch" headers. i.e. one Mac header
5299 # for Mac/x86 and Mac/amd64.
5301 AC_LANG_PUSH(C++)
5303 # Check long before int because it is the overwhelming Unix answer,
5304 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
5306 # long ahead of int also tends to produce biarch-compatible headers except Windows.
5308 AC_MSG_CHECKING(if size_t is unsigned long)
5309 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5310         #include <stddef.h>
5311         unsigned long *a = (size_t*)0;
5312 ])], [
5313         AC_MSG_RESULT(yes)
5314         AC_SUBST(GSIZE_FORMAT, '"lu"')
5315 ], [
5316         AC_MSG_RESULT(no)
5317         AC_MSG_CHECKING(if size_t is unsigned int)
5318         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5319                 #include <stddef.h>
5320                 unsigned *a = (size_t*)0;
5321         ])], [
5322                 AC_MSG_RESULT(yes)
5323                 AC_SUBST(GSIZE_FORMAT, '"u"')
5324         ], [
5325 # At this point the majority of systems have their answer,
5326 # and we descend into non-standard or new-standard territory.
5328 # Check __int64 first because I64 on some systems predates ll, enabling
5329 # new compiler/old runtime interop, and the types always have the same size.
5330                 AC_MSG_RESULT(no)
5331                 AC_MSG_CHECKING(if size_t is unsigned __int64)
5332                 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5333                         #include <stddef.h>
5334                         unsigned __int64 *a = (size_t*)0;
5335                 ])], [
5336                         AC_MSG_RESULT(yes)
5337                         AC_SUBST(GSIZE_FORMAT, '"I64u"')
5338                 ], [
5339                         AC_MSG_RESULT(no)
5340                         AC_MSG_CHECKING(if size_t is unsigned long long)
5341                         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5342                                 #include <stddef.h>
5343                                 unsigned long long *a = (size_t*)0;
5344                         ])], [
5345                                 AC_MSG_RESULT(yes)
5346                                 AC_SUBST(GSIZE_FORMAT, '"llu"')
5347                         ], [
5348                                 AC_MSG_RESULT(no)
5349                                 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
5350                         ] )
5351                 ] )
5352         ] )
5353 ] )
5355 AC_LANG_POP
5357 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
5358 # This provides for an exact match with functions that
5359 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
5360 # uintptr_t is not necessarily the same.
5362 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
5363 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
5365 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
5366    GSIZE="size_t"
5367    GSSIZE="ptrdiff_t"
5368 else
5369    GSIZE="uintptr_t"
5370    GSSIZE="intptr_t"
5373 AC_SUBST(GSIZE)
5374 AC_SUBST(GSSIZE)
5375 AC_SUBST(GSIZE_FORMAT)
5378 # END OF EGLIB CHECKS
5381 AC_ARG_WITH([libgdiplus],
5382         [  --with-libgdiplus=installed|sibling|<path>   Override the libgdiplus used for System.Drawing tests (defaults to installed)],
5383         [], [with_libgdiplus=installed])
5385 # default install location
5386 libgdiplus_install_loc=libgdiplus${libsuffix}
5387 case "$host" in
5388     *-*-*linux*)
5389     libgdiplus_install_loc=libgdiplus${libsuffix}.0
5390     ;;
5391 esac
5393 case $with_libgdiplus in
5394     no)
5395     libgdiplus_loc=
5396     ;;
5398     installed)
5399     libgdiplus_loc=
5400     if test x$cross_compiling = xno; then
5401         if test x$host_darwin = xyes; then
5402             a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
5403             if test -x $a; then
5404               libgdiplus_install_loc=$a
5405               libgdiplus_loc=$a
5406             fi
5407         fi
5408     fi
5409     ;;
5411     yes|sibling)
5412     libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5413     ;;
5415     /*) # absolute path, assume it is an install location
5416     libgdiplus_loc=$with_libgdiplus
5417     libgdiplus_install_loc=$with_libgdiplus
5418     ;;
5420     *)
5421     libgdiplus_loc=`pwd`/$with_libgdiplus
5422     ;;
5423 esac
5424 AC_SUBST(libgdiplus_loc)
5425 AC_SUBST(libgdiplus_install_loc)
5427 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)
5428 if test "x$icall_symbol_map" = "xyes"; then
5429    AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5432 AC_ARG_ENABLE(icall-export,[  --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5433 if test "x$icall_export" = "xyes"; then
5434    AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5437 AC_ARG_ENABLE(icall-tables,[  --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5438 if test "x$icall_tables" = "xno"; then
5439    AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5442 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5444 if test "x$with_tls" = "x__thread"; then
5445         AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5446         # Pass the information to libgc
5447         CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5448         AC_MSG_CHECKING(if the tls_model attribute is supported)
5449         AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5450                 ], [
5451                         AC_MSG_RESULT(yes)
5452                         AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5453                 ], [
5454                         AC_MSG_RESULT(no)
5455         ])
5458 if test ${TARGET} = ARM; then
5459         dnl ******************************************
5460         dnl *** Check to see what FPU is available ***
5461         dnl ******************************************
5462         AC_MSG_CHECKING(which FPU to use)
5464         #
5465         # This is a bit tricky:
5466         #
5467         # if (__ARM_PCS_VFP) {
5468         #       /* mfloat-abi=hard == VFP with hard ABI */
5469         # } elif (!__SOFTFP__) {
5470         #       /* mfloat-abi=softfp == VFP with soft ABI */
5471         # } else {
5472         #       /* mfloat-abi=soft == no VFP */
5473         # }
5474         #
5475         # The exception is iOS (w/ GCC) where none of the above
5476         # are defined (but iOS always uses the 'softfp' ABI).
5477         #
5478         # No support for FPA.
5479         #
5481         fpu=NONE
5483         # iOS GCC always uses the 'softfp' ABI.
5484         if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5485                 fpu=VFP
5486         fi
5488         # Are we using the 'hard' ABI?
5489         if test x$fpu = xNONE; then
5490                 AC_TRY_COMPILE([], [
5491                         #ifndef __ARM_PCS_VFP
5492                         #error "Float ABI is not 'hard'"
5493                         #endif
5494                 ], [
5495                         fpu=VFP_HARD
5496                 ], [
5497                         fpu=NONE
5498                 ])
5499         fi
5501         # No 'hard' ABI. 'soft' or 'softfp'?
5502         if test x$fpu = xNONE; then
5503                 AC_TRY_COMPILE([], [
5504                         #ifdef __SOFTFP__
5505                         #error "Float ABI is not 'softfp'"
5506                         #endif
5507                 ], [
5508                         fpu=VFP
5509                 ], [
5510                         fpu=NONE
5511                 ])
5512         fi
5514         if test x$arm_fpu != x; then
5515            fpu=$arm_fpu
5516         fi
5518         AC_MSG_RESULT($fpu)
5519         CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5520         unset fpu
5522         dnl *********************************************
5523         dnl *** Check which ARM version(s) we can use ***
5524         dnl *********************************************
5525         AC_MSG_CHECKING(which ARM version to use)
5527         AC_TRY_COMPILE([], [
5528                 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5529                 #error Not on ARM v5.
5530                 #endif
5531         ], [
5532                 arm_v5=yes
5534                 arm_ver=ARMv5
5535         ], [])
5537         AC_TRY_COMPILE([], [
5538                 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5539                 #error Not on ARM v6.
5540                 #endif
5541         ], [
5542                 arm_v5=yes
5543                 arm_v6=yes
5545                 arm_ver=ARMv6
5546         ], [])
5548         AC_TRY_COMPILE([], [
5549                 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5550                 #error Not on ARM v7.
5551                 #endif
5552         ], [
5553                 arm_v5=yes
5554                 arm_v6=yes
5555                 arm_v7=yes
5557                 arm_ver=ARMv7
5558         ], [])
5560         AC_MSG_RESULT($arm_ver)
5562         if test x$arm_v5 = xyes; then
5563                 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5564                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5565         fi
5567         if test x$arm_v6 = xyes; then
5568                 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5569                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5570         fi
5572         if test x$arm_v7 = xyes; then
5573                 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5574                 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5575         fi
5577         if test x$host_linux = xyes; then
5578                 RID="linux-arm"
5579                 COREARCH="arm"
5580                 if test x$fpu = xNONE; then
5581                         RID="linux-armel"
5582                         COREARCH="armel"
5583                 fi
5584         fi
5587 AC_SUBST(RID)
5588 AC_SUBST(COREARCH)
5589 AC_SUBST(CORETARGETS)
5591 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5592         AC_ARG_WITH([riscv-fpabi], [  --with-riscv-fpabi=auto,double,soft   Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5594         AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5596         if test x$fpabi = xauto; then
5597                 AC_TRY_COMPILE([], [
5598                         #ifdef __riscv_float_abi_double
5599                         #error "double"
5600                         #endif
5601                 ], [
5602                         fpabi=auto
5603                 ], [
5604                         fpabi=double
5605                 ])
5606         fi
5608         if test x$fpabi = xauto; then
5609                 AC_TRY_COMPILE([], [
5610                         #ifdef __riscv_float_abi_single
5611                         #error "single"
5612                         #endif
5613                 ], [
5614                         fpabi=auto
5615                 ], [
5616                         fpabi=single
5617                 ])
5618         fi
5620         if test x$fpabi = xauto; then
5621                 AC_TRY_COMPILE([], [
5622                         #ifdef __riscv_float_abi_soft
5623                         #error "soft"
5624                         #endif
5625                 ], [
5626                         fpabi=auto
5627                 ], [
5628                         fpabi=soft
5629                 ])
5630         fi
5632         case $fpabi in
5633         double)
5634                 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5635                 AC_MSG_RESULT([double-precision])
5636                 ;;
5637         single)
5638                 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5639                 AC_MSG_ERROR([single-precision, not supported])
5640                 ;;
5641         soft)
5642                 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5643                 AC_MSG_RESULT([soft float])
5644                 ;;
5645         auto)
5646                 AC_MSG_ERROR([unknown])
5647                 ;;
5648         *)
5649                 AC_MSG_ERROR([invalid option: $fpabi])
5650                 ;;
5651         esac
5654 if test ${TARGET} = unknown; then
5655         CPPFLAGS="$CPPFLAGS -DNO_PORT"
5656         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5659 if test "x$platform_android" = "xyes"; then
5660         case "x${TARGET}" in
5661         xARM)
5662                 case "x$arm_ver" in
5663                 xARMv5)
5664                         BTLS_SUPPORTED=yes
5665                         BTLS_PLATFORM=android-armv5
5666                         ;;
5667                 xARMv6)
5668                         BTLS_SUPPORTED=yes
5669                         BTLS_PLATFORM=android-armv6
5670                         ;;
5671                 xARMv7)
5672                         BTLS_SUPPORTED=yes
5673                         BTLS_PLATFORM=android-armv7
5674                         ;;
5675                 *)
5676                         BTLS_SUPPORTED=no
5677                         ;;
5678                 esac
5679                 ;;
5680         xARM64)
5681                 BTLS_SUPPORTED=yes
5682                 BTLS_PLATFORM=android-v8a
5683                 ;;
5684         xX86)
5685                 BTLS_SUPPORTED=yes
5686                 BTLS_PLATFORM=android-x86
5687                 ;;
5688         xAMD64)
5689                 BTLS_SUPPORTED=yes
5690                 BTLS_PLATFORM=android-x64
5691                 ;;
5692         *)
5693                 BTLS_SUPPORTED=no
5694                 ;;
5695         esac
5698 if test ${ACCESS_UNALIGNED} = no; then
5699         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5702 if test x$host_darwin = xyes; then
5703         AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5704         AS_IF(
5705                 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5706                 [AC_MSG_RESULT([no])],
5707                 [
5708                         # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5709                         AR_FLAGS="Scru"
5710                         RANLIB="$RANLIB -no_warning_for_no_symbols"
5711                         AC_MSG_RESULT([yes])
5712                 ]
5713         )
5716 case "x$libgc" in
5717         xincluded)
5718                 # Pass CPPFLAGS to libgc configure
5719                 # We should use a separate variable for this to avoid passing useless and
5720                 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5721                 # This should be executed late so we pick up the final version of CPPFLAGS
5722                 # The problem with this approach, is that during a reconfigure, the main
5723                 # configure scripts gets invoked with these arguments, so we use separate
5724                 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5725                 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5726                 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5727                         TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5728                 fi
5729                 # Don't pass -finstrument-for-thread-suspension in, 
5730                 # if these are instrumented it will be very bad news 
5731                 # (infinite recursion, undefined parking behavior, etc)
5732                 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5733                 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\""
5734                 if test "x$support_boehm" = "xyes"; then
5735                         AC_CONFIG_SUBDIRS(external/bdwgc)
5736                 fi
5737                 ;;
5738 esac
5740 MALLOC_MEMPOOLS=no
5741 AC_ARG_WITH(malloc_mempools,[  --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5742         if test x$with_malloc_mempools = xyes; then
5743                 MALLOC_MEMPOOLS=yes
5744                 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5745         fi
5749 DISABLE_MCS_DOCS=default
5750 AC_ARG_WITH(mcs_docs,[  --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)],[
5751         if test x$with_mcs_docs != xyes; then
5752                 DISABLE_MCS_DOCS=yes
5753         fi
5755 if test -n "$INSTALL_4_x_TRUE"; then :
5756         DISABLE_MCS_DOCS=yes
5758 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5759    DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5762 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)],[
5763         if test x$with_lazy_gc_thread_creation != xno ; then
5764                 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5765         fi
5766 ], [with_lazy_gc_thread_creation=no])
5768 dnl *****************************
5769 dnl *** Thread suspend policy ***
5770 dnl *****************************
5772 dnl Set a default hybrid or cooperative suspend on some platforms
5774 dnl Coop default is set by the bitcode preset.
5776 dnl If coop isn't on by default, maybe hybrid should be?
5777 if test x$enable_cooperative_suspend_default != xyes; then
5778         case $HOST in
5779         X86 | AMD64)
5780                 dnl Some host/target confusion, there's no host_osx (and
5781                 dnl host_darwin would be true on iOS not just macOS).
5782                 if test x$target_osx = xyes; then
5783                         enable_hybrid_suspend_default=yes
5784                 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5785                         enable_hybrid_suspend_default=yes
5786                 fi
5787                 ;;
5788         esac
5791 dnl Now check if there were flags overriding the defaults
5793 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])
5794 AC_ARG_ENABLE(cooperative_suspend, [  --enable-cooperative-suspend      Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5796 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5797         enable_cooperative_suspend=$with_cooperative_gc
5800 if test x$enable_cooperative_suspend = xdefault; then
5801         enable_cooperative_suspend=$enable_cooperative_suspend_default
5804 if test x$enable_cooperative_suspend != xno; then
5805         AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5806         enable_hybrid_suspend_default=no
5809 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5811 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])
5813 if test x$enable_hybrid_suspend = xdefault; then
5814    enable_hybrid_suspend=$enable_hybrid_suspend_default
5817 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5818         AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5821 if test x$enable_hybrid_suspend != xno ; then
5822         AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5825 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5827 dnl End of thread suspend policy
5829 dnl ***************************
5830 dnl *** feature experiments ***
5831 dnl ***************************
5833 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5834 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST       Enable experimental fatures from the comma-separate LIST.  Available experiments: null,tiered],[
5836         if test x$enable_experiment != x ; then
5837                 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5838         fi
5839         for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5840                 eval "mono_experiment_test_enable_$feature='yes'"
5841         done
5843         if test "x$mono_experiment_test_enable_all" = "xyes"; then
5844                 eval "mono_experiment_test_enable_null='yes'"
5845                 eval "mono_experiment_test_enable_tiered='yes'"
5846                 true
5847         fi
5849         if test "x$mono_experiment_test_enable_null" = "xyes"; then
5850                 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5851         fi
5852         if test "x$mono_experiment_test_enable_tiered" = "xyes"; then
5853                 AC_DEFINE(ENABLE_EXPERIMENT_TIERED, 1, [Enable experiment 'Tiered Compilation'])
5854         fi
5855 ],[])
5857 AM_CONDITIONAL(ENABLE_EXPERIMENT_TIERED, test x$mono_experiment_test_enable_tiered = xyes)
5859 dnl **********************
5860 dnl *** checked builds ***
5861 dnl **********************
5863 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],[
5865         if test x$enable_checked_build != x ; then
5866                 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5867         fi
5868         for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5869                 eval "mono_checked_build_test_enable_$feature='yes'"
5870         done
5872         if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5873                 eval "mono_checked_build_test_enable_gc='yes'"
5874                 eval "mono_checked_build_test_enable_metadata='yes'"
5875                 eval "mono_checked_build_test_enable_thread='yes'"
5876                 eval "mono_checked_build_test_enable_private_types='yes'"
5877                 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5878         fi
5880         if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5881                 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5882         fi
5884         if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5885                 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5886         fi
5888         if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5889                 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5890         fi
5892         if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5893                 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5894         fi
5896         if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5897                 # Required
5898                 with_overridable_allocators=yes
5899                 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5901                 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5902         fi
5903 ], [])
5905 dnl End of checked builds
5907 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5909 AC_CHECK_HEADER([malloc.h], 
5910                 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
5911                         [Define to 1 if you have /usr/include/malloc.h.])],,)
5913 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5914 # instead of libmono-static.a
5915 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5916    LIBMONO_LA=libmini-static.la
5917 else
5918    if test x$buildsgen = xyes; then
5919       LIBMONO_LA=libmonosgen-$API_VER.la
5920    else
5921       LIBMONO_LA=libmonoboehm-$API_VER.la
5922    fi
5924 AC_SUBST(LIBMONO_LA)
5926 dnl **************
5927 dnl ***  Btls  ***
5928 dnl **************
5930 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5931 AC_ARG_ENABLE(btls-lib, [  --disable-btls-lib             Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5932 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
5933 AC_ARG_WITH(btls_android_api, [  --with-btls-android-api        Android NDK API level for BTLS build])
5934 AC_ARG_WITH(btls_android_cmake_toolchain, [  --with-btls-android-cmake-toolchain        Path to the cmake toolchain file for Android])
5935 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])
5937 if test "x$with_btls_android_api" = "x" ; then
5938         case "$BTLS_PLATFORM" in
5939                 android-armv5)
5940                         with_btls_android_api=16" ;;
5941                 android-armv6)
5942                         with_btls_android_api=16" ;;
5943                 android-armv7)
5944                         with_btls_android_api=16 ;;
5945                 android-v8a)
5946                         with_btls_android_api=21 ;;
5947                 android-x86)
5948                         with_btls_android_api=16 ;;
5949                 android-x64)
5950                         with_btls_android_api=21 ;;
5951         esac
5954 if test "x$enable_btls" = "xno"; then
5955    enable_btls_lib=no
5958 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5960 btls_android=no
5961 if test "x$enable_btls" = "xyes"; then
5962         AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5963         if test "x$CMAKE" = "xno"; then
5964                 AC_MSG_ERROR("cmake not found")
5965         fi
5967         BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5968         AC_SUBST(BTLS_ROOT)
5970         btls_arch=
5971         btls_cflags=
5972         BTLS_CMAKE_ARGS=
5974         if test "x$host_win32" = "xyes"; then
5975                 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5976         fi
5978         case "$BTLS_PLATFORM" in
5979         i386)
5980                 btls_arch=i386
5981                 btls_cflags="-m32"
5982                 case $host_os in
5983                         darwin*)
5984                                 btls_cflags="$btls_cflags -arch i386"
5985                                 ;;
5986                         mingw*|cygwin*)
5987                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5988                                 if test "x$HAVE_YASM" != "xyes"; then
5989                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5990                                 fi
5991                                 ;;
5992                 esac
5993                 ;;
5994         x86_64)
5995                 btls_arch=x86_64
5996                 case $host_os in
5997                         mingw*|cygwin*)
5998                                 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5999                                 if test "x$HAVE_YASM" != "xyes"; then
6000                                         BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
6001                                 fi
6002                                 ;;
6003                 esac
6004                 ;;
6005         arm)
6006                 btls_arch=arm
6007                 btls_cflags="-DOPENSSL_NO_ASM=1"
6008                 ;;
6009         armsoft)
6010                 btls_arch=arm
6011                 btls_cflags="-DOPENSSL_NO_ASM=1"
6012                 ;;
6013         aarch64)
6014                 btls_arch=aarch64
6015                 btls_cflags="-march=armv8-a+crypto"
6016                 ;;
6017         s390x)
6018                 btls_arch=s390x
6019                 ;;
6020         powerpc)
6021                 btls_arch=powerpc
6022                 case $host_os in
6023                         aix*|os400*)
6024                                 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
6025                                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
6026                 esac
6027                 ;;
6028         android-armv5)
6029                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6030                 ;;
6031         android-armv6)
6032                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6033                 ;;
6034         android-armv7)
6035                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6036                 ;;
6037         android-v8a)
6038                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6039                 ;;
6040         android-x86)
6041                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6042                 ;;
6043         android-x64)
6044                 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6045                 ;;
6046         riscv32)
6047                 btls_arch=riscv32
6048                 ;;
6049         riscv64)
6050                 btls_arch=riscv64
6051                 ;;
6052         *)
6053                 AC_MSG_ERROR(Invalid BTLS platform)
6054         esac
6056         if test "x$platform_android" = "xyes"; then
6057                 if test "x$with_btls_android_cmake_toolchain" = "x"; then
6058                    with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
6059                 fi
6061                 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
6062                    BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
6063                 fi
6065                 btls_android=yes
6066                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
6067                 if test "x$with_btls_android_ndk" != "x"; then
6068                         BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
6069                 else
6070                         AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
6071                 fi
6072         fi
6074         if test "x$btls_arch" != "x"; then
6075                 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
6076         fi
6078         BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
6079         AC_SUBST(BTLS_ARCH)
6080         AC_SUBST(BTLS_CFLAGS)
6081         AC_SUBST(BTLS_PLATFORM)
6082         AC_SUBST(BTLS_CMAKE_ARGS)
6084         AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
6085 else
6086         enable_btls=no
6089 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
6091 ## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
6092 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
6093 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
6095 libmono_ldflags="$libmono_ldflags $LIBS"
6097 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
6098 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
6099 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
6100 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
6101 AM_CONDITIONAL(X86, test x$TARGET = xX86)
6102 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
6103 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
6104 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
6105 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
6106 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
6107 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
6108 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
6109 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
6110 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
6111 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
6112 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
6113 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
6114 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
6115 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
6116 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
6117 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
6118 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
6119 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
6120 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
6122 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
6124 AC_SUBST(LIBC)
6125 AC_SUBST(INTL)
6126 AC_SUBST(SQLITE)
6127 AC_SUBST(SQLITE3)
6128 AC_SUBST(ODBC)
6129 AC_SUBST(X11)
6130 AC_SUBST(GDKX11)
6131 AC_SUBST(GTKX11)
6132 AC_SUBST(XINERAMA)
6133 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
6134 AC_SUBST(arch_target)
6136 #This must always be defined when building the runtime
6137 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
6139 mono_build_root=`pwd`
6140 AC_SUBST(mono_build_root)
6142 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)
6143 if test x$host_win32 = xno; then
6144         if test x$enable_msvc_only = xyes; then
6145                 echo "Error, --enable-msvc-only only supported for Windows builds."
6146                 exit 1
6147         fi
6149 AM_CONDITIONAL(ENABLE_MSVC_ONLY, test x$enable_msvc_only = xyes)
6151 AC_ARG_ENABLE(msvc,[  --enable-msvc    Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
6152 if test x$host_win32 = xno; then
6153         if test x$enable_msvc = xyes; then
6154                 echo "Error, --enable-msvc only supported for Windows builds."
6155                 exit 1
6156         fi
6158 if test x$enable_msvc_only = xyes; then
6159         enable_msvc=yes
6161 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
6163 if test "x$enable_msvc" = "xyes"; then
6164         mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
6165         if test "x$host_cpu" = "xi686"; then
6166                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
6167                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
6168                 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
6169                 mono_runtime_wrapper=$mono_runtime
6170         else
6171                 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
6172                 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
6173                 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
6174                 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
6175         fi
6176         AC_SUBST(mono_msvc_build_dir)
6177         AC_SUBST(mono_msvc_build_lib_dir)
6178         AC_SUBST(mono_msvc_build_bin_dir)
6179 else
6180         mono_runtime=mono/mini/mono
6181         mono_runtime_wrapper=$mono_runtime
6184 AC_SUBST(mono_runtime)
6185 AC_SUBST(mono_runtime_wrapper)
6187 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.9.0/csc.exe
6188 VBCS_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.9.0/VBCSCompiler.exe
6190 if test $csc_compiler = mcs; then
6191   CSC=$mcs_topdir/class/lib/build/mcs.exe
6192 else
6193   CSC=$CSC_LOCATION
6196 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
6198 mono_cfg_root=$mono_build_root/runtime
6199 if test x$host_win32 = xyes; then
6200   if test "x$cross_compiling" = "xno"; then
6201     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
6202     CSC=`cygpath -m -a $CSC`
6203     CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
6204     VBCS_LOCATION=`cygpath -m -a $VBCS_LOCATION`
6205   else
6206     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
6207   fi
6208 else
6209   mono_cfg_dir=$mono_cfg_root/etc
6212 if test "x$platform_android" = "xyes"; then
6213   mono_cfg_dir=
6216 AC_SUBST(mono_cfg_dir)
6218 AC_SUBST(CSC)
6220 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
6221 [   depth=../../../..
6222         case $srcdir in
6223         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6224         .) reldir=$depth ;;
6225         *) reldir=$depth/$srcdir ;;
6226         esac
6227         $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
6228         cd runtime/etc/mono/1.0
6229         rm -f machine.config
6230         $LN_S $reldir/data/net_1_1/machine.config machine.config
6231         cd $depth
6232 ],[LN_S='$LN_S'])
6234 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
6235 [   depth=../../../..
6236         case $srcdir in
6237         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6238         .) reldir=$depth ;;
6239         *) reldir=$depth/$srcdir ;;
6240         esac
6241         $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6242         cd runtime/etc/mono/2.0
6243         rm -f machine.config
6244         $LN_S $reldir/data/net_2_0/machine.config machine.config
6245         cd $depth
6246 ],[LN_S='$LN_S'])
6248 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
6249 [   depth=../../../..
6250         case $srcdir in
6251         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6252         .) reldir=$depth ;;
6253         *) reldir=$depth/$srcdir ;;
6254         esac
6255         $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6256         cd runtime/etc/mono/2.0
6257         rm -f web.config
6258         $LN_S $reldir/data/net_2_0/web.config web.config
6259         cd $depth
6260 ],[LN_S='$LN_S'])
6262 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
6263 [   depth=../../..
6264         case $srcdir in
6265         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6266         .) reldir=$depth ;;
6267         *) reldir=$depth/$srcdir ;;
6268         esac
6269         $ac_aux_dir/install-sh -d runtime/etc/mono/
6270         cd runtime/etc/mono/
6271         rm -f browscap.ini
6272         $LN_S $reldir/data/browscap.ini browscap.ini
6273         cd $depth
6274 ],[LN_S='$LN_S'])
6276 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
6277 [   depth=../../../../..
6278         case $srcdir in
6279         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6280         .) reldir=$depth ;;
6281         *) reldir=$depth/$srcdir ;;
6282         esac
6283         $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
6284         cd runtime/etc/mono/2.0/Browsers
6285         rm -f Compat.browser
6286         $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6287         cd $depth
6288 ],[LN_S='$LN_S'])
6290 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
6291 [   depth=../../../../..
6292         case $srcdir in
6293         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6294         .) reldir=$depth ;;
6295         *) reldir=$depth/$srcdir ;;
6296         esac
6297         $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
6298         cd runtime/etc/mono/4.0/Browsers
6299         rm -f Compat.browser
6300         $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6301         cd $depth
6302 ],[LN_S='$LN_S'])
6304 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
6305 [   depth=../../../../..
6306         case $srcdir in
6307         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6308         .) reldir=$depth ;;
6309         *) reldir=$depth/$srcdir ;;
6310         esac
6311         $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
6312         cd runtime/etc/mono/4.5/Browsers
6313         rm -f Compat.browser
6314         $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6315         cd $depth
6316 ],[LN_S='$LN_S'])
6318 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
6319 [   depth=../../../..
6320         case $srcdir in
6321         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6322         .) reldir=$depth ;;
6323         *) reldir=$depth/$srcdir ;;
6324         esac
6325         $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6326         cd runtime/etc/mono/4.0
6327         rm -f machine.config
6328         $LN_S $reldir/data/net_4_0/machine.config machine.config
6329         cd $depth
6330 ],[LN_S='$LN_S'])
6332 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
6333 [   depth=../../../..
6334         case $srcdir in
6335         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6336         .) reldir=$depth ;;
6337         *) reldir=$depth/$srcdir ;;
6338         esac
6339         $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6340         cd runtime/etc/mono/4.0
6341         rm -f web.config
6342         $LN_S $reldir/data/net_4_0/web.config web.config
6343         cd $depth
6344 ],[LN_S='$LN_S'])
6346 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
6347 [   depth=../../../..
6348         case $srcdir in
6349         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6350         .) reldir=$depth ;;
6351         *) reldir=$depth/$srcdir ;;
6352         esac
6353         $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6354         cd runtime/etc/mono/4.5
6355         rm -f machine.config
6356         $LN_S $reldir/data/net_4_5/machine.config machine.config
6357         cd $depth
6358 ],[LN_S='$LN_S'])
6360 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
6361 [   depth=../../../..
6362         case $srcdir in
6363         [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6364         .) reldir=$depth ;;
6365         *) reldir=$depth/$srcdir ;;
6366         esac
6367         $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6368         cd runtime/etc/mono/4.5
6369         rm -f web.config
6370         $LN_S $reldir/data/net_4_5/web.config web.config
6371         cd $depth
6372 ],[LN_S='$LN_S'])
6374 # Top level Makefile.am subdirs
6375 if test "x$support_boehm" = "xyes" -a "x$libgc" = "xincluded"; then
6376         mono_subdirs_libgc=external/bdwgc
6379 if test x$enable_support_build != xno; then
6380         mono_subdirs_support=support
6383 if test x$cross_compiling = xno; then
6384         # Some tools might not build when cross-compiling
6385         mono_subdirs_tools=tools
6388 if test x$DISABLE_MCS_DOCS != xyes; then
6389         mono_subdirs_docs=docs
6392 if test x$with_ikvm_native = xyes; then
6393         mono_subdirs_ikvm_native=ikvm-native
6396 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"
6397 MONO_NOINST_SUBDIRS="$mono_subdirs_libgc"
6399 AC_SUBST(MONO_SUBDIRS)
6400 AC_SUBST(MONO_NOINST_SUBDIRS)
6402 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])
6403 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])
6404 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
6407 # Mono.Native Support
6408 # -------------------
6409 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
6410 # It is built as a stand-alone shared library and not bundled with the runtime because we
6411 # may need to build two different versions of it.
6413 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
6414 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
6416 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
6417 # implementation accordingly.  We build a single `libmono-native` shared library.
6419 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
6421 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
6422 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
6423 # depending on platform.
6425 # We build two versions of the shared library:
6426 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
6427 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
6429 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
6430 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
6431 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
6433 # This can be called by automated tests both to ensure that the library has been correctly installed and also
6434 # to verify that it's the correct version of it.
6437 AC_MSG_CHECKING([Mono.Native support])
6438 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
6439 if test x$disable_mono_native = xyes; then
6440         mono_native=no
6441 elif test x$target_osx = xyes; then
6442         MONO_NATIVE_CC=$CC
6443         MONO_NATIVE_CXX=$CXX
6444         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6445         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6446         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6447         MONO_NATIVE_CFLAGS=$CFLAGS
6448         MONO_NATIVE_LDFLAGS=$LDFLAGS
6450         mono_native=yes
6451         MONO_NATIVE_PLATFORM=macos
6452         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
6454         if test x$enable_gss = xyes; then
6455                 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -framework GSS"
6456         fi
6458         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
6459                 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6461         if test x$mono_native_compat = xyes; then
6462                 mono_native_compat=yes
6463                 mono_native_text="Mac OSX (compat + unified v10.12)"
6464                 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6465                 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6466                 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6467                 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6468                 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6470                 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6471                 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6472                 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6473                 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6474                 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6475                 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6476         else
6477                 mono_native_compat=no
6478                 mono_native_text="Mac OSX"
6479         fi
6480 elif test x$mono_native_platform_ios = xyes; then
6481         AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6483         AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6484                 if test x$mono_native_ios_sim = xyes; then
6485                         mono_native_ios_target=ios-simulator
6486                         mono_native_text="iOS Simulator"
6487                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6488                 else
6489                         mono_native_ios_target=iphoneos
6490                         mono_native_text="iOS Device"
6491                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6492                 fi
6493                 mono_native_unified_version="10.0"
6494                 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6495         ], [
6496                 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6497                         if test x$mono_native_ios_sim = xyes; then
6498                                 mono_native_ios_target=tvos-simulator
6499                                 mono_native_text="AppleTV Simulator"
6500                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6501                         else
6502                                 mono_native_ios_target=tvos
6503                                 mono_native_text="AppleTV Device"
6504                                 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6505                         fi
6506                         mono_native_unified_version="10.0"
6507                         mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6508                 ], [
6509                         AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6510                                 if test x$mono_native_ios_sim = xyes; then
6511                                         mono_native_ios_target=watchos-simulator
6512                                         mono_native_text="Apple Watch Simulator"
6513                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6514                                 else
6515                                         mono_native_ios_target=watchos
6516                                         mono_native_text="Apple Watch Device"
6517                                         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6518                                 fi
6519                                 mono_native_unified_version="5.0"
6520                                 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6521                         ], [
6522                                 AC_MSG_ERROR([Unknown iOS Target])
6523                         ])
6524                 ])
6525         ])
6527         AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6529         if test x$with_bitcode = xyes; then
6530                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6531                 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6532         else
6533                 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6534         fi
6536         if test x$enable_gss = xyes; then
6537                 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6538         fi
6540         MONO_NATIVE_CC=$CC
6541         MONO_NATIVE_CXX=$CXX
6542         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6543         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6544         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6545         MONO_NATIVE_CFLAGS=$CFLAGS
6546         MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6548         if test x$mono_native_compat = xyes; then
6549                 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6550                 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6551                 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6552                 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6553                 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6554                 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6556                 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6557                 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6558                 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6559                 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6560                 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6561                 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"
6562         fi
6564         mono_native=yes
6565         MONO_NATIVE_PLATFORM=ios
6566 elif test x$host_linux = xyes; then
6567         mono_native_text="Linux"
6568         MONO_NATIVE_CC=$CC
6569         MONO_NATIVE_CXX=$CXX
6570         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6571         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6572         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6573         MONO_NATIVE_CFLAGS=$CFLAGS
6574         MONO_NATIVE_LDFLAGS=$LDFLAGS
6575         if test x$enable_gss = xyes; then
6576                 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -lgssapi_krb5"
6577         else
6578                 AC_MSG_WARN([GSS is not enabled, it requires libkrb5-dev package])
6579         fi
6580         mono_native=yes
6581         mono_native_compat=no
6582         MONO_NATIVE_PLATFORM=linux
6584         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6585 elif test x$target_wasm = xyes; then
6586         mono_native_text="wasm"
6587         MONO_NATIVE_CC=$CC
6588         MONO_NATIVE_CXX=$CXX
6589         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6590         # The system.native code uses _WASM_ to check for wasm
6591         MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6592         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6593         MONO_NATIVE_CFLAGS=$CFLAGS
6594         MONO_NATIVE_LDFLAGS=$LDFLAGS
6596         mono_native=yes
6597         mono_native_compat=no
6598         MONO_NATIVE_PLATFORM=linux
6600         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6601 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6602         mono_native_text="AIX"
6603         MONO_NATIVE_CC=$CC
6604         MONO_NATIVE_CXX=$CXX
6605         MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6606         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6607         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6608         MONO_NATIVE_CFLAGS=$CFLAGS
6609         dnl nosymbolic- is a hack in case -G for linking is used, as -G seems
6610         dnl to change the way unresolved symbols work on library load in an
6611         dnl incompatible manner. (as references to runtime functions are
6612         dnl resolved later) Default params otherwise are that, so seems OK.
6613         dnl Likewise, we don't seem to need to cover the entire runtime with
6614         dnl it either, on both AIX and PASE. -brtl from -G does seem to spew
6615         dnl Big Scary TOC Warnings (tm) from the linker, but it doesn't seem
6616         dnl problematic with gcc's -mminimal-toc.
6617         dnl ----
6618         dnl flock in AIX exists in libbsd (not the same as freedesktop.org
6619         dnl libbsd) which Mono.Native needs.
6620         dnl Because of the way that the library is built by default, unresolved
6621         dnl references are kept and resolved at runtime. Often, the dependency
6622         dnl chain means libbsd is loaded anyways, but not necessarily. It's
6623         dnl better to explicitly link it, even though it has it shadows libc's
6624         dnl ioctl with its own. (As for the other unresolved imports, those
6625         dnl should be provided by the Mono runtime loaded.)
6626         MONO_NATIVE_LDFLAGS="$LDFLAGS -lbsd -Wl,-bnosymbolic-"
6628         mono_native=yes
6629         mono_native_compat=no
6630         MONO_NATIVE_PLATFORM=aix
6632         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6633 elif case $host_os in freebsd*) true;; *) false;; esac; then
6634         mono_native_text="FreeBSD"
6635         MONO_NATIVE_CC=$CC
6636         MONO_NATIVE_CXX=$CXX
6637         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6638         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6639         MONO_NATIVE_CFLAGS="$CFLAGS -I/usr/local/include"
6640         MONO_NATIVE_LDFLAGS=$LDFLAGS
6642         mono_native=yes
6643         mono_native_compat=no
6644         MONO_NATIVE_PLATFORM=freebsd
6645         AC_MSG_CHECKING([Mono.Native support])
6646         AC_MSG_RESULT(freebsd)
6648         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_FREEBSD"
6649 elif case $host_os in netbsd*) true;; *) false;; esac; then
6650         mono_native_text="NetBSD"
6651         MONO_NATIVE_CC=$CC
6652         MONO_NATIVE_CXX=$CXX
6653         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6654         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6655         MONO_NATIVE_CFLAGS=$CFLAGS
6656         MONO_NATIVE_LDFLAGS=$LDFLAGS
6658         mono_native=yes
6659         mono_native_compat=no
6660         MONO_NATIVE_PLATFORM=netbsd
6661         AC_MSG_CHECKING([Mono.Native support])
6662         AC_MSG_RESULT(netbsd)
6664         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_NETBSD"
6665 elif case $host_os in haiku*) true;; *) false;; esac; then
6666         mono_native_text="Haiku"
6667         MONO_NATIVE_CC=$CC
6668         MONO_NATIVE_CXX=$CXX
6669         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6670         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6671         MONO_NATIVE_CFLAGS=$CFLAGS
6672         MONO_NATIVE_LDFLAGS=$LDFLAGS
6674         mono_native=yes
6675         mono_native_compat=no
6676         MONO_NATIVE_PLATFORM=haiku
6677         AC_MSG_CHECKING([Mono.Native support])
6678         AC_MSG_RESULT(haiku)
6680         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_HAIKU"
6681 elif test x$platform_android = xyes; then
6682         mono_native_text="Android"
6683         MONO_NATIVE_CC=$CC
6684         MONO_NATIVE_CXX=$CXX
6685         MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6686         MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6687         MONO_NATIVE_CFLAGS=$CFLAGS
6688         MONO_NATIVE_LDFLAGS=$LDFLAGS
6689         MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6691         mono_native=yes
6692         mono_native_compat=no
6693         MONO_NATIVE_PLATFORM=android
6695         MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6696 else
6697         mono_native=no
6698         mono_native_text="no"
6701 AC_MSG_RESULT($mono_native_text)
6703 if test x$mono_native_compat = xyes; then
6704         MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6705 else
6706         MONO_NATIVE_LIBRARY_NAME=libmono-native
6709 AC_SUBST(MONO_NATIVE_PLATFORM)
6710 AC_SUBST(MONO_NATIVE_CC)
6711 AC_SUBST(MONO_NATIVE_CXX)
6712 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6713 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6714 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6715 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6716 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6717 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6718 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6719 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6720 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6721 AC_SUBST(MONO_NATIVE_CFLAGS)
6722 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6723 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6724 AC_SUBST(MONO_NATIVE_LDFLAGS)
6725 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6726 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6727 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6728 AC_SUBST(MONO_NATIVE_LIBADD)
6730 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6731 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6732 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6733 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6734 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6735 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6736 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6737 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_FREEBSD, test x$MONO_NATIVE_PLATFORM = xfreebsd)
6738 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_NETBSD, test x$MONO_NATIVE_PLATFORM = xnetbsd)
6739 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_HAIKU, test x$MONO_NATIVE_PLATFORM = xhaiku)
6741 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6742 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6743 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6744 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6745 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6747 ### C++ Linker selection
6749 # We have to lie to autotools, sometimes.
6751 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6752 # otherwise to CC.  We want C linking even if we're compiling with C++ enabled
6753 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6754 # except if we're linking with LLVM which relies on it.
6756 # Explanation of the hack:
6758 # According to
6759 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6760 # automake chooses the linker that it used to compile a target based on the
6761 # _SOURCES for that target.  If the target is comprised of only C code, it
6762 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6763 # linker arguments and a -o).  If the target _SOURCES include at least one C++ file, 
6764 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6766 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6767 # or libc++) linked in - even when Mono is written in C++, we take care not to
6768 # require the runtime library.  As a result, we don't want g++ or clang++ to do
6769 # the linking.  On the other hand if LLVM is enabled, then we _must_ use the
6770 # C++ linker - LLVM doesn't have the same restrictions.
6772 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6773 #  mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6774 #  automake's autodetection and lets us use the linker that we want.
6776 if test "x$enable_llvm_runtime" = "xyes"; then
6777         AC_SUBST(MONO_CXXLD, [$CXX])
6778         AC_SUBST(MONO_LIBTOOL_TAG, '--tag=CXX')
6779 else
6780         AC_SUBST(MONO_CXXLD, [$CC])
6781         AC_SUBST(MONO_LIBTOOL_TAG, '')
6784 ### Set -Werror options
6786 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6788 if test x"$GCC" = xyes; then
6790         if test "x$with_jemalloc" != "xyes"; then
6792                 # incompatible-pointer-types requires gcc circa 5.x
6794                 ORIG_CFLAGS=$CFLAGS
6795                 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6796                 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6797                 AC_TRY_COMPILE([],[
6798                 ], [
6799                         AC_MSG_RESULT(yes)
6800                         CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6801                 ], [
6802                         AC_MSG_RESULT(no)
6803                         CFLAGS=$ORIG_CFLAGS
6804                 ])
6806                 CFLAGS="$CFLAGS -Werror=return-type"
6807         fi
6809         # Implicit function declarations are not 64 bit safe
6810         # Do this late, since this causes lots of configure tests to fail
6811         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6812         # jay has a lot of implicit declarations
6813         JAY_CFLAGS="-Wno-implicit-function-declaration"
6815         ORIG_CFLAGS=$CFLAGS
6816         CFLAGS="$CFLAGS -Wsometimes-uninitialized -Werror"
6817         AC_MSG_CHECKING(for -Wsometimes-uninitialized option to gcc)
6818         AC_TRY_COMPILE([],[
6819         ], [
6820                 AC_MSG_RESULT(yes)
6821                 CFLAGS="$ORIG_CFLAGS -Werror=sometimes-uninitialized"
6822         ], [
6823                 AC_MSG_RESULT(no)
6824                 CFLAGS=$ORIG_CFLAGS
6825         ])
6828 # zlib/configure checks if this program compiles and if so
6829 # defines _LARGEFILE64_SOURCE on the compiler command line (not config.h).
6831 AC_MSG_CHECKING([for large file support])
6832 AC_COMPILE_IFELSE(
6833         [AC_LANG_SOURCE([
6834                 #include <sys/types.h>
6835                 off64_t dummy = 0;
6836         ])], [
6837                 AC_MSG_RESULT(yes)
6838                 # FIXME The ramifications of _LARGEFILE64_SOURCE are not understood.
6839                 # ZLIB_CFLAGS="$ZLIB_CFLAGS -D_LARGEFILE64_SOURCE=1"
6840         ], [
6841                 AC_MSG_RESULT(no)
6842         ])
6844 AC_SUBST(CFLAGS)
6845 AC_SUBST(CPPFLAGS)
6846 AC_SUBST(LDFLAGS)
6847 AC_SUBST(CCLDFLAGS)
6848 AC_SUBST(ZLIB_CFLAGS)
6850 # Update all submodules recursively to ensure everything is checked out
6851 (cd $srcdir && scripts/update_submodules.sh)
6853 AC_MONO_OUTPUT()
6855 if test x$host_win32 = xyes; then
6856    # Get rid of 'cyg' prefixes in library names
6857    sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6858    # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6859    # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6860    # executable doesn't work...
6861    sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6864 if test x$host_darwin = xyes; then
6865    # This doesn't seem to be required and it slows down parallel builds
6866    sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6870   case $prefix in
6871   NONE) prefix=$ac_default_prefix ;;
6872   esac
6873   case $exec_prefix in
6874   NONE) exec_prefix='${prefix}' ;;
6875   esac
6877   #
6878   # If we are cross compiling, we don't build in the mcs/ tree.  Let us not clobber
6879   # any existing config.make.  This allows people to share the same source tree
6880   # with different build directories, one native and one cross
6881   #
6882   if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6884     test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6886     echo "prefix=$prefix" > $mcs_topdir/build/config.make
6887     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6888     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6889     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6890     echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6891     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6892     echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6893     echo "VERSION = $VERSION" >> $mcs_topdir/build/config.make
6895     case $INSTALL in
6896     [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6897     *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6898     esac
6900     echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6902     export VERSION
6903     [myver=$($AWK 'BEGIN {
6904       split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6905       if(length(vsplit [1]) > 4) {
6906         split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6907       }
6908       print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6909     }')]
6911     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6912     echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6914     if test x$host_darwin = xyes; then
6915       echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6916       echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6917       echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6918     elif test x$host_win32 = xyes; then
6919       echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6920       echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6921       echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6922     elif test x$host_linux = xyes; then
6923       echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6924       echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6925       echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6926     else
6927       echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6928       echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6929       echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6930     fi
6932     echo "PLATFORM_AOT_PREFIX = $PLATFORM_AOT_PREFIX" >> $mcs_topdir/build/config.make
6933     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6934       echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6935     fi
6937         if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6938            enable_system_aot=yes
6939         fi
6941     if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6942       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6943     fi
6945     if test x$DISABLE_MCS_DOCS = xyes; then
6946       echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6947     fi
6949     if test x$has_extension_module != xno; then
6950         echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6951     fi
6952     
6953     echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6954     
6955     if test "x$test_bcl_opt" = "xyes"; then    
6956       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6957     fi
6959     echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6960     echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6961     echo "VBCS_LOCATION?=$VBCS_LOCATION" >> $srcdir/$mcsdir/build/config.make
6963     if test $csc_compiler = mcs; then
6964       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6965     fi
6967     if test "x$AOT_BUILD_FLAGS" != "x" ; then
6968       echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6969       echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6971       if test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" = "xno"; then
6972         echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS,$MONO_LLVM_PATH_OPTION" >> $srcdir/$mcsdir/build/config.make
6973       else
6974         echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6975       fi
6976     fi
6978     if test "x$AOT_MODE" != "x" ; then
6979       echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6980     fi
6982     if test "x$enable_btls" = "xyes"; then
6983       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6984     fi
6986     if test "x$mono_native" = "xyes"; then
6987       echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6988     else
6989       echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6990     fi
6992     if test x$mono_native_compat = xyes; then
6993       echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6994     else
6995       echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6996     fi
6998     force_enable_compiler_server=no;
7000     AC_MSG_CHECKING([compiler server])
7001     AC_ARG_WITH(compiler-server, [  --with-compiler-server=yes,no,default,force      Enables or disables compiler server],[
7002        if test x$withval = xyes; then
7003            enable_compiler_server=yes;
7004        # force will bypass any automatic disables to allow you to test the compiler server
7005        #  in scenarios where it is disabled
7006        elif test x$withval = xforce; then
7007            enable_compiler_server=yes;
7008            force_enable_compiler_server=yes;
7009        elif test x$withval = xno; then
7010            enable_compiler_server=no;
7011        elif test x$withval = xdefault; then
7012            enable_compiler_server=yes;
7013        else
7014            AC_MSG_ERROR([You must supply one of "yes", "no", "default" or "force" to the --with-compiler-server option])
7015        fi
7016     ],[enable_compiler_server=yes])
7018     AC_MSG_RESULT($enable_compiler_server)
7020     if test x$enable_compiler_server = xyes; then
7021        if test x$force_enable_compiler_server = xyes; then
7022            AC_MSG_WARN([forcing compiler server to stay enabled])
7023        elif test x$host_darwin = xyes || test x$host_win32 = xyes; then
7024            AC_MSG_WARN([compiler server temporarily disabled on darwin and win32])
7025            enable_compiler_server=no;
7026        elif test x$csc_compiler = xmcs; then
7027            AC_MSG_WARN([mcs does not support the compiler server])
7028            enable_compiler_server=no;
7029        fi
7030     fi
7032     echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
7033     echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
7034     if test x$enable_compiler_server = xyes; then
7035       echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
7036     else
7037       echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
7038     fi
7039     echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
7041         if test x$enable_msvc_only = xyes; then
7042                 echo "ENABLE_MSVC_ONLY=1" >> $srcdir/$mcsdir/build/config.make
7043         fi
7045   fi
7049 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
7051 btls_platform_string=
7052 if test x$enable_btls = xyes; then
7053         if test x$btls_android = xyes; then
7054                 btls_platform_string=" (android:$BTLS_PLATFORM)"
7055         else
7056                 btls_platform_string=" ($BTLS_PLATFORM)"
7057         fi
7060 thread_suspend_msg=
7061 if test x$buildsgen = xyes; then
7062         if test x$enable_cooperative_suspend != xno; then
7063                 thread_suspend_msg="Suspend:       Cooperative"
7064         elif test x$enable_hybrid_suspend != xno; then
7065                 thread_suspend_msg="Suspend:       Hybrid"
7066         else
7067                 thread_suspend_msg="Suspend:       Preemptive"
7068         fi
7071 echo "
7072         mcs source:    $mcsdir
7073         C# Compiler:   $csc_compiler
7074         CompilerServer:$enable_compiler_server
7076    Engine:
7077         Host:          $host
7078         Target:        $target
7079         GC:            $gc_msg 
7080         $thread_suspend_msg
7081         TLS:           $with_tls
7082         SIGALTSTACK:   $with_sigaltstack
7083         Engine:        $jit_status
7084         BigArrays:     $enable_big_arrays
7085         DTrace:        $enable_dtrace
7086         LLVM Back End: $enable_llvm (built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
7087         Spectre:       $spectre_mitigation_status
7088         Mono.Native:   $mono_native_text
7090    Libraries:
7091         .NET 4.x:        $with_profile4_x
7092         Xamarin.Android: $with_monodroid
7093         Xamarin.iOS:     $with_monotouch
7094         Xamarin.WatchOS: $with_monotouch_watch
7095         Xamarin.TVOS:    $with_monotouch_tv
7096         Xamarin.Mac:     $with_xammac
7097         Windows AOT:     $with_winaot
7098         Orbis:           $with_orbis
7099         Unreal:          $with_unreal
7100         WebAssembly:     $with_wasm
7101         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)
7102         JNI support:     $jdk_headers_found
7103         libgdiplus:      $libgdiplus_msg
7104         zlib:            $zlib_msg
7105         BTLS:            $enable_btls$btls_platform_string
7106         CGROUP:          $ac_cv_header_linux_cgroupstats_h
7107         jemalloc:        $with_jemalloc (always use: $with_jemalloc_always)
7108         crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
7109         $disabled
7111 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
7112    AC_MSG_WARN([Turning off static Mono is a risk, you might run into unexpected bugs])