summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsternenseemann <sternenseemann@systemli.org>2022-07-24 11:41:11 +0200
committerDouglas Wilson <douglas.wilson@gmail.com>2022-07-27 11:29:56 +0100
commit1198d751927caa54a9826cf0068c7019d040916f (patch)
treec5063d40e74ddcff982bc795dabf0df6aee44a62
parenta9c0b989d0b8af82c41462b73cf6f7d043c668b1 (diff)
downloadhaskell-1198d751927caa54a9826cf0068c7019d040916f.tar.gz
hadrian: add flag disabling selftest rules which require QuickCheck
The hadrian executable depends on QuickCheck for building, meaning this library (and its dependencies) will need to be built for bootstrapping GHC in the future. Building QuickCheck, however, can require TemplateHaskell. When building a statically linking GHC toolchain, TemplateHaskell can be tricky to get to work, and cross-compiling TemplateHaskell doesn't work at all without -fexternal-interpreter, so QuickCheck introduces an element of fragility to GHC's bootstrap. Since the selftest rules are the only part of hadrian that need QuickCheck, we can easily eliminate this bootstrap dependency when required by introducing a `selftest` flag guarding the rules' inclusion. Closes #8699. (cherry picked from commit 42147534320f9ac22f16ffc226148ae553337d2e)
-rw-r--r--hadrian/hadrian.cabal15
-rw-r--r--hadrian/src/Main.hs6
2 files changed, 18 insertions, 3 deletions
diff --git a/hadrian/hadrian.cabal b/hadrian/hadrian.cabal
index da0aa4daab..c37974914a 100644
--- a/hadrian/hadrian.cabal
+++ b/hadrian/hadrian.cabal
@@ -24,6 +24,14 @@ flag threaded
which don't support the threaded runtime should
disable this flag.
+-- See also #21913
+flag selftest
+ manual: True
+ default: True
+ description: Enables the hadrian selftest rules which require
+ QuickCheck. Disabling it thus saves on a few dependencies
+ which can be problematic when bootstrapping.
+
executable hadrian
main-is: Main.hs
hs-source-dirs: .
@@ -82,7 +90,6 @@ executable hadrian
, Rules.Program
, Rules.Register
, Rules.Rts
- , Rules.Selftest
, Rules.SimpleTargets
, Rules.SourceDist
, Rules.Test
@@ -141,7 +148,6 @@ executable hadrian
other-extensions: MultiParamTypeClasses
, TypeFamilies
build-depends: Cabal >= 3.2 && < 3.7
- , QuickCheck >= 2.6 && < 2.15
, base >= 4.8 && < 5
, bytestring >= 0.10 && < 0.12
, containers >= 0.5 && < 0.7
@@ -169,3 +175,8 @@ executable hadrian
-- time tends to eat any benefit.
"-with-rtsopts=-I0 -qg"
-threaded
+
+ if flag(selftest)
+ other-modules: Rules.Selftest
+ cpp-options: -DHADRIAN_ENABLE_SELFTEST
+ build-depends: QuickCheck >= 2.6 && < 2.15
diff --git a/hadrian/src/Main.hs b/hadrian/src/Main.hs
index d2e0ace795..4c3dfe2bcc 100644
--- a/hadrian/src/Main.hs
+++ b/hadrian/src/Main.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
module Main (main) where
import Development.Shake
@@ -19,7 +20,9 @@ import qualified Rules.Docspec
import qualified Rules.Documentation
import qualified Rules.Lint
import qualified Rules.Nofib
+#if HADRIAN_ENABLE_SELFTEST
import qualified Rules.Selftest
+#endif
import qualified Rules.SourceDist
import qualified Rules.Test
import qualified UserSettings
@@ -99,7 +102,9 @@ main = do
Rules.Lint.lintRules
Rules.Nofib.nofibRules
Rules.oracleRules
+#if HADRIAN_ENABLE_SELFTEST
Rules.Selftest.selftestRules
+#endif
Rules.SourceDist.sourceDistRules
Rules.Test.testRules
Rules.topLevelTargets
@@ -150,4 +155,3 @@ escNormal = "\ESC[0m"
escape :: String -> String -> String
escape code x = escForeground code ++ x ++ escNormal
-