From ae587ec8ab4dd8414d629d3629dec0cc44b37aa7 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 14 Apr 2011 19:42:51 +0100 Subject: [PATCH] Refactor how dependencies are included; fixes #5109 This avoids duplicating some logic around the build system. --- ghc.mk | 1 + rts/ghc.mk | 3 +-- rules/build-package.mk | 16 +--------------- rules/build-prog.mk | 16 +--------------- rules/dependencies.mk | 38 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 42 insertions(+), 32 deletions(-) create mode 100644 rules/dependencies.mk diff --git a/ghc.mk b/ghc.mk index 863ddc2..0f58876 100644 --- a/ghc.mk +++ b/ghc.mk @@ -227,6 +227,7 @@ include rules/package-config.mk # ----------------------------------------------------------------------------- # Building dependencies +include rules/dependencies.mk include rules/build-dependencies.mk include rules/include-dependencies.mk diff --git a/rts/ghc.mk b/rts/ghc.mk index df68bc5..53bb72c 100644 --- a/rts/ghc.mk +++ b/rts/ghc.mk @@ -456,8 +456,7 @@ rts_dist_MKDEPENDC_OPTS += -Irts/dist/build endif -$(eval $(call build-dependencies,rts,dist,1)) -$(eval $(call include-dependencies,rts,dist,1)) +$(eval $(call dependencies,rts,dist,1)) $(rts_dist_depfile_c_asm) : libffi/dist-install/build/ffi.h $(DTRACEPROBES_H) diff --git a/rules/build-package.mk b/rules/build-package.mk index ac0a8ee..c735e51 100644 --- a/rules/build-package.mk +++ b/rules/build-package.mk @@ -100,21 +100,7 @@ $(call hs-sources,$1,$2) $(call c-sources,$1,$2) $(call includes-sources,$1,$2) -# --- DEPENDENCIES -# We always have the dependency rules available, as we need to know -# how to build hsc2hs's dependency file in phase 0 -$(call build-dependencies,$1,$2,$3) -ifneq "$(phase)" "0" -# From phase 1 we actually include the dependency files for the -# bootstrapping stuff -ifeq "$3" "0" -$(call include-dependencies,$1,$2,$3) -else ifeq "$(phase)" "final" -# In the final phase, we also include the dependency files for -# everything else -$(call include-dependencies,$1,$2,$3) -endif -endif +$(call dependencies,$1,$2,$3) # Now generate all the build rules for each way in this directory: $$(foreach way,$$($1_$2_WAYS),$$(eval \ diff --git a/rules/build-prog.mk b/rules/build-prog.mk index 5c352a2..c39f947 100644 --- a/rules/build-prog.mk +++ b/rules/build-prog.mk @@ -188,20 +188,6 @@ INSTALL_BINS += $1/$2/build/tmp/$$($1_$2_PROG) endif endif -# --- DEPENDENCIES -# We always have the dependency rules available, as we need to know -# how to build hsc2hs's dependency file in phase 0 -$(call build-dependencies,$1,$2,$3) -ifneq "$(phase)" "0" -# From phase 1 we actually include the dependency files for the -# bootstrapping stuff -ifeq "$3" "0" -$(call include-dependencies,$1,$2,$3) -else ifeq "$(phase)" "final" -# In the final phase, we also include the dependency files for -# everything else -$(call include-dependencies,$1,$2,$3) -endif -endif +$(call dependencies,$1,$2,$3) endef diff --git a/rules/dependencies.mk b/rules/dependencies.mk new file mode 100644 index 0000000..42605a5 --- /dev/null +++ b/rules/dependencies.mk @@ -0,0 +1,38 @@ +# ----------------------------------------------------------------------------- +# +# (c) 2009 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 +# +# ----------------------------------------------------------------------------- + +define dependencies +$(call trace, dependencies($1,$2,$3)) +$(call profStart, dependencies($1,$2,$3)) +# $1 = dir +# $2 = distdir +# $3 = GHC stage to use (0 == bootstrapping compiler) + +# We always have the dependency rules available, as we need to know +# how to build hsc2hs's dependency file in phase 0 +$(call build-dependencies,$1,$2,$3) + +ifneq "$(phase)" "0" +# From phase 1 we actually include the dependency files for the +# bootstrapping stuff +ifeq "$3" "0" +$(call include-dependencies,$1,$2,$3) +else ifeq "$(phase)" "final" +# In the final phase, we also include the dependency files for +# everything else +$(call include-dependencies,$1,$2,$3) +endif +endif + +$(call profEnd, dependencies($1,$2,$3)) +endef + -- 1.7.10.4