[msvc] Update csproj files (#5220)
[mono.git] / configure.ac
index 36cdb61b5fb186c908f874d740c6dc043dcb0a08..b14ee03463ca4ae4dee7aba63fe7d58846d91a2c 100644 (file)
@@ -1,8 +1,7 @@
 # Process this file with autoconf to produce a configure script.
 #AC_PREREQ([2.62])
 
-# when bumping version number below, keep it in sync with man/mono.1 too
-AC_INIT(mono, [4.9.0],
+AC_INIT(mono, [5.5.0],
         [http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono])
 
 AC_CONFIG_SRCDIR([README.md])
@@ -29,6 +28,24 @@ AC_PROG_LN_S
 
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
+MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
+MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
+MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
+
+# This is the version number of the corlib-runtime interface. When
+# making changes to this interface (by changing the layout
+# of classes the runtime knows about, changing icall signature or
+# semantics etc), increment this variable.
+#
+# This can be reset to 0 when Mono's version number is bumped
+# since it's part of the corlib version (the prefix '1' in the full
+# version number is to ensure the number isn't treated as octal in C)
+MONO_CORLIB_COUNTER=2
+MONO_CORLIB_VERSION=`printf "1%02d%02d%02d%03d" $MONO_VERSION_MAJOR $MONO_VERSION_MINOR $MONO_VERSION_BUILD $MONO_CORLIB_COUNTER`
+
+AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,$MONO_CORLIB_VERSION,[Version of the corlib-runtime interface])
+AC_SUBST(MONO_CORLIB_VERSION)
+
 case $host_os in
 *cygwin* )
                 echo "Run configure using ./configure --host=i686-pc-mingw32"
@@ -216,9 +233,6 @@ case "$host" in
                CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
                CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
 
-               # The configure check can't detect this
-               AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
-
                # to bypass the underscore linker check, can't work when cross-compiling
                mono_cv_uscore=yes
                mono_cv_clang=no
@@ -250,17 +264,8 @@ case "$host" in
                with_sgen_default_concurrent=yes
                ;;
        *-*-nacl*)
-               CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
-               if test "x$disable_munmap" != "xyes"; then
-                       CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
-               fi
-               libmono_cflags="-D_REENTRANT"
-               libdl=
-               libgc_threads=pthreads
-               use_sigposix=yes
-               ikvm_native=no
-               AC_DEFINE(DISABLE_SOCKETS,1,[Disable sockets support])
-               AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
+               echo "nacl no longer supported."
+               exit 1
                ;;
        *-*-hpux*)
                CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
@@ -334,9 +339,13 @@ case "$host" in
                CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
                libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
                libdl=
-               LIBS="$LIBS -lnetwork"
+               LIBS="$LIBS -lnetwork -ltextencoding"
                need_link_unlink=yes
                AC_DEFINE(PTHREAD_POINTER_ID)
+               dnl Haiku does not support static TLS with __thread
+               with_tls=pthread
+               dnl Boehm is too much work to backport Haiku support for
+               support_boehm=no
                libgc_threads=pthreads
                use_sigposix=yes
                ;;
@@ -379,6 +388,10 @@ if test -z "$PLATFORM_LINUX_TRUE"; then :
 PLATFORM_AOT_SUFFIX=.so
 fi
 
+if test -z "$HOST_WIN32_TRUE"; then :
+PLATFORM_AOT_SUFFIX=.dll
+fi
+
 AC_SUBST(PLATFORM_AOT_SUFFIX)
 
 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
@@ -432,6 +445,10 @@ AC_HEADER_STDC
 AC_LIBTOOL_WIN32_DLL
 # This causes monodis to not link correctly
 #AC_DISABLE_FAST_INSTALL
+
+#lookup makedev() header
+AC_HEADER_MAJOR
+
 AM_PROG_LIBTOOL
 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
 DOLT
@@ -717,10 +734,6 @@ fi
 
 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
 
-case $host in
-*nacl* ) with_shared_mono=yes;;
-esac
-
 if test "x$host_win32" = "xyes"; then
    # Boehm GC requires the runtime to be in its own dll
    with_static_mono=no
@@ -758,25 +771,52 @@ fi
 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)
 
 DISABLED_FEATURES=none
+csc_compiler=default
+endian=unknown
+AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
+AC_MSG_CHECKING([CSharp compiler to use])
+AC_ARG_WITH(csc, [  --with-csc=mcs,roslyn,default      Configures the CSharp compiler to use],[
+   if test x$withval = xmcs; then
+       csc_compiler=mcs
+   elif test x$withval = xroslyn; then
+       csc_compiler=roslyn
+   elif test x$withval = xdefault; then
+       :
+   else
+       AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
+   fi
+],[csc_compiler=default])
 
