summaryrefslogtreecommitdiff
path: root/rules/build-dependencies.mk
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2009-12-30 18:52:39 +0000
committerIan Lynagh <igloo@earth.li>2009-12-30 18:52:39 +0000
commit5734b876e3ac2faea7d59457956051cc32af191d (patch)
tree4cfc36d35f932fc47d2a3b3c04f150f1c63f7771 /rules/build-dependencies.mk
parent0e5b82290dfb34c969106d6bfb6efa16f8ce63d1 (diff)
downloadhaskell-5734b876e3ac2faea7d59457956051cc32af191d.tar.gz
Fix rules/build-dependencies.mk on OS X
Also more comments on why we have the sed rules that we do.
Diffstat (limited to 'rules/build-dependencies.mk')
-rw-r--r--rules/build-dependencies.mk30
1 files changed, 23 insertions, 7 deletions
diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk
index 8f52bc5058..962c0408ab 100644
--- a/rules/build-dependencies.mk
+++ b/rules/build-dependencies.mk
@@ -101,15 +101,31 @@ endef
# "dist/build" directory, so now we've just made
# "dist/build/dist/build", so we need to remove the duplication
# again
-# "s|$(TOP)/||gi"
-# Finally, cpp -MM will give us full paths for some files, but this
-# causes problems on Windows where make interprets the colon in
-# c:/foo/bar.h as make syntax. So we sed off $(TOP) (case
-# insensitively, as sometimes you get C:/... when you are expecting
-# c:/... or vice versa)
+# "s|$(TOP)/||g$(CASE_INSENSITIVE_SED)"
+# Finally, when making deps for packages like ghc stage2, we have
+# some include paths for packages registered in the in-tree package
+# database. These include paths are full (i.e. not relative) paths,
+# which means that the "cpp -MM" output uses full paths in some cases.
+# This causes 2 problems:
+# * they don't match up with the rules to rebuild the files, where
+# appropriate.
+# * on Windows, make interprets the colon in c:/foo/bar.h as make
+# syntax.
+# So we sed off $(TOP). Unfortunately, on Windows, the case for the
+# drive letter is sometimes different in what $(TOP) starts with, and
+# what the path in the package database starts with. We therefore
+# need to do the substitution case-insensitively on Windows. But
+# the s///i modifier isn't portable, so we set CASE_INSENSITIVE_SED
+# to "i" on Windows and "" on any other platform.
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)/||gi" $3.bit >> $3.tmp &&) true
+ $(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
endef
+ifeq "$(Windows)" "YES"
+CASE_INSENSITIVE_SED = i
+else
+CASE_INSENSITIVE_SED =
+endif
+