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