-
-AC_ARG_WITH(mcs-compiler, [  --with-mcs-compiler=yes,no      Changes C# compiler used for compilation to be mcs instead of default csc],[],[with_mcs_compiler=no])
+if test $csc_compiler = default; then
+   if test $endian = big; then
+      csc_compiler=mcs
+   elif test $endian = little; then
+      csc_compiler=roslyn
+   else
+      csc_compiler=mcs
+   fi
+fi
+AC_MSG_RESULT($csc_compiler)
 
 #
 # Set the build profiles and options before things which use them
 #
 
-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])
-AC_ARG_WITH(monodroid,       [  --with-monodroid=yes,no         If you want to build the MonoDroid assemblies (defaults to no)],      [], [with_monodroid=default])
-AC_ARG_WITH(monotouch,       [  --with-monotouch=yes,no         If you want to build the Xamarin.iOS assemblies (defaults to no)],    [], [with_monotouch=default])
-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])
-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])
-AC_ARG_WITH(bitcode,         [  --with-bitcode=yes,no           If bitcode is enabled (defaults to no)],                              [], [with_bitcode=default])
-AC_ARG_WITH(xammac,          [  --with-xammac=yes,no            If you want to build the Xamarin.Mac assemblies (defaults to no)],    [], [with_xammac=default])
-AC_ARG_WITH(aot_hybrid,      [  --with-aot_hybrid=yes,no        If you want to build the aot_hybrid assemblies (defaults to no)],     [], [with_aot_hybrid=default])
-AC_ARG_WITH(aot_only,        [  --with-aot_only=yes,no          If you want to build the aot_only assemblies (defaults to no)],       [], [with_aot_only=default])
+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])
+AC_ARG_WITH(monodroid,           [  --with-monodroid=yes,no             If you want to build the MonoDroid assemblies (defaults to no)],            [], [with_monodroid=default])
+AC_ARG_WITH(monotouch,           [  --with-monotouch=yes,no             If you want to build the Xamarin.iOS assemblies (defaults to no)],          [], [with_monotouch=default])
+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])
+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])
+AC_ARG_WITH(bitcode,             [  --with-bitcode=yes,no               If bitcode is enabled (defaults to no)],                                    [], [with_bitcode=default])
+AC_ARG_WITH(xammac,              [  --with-xammac=yes,no                If you want to build the Xamarin.Mac assemblies (defaults to no)],          [], [with_xammac=default])
+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])
+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])
+AC_ARG_WITH(winaot,              [  --with-winaot=yes,no                If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
+AC_ARG_WITH(orbis,               [  --with-orbis=yes,no                 If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
+AC_ARG_WITH(unreal,              [  --with-unreal=yes,no                If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
+
 
-AC_ARG_WITH(runtime_preset, [  --with-runtime_preset=net_4_x,all,aot_preferred,aot_only,bitcode_aot_only   Which default profile to build (defaults to net_4_x)],  [], [with_runtime_preset=net_4_x])
+AC_ARG_WITH(runtime_preset, [  --with-runtime_preset=net_4_x,all,aot,hybridaot,fullaot,bitcode   Which default profile to build (defaults to net_4_x)],  [], [with_runtime_preset=net_4_x])
 
 dnl
 dnl Profile defaults
@@ -790,8 +830,11 @@ with_monotouch_default=no
 with_monotouch_watch_default=no
 with_monotouch_tv_default=no
 with_xammac_default=no
-with_aot_hybrid_default=no
-with_aot_only_default=no
+with_testing_aot_hybrid_default=no
+with_testing_aot_full_default=no
+with_winaot_default=no
+with_orbis_default=no
+with_unreal_default=no
 
 with_bitcode_default=no
 with_cooperative_gc_default=no
@@ -809,10 +852,13 @@ elif test x$with_runtime_preset = xall; then
    with_monotouch_watch_default=yes
    with_monotouch_tv_default=yes
    with_xammac_default=yes
-elif test x$with_runtime_preset = xaot_only; then
+   with_winaot_default=yes
+   with_orbis_default=yes
+   with_unreal_default=yes
+elif test x$with_runtime_preset = xfullaot; then
    DISABLE_MCS_DOCS_default=yes
-   with_aot_only_default=yes
-   TEST_PROFILE=aot_only 
+   with_testing_aot_full_default=yes
+   TEST_PROFILE=testing_aot_full
 
    mono_feature_disable_com='yes'
    mono_feature_disable_remoting='yes'
@@ -820,14 +866,15 @@ elif test x$with_runtime_preset = xaot_only; then
    mono_feature_disable_reflection_emit='yes'
    mono_feature_disable_appdomains='yes'
 
-   AOT_BUILD_FLAGS="-O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
-   AOT_RUN_FLAGS="--full-aot"
-elif test x$with_runtime_preset = xbitcode_aot_only; then
+   AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
+
+   AOT_RUN_FLAGS="--runtime=mobile --full-aot"
+elif test x$with_runtime_preset = xbitcode; then
    DISABLE_MCS_DOCS_default=yes
-   with_aot_only_default=yes
+   with_testing_aot_full_default=yes
    with_bitcode_default=yes
    with_cooperative_gc_default=yes
-   TEST_PROFILE=aot_only 
+   TEST_PROFILE=testing_aot_full
    enable_llvm_default=yes
 
    mono_feature_disable_com='yes'
@@ -836,20 +883,59 @@ elif test x$with_runtime_preset = xbitcode_aot_only; then
    mono_feature_disable_reflection_emit='yes'
    mono_feature_disable_appdomains='yes'
 
-   AOT_BUILD_FLAGS="--aot=llvmonly,$INVARIANT_AOT_OPTIONS"
-   AOT_RUN_FLAGS="--llvmonly"
-elif test x$with_runtime_preset = xaot_preferred; then
+   AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
+   AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
+elif test x$with_runtime_preset = xhybridaot; then
    DISABLE_MCS_DOCS_default=yes
-   with_aot_hybrid_default=yes
-   TEST_PROFILE=aot_hybrid 
-   enable_llvm_default=yes
+   with_testing_aot_hybrid_default=yes
+   TEST_PROFILE=testing_aot_hybrid 
+
+   AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
+   AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
+elif test x$with_runtime_preset = xaot; then
+   with_profile4_x_default=yes
+
+   AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
+   AOT_RUN_FLAGS=""
+
+   DISABLE_MCS_DOCS_default=yes
+elif test x$with_runtime_preset = xwinaot; then
+   DISABLE_MCS_DOCS_default=yes
+   with_winaot_default=yes
+   TEST_PROFILE=winaot
 
    mono_feature_disable_com='yes'
    mono_feature_disable_remoting='yes'
+   mono_feature_disable_reflection_emit_save='yes'
+   mono_feature_disable_reflection_emit='yes'
    mono_feature_disable_appdomains='yes'
 
-   AOT_BUILD_FLAGS="--aot=hybrid,$INVARIANT_AOT_OPTIONS"
-   AOT_RUN_FLAGS="--hybrid-aot"
+   AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
+   AOT_RUN_FLAGS="--runtime=mobile --full-aot"
+elif test x$with_runtime_preset = xorbis; then
+   DISABLE_MCS_DOCS_default=yes
+   with_orbis_default=yes
+   TEST_PROFILE=orbis
+
+   mono_feature_disable_com='yes'
+   mono_feature_disable_remoting='yes'
+   mono_feature_disable_reflection_emit_save='yes'
+   mono_feature_disable_reflection_emit='yes'
+   mono_feature_disable_appdomains='yes'
+
+   AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
+   AOT_RUN_FLAGS="--runtime=mobile --full-aot"
+elif test x$with_runtime_preset = xunreal; then
+   DISABLE_MCS_DOCS_default=yes
+   with_unreal_default=yes
+   TEST_PROFILE=ounreal
+
+   mono_feature_disable_com='yes'
+   mono_feature_disable_remoting='yes'
+   mono_feature_disable_appdomains='yes'
+
+   AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
+   AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
 else
    with_profile4_x_default=yes
 fi
@@ -884,13 +970,23 @@ fi
 if test "x$with_xammac" = "xdefault"; then
    with_xammac=$with_xammac_default
 fi
-if test "x$with_aot_hybrid" = "xdefault"; then
-   with_aot_hybrid=$with_aot_hybrid_default
+if test "x$with_testing_aot_hybrid" = "xdefault"; then
+   with_testing_aot_hybrid=$with_testing_aot_hybrid_default
+fi
+if test "x$with_testing_aot_full" = "xdefault"; then
+   with_testing_aot_full=$with_testing_aot_full_default
+fi
+if test "x$with_winaot" = "xdefault"; then
+   with_winaot=$with_winaot_default
+fi
+if test "x$with_orbis" = "xdefault"; then
+   with_orbis=$with_orbis_default
 fi
-if test "x$with_aot_only" = "xdefault"; then
-   with_aot_only=$with_aot_only_default
+if test "x$with_unreal" = "xdefault"; then
+   with_unreal=$with_unreal_default
 fi
 
+
 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
@@ -898,11 +994,13 @@ AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"]
 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
-AM_CONDITIONAL(INSTALL_AOT_HYBRID, [test "x$with_aot_hybrid" != "xno"])
-AM_CONDITIONAL(INSTALL_AOT_ONLY, [test "x$with_aot_only" != "xno"])
-
-AC_SUBST(INSTALL_AOT_HYBRID)
-AC_SUBST(INSTALL_AOT_ONLY)
+AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
+AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
+AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
+AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
+AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
+AM_CONDITIONAL(FULL_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full"] || [test "x$TEST_PROFILE" = "xwinaot"] || [test "x$TEST_PROFILE" = "xorbis"])
+AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
 
 default_profile=net_4_x
 if test -z "$INSTALL_MONODROID_TRUE"; then :
@@ -914,11 +1012,20 @@ fi
 if test -z "$INSTALL_XAMMAC_TRUE"; then :
    default_profile=xammac
 fi
-if test -z "$INSTALL_AOT_HYBRID_TRUE"; then :
-   default_profile=aot_hybrid
+if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
+   default_profile=testing_aot_hybrid
+fi
+if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
+   default_profile=testing_aot_full
+fi
+if test -z "$INSTALL_WINAOT_TRUE"; then :
+   default_profile=winaot
+fi
+if test -z "$INSTALL_ORBIS_TRUE"; then :
+   default_profile=orbis
 fi
-if test -z "$INSTALL_AOT_ONLY_TRUE"; then :
-   default_profile=aot_only
+if test -z "$INSTALL_UNREAL_TRUE"; then :
+   default_profile=unreal
 fi
 if test -z "$INSTALL_4_x_TRUE"; then :
    default_profile=net_4_x
@@ -932,26 +1039,26 @@ AC_SUBST(DEFAULT_PROFILE)
 
 if test x$USE_NLS = xprofile_default; then
 
-if test x$host_darwin = xyes; then
-# We make the default value for USE_NLS
-# "no" on OSX because it isn't available on most
-# default OSX installs. The most common configurations will
-# all disable it, so this saves us typing.
-  USE_NLS=no
-  AC_SUBST([USE_NLS])
-  AC_MSG_RESULT([$USE_NLS])
-else
-  USE_NLS=yes
-  AC_SUBST([USE_NLS])
-  AC_MSG_RESULT([$USE_NLS])
-fi
+       AC_MSG_CHECKING([NLS used])
+
+       # We make the default value for USE_NLS
+       # "no" on OSX because it isn't available on most
+       # default OSX installs. The most common configurations will
+       # all disable it, so this saves us typing.
+       if test x$host_darwin = xyes; then
+               USE_NLS=no;
+       else
+               USE_NLS=yes;
+       fi
 
+       AC_SUBST([USE_NLS])
+       AC_MSG_RESULT([$USE_NLS])
 fi
 
 AC_ARG_ENABLE(minimal, [  --enable-minimal=LIST      drop support for LIST subsystems.
      LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, 
-     reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, simd, soft_debug, perfcounters, normalization, assembly_remapping, shared_perfcounters, remoting,
-        security, sgen_remset, sgen_marksweep_par, sgen_marksweep_fixed, sgen_marksweep_fixed_par, sgen_copying.],
+     reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
+        security, lldb, mdb, sgen_remset, sgen_marksweep_par, sgen_marksweep_fixed, sgen_marksweep_fixed_par, sgen_copying.],
 [
        for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
                eval "mono_feature_disable_$feature='yes'"
@@ -1040,11 +1147,6 @@ if test "x$mono_feature_disable_attach" = "xyes"; then
        AC_MSG_NOTICE([Disabled agent attach])
 fi
 
-if test "x$mono_feature_disable_full_messages" = "xyes"; then
-       AC_DEFINE(DISABLE_FULL_MESSAGES, 1, [Disables building in the full table of WAPI messages])
-       AC_MSG_NOTICE([Disabled full messages for Win32 errors, only core message strings shipped])
-fi
-
 if test "x$mono_feature_disable_verifier" = "xyes"; then
        AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
        AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
@@ -1076,9 +1178,10 @@ if test "x$mono_feature_disable_normalization" = "xyes"; then
        AC_MSG_NOTICE([Disabled String normalization support.])
 fi
 
-if test "x$mono_feature_disable_assembly_remapping" = "xyes"; then
-       AC_DEFINE(DISABLE_ASSEMBLY_REMAPPING, 1, [Disable assembly remapping.])
-       AC_MSG_NOTICE([Disabled Assembly remapping.])
+#TODO: remove assembly_remapping feature name once everyone is using desktop_loader
+if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
+       AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
+       AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
 fi
 
 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
@@ -1101,6 +1204,16 @@ if test "x$mono_feature_disable_security" = "xyes"; then
        AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
 fi
 
+if test "x$mono_feature_disable_lldb" = "xyes"; then
+       AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
+       AC_MSG_NOTICE([Disabled LLDB plugin support code.])
+fi
+
+if test "x$mono_feature_disable_mdb" = "xyes"; then
+       AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
+       AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
+fi
+
 if test "x$mono_feature_disable_sgen_remset" = "xyes"; then
        AC_DEFINE(DISABLE_SGEN_REMSET, 1, [Disable wbarrier=remset support in SGEN.])
        AC_MSG_NOTICE([Disabled wbarrier=remset support in SGEN.])
@@ -1170,7 +1283,7 @@ dnl
 dnl Boehm GC configuration
 dnl
 
-AC_ARG_WITH(libgc,   [  --with-gc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_gc],[libgc=included])
+AC_ARG_WITH(libgc,   [  --with-libgc=included,none  Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
 
 AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
@@ -1218,7 +1331,7 @@ if test "x$support_boehm" = "xyes"; then
                        ;;
 
                xsgen)
-                       AC_MSG_WARN("Use --with-sgen instead, --with-gc= controls Boehm configuration")
+                       AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
                        ;;
 
                xnone)
@@ -1228,7 +1341,7 @@ if test "x$support_boehm" = "xyes"; then
                        gc_msg="none"
                        ;;
                *)
-                       AC_MSG_ERROR([Invalid argument to --with-gc.])
+                       AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
                        ;;
        esac
 
@@ -1244,6 +1357,7 @@ if test "x$support_boehm" = "xyes"; then
        AC_SUBST(BOEHM_DEFINES)
 
 fi
+AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
 
 dnl
 dnl End of Boehm GC Configuration
@@ -1266,8 +1380,6 @@ AC_TRY_COMPILE([
        AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
 ])
 
-AC_CHECK_HEADERS(nacl/nacl_dyncode.h)
-
 dnl ***********************************
 dnl *** Checks for signals
 dnl ***********************************
@@ -1342,8 +1454,6 @@ if test x$host_win32 = xno; then
 
        AC_CHECK_FUNCS(getgrgid_r)
        AC_CHECK_FUNCS(getgrnam_r)
-       AC_CHECK_FUNCS(getpwnam_r)
-       AC_CHECK_FUNCS(getpwuid_r)
        AC_CHECK_FUNCS(getresuid)
        AC_CHECK_FUNCS(setresuid)
        AC_CHECK_FUNCS(kqueue)
@@ -1364,6 +1474,11 @@ if test x$host_win32 = xno; then
        AC_CHECK_FUNCS(sched_setaffinity)
        AC_CHECK_FUNCS(sched_getcpu)
 
+       if test x$platform_android != xyes; then
+               AC_CHECK_FUNCS(getpwnam_r)
+               AC_CHECK_FUNCS(getpwuid_r)
+       fi
+
        dnl ****************************************************************
        dnl *** Check for sched_setaffinity from glibc versions before   ***
        dnl *** 2.3.4. The older versions of the function only take 2    ***
@@ -1386,7 +1501,15 @@ if test x$host_win32 = xno; then
                # We have the new, three-parameter version
                AC_MSG_RESULT(no)
        ])
-
+       AC_TRY_COMPILE([#include <sched.h>], [
+            CPU_COUNT((void *) 0);
+       ], [
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
+       ], [
+               # We have the new, three-parameter version
+               AC_MSG_RESULT(no)
+       ])
 
        dnl ******************************************************************
        dnl *** Check for large file support                               ***
@@ -1816,6 +1939,10 @@ if test x$host_win32 = xno; then
 # and libpthread does not exist
 #
        case "${host}" in
+               *-*-*haiku*)
+                       dnl Haiku has pthread in libroot (libc equiv)
+                       AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
+               ;;
                *-*-*freebsd*)
                        AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
                ;;
@@ -1829,7 +1956,7 @@ if test x$host_win32 = xno; then
        AC_CHECK_HEADERS(pthread.h)
        AC_CHECK_HEADERS(pthread_np.h)
        AC_CHECK_FUNCS(pthread_mutex_timedlock)
-       AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np)
+       AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
        AC_CHECK_FUNCS(pthread_kill)
        AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
        AC_TRY_COMPILE([ #include <pthread.h>], [
@@ -2100,13 +2227,11 @@ if test x$host_win32 = xno; then
        dnl **********************************
        dnl *** epoll                      ***
        dnl **********************************
-       if test "x$ac_cv_header_nacl_nacl_dyncode_h" = "xno"; then
-               AC_CHECK_HEADERS(sys/epoll.h)
-               haveepoll=no
-               AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
-               if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
-                       AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
-               fi
+       AC_CHECK_HEADERS(sys/epoll.h)
+       haveepoll=no
+       AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
+       if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
+               AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
        fi
 
        havekqueue=no
@@ -2225,6 +2350,10 @@ if test x$host_win32 = xno; then
                AC_MSG_RESULT(no)
        ])
                        
+       dnl **********************************
+       dnl *** Checks for proclib         ***
+       dnl **********************************
+       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.)])
        dnl **********************************
        dnl *** Checks for MonoPosixHelper ***
        dnl **********************************
