thisdir = class/corlib SUBDIRS = include ../../build/rules.make export __SECURITY_BOOTSTRAP_DB=$(topdir)/class/corlib # corlib is crazy to build so we skip build/library.make and do stuff # ourselves. # # Here, we define a bunch of variables. ifdef PLATFORM_MONO_NATIVE test_against = $(corlib) else test_against = $(reslib) endif LOCAL_MCS_FLAGS = /nowarn:649 /nowarn:169 -d:INSIDE_CORLIB corlib = $(topdir)/class/lib/mscorlib.dll testlib = corlib_test.dll cmplib = $(topdir)/class/lib/corlib_cmp.dll reslib = $(topdir)/class/lib/corlib_res.dll plattestlib = corlib_plattest.dll corpdb = $(patsubst %.dll,%.pdb,$(corlib)) testpdb = $(patsubst %.dll,%.pdb,$(testlib)) cmppdb = $(patsubst %.dll,%.pdb,$(cmplib)) respdb = $(patsubst %.dll,%.pdb,$(reslib)) plattestpdb = $(patsubst %.dll,%.pdb,$(plattestlib)) sourcefile = corlib.dll.sources response = $(depsdir)/corlib.dll.response makefrag = $(depsdir)/corlib.dll.makefrag stampfile = $(depsdir)/corlib.dll.stamp # disable, until people fix their code... #corlib_flags = /unsafe /nostdlib /d:INSIDE_CORLIB corlib_flags = /unsafe /nostdlib test_sourcefile = corlib_test.dll.sources test_response = $(depsdir)/$(testlib).response test_makefrag = $(depsdir)/$(testlib).makefrag test_stampfile = $(depsdir)/$(testlib).stamp test_flags = /nowarn:0618 /nowarn:0672 /r:$(test_against) /r:$(topdir)/class/lib/NUnit.Framework.dll cmp_response = $(depsdir)/corlib_cmp.dll.response cmp_makefrag = $(depsdir)/corlib_cmp.dll.makefrag cmp_stampfile = $(depsdir)/corlib_cmp.dll.stamp cmp_flags = /r:$(PLATFORM_CORLIB) $(corlib_flags) res_response = $(depsdir)/corlib_res.dll.response res_makefrag = $(depsdir)/corlib_res.dll.makefrag res_stampfile = $(depsdir)/corlib_res.dll.stamp res_flags = /r:$(PLATFORM_CORLIB) $(corlib_flags) plattest_excludes = corlib_plattest.dll.excludes plattest_response = $(depsdir)/$(plattestlib).response plattest_makefrag = $(depsdir)/$(plattestlib).makefrag plattest_stampfile = $(depsdir)/$(plattestlib).stamp plattest_flags = /debug+ /debug:full /nowarn:0618 /nowarn:0672 /r:$(PLATFORM_CORLIB) /r:$(topdir)/class/lib/NUnit.Framework.dll # Here, we make all. all-local: $(corlib) install-local: $(corlib) $(makefrag) $(MKINSTALLDIRS) $(DESTDIR)$(prefix)/lib $(INSTALL_LIB) $(corlib) $(DESTDIR)$(prefix)/lib uninstall-local: -rm -f $(DESTDIR)$(prefix)/lib/corlib.dll clean-local: -rm -f $(corlib) $(cmplib) $(testlib) $(reslib) $(plattestlib) TestResult.xml \ $(response) $(makefrag) $(stampfile) \ $(test_response) $(test_makefrag) $(test_stampfile) \ $(cmp_response) $(cmp_makefrag) $(cmp_stampfile) \ $(res_response) $(res_makefrag) $(res_stampfile) \ $(plattest_response) $(plattest_makefrag) $(plattest_stampfile) \ $(corpdb) $(cmppdb) $(testpdb) $(respdb) $(plattestpdb) # If building on a non mono-native platform, default # to running the unit tests on its corlib, to see if # our tests are complaint with their (hopefully bug-free) # corlib. If on a mono-native platform, test our actual # corlib. # # You can access either one on demand with either 'make # run-monotest' or 'make run-plattest'. ifdef PLATFORM_MONO_NATIVE test-local: $(test_against) $(testlib) run-test-local: run-monotest else test-local: $(plattestlib) run-test-local: run-plattest endif run-monotest: $(test_against) $(testlib) $(TEST_RUNTIME) $(TEST_HARNESS) $(testlib) run-plattest: $(plattestlib) $(TEST_RUNTIME) $(TEST_HARNESS) $(plattestlib) # OK, that was the easy part. Now we get to the fun bits. # # first, make dist. DISTFILES = $(sourcefile) $(test_sourcefile) \ corlib.dll.win32-excludes corlib_cmp.dll.excludes corlib_res.dll.excludes \ $(plattest_excludes) \ Test/ms_run_test.sh # see $(topdir)/build/library.make for explanation of what's going on # here. dist-local: dist-default for f in `cat $(sourcefile)` `cat $(test_sourcefile) |sed -e 's,^\(.\),Test/\1,'` ; do \ dest=`dirname $(distdir)/$$f` ; \ $(MKINSTALLDIRS) $$dest && cp $$f $$dest || exit 1 ; \ done # plain ol corlib $(corlib): $(makefrag) $(response) $(stampfile) $(BOOT_COMPILE) $(LIBRARY_FLAGS) $(corlib_flags) /target:library /out:$@ @$(response) $(response): $(sourcefile) @echo Creating $@ ... ifdef PLATFORM_CHANGE_SEPARATOR_CMD @cat $< |$(PLATFORM_TWEAK_CORLIB_SOURCES) |$(PLATFORM_CHANGE_SEPARATOR_CMD) >$@ else @cat $< |$(PLATFORM_TWEAK_CORLIB_SOURCES) >$@ endif # warning: embedded tab in the 'echo touch' line $(makefrag): $(response) @echo Creating $@ ... @echo "HAVE_MAKEFRAG = yes" >$@.new @echo "$(stampfile): \\" >>$@.new @cat $< |sed -e 's,\.cs[ \t]*$$,\.cs \\,' >>$@.new @cat $@.new |sed -e '$$s, \\$$,,' >$@ @echo " touch \$$@" >>$@ @rm -rf $@.new -include $(makefrag) ifndef HAVE_MAKEFRAG $(stampfile): touch $@ endif # corlib_cmp $(cmplib): $(cmp_makefrag) $(cmp_response) $(cmp_stampfile) $(BOOT_COMPILE) $(LIBRARY_FLAGS) $(cmp_flags) /target:library /out:$@ @$(cmp_response) $(cmp_response): $(response) corlib_cmp.dll.excludes @echo Creating $@ ... ifdef PLATFORM_CHANGE_SEPARATOR_CMD @cat corlib_cmp.dll.excludes |$(PLATFORM_CHANGE_SEPARATOR_CMD) |cat - $< |sort |uniq -u >$@ else @cat corlib_cmp.dll.excludes |cat - $< |sort |uniq -u >$@ endif # warning: embedded tab in the 'echo touch' line $(cmp_makefrag): $(cmp_response) @echo Creating $@ ... @echo "HAVE_CMP_MAKEFRAG = yes" >$@.new @echo "$(cmp_stampfile): \\" >>$@.new @cat $< |sed -e 's,\.cs[ \t]*$$,\.cs \\,' >>$@.new @cat $@.new |sed -e '$$s, \\$$,,' >$@ @echo " touch \$$@" >>$@ @rm -rf $@.new # Since we make corlib_cmp on demand, there isn't a real need # to have full dep tracking for it. Also, the generation of this # file is busted on Win32 ('sort' seems to mess up line endings), # leading to a broken build. # # -include $(cmp_makefrag) ifndef HAVE_CMP_MAKEFRAG $(cmp_stampfile): touch $@ endif # corlib_res $(reslib): $(res_makefrag) $(res_response) $(res_stampfile) $(BOOT_COMPILE) $(LIBRARY_FLAGS) $(res_flags) /target:library /out:$@ @$(res_response) $(res_response): $(sourcefile) corlib_res.dll.excludes @echo Creating $@ ... ifdef PLATFORM_CHANGE_SEPARATOR_CMD @cat corlib_res.dll.excludes $(sourcefile) |sort |uniq -u |$(PLATFORM_CHANGE_SEPARATOR_CMD) >$@ else @cat corlib_res.dll.excludes $(sourcefile) |sort |uniq -u >$@ endif # warning: embedded tab in the 'echo touch' line $(res_makefrag): $(res_response) @echo Creating $@ ... @echo "HAVE_RES_MAKEFRAG = yes" >$@.new @echo "$(res_stampfile): \\" >>$@.new @cat $< |sed -e 's,\.cs[ \t]*$$,\.cs \\,' >>$@.new @cat $@.new |sed -e '$$s, \\$$,,' >$@ @echo " touch \$$@" >>$@ @rm -rf $@.new -include $(res_makefrag) ifndef HAVE_RES_MAKEFRAG $(res_stampfile): touch $@ endif # corlib_test $(testlib): $(test_makefrag) $(test_response) $(test_stampfile) $(CSCOMPILE) $(test_flags) /target:library /out:$@ @$(test_response) $(test_response): $(test_sourcefile) @echo Creating $@ ... ifdef PLATFORM_CHANGE_SEPARATOR_CMD @cat $< |sed -e 's,^\(.\),Test/\1,' |$(PLATFORM_CHANGE_SEPARATOR_CMD) >$@ else @cat $< |sed -e 's,^\(.\),Test/\1,' >$@ endif # warning: embedded tab in the 'echo touch' line $(test_makefrag): $(test_response) @echo Creating $@ ... @echo "HAVE_TEST_MAKEFRAG = yes" >$@.new @echo "$(test_stampfile): \\" >>$@.new @cat $< |sed -e 's,\.cs[ \t]*$$,\.cs \\,' >>$@.new @cat $@.new |sed -e '$$s, \\$$,,' >$@ @echo " touch \$$@" >>$@ @rm -rf $@.new -include $(test_makefrag) ifndef HAVE_TEST_MAKEFRAG $(test_stampfile): touch $@ endif # corlib_plattest $(plattestlib): $(plattest_makefrag) $(plattest_response) $(plattest_stampfile) $(CSCOMPILE) $(plattest_flags) /target:library /out:$@ @$(plattest_response) $(plattest_response): $(test_sourcefile) $(plattest_excludes) @echo Creating $@ ... ifdef PLATFORM_CHANGE_SEPARATOR_CMD ifdef PLATFORM_MONO_NATIVE @cat $(plattest_excludes) $(test_sourcefile) |sort |uniq -u |sed -e 's,^\(.\),Test/\1,' |$(PLATFORM_CHANGE_SEPARATOR_CMD) >$@ else @cat $(test_sourcefile) |sort |uniq -u |sed -e 's,^\(.\),Test/\1,' |$(PLATFORM_CHANGE_SEPARATOR_CMD) >$@ endif else ifdef PLATFORM_MONO_NATIVE @cat $(plattest_excludes) $(test_sourcefile) |sort |uniq -u |sed -e 's,^\(.\),Test/\1,' >$@ else @cat $(test_sourcefile) |sort |uniq -u |sed -e 's,^\(.\),Test/\1,' >$@ endif endif # warning: embedded tab in the 'echo touch' line $(plattest_makefrag): $(plattest_response) @echo Creating $@ ... @echo "HAVE_PLATTEST_MAKEFRAG = yes" >$@.new @echo "$(plattest_stampfile): \\" >>$@.new @cat $< |sed -e 's,\.cs[ \t]*$$,\.cs \\,' >>$@.new @cat $@.new |sed -e '$$s, \\$$,,' >$@ @echo " touch \$$@" >>$@ @rm -rf $@.new -include $(plattest_makefrag) ifndef HAVE_PLATTEST_MAKEFRAG $(plattest_stampfile): touch $@ endif