-# "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.