diff options
author | Herbert Valerio Riedel <hvr@gnu.org> | 2017-08-01 11:05:18 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-08-01 16:04:54 -0400 |
commit | 36fe21aa3fe5abe1cef0104b20c296ac9385658d (patch) | |
tree | fccb49998e3e4c961e1f2c9e4d3000ae394bfd60 /utils/ghc-cabal/ghc.mk | |
parent | c13720c8c6047844f659ad4ce684946b80c99bee (diff) | |
download | haskell-36fe21aa3fe5abe1cef0104b20c296ac9385658d.tar.gz |
Enable building Cabal with parsec
Cabal's parser has been rewritten in terms of Parsec (which is not
enabled yet in Cabal-2.0 by default, but can be enabled by a cabal
flag). The plan for Cabal is to drop support for the non-parsec parser,
so we need to prepare GHC to cope with new situation.
However, this means that lib:Cabal requires three new library
dependency submodules,
- parsec
- text
- mtl
What complicates matters is that we need to build `ghc-cabal` early on
during the bootstrap phase which currently needs to invoke `ghc --make`
directly. So these additional dependencies need to be integrated into
the monolithic `ghc --make` invocation which produces the `ghc-cabal`
executable.
Test Plan: `./validate --fast` passed
Reviewers: austin, bgamari
Subscribers: erikd, phadej, rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3757
Diffstat (limited to 'utils/ghc-cabal/ghc.mk')
-rw-r--r-- | utils/ghc-cabal/ghc.mk | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/utils/ghc-cabal/ghc.mk b/utils/ghc-cabal/ghc.mk index 6250484017..eeae8a715b 100644 --- a/utils/ghc-cabal/ghc.mk +++ b/utils/ghc-cabal/ghc.mk @@ -27,9 +27,9 @@ CABAL_CONSTRAINT := --constraint="Cabal == $(CABAL_DOTTED_VERSION)" # `cabal_macros_boot.h` also for GHC >= 8 (in which case it becomes a # dummy include that doesn't contribute any macro definitions). ifeq "$(Windows_Host)" "YES" -CABAL_BUILD_DEPS := base array time containers bytestring deepseq process pretty directory Win32 +CABAL_BUILD_DEPS := ghc-prim base array transformers time containers bytestring deepseq process pretty directory Win32 else -CABAL_BUILD_DEPS := base array time containers bytestring deepseq process pretty directory unix +CABAL_BUILD_DEPS := ghc-prim base array transformers time containers bytestring deepseq process pretty directory unix endif ghc-cabal_DIST_BINARY_NAME = ghc-cabal$(exeext0) @@ -40,11 +40,23 @@ ifneq "$(BINDIST)" "YES" $(ghc-cabal_INPLACE) : $(ghc-cabal_DIST_BINARY) | $$(dir $$@)/. "$(CP)" $< $@ +# Minor hack, since we can't reuse the `hs-suffix-rules-srcdir` macro +ifneq ($(wildcard libraries/Cabal/Cabal/Distribution/Parsec/Lexer.x),) +# Lexer.x exists so we have to call Alex ourselves +CABAL_LEXER_DEP := bootstrapping/Cabal/Distribution/Parsec/Lexer.hs + +bootstrapping/Cabal/Distribution/Parsec/Lexer.hs: libraries/Cabal/Cabal/Distribution/Parsec/Lexer.x + mkdir -p bootstrapping/Cabal/Distribution/Parsec + $(call cmd,ALEX) $< -o $@ +else +CABAL_LEXER_DEP := libraries/Cabal/Cabal/Distribution/Parsec/Lexer.hs +endif + $(ghc-cabal_DIST_BINARY): $(wildcard libraries/Cabal/Cabal/Distribution/*/*/*.hs) $(ghc-cabal_DIST_BINARY): $(wildcard libraries/Cabal/Cabal/Distribution/*/*.hs) $(ghc-cabal_DIST_BINARY): $(wildcard libraries/Cabal/Cabal/Distribution/*.hs) -$(ghc-cabal_DIST_BINARY): utils/ghc-cabal/Main.hs $(TOUCH_DEP) | $$(dir $$@)/. bootstrapping/. +$(ghc-cabal_DIST_BINARY): $(CABAL_LEXER_DEP) utils/ghc-cabal/Main.hs $(TOUCH_DEP) | $$(dir $$@)/. bootstrapping/. "$(GHC)" $(SRC_HC_OPTS) \ $(addprefix -optc, $(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE0)) \ $(addprefix -optl, $(SRC_LD_OPTS) $(CONF_GCC_LINKER_OPTS_STAGE0)) \ @@ -54,14 +66,21 @@ $(ghc-cabal_DIST_BINARY): utils/ghc-cabal/Main.hs $(TOUCH_DEP) | $$(dir $$@)/. b -no-user-$(GHC_PACKAGE_DB_FLAG) \ -Wall -fno-warn-unused-imports -fno-warn-warnings-deprecations \ -DCABAL_VERSION=$(CABAL_VERSION) \ + -DCABAL_PARSEC \ -DBOOTSTRAPPING \ -optP-include -optPutils/ghc-cabal/cabal_macros_boot.h \ -odir bootstrapping \ -hidir bootstrapping \ + $(CABAL_LEXER_DEP) \ -ilibraries/Cabal/Cabal \ -ilibraries/binary/src \ -ilibraries/filepath \ -ilibraries/hpc \ + -ilibraries/mtl \ + -ilibraries/text \ + libraries/text/cbits/cbits.c \ + -Ilibraries/text/include \ + -ilibraries/parsec \ $(utils/ghc-cabal_dist_EXTRA_HC_OPTS) \ $(EXTRA_HC_OPTS) "$(TOUCH_CMD)" $@ |