executable.make 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. # -*- makefile -*-
  2. #
  3. # The rules for building a program.
  4. base_prog = $(notdir $(PROGRAM))
  5. prog_dir := $(filter-out . ./, $(dir $(PROGRAM)))
  6. sourcefile = $(base_prog).sources
  7. base_prog_config := $(wildcard $(base_prog).config.$(PROFILE))
  8. ifndef base_prog_config
  9. base_prog_config := $(wildcard $(base_prog).config)
  10. endif
  11. ifdef base_prog_config
  12. PROGRAM_config := $(PROGRAM).config
  13. endif
  14. executable_CLEAN_FILES = *.exe $(PROGRAM) $(PROGRAM).mdb $(BUILT_SOURCES)
  15. ifeq (cat,$(PLATFORM_CHANGE_SEPARATOR_CMD))
  16. response = $(sourcefile)
  17. else
  18. response = $(depsdir)/$(base_prog).response
  19. executable_CLEAN_FILES += $(response)
  20. endif
  21. ifdef KEEP_OUTPUT_FILE_COPY
  22. COPY_CMD = cp
  23. else
  24. COPY_CMD = mv
  25. endif
  26. makefrag = $(depsdir)/$(PROFILE)_$(base_prog).makefrag
  27. pdb = $(patsubst %.exe,%.pdb,$(PROGRAM))
  28. mdb = $(patsubst %.exe,%.mdb,$(PROGRAM))
  29. executable_CLEAN_FILES += $(makefrag) $(pdb) $(mdb)
  30. all-local: $(PROGRAM) $(PROGRAM_config)
  31. install-local: all-local
  32. test-local: all-local
  33. uninstall-local:
  34. ifdef NO_INSTALL
  35. install-local uninstall-local:
  36. @:
  37. else
  38. ifndef PROGRAM_INSTALL_DIR
  39. PROGRAM_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)
  40. endif
  41. install-local: $(PROGRAM) $(PROGRAM_config)
  42. $(MKINSTALLDIRS) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
  43. $(INSTALL_BIN) $(PROGRAM) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
  44. test ! -f $(PROGRAM).mdb || $(INSTALL_BIN) $(PROGRAM).mdb $(DESTDIR)$(PROGRAM_INSTALL_DIR)
  45. ifdef PROGRAM_config
  46. $(INSTALL_DATA) $(PROGRAM_config) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
  47. endif
  48. uninstall-local:
  49. -rm -f $(DESTDIR)$(PROGRAM_INSTALL_DIR)/$(base_prog) $(DESTDIR)$(PROGRAM_INSTALL_DIR)/$(base_prog).mdb $(DESTDIR)$(PROGRAM_INSTALL_DIR)/$(base_prog).config
  50. endif
  51. clean-local:
  52. -rm -f $(executable_CLEAN_FILES) $(CLEAN_FILES)
  53. test-local:
  54. @:
  55. run-test-local:
  56. @:
  57. run-test-ondotnet-local:
  58. @:
  59. DISTFILES = $(sourcefile) $(base_prog_config) $(EXTRA_DISTFILES)
  60. dist-local: dist-default
  61. for f in `cat $(sourcefile)` ; do \
  62. case $$f in \
  63. ../*) : ;; \
  64. *) dest=`dirname $$f` ; \
  65. case $$subs in *" $$dest "*) : ;; *) subs=" $$dest$$subs" ; $(MKINSTALLDIRS) $(distdir)/$$dest ;; esac ; \
  66. cp -p $$f $(distdir)/$$dest || exit 1 ;; \
  67. esac ; done ; \
  68. for d in . $$subs ; do \
  69. case $$d in .) : ;; *) test ! -f $$d/ChangeLog || cp -p $$d/ChangeLog $(distdir)/$$d ;; esac ; done
  70. ifndef PROGRAM_COMPILE
  71. PROGRAM_COMPILE = $(CSCOMPILE)
  72. endif
  73. $(PROGRAM): $(BUILT_SOURCES) $(EXTRA_SOURCES) $(response) $(prog_dir:=/.stamp)
  74. $(PROGRAM_COMPILE) -target:exe -out:$(base_prog) $(BUILT_SOURCES) $(EXTRA_SOURCES) @$(response)
  75. ifneq ($(base_prog),$(PROGRAM))
  76. $(COPY_CMD) $(base_prog) $(PROGRAM)
  77. test ! -f $(base_prog).mdb || $(COPY_CMD) $(base_prog).mdb $(PROGRAM).mdb
  78. endif
  79. ifdef PROGRAM_config
  80. ifneq ($(base_prog_config),$(PROGRAM_config))
  81. executable_CLEAN_FILES += $(PROGRAM_config)
  82. $(PROGRAM_config): $(base_prog_config) $(dir $(PROGRAM_config))/.stamp
  83. cp $(base_prog_config) $(PROGRAM_config)
  84. endif
  85. endif
  86. $(makefrag): $(sourcefile)
  87. @echo Creating $@ ...
  88. @sed 's,^,$(PROGRAM): ,' $< > $@
  89. ifneq ($(response),$(sourcefile))
  90. $(response): $(sourcefile)
  91. @echo Creating $@ ...
  92. @( $(PLATFORM_CHANGE_SEPARATOR_CMD) ) <$< >$@
  93. endif
  94. -include $(makefrag)
  95. all-local: $(makefrag)
  96. ifneq ($(response),$(sourcefile))
  97. $(response): $(topdir)/build/executable.make $(depsdir)/.stamp
  98. endif
  99. $(makefrag): $(topdir)/build/executable.make $(depsdir)/.stamp