Do dependency analysis when kind-checking type declarations
[ghc-hetmet.git] / rules / build-dependencies.mk
index 4bcd6d1..a862d41 100644 (file)
@@ -11,6 +11,7 @@
 # -----------------------------------------------------------------------------
 
 define build-dependencies
+$(call trace, build-dependencies($1,$2,$3))
 # $1 = dir
 # $2 = distdir
 # $3 = GHC stage to use (0 == bootstrapping compiler)
@@ -43,6 +44,9 @@ ifneq "$$($1_$2_SLASH_MODS)" ""
 endif
        mv $$@.tmp $$@
 
+# Some of the C files depend on 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
        touch $$@.tmp
@@ -68,8 +72,10 @@ $$($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"
@@ -91,6 +97,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
@@ -124,7 +136,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"