summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ghc.mk55
-rw-r--r--mk/validate-settings.mk3
-rw-r--r--packages6
3 files changed, 41 insertions, 23 deletions
diff --git a/ghc.mk b/ghc.mk
index 3348d47b53..805fc14f76 100644
--- 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)" \
diff --git a/mk/validate-settings.mk b/mk/validate-settings.mk
index 9e19105c24..b45884752e 100644
--- a/mk/validate-settings.mk
+++ b/mk/validate-settings.mk
@@ -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
diff --git a/packages b/packages
index fef1b186d5..dd8c0a8f59 100644
--- a/packages
+++ b/packages
@@ -22,12 +22,18 @@
# * '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.
#