X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fbuild%2Fexecutable.make;h=2bf3eb9d5c32e26ee0b05fe993aa3b08f6ebf1d2;hb=c73165ea6cbf5ca6c2df843cf0038eddf9700885;hp=726ac000f863871c3c92c8304a55a40fad2c4002;hpb=c4a3b30460c7ea1a1fb3c97cfc8478555714af2f;p=mono.git diff --git a/mcs/build/executable.make b/mcs/build/executable.make index 726ac000f86..2bf3eb9d5c3 100644 --- a/mcs/build/executable.make +++ b/mcs/build/executable.make @@ -2,31 +2,46 @@ # # The rules for building a program. -base_prog = $(shell basename $(PROGRAM)) -sourcefile = $(base_prog).sources +base_prog = $(notdir $(PROGRAM)) +ifndef sourcefile +sourcefile := $(base_prog).sources +endif base_prog_config := $(wildcard $(base_prog).config.$(PROFILE)) ifndef base_prog_config base_prog_config := $(wildcard $(base_prog).config) endif -ifdef base_prog_config -PROGRAM_config := $(PROGRAM).config -endif executable_CLEAN_FILES = *.exe $(PROGRAM) $(PROGRAM).mdb $(BUILT_SOURCES) ifeq (cat,$(PLATFORM_CHANGE_SEPARATOR_CMD)) response = $(sourcefile) else -response = $(depsdir)/$(base_prog).response +response = $(depsdir)/$(sourcefile).response executable_CLEAN_FILES += $(response) endif +ifndef the_libdir +the_libdir = $(topdir)/class/lib/$(PROFILE)/ +ifdef PROGRAM_USE_INTERMEDIATE_FILE +build_libdir = $(the_libdir)tmp/ +else +build_libdir = $(the_libdir) +endif +endif + +ifdef base_prog_config +PROGRAM_config := $(build_libdir)$(PROGRAM).config +endif + +the_lib = $(the_libdir)$(base_prog) +build_lib = $(build_libdir)$(base_prog) + makefrag = $(depsdir)/$(PROFILE)_$(base_prog).makefrag pdb = $(patsubst %.exe,%.pdb,$(PROGRAM)) mdb = $(patsubst %.exe,%.mdb,$(PROGRAM)) executable_CLEAN_FILES += $(makefrag) $(pdb) $(mdb) -all-local: $(PROGRAM) $(PROGRAM_config) +all-local: $(the_lib) $(PROGRAM_config) install-local: all-local test-local: all-local @@ -41,20 +56,23 @@ ifndef PROGRAM_INSTALL_DIR PROGRAM_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION) endif -install-local: $(PROGRAM) $(PROGRAM_config) +install-local: $(MKINSTALLDIRS) $(DESTDIR)$(PROGRAM_INSTALL_DIR) - $(INSTALL_BIN) $(PROGRAM) $(DESTDIR)$(PROGRAM_INSTALL_DIR) - test ! -f $(PROGRAM).mdb || $(INSTALL_BIN) $(PROGRAM).mdb $(DESTDIR)$(PROGRAM_INSTALL_DIR) + $(INSTALL_BIN) $(the_lib) $(DESTDIR)$(PROGRAM_INSTALL_DIR) + test ! -f $(the_lib).mdb || $(INSTALL_BIN) $(the_lib).mdb $(DESTDIR)$(PROGRAM_INSTALL_DIR) ifdef PROGRAM_config $(INSTALL_DATA) $(PROGRAM_config) $(DESTDIR)$(PROGRAM_INSTALL_DIR) endif +ifdef PLATFORM_AOT_SUFFIX + test ! -f $(PROGRAM)$(PLATFORM_AOT_SUFFIX) || $(INSTALL_LIB) $(PROGRAM)$(PLATFORM_AOT_SUFFIX) $(DESTDIR)$(PROGRAM_INSTALL_DIR) +endif uninstall-local: -rm -f $(DESTDIR)$(PROGRAM_INSTALL_DIR)/$(base_prog) $(DESTDIR)$(PROGRAM_INSTALL_DIR)/$(base_prog).mdb $(DESTDIR)$(PROGRAM_INSTALL_DIR)/$(base_prog).config endif clean-local: - -rm -f $(executable_CLEAN_FILES) $(CLEAN_FILES) + -rm -f $(executable_CLEAN_FILES) $(CLEAN_FILES) $(tests_CLEAN_FILES) test-local: @: @@ -65,13 +83,24 @@ run-test-ondotnet-local: DISTFILES = $(sourcefile) $(base_prog_config) $(EXTRA_DISTFILES) +ifdef HAS_NUNIT_TEST +ASSEMBLY = $(PROGRAM) +ASSEMBLY_EXT = .exe +the_assembly = $(PROGRAM) +include $(topdir)/build/tests.make +endif + +ifdef HAVE_CS_TESTS +DISTFILES += $(test_sourcefile) +endif + dist-local: dist-default for f in `cat $(sourcefile)` ; do \ case $$f in \ ../*) : ;; \ - *) dest=`dirname $$f` ; \ + *) dest=`dirname "$$f"` ; \ case $$subs in *" $$dest "*) : ;; *) subs=" $$dest$$subs" ; $(MKINSTALLDIRS) $(distdir)/$$dest ;; esac ; \ - cp -p $$f $(distdir)/$$dest || exit 1 ;; \ + cp -p "$$f" $(distdir)/$$dest || exit 1 ;; \ esac ; done ; \ for d in . $$subs ; do \ case $$d in .) : ;; *) test ! -f $$d/ChangeLog || cp -p $$d/ChangeLog $(distdir)/$$d ;; esac ; done @@ -80,32 +109,61 @@ ifndef PROGRAM_COMPILE PROGRAM_COMPILE = $(CSCOMPILE) endif -$(PROGRAM): $(BUILT_SOURCES) $(EXTRA_SOURCES) $(response) - $(PROGRAM_COMPILE) -target:exe -out:$(base_prog) $(BUILT_SOURCES) $(EXTRA_SOURCES) @$(response) -ifneq ($(base_prog),$(PROGRAM)) - mv $(base_prog) $(PROGRAM) - test ! -f $(base_prog).mdb || mv $(base_prog).mdb $(PROGRAM).mdb +$(the_lib): $(the_libdir)/.stamp + +$(build_lib): $(BUILT_SOURCES) $(EXTRA_SOURCES) $(response) $(build_libdir:=/.stamp) + $(PROGRAM_COMPILE) -target:exe -out:$@ $(BUILT_SOURCES) $(EXTRA_SOURCES) @$(response) + +ifdef PROGRAM_USE_INTERMEDIATE_FILE +$(the_lib): $(build_lib) + $(Q) cp $(build_lib) $@ + $(Q) test ! -f $(build_lib).mdb || mv $(build_lib).mdb $@.mdb + $(Q) test ! -f $(build_lib:.exe=.pdb) || mv $(build_lib:.exe=.pdb) $(the_lib:.exe=.pdb) endif ifdef PROGRAM_config ifneq ($(base_prog_config),$(PROGRAM_config)) executable_CLEAN_FILES += $(PROGRAM_config) -$(PROGRAM_config): $(base_prog_config) +$(PROGRAM_config): $(base_prog_config) $(dir $(PROGRAM_config))/.stamp cp $(base_prog_config) $(PROGRAM_config) endif endif $(makefrag): $(sourcefile) - @echo Creating $@ ... - @sed 's,^,$(PROGRAM): ,' $< > $@ +# @echo Creating $@ ... + @sed 's,^,$(build_lib): ,' $< >$@ + @if test ! -f $(sourcefile).makefrag; then :; else \ + cat $(sourcefile).makefrag >> $@ ; \ + echo '$@: $(sourcefile).makefrag' >> $@; \ + echo '$(sourcefile).makefrag:' >> $@; fi ifneq ($(response),$(sourcefile)) $(response): $(sourcefile) - @echo Creating $@ ... - @( $(PLATFORM_CHANGE_SEPARATOR_CMD) ) <$< >$@ + @echo Converting $(sourcefile) to $@ ... + @cat $(sourcefile) | $(PLATFORM_CHANGE_SEPARATOR_CMD) >$@ endif -include $(makefrag) -all-local: $(makefrag) -$(makefrag): $(topdir)/build/executable.make +all-local: $(makefrag) $(extra_targets) + +csproj-local: + config_file=`basename $(PROGRAM) .exe`-$(PROFILE).input; \ + echo $(thisdir):$$config_file >> $(topdir)/../msvc/scripts/order; \ + (echo $(is_boot); \ + echo $(MCS); \ + echo $(USE_MCS_FLAGS) $(LIBRARY_FLAGS) $(LIB_MCS_FLAGS); \ + echo $(PROGRAM); \ + echo $(BUILT_SOURCES_cmdline); \ + echo $(build_lib); \ + echo $(response)) > $(topdir)/../msvc/scripts/inputs/$$config_file + + +ifneq ($(response),$(sourcefile)) +$(response): $(topdir)/build/executable.make $(depsdir)/.stamp +endif +$(makefrag): $(topdir)/build/executable.make $(depsdir)/.stamp + +doc-update-local: + @: +