[commit: ghc] wip/nfs-locking: Compute package dependencies only for packages we build (67f433b)

git at git.haskell.org git at git.haskell.org
Fri Oct 27 00:25:49 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/nfs-locking
Link       : http://ghc.haskell.org/trac/ghc/changeset/67f433bf028ec4c4251b928fa476ff1302e8299c/ghc

>---------------------------------------------------------------

commit 67f433bf028ec4c4251b928fa476ff1302e8299c
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date:   Thu Oct 27 20:00:58 2016 +0100

    Compute package dependencies only for packages we build
    
    See #265


>---------------------------------------------------------------

67f433bf028ec4c4251b928fa476ff1302e8299c
 src/Rules/Cabal.hs      | 5 +++--
 src/Rules/Test.hs       | 2 +-
 src/Settings.hs         | 5 ++++-
 src/Settings/Default.hs | 1 -
 4 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/Rules/Cabal.hs b/src/Rules/Cabal.hs
index 409ca1b..8848268 100644
--- a/src/Rules/Cabal.hs
+++ b/src/Rules/Cabal.hs
@@ -16,7 +16,7 @@ cabalRules :: Rules ()
 cabalRules = do
     -- Cache boot package constraints (to be used in 'cabalArgs').
     bootPackageConstraints %> \out -> do
-        bootPkgs <- interpretInContext (stageContext Stage0) getPackages
+        bootPkgs <- stagePackages Stage0
         let pkgs = filter (\p -> p /= compiler && isLibrary p) bootPkgs
         constraints <- forM (sort pkgs) $ \pkg -> do
             need [pkgCabalFile pkg]
@@ -28,7 +28,8 @@ cabalRules = do
 
     -- Cache package dependencies.
     packageDependencies %> \out -> do
-        pkgDeps <- forM (sort knownPackages) $ \pkg ->
+        pkgs <- concatMapM stagePackages [Stage0 .. Stage2]
+        pkgDeps <- forM (sort pkgs) $ \pkg ->
             if pkg `elem` [hp2ps, libffi, rts, touchy, unlit]
             then return $ pkgNameString pkg
             else do
diff --git a/src/Rules/Test.hs b/src/Rules/Test.hs
index 3b2fd1b..18513a7 100644
--- a/src/Rules/Test.hs
+++ b/src/Rules/Test.hs
@@ -23,7 +23,7 @@ testRules = do
 
     "test" ~> do
         let yesNo x = show $ if x then "YES" else "NO"
-        pkgs     <- interpretInContext (stageContext Stage1) getPackages
+        pkgs     <- stagePackages Stage1
         tests    <- filterM doesDirectoryExist $ concat
                     [ [ pkgPath pkg -/- "tests", pkgPath pkg -/- "tests-ghc" ]
                     | pkg <- pkgs, isLibrary pkg, pkg /= rts, pkg /= libffi ]
diff --git a/src/Settings.hs b/src/Settings.hs
index 3fdf14f..0a71c90 100644
--- a/src/Settings.hs
+++ b/src/Settings.hs
@@ -1,7 +1,7 @@
 module Settings (
     getArgs, getPackages, getLibraryWays, getRtsWays, flavour, knownPackages,
     findKnownPackage, getPkgData, getPkgDataList, isLibrary, getPackagePath,
-    getContextDirectory, getBuildPath
+    getContextDirectory, getBuildPath, stagePackages
     ) where
 
 import Base
@@ -28,6 +28,9 @@ getRtsWays = fromDiffExpr $ rtsWays flavour
 getPackages :: Expr [Package]
 getPackages = fromDiffExpr $ packages flavour
 
+stagePackages :: Stage -> Action [Package]
+stagePackages stage = interpretInContext (stageContext stage) getPackages
+
 getPackagePath :: Expr FilePath
 getPackagePath = pkgPath <$> getPackage
 
diff --git a/src/Settings/Default.hs b/src/Settings/Default.hs
index f529019..f7ef62e 100644
--- a/src/Settings/Default.hs
+++ b/src/Settings/Default.hs
@@ -65,7 +65,6 @@ defaultBuilderArgs = mconcat
     , makeBuilderArgs
     , tarBuilderArgs ]
 
-
 -- | All 'Package'-dependent command line arguments.
 defaultPackageArgs :: Args
 defaultPackageArgs = mconcat



More information about the ghc-commits mailing list