2018-10-18 08:28:44 +00:00
2014-08-13 10:39:27 +01:00
tmpinst = _tmpinst
noinst_SCRIPTS = mono-wrapper monodis-wrapper
etctmp = etc
symlinks = etc/mono/1.0/machine.config etc/mono/2.0/machine.config etc/mono/2.0/web.config etc/mono/browscap.ini etc/mono/2.0/Browsers/Compat.browser
2016-02-22 11:00:01 -05:00
i f I N S T A L L _ 4 _ x
2018-08-07 15:19:03 +00:00
symlinks += etc/mono/4.0/machine.config etc/mono/4.0/web.config etc/mono/4.5/web.config etc/mono/4.0/Browsers/Compat.browser etc/mono/4.5/Browsers/Compat.browser
2014-08-13 10:39:27 +01:00
e n d i f
2018-08-07 15:19:03 +00:00
# This is needed at least to build configure --with-runtime-preset=fullaot.
symlinks += etc/mono/4.5/machine.config
2014-08-13 10:39:27 +01:00
etc/mono/2.0/machine.config : $( top_srcdir ) /data /net_ 2_ 0/machine .config
etc/mono/2.0/web.config : $( top_srcdir ) /data /net_ 2_ 0/web .config
etc/mono/browscap.ini : $( top_srcdir ) /data /browscap .ini
etc/mono/2.0/Browsers/Compat.browser : $( top_srcdir ) /data /Browsers /Compat .browser
etc/mono/4.0/Browsers/Compat.browser : $( top_srcdir ) /data /Browsers /Compat .browser
etc/mono/4.5/Browsers/Compat.browser : $( top_srcdir ) /data /Browsers /Compat .browser
etc/mono/4.0/machine.config : $( top_srcdir ) /data /net_ 4_ 0/machine .config
etc/mono/4.0/web.config : $( top_srcdir ) /data /net_ 4_ 0/web .config
etc/mono/4.5/machine.config : $( top_srcdir ) /data /net_ 4_ 5/machine .config
etc/mono/4.5/web.config : $( top_srcdir ) /data /net_ 4_ 5/web .config
$(symlinks) :
cd $( top_builddir) && $( SHELL) ./config.status $( subdir) /$@
SUPPORT_FILES = $( symlinks) mono-wrapper etc/mono/config
build_profiles =
2016-02-22 11:00:01 -05:00
i f I N S T A L L _ 4 _ x
build_profiles += binary_reference_assemblies net_4_x xbuild_12 xbuild_14
2017-04-10 11:41:01 +00:00
net_profile = net_4_x
2014-08-13 10:39:27 +01:00
e n d i f
i f I N S T A L L _ M O N O D R O I D
2017-10-19 20:04:20 +00:00
build_profiles += monodroid monodroid_tools
2014-08-13 10:39:27 +01:00
e n d i f
i f I N S T A L L _ M O N O T O U C H
build_profiles += monotouch monotouch_runtime
e n d i f
2015-08-26 07:17:56 -04:00
i f I N S T A L L _ M O N O T O U C H _ W A T C H
2016-02-22 11:00:01 -05:00
build_profiles += monotouch_watch monotouch_watch_runtime
e n d i f
i f I N S T A L L _ M O N O T O U C H _ T V
build_profiles += monotouch_tv monotouch_tv_runtime
2015-08-26 07:17:56 -04:00
e n d i f
2019-04-12 14:10:50 +00:00
i f I N S T A L L _ T E S T I N G _ A O T _ F U L L _ I N T E R P
build_profiles += testing_aot_full_interp
e n d i f
2017-04-10 11:41:01 +00:00
i f I N S T A L L _ T E S T I N G _ A O T _ H Y B R I D
build_profiles += testing_aot_hybrid
e n d i f
i f I N S T A L L _ T E S T I N G _ A O T _ F U L L
build_profiles += testing_aot_full
e n d i f
i f I N S T A L L _ W I N A O T
build_profiles += winaot
2016-08-03 10:59:49 +00:00
e n d i f
2014-08-13 10:39:27 +01:00
i f I N S T A L L _ X A M M A C
2015-07-20 03:39:00 -04:00
build_profiles += xammac xammac_net_4_5
2014-08-13 10:39:27 +01:00
e n d i f
2017-04-10 11:41:01 +00:00
i f I N S T A L L _ O R B I S
build_profiles += orbis
e n d i f
2017-10-19 20:04:20 +00:00
i f I N S T A L L _ U N R E A L
build_profiles += unreal
e n d i f
2018-01-24 17:04:36 +00:00
i f I N S T A L L _ W A S M
2019-04-12 14:10:50 +00:00
build_profiles += wasm wasm_tools
e n d i f
i f E N A B L E _ N E T C O R E
build_profiles += netcore
2018-01-24 17:04:36 +00:00
e n d i f
2019-04-12 14:10:50 +00:00
test_profiles = $( filter-out binary_reference_assemblies monodroid_tools wasm_tools,$( build_profiles) )
2014-08-13 10:39:27 +01:00
MAKE_FLAGS = $( if $( V) ,,--no-print-directory -s)
# The write check is to foil 'make distcheck'
2018-10-18 08:28:44 +00:00
all-mcs : $( SUPPORT_FILES ) $( TEST_SUPPORT_FILES )
2014-08-13 10:39:27 +01:00
if test -w $( mcs_topdir) ; then :; else chmod -R +w $( mcs_topdir) ; fi
cd $( mcs_topdir) && $( MAKE) $( MAKE_FLAGS) NO_DIR_CHECK = 1 PROFILES = '$(build_profiles)' CC = '$(CC)' all-profiles
2018-10-18 08:28:44 +00:00
install-mcs : install -mcs -exec install -mcs -data
2014-08-13 10:39:27 +01:00
# override automake
2018-10-18 08:28:44 +00:00
install-mcs-exec : $( SUPPORT_FILES ) $( TEST_SUPPORT_FILES )
2014-08-13 10:39:27 +01:00
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(build_profiles)' RUNTIME_HAS_CONSISTENT_GACDIR = yes prefix = $( prefix) install-profiles
# override automake
2018-10-18 08:28:44 +00:00
install-mcs-data :
2014-08-13 10:39:27 +01:00
@:
# override automake
2018-10-18 08:28:44 +00:00
uninstall-mcs :
2014-08-13 10:39:27 +01:00
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(build_profiles)' RUNTIME_HAS_CONSISTENT_GACDIR = yes prefix = $( prefix) uninstall-profiles
2018-10-18 08:28:44 +00:00
clean-mcs :
2014-08-13 10:39:27 +01:00
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(build_profiles)' clean-profiles
2015-08-26 07:17:56 -04:00
-rm -fr $( etctmp) $( tmpinst)
2014-08-13 10:39:27 +01:00
2018-10-18 08:28:44 +00:00
i f B U I L D _ M C S
all-local : all -mcs
# override automake
install : install -mcs
# override automake
install-exec : install -mcs -exec
# override automake
install-data : install -mcs -data
# override automake
uninstall : uninstall -mcs
clean-local : clean -mcs
2014-08-13 10:39:27 +01:00
e n d i f B U I L D _ M C S
2017-04-10 11:41:01 +00:00
TEST_SUPPORT_FILES = $( tmpinst) /bin/mono $( tmpinst) /bin/ilasm $( tmpinst) /bin/csc $( tmpinst) /bin/mcs $( tmpinst) /bin/al
2014-08-13 10:39:27 +01:00
mcs-do-test-profiles :
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(test_profiles)' test-profiles
2019-04-12 14:10:50 +00:00
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(test_profiles)' compiler-test-profiles
2014-08-13 10:39:27 +01:00
2018-08-07 15:19:03 +00:00
mcs-do-xunit-test-profiles :
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(test_profiles)' xunit-test-profiles
2014-08-13 10:39:27 +01:00
mcs-do-run-test-profiles : test -support -files
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(test_profiles)' run-test-profiles
2019-04-12 14:10:50 +00:00
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(test_profiles)' run-compiler-test-profiles
2014-08-13 10:39:27 +01:00
2018-08-07 15:19:03 +00:00
mcs-do-xunit-run-test-profiles : test -support -files
cd $( mcs_topdir) && $( MAKE) NO_DIR_CHECK = 1 PROFILES = '$(test_profiles)' run-xunit-test-profiles
2019-04-12 14:10:50 +00:00
test-bundle-local :
mkdir -p $( TEST_BUNDLE_PATH) /_tmpinst/bin
cp -L mono-test.sh $( TEST_BUNDLE_PATH)
cp -L -R etc $( TEST_BUNDLE_PATH) /_tmpinst
rm $( TEST_BUNDLE_PATH) /_tmpinst/etc/mono/config
sed -e 's,$$mono_libdir,$$test_root_dir,g' -e 's,target="$(libgdiplus_install_loc)",target="$$test_root_dir/mono-libgdiplus$(libsuffix)",g' $( top_builddir) /data/config > $( TEST_BUNDLE_PATH) /_tmpinst/etc/mono/config.tmpl
echo '#! /bin/sh' > $( TEST_BUNDLE_PATH) /_tmpinst/bin/al
echo '#! /bin/sh' > $( TEST_BUNDLE_PATH) /_tmpinst/bin/mcs
echo '#! /bin/sh' > $( TEST_BUNDLE_PATH) /_tmpinst/bin/ilasm
echo '"$$MONO_EXECUTABLE" $$(dirname "$$MONO_EXECUTABLE")/net_4_x/al.exe "$$@"' >> $( TEST_BUNDLE_PATH) /_tmpinst/bin/al
echo '"$$MONO_EXECUTABLE" $$(dirname "$$MONO_EXECUTABLE")/net_4_x/mcs.exe "$$@"' >> $( TEST_BUNDLE_PATH) /_tmpinst/bin/mcs
echo '"$$MONO_EXECUTABLE" $$(dirname "$$MONO_EXECUTABLE")/net_4_x/ilasm.exe "$$@"' >> $( TEST_BUNDLE_PATH) /_tmpinst/bin/ilasm
chmod +x $( TEST_BUNDLE_PATH) /_tmpinst/bin/al
chmod +x $( TEST_BUNDLE_PATH) /_tmpinst/bin/mcs
chmod +x $( TEST_BUNDLE_PATH) /_tmpinst/bin/ilasm
for profile in $( test_profiles) ; do \
cp -L -R $( mcs_topdir) /class/lib/$$ profile $( TEST_BUNDLE_PATH) ; \
done
cp -L $( top_srcdir) /external/xunit-binaries/*.dll $( top_srcdir) /external/xunit-binaries/*.exe $( top_srcdir) /external/xunit-binaries/*.config $( TEST_BUNDLE_PATH) /net_4_x/
$( MAKE) -C $( mcs_topdir) /tests test-bundle
$( MAKE) -C $( mcs_topdir) /errors test-bundle
$( MAKE) -C $( mcs_topdir) /packages test-bundle
$( MAKE) -C $( mcs_topdir) /tools/mono-symbolicate test-bundle
2014-08-13 10:39:27 +01:00
i f H O S T _ W I N 3 2
i f C R O S S _ C O M P I L I N G
cur_dir_cmd = pwd
PLATFORM_PATH_SEPARATOR = :
e l s e
cur_dir_cmd = cygpath -w -a .
PLATFORM_PATH_SEPARATOR = ;
e n d i f
e l s e
cur_dir_cmd = pwd
PLATFORM_PATH_SEPARATOR = :
e n d i f
2017-04-11 11:25:27 +00:00
# assemblies which are excluded from testing in mcs-compileall below
2018-01-24 17:04:36 +00:00
VERIFY_TESTS_FILTER = System.Runtime.CompilerServices.Unsafe.dll
2017-04-11 11:25:27 +00:00
i f H O S T _ W I N 3 2
# Mono.WebBrowser.dll fails to verify on Windows
VERIFY_TESTS_FILTER += Mono.WebBrowser.dll
e n d i f
2019-04-12 14:10:50 +00:00
# fails to verify with "VTable setup of type Xunit.NetCore.Extensions.SkippedTestCase failed", not sure why
VERIFY_TESTS_FILTER += Xunit.NetCore.Extensions.dll
2017-04-10 11:41:01 +00:00
i f F U L L _ A O T _ T E S T S
# ILASM.exe has features which a testing_aot_full runtime will not support.
2016-11-10 13:04:39 +00:00
# It is invoked with an external mono when used in the runtime.
# We skip it here because otherwise it will fail to verify.
2017-04-11 11:25:27 +00:00
VERIFY_TESTS_FILTER += ilasm.exe
2016-11-10 13:04:39 +00:00
e n d i f
2014-08-13 10:39:27 +01:00
# Compile all assemblies with the verifier turned on. Code must be valid but not verifiable.
# TODO it would be nice to split assemblies without unsafe code to use the verifier with verifiable mode.
mcs-compileall : mono -wrapper etc /mono /config
save_MONO_PATH = $$ MONO_PATH; mcs_topdir = ` cd $( mcs_topdir) && $( cur_dir_cmd) ` ; ok = :; \
for profile in $( test_profiles) ; do \
2017-10-19 20:04:20 +00:00
if [ "xbuild_12" = " $$ profile " ] ; then \
2016-02-22 11:00:01 -05:00
MONO_PATH = " $$ mcs_topdir/class/lib/ $$ profile $( PLATFORM_PATH_SEPARATOR) $$ mcs_topdir/class/lib/net_4_x $( PLATFORM_PATH_SEPARATOR) $$ save_MONO_PATH " ; \
2015-04-07 09:35:12 +01:00
elif [ "xbuild_14" = " $$ profile " ] ; then \
2016-02-22 11:00:01 -05:00
MONO_PATH = " $$ mcs_topdir/class/lib/ $$ profile $( PLATFORM_PATH_SEPARATOR) $$ mcs_topdir/class/lib/net_4_x $( PLATFORM_PATH_SEPARATOR) $$ save_MONO_PATH " ; \
2014-08-13 10:39:27 +01:00
else \
MONO_PATH = " $$ mcs_topdir/class/lib/ $$ profile $( PLATFORM_PATH_SEPARATOR) $$ save_MONO_PATH " ; \
fi ; \
2017-04-11 11:25:27 +00:00
export verifiable_files = ` ls " $( mcs_topdir) /class/lib/ $$ profile/ " | grep -E '\.(dll|exe)$$' $( foreach asm,$( VERIFY_TESTS_FILTER) , | grep -v $( asm) ) ` ; \
2014-08-13 10:39:27 +01:00
export MONO_PATH; \
2016-11-10 13:04:39 +00:00
for stub in $$ verifiable_files; do \
i = $( mcs_topdir) /class/lib/$$ profile/$$ stub ; \
echo $$ i ; \
2014-08-13 10:39:27 +01:00
if [ ! -f $$ i ] ; then \
continue ; \
fi ; \
if ./mono-wrapper --compile-all --verify-all --security= verifiable $$ i; then \
echo $$ i verified OK; \
else \
echo $$ i verification failed; ok = false; \
fi ; done ; done ; \
2017-08-21 15:34:15 +00:00
if [ " $$ ok " = "false" ] ; then echo " <?xml version='1.0' encoding='utf-8'?><test-results failures='1' total='1' not-run='0' name='verify' date=' $$ (date +%F)' time=' $$ (date +%T)'><test-suite name='mcs-compileall' success='False' time='0'><results><test-case name='fail' executed='True' success='False' time='0'><failure><message>Verifying framework assemblies failed. Check the log for more details.</message><stack-trace></stack-trace></failure></test-case></results></test-suite></test-results> " > TestResult-verify.xml; fi ; \
2014-08-13 10:39:27 +01:00
$$ ok
2018-08-07 15:19:03 +00:00
check-local : mcs -compileall mcs -do -test -profiles mcs -do -xunit -test -profiles
$( MAKE) mcs-do-run-test-profiles mcs-do-run-xunit-test-profiles
2014-08-13 10:39:27 +01:00
# Compile all mcs tests
test : mcs -do -test -profiles
2018-08-07 15:19:03 +00:00
xunit-test : mcs -do -xunit -test -profiles
2014-08-13 10:39:27 +01:00
CLEANFILES = etc/mono/config
# depend on $(symlinks) to ensure 'etc/mono' directory exists
etc/mono/config : ../data /config Makefile $( symlinks )
2018-08-07 15:19:03 +00:00
cp $< $@
if test -d " $( abs_top_builddir) /support " ; then \
sed 's,target="$$mono_libdir/libMonoPosixHelper$(libsuffix)",target="$(abs_top_builddir)/support/libMonoPosixHelper.la",' $@ > $@ .tmp \
&& mv $@ .tmp $@ \
; \
else \
echo " Unknown directory ' $( abs_top_builddir) /support' " && false; \
fi
2019-02-04 20:11:37 +00:00
if test -d " $( abs_top_builddir) /mono/native " ; then \
sed 's,target="$$mono_libdir/$(MONO_NATIVE_LIBRARY_NAME)$(libsuffix)",target="$(abs_top_builddir)/mono/native/$(MONO_NATIVE_LIBRARY_NAME).la",' $@ > $@ .tmp \
2018-08-07 15:19:03 +00:00
&& mv $@ .tmp $@ \
; \
else \
2019-02-04 20:11:37 +00:00
echo " Unknown directory ' $( abs_top_builddir) /mono/native' " && false; \
2018-08-07 15:19:03 +00:00
fi
if test -d " $( abs_top_builddir) /mono/btls/build-shared " ; then \
sed 's,target="$$mono_libdir/libmono-btls-shared$(libsuffix)",target="$(abs_top_builddir)/mono/btls/build-shared/libmono-btls-shared$(libsuffix)",' $@ > $@ .tmp \
&& mv $@ .tmp $@ \
; \
else \
echo " Unknown directory ' $( abs_top_builddir) /mono/btls/build-shared' " ; \
fi
if test -n " $( libgdiplus_loc) " ; then \
sed 's,target="$(libgdiplus_install_loc)",target="$(libgdiplus_loc)",' $@ > $@ .tmp \
&& mv $@ .tmp $@ \
; \
fi
cat $@
2014-08-13 10:39:27 +01:00
$(tmpinst)/bin/mono : mono -wrapper etc /mono /config
$( mkinstalldirs) $( tmpinst) /bin
cp mono-wrapper $@
2017-04-10 11:41:01 +00:00
$(tmpinst)/bin/csc : $( tmpinst ) /bin /mono Makefile
echo '#! /bin/sh' > $@ ; \
r = ` pwd ` ; m = ` cd $( mcs_topdir) && pwd ` ; \
echo 'exec "' " $$ r/ $( tmpinst) /bin/mono " '" "' " $( CSC) " '" "$$@"' >> $@ ; \
chmod +x $@
2014-08-13 10:39:27 +01:00
$(tmpinst)/bin/mcs : $( tmpinst ) /bin /mono Makefile
echo '#! /bin/sh' > $@ ; \
r = ` pwd ` ; m = ` cd $( mcs_topdir) && pwd ` ; \
2017-04-10 11:41:01 +00:00
echo 'exec "' " $$ r/ $( tmpinst) /bin/mono " '" "' " $$ m/class/lib/ $( net_profile) /mcs.exe " '" "$$@"' >> $@ ; \
2014-08-13 10:39:27 +01:00
chmod +x $@
$(tmpinst)/bin/ilasm : $( tmpinst ) /bin /mono Makefile
echo '#! /bin/sh' > $@ ; \
r = ` pwd ` ; m = ` cd $( mcs_topdir) && pwd ` ; \
echo 'exec "' " $$ r/ $( tmpinst) /bin/mono " '" "' " $$ m/ilasm/ilasm.exe " '" "$$@"' >> $@ ; \
chmod +x $@
$(tmpinst)/bin/al : $( tmpinst ) /bin /mono Makefile
echo '#! /bin/sh' > $@ ; \
r = ` pwd ` ; m = ` cd $( mcs_topdir) && pwd ` ; \
2017-04-10 11:41:01 +00:00
echo 'exec "' " $$ r/ $( tmpinst) /bin/mono " '" "' " $$ m/class/lib/ $( net_profile) /al.exe " '" "$$@"' >> $@ ; \
2014-08-13 10:39:27 +01:00
chmod +x $@
test-support-files : $( TEST_SUPPORT_FILES )
@:
# the 'cygnus' option also disables the default 'distdir:' target, which we _do_ want
MYDISTFILES = $( DIST_COMMON)
distdir : $( MYDISTFILES )
rm -fr $( distdir)
mkdir $( distdir)
test -z '$(MYDISTFILES)' || for file in '' $( MYDISTFILES) ; do \
cp -p $$ file $( distdir) ; done
find $( distdir) -type f -exec chmod a+r { } ';'