@@ -2284,6 +2413,8 @@ if test x$host_win32 = xno; then
        AC_CHECK_FUNCS(system)
        AC_CHECK_FUNCS(fork execv execve)
        AC_CHECK_FUNCS(accept4)
+       AC_CHECK_FUNCS(localtime_r)
+       AC_CHECK_FUNCS(mkdtemp)
        AC_CHECK_SIZEOF(size_t)
        AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
                [#include <sys/types.h>
@@ -2733,40 +2864,6 @@ fi
 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
 
-dnl **************
-dnl ***  NaCl  ***
-dnl **************
-
-AC_ARG_ENABLE(nacl_codegen, [  --enable-nacl-codegen      Enable Native Client code generation], enable_nacl_codegen=$enableval, enable_nacl_codegen=no)
-AC_ARG_ENABLE(nacl_gc, [  --enable-nacl-gc           Enable Native Client garbage collection], enable_nacl_gc=$enableval, enable_nacl_gc=no)
-
-AM_CONDITIONAL(NACL_CODEGEN, test x$enable_nacl_codegen != xno)
-
-dnl
-dnl Hack to use system mono for operations in build/install not allowed in NaCl.
-dnl
-nacl_self_host=""
-if test "x$ac_cv_header_nacl_nacl_dyncode_h" = "xyes"; then
-   nacl_self_host="nacl_self_host"
-fi
-AC_SUBST(nacl_self_host)
-
-if test "x$enable_nacl_codegen" = "xyes"; then
-   MONO_NACL_ALIGN_MASK_OFF=1
-   AC_DEFINE(TARGET_NACL, 1, [...])
-   AC_DEFINE(__native_client_codegen__, 1, [...])
-fi
-if test "x$enable_nacl_gc" = "xyes"; then
-   if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
-      INSTRUMENT_CFLAG="-finstrument-for-thread-suspension"
-   else
-      # Not yet implemented
-      INSTRUMENT_CFLAG=""
-   fi
-   CPPFLAGS="$CPPFLAGS $INSTRUMENT_CFLAG -D__native_client_gc__"
-fi
-AC_SUBST(MONO_NACL_ALIGN_MASK_OFF)
-
 dnl **************************
 dnl *** AOT cross offsets  ***
 dnl **************************
@@ -2898,7 +2995,7 @@ if test "x$enable_llvm" = "xyes"; then
          LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
    fi   
 
-   AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraties])
+   AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
 
    AC_SUBST(LLVM_CFLAGS)
    AC_SUBST(LLVM_CXXFLAGS)
