"Fossies" - the Fresh Open Source Software Archive

Member "mono-6.12.0.122/configure.ac" (22 Feb 2021, 224969 Bytes) of package /linux/misc/mono-sources/mono/mono-6.12.0.122.tar.xz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "configure.ac": 6.12.0.107_vs_6.12.0.122.

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