Fix computation of installed packages
authorsimonpj@microsoft.com <unknown>
Fri, 24 Sep 2010 08:47:37 +0000 (08:47 +0000)
committersimonpj@microsoft.com <unknown>
Fri, 24 Sep 2010 08:47:37 +0000 (08:47 +0000)
This is a follow-on to Simon's patch yesterday, developed
with him.  It cleans up the computation of how packages
are installed, and installs the right ones.

ghc.mk
mk/validate-settings.mk
packages

diff --git a/ghc.mk b/ghc.mk
index 3348d47..805fc14 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
@@ -285,7 +285,9 @@ include rules/bindist.mk
 # Packages
 
 # --------------------------------
-# Subsets of packages
+# Properties of packages
+# These lists say "if this package is built, here's a property it has"
+# They do not say "this package will be built"; see $(PACKAGES_xx) for that
 
 # Packages that are built but not installed
 INTREE_ONLY_PACKAGES := haskeline mtl terminfo utf8-string xhtml
@@ -305,11 +307,24 @@ STAGE2_PACKAGES := dph/dph-base dph/dph-prim-interface dph/dph-prim-seq \
 # so we don't have to include it below.
 STAGE0_PACKAGES = Cabal hpc extensible-exceptions binary bin-package-db
 
-# --------------------------------
-# Building the lists of packages
+# These packages are installed, but are installed hidden
+# Why install them at all?  Because the 'ghc' package depends on them
+HIDDEN_PACKAGES = binary
 
-# We need to build two lists:
-# 
+# $(EXTRA_PACKAGES)  is another classification, of packages built but
+#                    not installed
+#                    It is set in rules/extra-package.mk, 
+#                    by $(call extra-packages) a little further down 
+#                    this ghc.mk 
+
+
+# --------------------------------
+# Packages to build
+# The lists of packages that we *actually* going to build in each stage:
+#
+#  $(STAGE0_PACKAGE)   does double duty; it really is the list of packages
+#                      we build the bootstrap compiler in stage 0
+#
 #  $(PACKAGES)          A list of directories relative to libraries/ containing
 #                       packages that will be built by stage1, in dependency
 #                       order.
@@ -897,28 +912,22 @@ INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe
 INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
 endif
 
-INSTALLED_PACKAGES := $(filter-out $(INTREE_ONLY_PACKAGES),$(PACKAGES))
+INSTALLED_PKG_DIRS := $(addprefix libraries/,$(PACKAGES)) \
+                      compiler \
+                      $(addprefix libraries/,$(PACKAGES_STAGE2))
 ifeq "$(InstallExtraPackages)" "NO"
-INSTALLED_PACKAGES := $(filter-out $(EXTRA_PACKAGES), $(INSTALLED_PACKAGES))
+INSTALLED_PKG_DIRS := $(filter-out $(addprefix libraries/,$(EXTRA_PACKAGES)),\
+                                   $(INSTALLED_PKG_DIRS))
 endif
+INSTALLED_PKG_DIRS := $(filter-out $(addprefix libraries/,$(INTREE_ONLY_PACKAGES)),\
+                                   $(INSTALLED_PKG_DIRS))
 
-HIDDEN_PACKAGES = binary
-
-define set_INSTALL_DISTDIR
-# $1 = libraries/base, $2 = dist-install
-# =>
-# INSTALL_DISTDIR_libraries/base = dist-install
-INSTALL_DISTDIR_$1 = $2
-endef
-
-$(eval $(foreach p,$(INSTALLED_PACKAGES) $(PACKAGES_STAGE2),\
-$(call set_INSTALL_DISTDIR,libraries/$p,dist-install)))
+# Set the INSTALL_DISTDIR_p for each package; compiler is special
+$(foreach p,$(filter-out compiler,$(INSTALLED_PKG_DIRS)),\
+   $(eval INSTALL_DISTDIR_$p = dist-install))
 INSTALL_DISTDIR_compiler = stage2
 
-ALL_INSTALLED_PACKAGES = $(addprefix libraries/,$(INSTALLED_PACKAGES)) \
-                         compiler \
-                         $(addprefix libraries/,$(PACKAGES_STAGE2))
-
+# Now we can do the installation
 install_packages: install_libexecs
 install_packages: libffi/package.conf.install rts/package.conf.install
        $(INSTALL_DIR) "$(DESTDIR)$(topdir)"
@@ -926,7 +935,7 @@ install_packages: libffi/package.conf.install rts/package.conf.install
        $(INSTALL_DIR) "$(INSTALLED_PACKAGE_CONF)"
        "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf "$(INSTALLED_PACKAGE_CONF)" update libffi/package.conf.install
        "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf "$(INSTALLED_PACKAGE_CONF)" update rts/package.conf.install
-       $(foreach p, $(ALL_INSTALLED_PACKAGES),                       \
+       $(foreach p, $(INSTALLED_PKG_DIRS),                           \
            $(call make-command,                                      \
                   "$(GHC_CABAL_INPLACE)" install                     \
                                          "$(INSTALLED_GHC_REAL)"     \
index 9e19105..b458847 100644 (file)
@@ -22,6 +22,9 @@ STRIP_CMD       = :
 
 CHECK_PACKAGES = YES
 
+# We want to install DPH when validating, so that we can test it
+InstallExtraPackages = YES    
+
 # dblatex with miktex under msys/mingw can't build the PS and PDF docs,
 # and just building the HTML docs is sufficient to check that the
 # markup is correct, so we turn off PS and PDF doc building when
index fef1b18..dd8c0a8 100644 (file)
--- a/packages
+++ b/packages
 #   * 'localpath' is where to put the repository in a checked out tree.
 #   * 'remotepath' is where the repository is in the central repository.
 #   * 'VCS' is what version control system the repo uses.
+#
 #   * The 'tag' determines when "darcs-all get" will get the
 #     repo. If the tag is "-" then it will always get it, but if there
 #     is a tag then a corresponding flag must be given to darcs-all, e.g.
 #     if you want to get the packages with an "extralibs" or "testsuite"
 #     tag then you need to use "darcs-all --extra --testsuite get".
 #     Support for new tags must be manually added to the darcs-all script.
+# 
+#     'tag' is also used to determine which packages the build system
+#     deems to have the EXTRA_PACKAGE property: tags 'dph' and 'extra' 
+#     both give this property
+#
 #   * 'upstream' is the URL of the upstream repo, where there is one, or
 #     "-" if there is no upstream.
 #