Hadrian: need CPP preprocessor dependencies #16660
authorDavid Eichmann <EichmannD@gmail.com>
Tue, 16 Apr 2019 14:10:35 +0000 (15:10 +0100)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Sun, 9 Jun 2019 22:46:46 +0000 (18:46 -0400)
Use the new -include-cpp-deps ghc option (#16521)
when generating .dependencies files in hadrian.
This is version gated as -include-cpp-deps is a
relatively new option.

hadrian/src/Settings/Builders/Ghc.hs

index db368f9..99165fb 100644 (file)
@@ -1,5 +1,9 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+
 module Settings.Builders.Ghc (ghcBuilderArgs, haddockGhcArgs) where
 
+import Data.List.Extra (splitOn)
+
 import Hadrian.Haskell.Cabal
 import Hadrian.Haskell.Cabal.Type
 
@@ -131,7 +135,16 @@ ghcLinkArgs = builder (Ghc LinkHs) ? do
 findHsDependencies :: Args
 findHsDependencies = builder (Ghc FindHsDependencies) ? do
     ways <- getLibraryWays
+    stage <- getStage
+    ghcVersion :: [Int] <- fmap read . splitOn "." <$> expr (ghcVersionStage stage)
     mconcat [ arg "-M"
+
+            -- "-include-cpp-deps" is a new ish feature so is version gated.
+            -- Without this feature some dependencies will be missing in stage0.
+            -- TODO Remove version gate when minimum supported Stage0 compiler
+            -- is >= 8.9.0.
+            , ghcVersion > [8,9,0] ? arg "-include-cpp-deps"
+
             , commonGhcArgs
             , arg "-include-pkg-deps"
             , arg "-dep-makefile", arg =<< getOutput