@@ -2993,6 +3090,7 @@ case "$host" in
                        AOT_SUPPORTED="yes"
                        BTLS_SUPPORTED=yes
                        BTLS_PLATFORM=i386
+                       AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
                        ;;
                  darwin*)
                        AOT_SUPPORTED="yes"
@@ -3015,32 +3113,19 @@ case "$host" in
                        AOT_SUPPORTED="yes"
                        BTLS_SUPPORTED=yes
                        BTLS_PLATFORM=x86_64
+                       AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
                        ;;
                  darwin*)
                        AOT_SUPPORTED="yes"
                        BTLS_SUPPORTED=yes
                        BTLS_PLATFORM=x86_64
+                       boehm_supported=false
                        ;;
                  openbsd*|freebsd*|kfreebsd-gnu*)
                        ;;
                  mingw*)
                        ;;
                esac
-               case "$host" in
-                       x86_64-*-nacl*)
-                               AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
-                               sizeof_register=8
-                               ;;
-               esac
-               ;;
-       ia64-*-*)
-               TARGET=IA64
-               arch_target=ia64
-               ACCESS_UNALIGNED="no"
-               LIBC="libc.so.6.1"
-               INTL="libc.so.6.1"
-               AC_CHECK_LIB(unwind, _U_dyn_register, [], [AC_MSG_ERROR(library libunwind not found)])
-               libmono_ldflags="-lunwind"
                ;;
        sparc*-*-*)
                if test "x$ac_cv_sizeof_void_p" = "x8"; then
