diff options
author | Ian Lynagh <ian@well-typed.com> | 2013-03-01 16:34:33 +0000 |
---|---|---|
committer | Ian Lynagh <ian@well-typed.com> | 2013-03-01 21:02:49 +0000 |
commit | 104ff6e9ad85751dab2fc2ed25cf8f7827bb13f1 (patch) | |
tree | 840b8c87b16818837d142b6034145f4b25dba8d4 /rules | |
parent | 458c653a795ea06e7cbd24872e9961711f7044e8 (diff) | |
download | haskell-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.mk | 48 | ||||
-rw-r--r-- | rules/foreachLibrary.mk | 43 | ||||
-rw-r--r-- | rules/haddock.mk | 2 |
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 |