summaryrefslogtreecommitdiff
path: root/rules
diff options
context:
space:
mode:
authorIan Lynagh <ian@well-typed.com>2013-03-01 16:34:33 +0000
committerIan Lynagh <ian@well-typed.com>2013-03-01 21:02:49 +0000
commit104ff6e9ad85751dab2fc2ed25cf8f7827bb13f1 (patch)
tree840b8c87b16818837d142b6034145f4b25dba8d4 /rules
parent458c653a795ea06e7cbd24872e9961711f7044e8 (diff)
downloadhaskell-104ff6e9ad85751dab2fc2ed25cf8f7827bb13f1.tar.gz
Change how the build system handles packages
This makes the build system a little simpler, and in particular will make it easier to handle the changes needed for cross-compilation.
Diffstat (limited to 'rules')
-rw-r--r--rules/extra-packages.mk48
-rw-r--r--rules/foreachLibrary.mk43
-rw-r--r--rules/haddock.mk2
3 files changed, 44 insertions, 49 deletions
diff --git a/rules/extra-packages.mk b/rules/extra-packages.mk
deleted file mode 100644
index 98868b45db..0000000000
--- a/rules/extra-packages.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2010 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-# http://hackage.haskell.org/trac/ghc/wiki/Building/Architecture
-# http://hackage.haskell.org/trac/ghc/wiki/Building/Modifying
-#
-# -----------------------------------------------------------------------------
-
-# For each package P marked as "dph" or "extra" in $(TOP)/packages:
-# if $(TOP)/libraries/P exists, then
-# if $(TOP)/libraries/P/ghc-packages exists, then
-# * add each package from $(TOP)/libraries/P/ghc-packages2 to the list of
-# packages.
-# Note: ghc-packages2 might have a different list from
-# ghc-packages, this is to support dph which has some
-# packages that are automatically derived from a single
-# source by the build system).
-# * add $(TOP)/libraries/P to $(BUILD_DIRS)
-# This step is necessary in the case of dph, which has some
-# build system code in libraries/dph/ghc.mk, but
-# libraries/dph is not itself a package.
-# else
-# add P to the list of packages
-
-define extra-packages
-
-# Collects some dirs containing ghc.mk files that we need to include:
-BUILD_DIRS_EXTRA=
-
-$$(foreach p,$$(patsubst libraries/%,%,$$(wildcard $$(shell grep '^[^ #][^ ]* \+\(dph\|extra\) \+[^ ]\+ \+[^ ]\+$$$$' packages | sed 's/ .*//'))),\
- $$(if $$(wildcard libraries/$$p/ghc-packages),\
- $$(eval BUILD_DIRS_EXTRA += libraries/$$p) \
- $$(foreach q,$$(shell cat libraries/$$p/ghc-packages2),$$(eval $$(call extra-package,$$p,$$p/$$q))),\
- $$(eval $$(call extra-package,$$p,$$p)))\
-)
-endef
-
-define extra-package # $1 = package root, $2 = package
-$(call trace, extra-package($1,$2))
-
-EXTRA_PACKAGES += $2
-$$(eval $$(call addPackage,$2))
-
-endef
diff --git a/rules/foreachLibrary.mk b/rules/foreachLibrary.mk
new file mode 100644
index 0000000000..6bf7673336
--- /dev/null
+++ b/rules/foreachLibrary.mk
@@ -0,0 +1,43 @@
+# -----------------------------------------------------------------------------
+#
+# (c) 2010 The University of Glasgow
+#
+# This file is part of the GHC build system.
+#
+# To understand how the build system works and how to modify it, see
+# http://hackage.haskell.org/trac/ghc/wiki/Building/Architecture
+# http://hackage.haskell.org/trac/ghc/wiki/Building/Modifying
+#
+# -----------------------------------------------------------------------------
+
+# For each line in $(TOP)/packages:
+# libraries/foo tag ...
+# this calls
+# $(call $1,foo,tag)
+#
+# Except! If there's a libraries/foo/ghc-packages then it calls
+# $(call $1,foo/bar,tag)
+# for each word 'bar' in libraries/foo/ghc-packages.
+#
+
+# We use an FEL_ prefix for the variable names, to avoid trampling on
+# other variables, as make has no concept of local variables.
+
+# We need to handle bin-package-db specially, as it doesn't have an
+# entry in the packages file, as it isn't in its own repository.
+
+define foreachLibrary
+# $1 = function to call for each library
+# We will give it the package path and the tag as arguments
+$$(foreach hashline,libraries/bin-package-db#-#no-remote-repo#no-vcs \
+ $$(shell grep '^libraries/' packages | sed 's/ */#/g'),\
+ $$(eval FEL_line := $$(subst #,$$(space),$$(hashline))) \
+ $$(eval FEL_libdir := $$(word 1,$$(FEL_line))) \
+ $$(eval FEL_tag := $$(word 2,$$(FEL_line))) \
+ $$(eval FEL_libroot := $$(patsubst libraries/%,%,$$(FEL_libdir))) \
+ $$(if $$(wildcard $$(FEL_libdir)/ghc-packages), \
+ $$(foreach lib,$$(shell cat $$(FEL_libdir)/ghc-packages), \
+ $$(eval $$(call $1,$$(FEL_libroot)/$$(lib),$$(FEL_tag)))), \
+ $$(if $$(wildcard $$(FEL_libdir)/), \
+ $$(eval $$(call $1,$$(FEL_libroot),$$(FEL_tag))))))
+endef
diff --git a/rules/haddock.mk b/rules/haddock.mk
index 3a3fed4503..99a93f125d 100644
--- a/rules/haddock.mk
+++ b/rules/haddock.mk
@@ -15,7 +15,7 @@ define haddock # args: $1 = dir, $2 = distdir
$(call trace, haddock($1,$2))
$(call profStart, haddock($1,$2))
-ifneq "$$($1_$2_DO_HADDOCK)" "NO"
+ifeq "$$($1_$2_DO_HADDOCK)" "YES"
ifeq "$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE)" ""
$$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE = $1/$2/doc/html/$$($1_PACKAGE)/$$($1_PACKAGE).haddock