@@ -3106,6 +3191,14 @@ case "$host" in
                ACCESS_UNALIGNED="no"
                AOT_SUPPORTED="yes"
                CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
+               BTLS_SUPPORTED=yes
+               BTLS_PLATFORM=arm
+               AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
+               case "$target" in
+               arm*-linux*-gnueabi)
+                       BTLS_PLATFORM=armsoft
+                       ;;
+               esac
                ;;
        arm*-netbsd*-eabi*)
                TARGET=ARM;
@@ -3113,19 +3206,15 @@ case "$host" in
                ACCESS_UNALIGNED="no"
                CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
                ;;
-# TODO: make proper support for NaCl host.
-#        arm*-*nacl)
-#              TARGET=ARM;
-#              arch_target=arm;
-#              ACCESS_UNALIGNED="no"
-#              AOT_SUPPORTED="no"
-#              ;;
        aarch64-*)
                # https://lkml.org/lkml/2012/7/15/133
                TARGET=ARM64
                arch_target=arm64
                boehm_supported=false
                AOT_SUPPORTED="yes"
+               BTLS_SUPPORTED=yes
+               BTLS_PLATFORM=aarch64
+               AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
                ;;
        s390x-*-linux*)
                TARGET=S390X;
@@ -3177,43 +3266,10 @@ if test "x$host" != "x$target"; then
                sizeof_register=8
                target_byte_order=G_BIG_ENDIAN
                ;;
