Fix some more build bugs exposed by the addition of the ghc dependency to dph
authorSimon Marlow <marlowsd@gmail.com>
Thu, 5 Nov 2009 16:03:21 +0000 (16:03 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Thu, 5 Nov 2009 16:03:21 +0000 (16:03 +0000)
See comments for details.

ghc.mk
rules/build-package-way.mk

diff --git a/ghc.mk b/ghc.mk
index d352d5c..2408049 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
@@ -525,7 +525,7 @@ endif
 
 ifneq "$(CLEANING)" "YES"
 BUILD_DIRS += \
-   $(patsubst %, libraries/%, $(PACKAGES) $(PACKAGES_STAGE2))
+   $(patsubst %, libraries/%, $(PACKAGES))
 endif
 
 ifneq "$(BootingFromHc)" "YES"
@@ -549,6 +549,12 @@ BUILD_DIRS += \
    $(GHC_TOUCHY_DIR)
 endif
 
+ifneq "$(CLEANING)" "YES"
+# After compiler/, because these packages depend on it
+BUILD_DIRS += \
+   $(patsubst %, libraries/%, $(PACKAGES_STAGE2))
+endif
+
 # XXX libraries/% must come before any programs built with stage1, see
 # Note [lib-depends].
 
@@ -685,6 +691,15 @@ libraries/bin-package-db/dist-boot/build/Distribution/InstalledPackageInfo/Binar
 
 $(foreach pkg,$(BOOT_PKGS),$(eval libraries/$(pkg)_dist-boot_HC_OPTS += $$(GhcBootLibHcOpts)))
 
+# Make sure we have all the GHCi libs by the time we've built
+# ghc-stage2.  DPH includes a bit of Template Haskell which needs the
+# GHCI libs, and we don't have a better way to express that dependency.
+#
+GHCI_LIBS = $(foreach lib,$(PACKAGES),$(libraries/$(lib)_dist-install_GHCI_LIB)) \
+           $(compiler_stage2_GHCI_LIB)
+
+ghc/stage2/build/tmp/$(ghc_stage2_PROG) : $(GHCI_LIBS)
+
 endif
 
 # -----------------------------------------------------------------------------
index f7480aa..e674b7a 100644 (file)
@@ -26,6 +26,15 @@ $(call hs-objs,$1,$2,$3)
 $1_$2_$3_LIB = $1/$2/build/libHS$$($1_PACKAGE)-$$($1_$2_VERSION)$$($3_libsuf)
 $$($1_PACKAGE)-$($1_$2_VERSION)_$2_$3_LIB = $$($1_$2_$3_LIB)
 
+# hack: the DEPS_LIBS mechanism assumes that the distdirs for packges
+# that depend on each other are the same, but that is not the case for
+# ghc where we use stage1/stage2 rather than dist/dist-install.
+# Really we should use a consistent scheme for distdirs, but in the
+# meantime we work around it by defining ghc-<ver>_dist-install_way_LIB:
+ifeq "$$($1_PACKAGE) $2" "ghc stage2"
+$$($1_PACKAGE)-$($1_$2_VERSION)_dist-install_$3_LIB = $$($1_$2_$3_LIB)
+endif
+
 # All the .a/.so library file dependencies for this library
 $1_$2_$3_DEPS_LIBS=$$(foreach dep,$$($1_$2_DEPS),$$($$(dep)_$2_$3_LIB))