X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rules%2Fbuild-dependencies.mk;h=e6d493ccf7314de64cf571ff8cf2e2477e14f1a2;hb=1851bb3cb6b5e9f0d413da7afc9b58c768888ecf;hp=256261156efd48a2fc325fb164c1f7e2ad3012f2;hpb=7a50ff1e44710335e935ff199cd95616840b9f02;p=ghc-hetmet.git diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk index 2562611..e6d493c 100644 --- a/rules/build-dependencies.mk +++ b/rules/build-dependencies.mk @@ -11,6 +11,8 @@ # ----------------------------------------------------------------------------- define build-dependencies +$(call trace, build-dependencies($1,$2,$3)) +$(call profStart, build-dependencies($1,$2,$3)) # $1 = dir # $2 = distdir # $3 = GHC stage to use (0 == bootstrapping compiler) @@ -21,11 +23,13 @@ $1_$2_depfile_c_asm = $$($1_$2_depfile_base).c_asm $1_$2_C_FILES_DEPS = $$(filter-out $$($1_$2_C_FILES_NODEPS),$$($1_$2_C_FILES)) $1_$2_MKDEPENDHS_FLAGS = -dep-makefile $$($1_$2_depfile_haskell).tmp $$(foreach way,$$(filter-out v,$$($1_$2_WAYS)),-dep-suffix $$(way)) -ifneq "$3" "0" $1_$2_MKDEPENDHS_FLAGS += -include-pkg-deps -endif -ifneq "$$($1_$2_NO_BUILD_DEPS)" "YES" +ifneq "$$(NO_GENERATED_MAKEFILE_RULES)" "YES" + +# Some of the Haskell files (e.g. utils/hsc2hs/Main.hs) (directly or +# indirectly) include the generated includes files. +$$($1_$2_depfile_haskell) : $$(includes_H_CONFIG) $$(includes_H_PLATFORM) $$($1_$2_depfile_haskell) : $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS) $$($1_$2_HC_MK_DEPEND_DEP) | $$$$(dir $$$$@)/. "$$(RM)" $$(RM_OPTS) $$@.tmp @@ -41,7 +45,14 @@ ifneq "$$($1_$2_SLASH_MODS)" "" if test ! -d $$$$dir; then mkdir -p $$$$dir; fi \ done endif - mv $$@.tmp $$@ +# Some packages are from the bootstrapping compiler, so are not +# within the build tree. On Windows this causes a problem as they look +# like bad rules, due to the two colons, so we filter them out. + grep -v ' : [a-zA-Z]:/' $$@.tmp > $$@ + +# Some of the C files (directly or indirectly) include the generated +# includes files. +$$($1_$2_depfile_c_asm) : $$(includes_H_CONFIG) $$(includes_H_PLATFORM) $$($1_$2_depfile_c_asm) : $$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES) | $$$$(dir $$$$@)/. "$$(RM)" $$(RM_OPTS) $$@.tmp @@ -58,27 +69,12 @@ endif echo "$1_$2_depfile_c_asm_EXISTS = YES" >> $$@.tmp mv $$@.tmp $$@ -endif # $1_$2_NO_BUILD_DEPS +endif # NO_GENERATED_MAKEFILE_RULES # Note sed magic above: mkdependC can't do -odir stuff, so we have to # munge the dependencies it generates to refer to the correct targets. -# Seems as good a place as any to attach the unlit dependency -$$($1_$2_depfile_haskell) : $$(UNLIT) - -ifneq "$$(NO_INCLUDE_DEPS)" "YES" -ifneq "$$(strip $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS))" "" -ifneq "$$(NO_STAGE$3_DEPS)" "YES" -include $$($1_$2_depfile_haskell) -endif -endif -include $$($1_$2_depfile_c_asm) -else -ifeq "$$(DEBUG)" "YES" -$$(warning not building dependencies in $1) -endif -endif - +$(call profEnd, build-dependencies($1,$2,$3)) endef # This comment is outside the "define addCFileDeps" as that definition @@ -93,6 +89,12 @@ endef # The formatting of this definition (e.g. the blank line above) is # important, in order to get make to generate the right makefile code. # +# 's|\\|/|g' +# We first normalise all slashes to be forward slashes. Note that +# $(TOP) also uses forward slashes. +# 's| /$$| \\|' +# But now we need to fix the line continuation characters that we +# just broke. # "1s|\.o|\.$($w_osuf)|" # We will have dependencies for .o files, so we need to fix them up # for the right object suffix for the way we're doing @@ -126,7 +128,7 @@ endef define addCFileDeps $(CPP) $($1_$2_MKDEPENDC_OPTS) $($1_$2_v_ALL_CC_OPTS) $($(basename $4)_CC_OPTS) -MM $4 -MF $3.bit - $(foreach w,$5,sed -e "1s|\.o|\.$($w_osuf)|" -e "1s|^|$(dir $4)|" -e "1s|$1/|$1/$2/build/|" -e "1s|$2/build/$2/build|$2/build|g" -e "s|$(TOP)/||g$(CASE_INSENSITIVE_SED)" $3.bit >> $3.tmp &&) true + $(foreach w,$5,sed -e 's|\\|/|g' -e 's| /$$| \\|' -e "1s|\.o|\.$($w_osuf)|" -e "1s|^|$(dir $4)|" -e "1s|$1/|$1/$2/build/|" -e "1s|$2/build/$2/build|$2/build|g" -e "s|$(TOP)/||g$(CASE_INSENSITIVE_SED)" $3.bit >> $3.tmp &&) true endef ifeq "$(Windows)" "YES"