-   x86_64-*-nacl)
-               TARGET=AMD64
-               arch_target=amd64
-               AC_DEFINE(TARGET_AMD64, 1, [...])
-               AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
-               sizeof_register=8
-               ;;
-# TODO: make proper support for NaCl target.
-#   arm*-*nacl)
-#              TARGET=ARM
-#              arch_target=arm
-#              AC_DEFINE(TARGET_ARM, 1, [...])
-#              ACCESS_UNALIGNED="no"
-#              sizeof_register=4
-#               CPPFLAGS="$CPPFLAGS \
-#                    -D__ARM_EABI__ \
-#                    -D__arm__ \
-#                    -D__portable_native_client__ \
-#                    -Dtimezone=_timezone \
-#                    -DDISABLE_SOCKETS \
-#                    -DDISABLE_ATTACH \
-#                    -DUSE_NEWLIB"
-               # Can't use tls, since it depends on the runtime detection of tls offsets
-               # in mono-compiler.h
-#              with_tls=pthread
-#              ;;
-   i686-*-nacl)
-               TARGET=X86
-               arch_target=x86
-               AC_DEFINE(TARGET_X86, 1, [...])
-               sizeof_register=4
-               ;;
    arm*-linux-*)
                TARGET=ARM;
                arch_target=arm;
                AC_DEFINE(TARGET_ARM, 1, [...])
-               AC_DEFINE(TARGET_ANDROID, 1, [...])
                ACCESS_UNALIGNED="no"
                CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
                # Can't use tls, since it depends on the runtime detection of tls offsets
@@ -3226,6 +3282,11 @@ if test "x$host" != "x$target"; then
                        CPPFLAGS="$CPPFLAGS"
                        ;;
                armv5-*-linux-androideabi*)
+                       AC_DEFINE(TARGET_ANDROID, 1, [...])
+                       CPPFLAGS="$CPPFLAGS"
+                       ;;
+               *-linux-androideabi*)
+                       AC_DEFINE(TARGET_ANDROID, 1, [...])
                        CPPFLAGS="$CPPFLAGS"
                        ;;
                esac
@@ -3245,23 +3306,33 @@ if test "x$host" != "x$target"; then
                TARGET=X86;
                arch_target=x86;
                AC_DEFINE(TARGET_X86, 1, [...])
-               AC_DEFINE(TARGET_ANDROID, 1, [...])
                CPPFLAGS="$CPPFLAGS"
                # Can't use tls, since it depends on the runtime detection of tls offsets
                # in mono-compiler.h            
                with_tls=pthread
                target_mach=no
+
+               case "$target" in
+               *-linux-android*)
+                       AC_DEFINE(TARGET_ANDROID, 1, [...])
+                       ;;
+               esac
                ;;
    x86_64*-linux-*)
                TARGET=AMD64;
                arch_target=amd64;
                AC_DEFINE(TARGET_AMD64, 1, [...])
-               AC_DEFINE(TARGET_ANDROID, 1, [...])
                CPPFLAGS="$CPPFLAGS"
                # Can't use tls, since it depends on the runtime detection of tls offsets
                # in mono-compiler.h
                with_tls=pthread
                target_mach=no
+
+               case "$target" in
+               *-linux-android*)
+                       AC_DEFINE(TARGET_ANDROID, 1, [...])
+                       ;;
+               esac
                ;;
    x86_64-ps4-freebsd)
                TARGET=AMD64;
@@ -3280,12 +3351,16 @@ if test "x$host" != "x$target"; then
                TARGET=ARM64;
                arch_target=arm64;
                AC_DEFINE(TARGET_ARM64, 1, [...])
-               AC_DEFINE(TARGET_ANDROID, 1, [...])
                CPPFLAGS="$CPPFLAGS"
                # Can't use tls, since it depends on the runtime detection of tls offsets
                # in mono-compiler.h
                with_tls=pthread
                target_mach=no
+               case "$target" in
+               *-linux-android*)
+                       AC_DEFINE(TARGET_ANDROID, 1, [...])
+                       ;;
+               esac
                ;;
        aarch64-*)
                TARGET=ARM64
@@ -3321,9 +3396,6 @@ S390X)
 MIPS)
        AC_DEFINE(TARGET_MIPS, 1, [...])
        ;;
-IA64)
-       AC_DEFINE(TARGET_IA64, 1, [...])
-       ;;
 SPARC)
        AC_DEFINE(TARGET_SPARC, 1, [...])
        ;;
@@ -3358,9 +3430,6 @@ S390X)
 MIPS)
        AC_DEFINE(HOST_MIPS, 1, [...])
        ;;
-IA64)
-       AC_DEFINE(HOST_IA64, 1, [...])
-       ;;
 SPARC)
        AC_DEFINE(HOST_SPARC, 1, [...])
        ;;
@@ -3442,6 +3511,7 @@ if test "x$target_mach" = "xyes"; then
                  AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
           CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
+          target_osx=yes
        ], [
           AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
           CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
@@ -3452,6 +3522,8 @@ if test "x$target_mach" = "xyes"; then
    AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
 fi
 
+AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
+
 if test "x$sizeof_register" = "x4"; then
    AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
 elif test "x$sizeof_register" = "x8"; then
@@ -3476,6 +3548,14 @@ if test "x$have_deprecated" = "xyes"; then
    AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
 fi
 
+AC_ARG_ENABLE(interpreter, [  --enable-interpreter       Enable Interpreter], enable_interpreter=$enableval, enable_interpreter=no)
+
+if test "x$enable_interpreter" = "xyes"; then
+       AC_DEFINE(ENABLE_INTERPRETER, 1, [Enable Interpreter])
+fi
+
+AM_CONDITIONAL(ENABLE_INTERPRETER, [test x$enable_interpreter = xyes])
+
 dnl 
 dnl Simple Generational checks (sgen)
 dnl
@@ -3797,6 +3877,20 @@ if test ${ACCESS_UNALIGNED} = no; then
        CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
 fi
 
+if test x$host_darwin = xyes; then
+       AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
+       AS_IF(
+               [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
+               [AC_MSG_RESULT([no])],
+               [
+                       # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
+                       AR_FLAGS="Scru"
+                       RANLIB="$RANLIB -no_warning_for_no_symbols"
+                       AC_MSG_RESULT([yes])
+               ]
+       )
+fi
+
 case "x$libgc" in
        xincluded)
                # Pass CPPFLAGS to libgc configure
@@ -3922,8 +4016,6 @@ dnl **************
 AC_ARG_ENABLE(btls, [  --disable-btls             Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
 AC_ARG_WITH(btls_android_ndk, [  --with-btls-android-ndk        Android NDK for BoringTls])
 
-AC_ARG_ENABLE(dynamic-btls, [ --enable-dynamic-btls Place the BTLS provider into a separate shared library/archive.], enable_dynamic_btls=$enableval, enable_dynamic_btls=no)
-
 AM_CONDITIONAL(BTLS, test x$enable_btls = xyes)
 
 btls_android=no
@@ -3952,6 +4044,16 @@ if test "x$enable_btls" = "xyes"; then
        x86_64)
                btls_arch=x86_64
                ;;
+       arm)
+               btls_arch=arm
+               ;;
+       armsoft)
+               btls_arch=arm
+               btls_cflags="-DOPENSSL_NO_ASM=1"
+               ;;
+       aarch64)
+               btls_arch=aarch64
+               ;;
        android-armv5)
                BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=12"
                ;;
@@ -3979,6 +4081,8 @@ if test "x$enable_btls" = "xyes"; then
                BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
                if test "x$with_btls_android_ndk" != "x"; then
                        BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
+               else
+                       AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
                fi
        fi
 
@@ -4017,7 +4121,6 @@ AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
 AM_CONDITIONAL(X86, test x$TARGET = xX86)
 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
-AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
@@ -4053,13 +4156,20 @@ AC_SUBST(mono_build_root)
 mono_runtime=mono/mini/mono
 AC_SUBST(mono_runtime)
 
-CSC=$mono_build_root/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.1.3.2/tools/csc.exe
+CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.0/tools/csc.exe
+
+if test $csc_compiler = mcs; then
+  CSC=$mcs_topdir/class/lib/build/mcs.exe
+else
+  CSC=$CSC_LOCATION
+fi
 
 mono_cfg_root=$mono_build_root/runtime
 if test x$host_win32 = xyes; then
   if test "x$cross_compiling" = "xno"; then
     mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
-    CSC="'"`cygpath -w -a $CSC`"'"
+    CSC=`cygpath -m -a $CSC`
+    CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
   else
     mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
   fi
@@ -4253,16 +4363,14 @@ mono/arch/sparc/Makefile
 mono/arch/s390x/Makefile
 mono/arch/arm/Makefile
 mono/arch/arm64/Makefile
-mono/arch/ia64/Makefile
 mono/arch/mips/Makefile
 mono/sgen/Makefile
 mono/tests/Makefile
 mono/tests/tests-config
-mono/tests/assemblyresolve/Makefile
 mono/tests/gc-descriptors/Makefile
+mono/tests/testing_gac/Makefile
 mono/unit-tests/Makefile
 mono/benchmark/Makefile
-mono/io-layer/Makefile
 mono/mini/Makefile
 mono/profiler/Makefile
 m4/Makefile
@@ -4311,7 +4419,7 @@ po/Makefile
 ])
 
 # Update all submodules recursively to ensure everything is checked out
-$srcdir/scripts/update_submodules
+$srcdir/scripts/update_submodules.sh
 
 if test x$host_win32 = xyes; then
    # Get rid of 'cyg' prefixes in library names
@@ -4348,6 +4456,7 @@ fi
     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
+    echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
@@ -4370,9 +4479,22 @@ fi
     }')]
 
     echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
+    echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
 
     if test x$host_darwin = xyes; then
-      echo "PLATFORM = darwin" >> $mcs_topdir/build/config.make
+      echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
+    elif test x$host_win32 = xyes; then
+      echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
+    else
+      echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
+    fi
+
+    if test x$host_darwin = xyes; then
+      echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
+    elif test x$host_win32 = xyes; then
+      echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
+    else
+      echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
     fi
 
     if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
@@ -4401,9 +4523,9 @@ fi
       echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
     fi
 
-    echo "CSC_LOCATION = $CSC" >> $srcdir/$mcsdir/build/config.make
+    echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
 
-    if test "x$with_mcs_compiler" = "xyes"; then
+    if test $csc_compiler = mcs; then
       echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
     fi
 
@@ -4414,9 +4536,6 @@ fi
 
     if test "x$enable_btls" = "xyes"; then
       echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
-      if test "x$enable_dynamic_btls" = "xyes"; then
-        echo "HAVE_DYNAMIC_BTLS=1" >> $srcdir/$mcsdir/build/config.make
-      fi
     fi
 
   fi
@@ -4436,6 +4555,7 @@ fi
 
 echo "
         mcs source:    $mcsdir
+       C# Compiler:   $csc_compiler
 
    Engine:
        Host:          $host
@@ -4447,6 +4567,7 @@ echo "
        BigArrays:     $enable_big_arrays
        DTrace:        $enable_dtrace
        LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
+       Interpreter:   $enable_interpreter
 
    Libraries:
        .NET 4.x:        $with_profile4_x
@@ -4455,8 +4576,10 @@ echo "
        Xamarin.WatchOS: $with_monotouch_watch
        Xamarin.TVOS:    $with_monotouch_tv
        Xamarin.Mac:     $with_xammac
-       AOT preferred:   $with_aot_hybrid
-       AOT only:        $with_aot_only
+       Windows AOT:     $with_winaot
+       Orbis:           $with_orbis
+       Unreal:          $with_unreal
+       Test profiles:   AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
        JNI support:     $jdk_headers_found
        libgdiplus:      $libgdiplus_msg
        zlib:            $zlib_msg