[commit: ghc] wip/nfs-locking: Add support for utility packages. (2f1eda7)

git at git.haskell.org git at git.haskell.org
Thu Oct 26 23:40:36 UTC 2017


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

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

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

commit 2f1eda773f2d11e11e9f46591078e50be94e458b
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date:   Thu Dec 10 01:42:07 2015 +0000

    Add support for utility packages.


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

2f1eda773f2d11e11e9f46591078e50be94e458b
 src/GHC.hs                   | 18 +++++++++++-------
 src/Package.hs               |  9 ++++++---
 src/Rules/Library.hs         |  8 +++-----
 src/Settings/Builders/Ghc.hs |  3 +--
 src/Settings/Packages.hs     |  3 ++-
 5 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/src/GHC.hs b/src/GHC.hs
index 668cf48..de482f4 100644
--- a/src/GHC.hs
+++ b/src/GHC.hs
@@ -1,6 +1,6 @@
 module GHC (
     array, base, binPackageDb, binary, bytestring, cabal, compiler, containers,
-    deepseq, directory, filepath, ghc, ghcPrim, haskeline, hoopl, hpc,
+    deepseq, directory, filepath, ghc, ghcCabal, ghcPrim, haskeline, hoopl, hpc,
     integerGmp, integerSimple, parallel, pretty, primitive, process, stm,
     templateHaskell, terminfo, time, transformers, unix, win32, xhtml,
 
@@ -19,13 +19,14 @@ import Stage
 defaultKnownPackages :: [Package]
 defaultKnownPackages =
     [ array, base, binPackageDb, binary, bytestring, cabal, compiler
-    , containers, deepseq, directory, filepath, ghc, ghcPrim, haskeline, hoopl
-    , hpc, integerGmp, integerSimple, parallel, pretty, primitive, process, stm
-    , templateHaskell, terminfo, time, transformers, unix, win32, xhtml ]
+    , containers, deepseq, directory, filepath, ghc, ghcCabal, ghcPrim
+    , haskeline, hoopl, hpc, integerGmp, integerSimple, parallel, pretty
+    , primitive, process, stm, templateHaskell, terminfo, time, transformers
+    , unix, win32, xhtml ]
 
 -- Package definitions
 array, base, binPackageDb, binary, bytestring, cabal, compiler, containers,
-    deepseq, directory, filepath, ghc, ghcPrim, haskeline, hoopl, hpc,
+    deepseq, directory, filepath, ghc, ghcCabal, ghcPrim, haskeline, hoopl, hpc,
     integerGmp, integerSimple, parallel, pretty, primitive, process, stm,
     templateHaskell, terminfo, time, transformers, unix, win32, xhtml :: Package
 
@@ -41,6 +42,7 @@ deepseq         = library  "deepseq"
 directory       = library  "directory"
 filepath        = library  "filepath"
 ghc             = topLevel "ghc-bin"        `setPath` "ghc"
+ghcCabal        = utility  "ghc-cabal"
 ghcPrim         = library  "ghc-prim"
 haskeline       = library  "haskeline"
 hoopl           = library  "hoopl"
@@ -60,6 +62,7 @@ unix            = library  "unix"
 win32           = library  "Win32"
 xhtml           = library  "xhtml"
 
+
 -- GHC build results will be placed into target directories with the following
 -- typical structure:
 -- * build/          : contains compiled object code
@@ -75,8 +78,9 @@ defaultTargetDirectory stage pkg
 
 defaultProgramPath :: Stage -> Package -> Maybe FilePath
 defaultProgramPath stage pkg
-    | pkg == ghc = program $ "ghc-stage" ++ show (fromEnum stage + 1)
-    | otherwise  = Nothing
+    | pkg == ghc      = program $ "ghc-stage" ++ show (fromEnum stage + 1)
+    | pkg == ghcCabal = program $ pkgName pkg
+    | otherwise       = Nothing
   where
     program name = Just $ pkgPath pkg -/- defaultTargetDirectory stage pkg
                                       -/- "build/tmp" -/- name <.> exe
diff --git a/src/Package.hs b/src/Package.hs
index fba192c..85fbd13 100644
--- a/src/Package.hs
+++ b/src/Package.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveGeneric #-}
 module Package (
-    Package (..), PackageName, pkgCabalFile, setPath, library, topLevel
+    Package (..), PackageName, pkgCabalFile, setPath, topLevel, library, utility
     ) where
 
 import Base
@@ -21,11 +21,14 @@ data Package = Package
 pkgCabalFile :: Package -> FilePath
 pkgCabalFile pkg = pkgPath pkg -/- pkgName pkg <.> "cabal"
 
+topLevel :: PackageName -> Package
+topLevel name = Package name name
+
 library :: PackageName -> Package
 library name = Package name ("libraries" -/- name)
 
-topLevel :: PackageName -> Package
-topLevel name = Package name name
+utility :: PackageName -> Package
+utility name = Package name ("utils" -/- name)
 
 setPath :: Package -> FilePath -> Package
 setPath pkg path = pkg { pkgPath = path }
diff --git a/src/Rules/Library.hs b/src/Rules/Library.hs
index b0afdc6..1bf668d 100644
--- a/src/Rules/Library.hs
+++ b/src/Rules/Library.hs
@@ -71,8 +71,6 @@ hSources target = do
     return . map (replaceEq '.' '/') . filter (/= "GHC.Prim") $ modules
 
 extraObjects :: PartialTarget -> Action [FilePath]
-extraObjects (PartialTarget _ pkg) = do
-    gmpObjs <- getDirectoryFiles "" [pkgPath pkg -/- "gmp/objs/*.o"]
-    if pkg == integerGmp
-    then return gmpObjs
-    else return []
+extraObjects (PartialTarget _ pkg)
+    | pkg == integerGmp = getDirectoryFiles "" [pkgPath pkg -/- "gmp/objs/*.o"]
+    | otherwise         = return []
diff --git a/src/Settings/Builders/Ghc.hs b/src/Settings/Builders/Ghc.hs
index 8d1a30f..15944f3 100644
--- a/src/Settings/Builders/Ghc.hs
+++ b/src/Settings/Builders/Ghc.hs
@@ -7,7 +7,6 @@ import Oracles
 import GHC
 import Predicates (package, stagedBuilder, splitObjects, stage0, notStage0)
 import Settings
-import Settings.Builders.GhcCabal
 
 -- TODO: add support for -dyno
 -- TODO: consider adding a new builder for programs (e.g. GhcLink?)
@@ -30,7 +29,7 @@ ghcArgs = stagedBuilder Ghc ? do
             , arg "-fwarn-tabs"
             , buildObj ? splitObjects ? arg "-split-objs"
             , package ghc ? arg "-no-hs-main"
-            , not buildObj ? arg "-no-auto-link-packages"
+            -- , not buildObj ? arg "-no-auto-link-packages"
             , not buildObj ? append [ "-optl-l" ++ lib | lib <- libs    ]
             , not buildObj ? append [ "-optl-L" ++ dir | dir <- libDirs ]
             , buildObj ? arg "-c"
diff --git a/src/Settings/Packages.hs b/src/Settings/Packages.hs
index 1fe70dc..5ac9c6e 100644
--- a/src/Settings/Packages.hs
+++ b/src/Settings/Packages.hs
@@ -25,7 +25,8 @@ packagesStage1 :: Packages
 packagesStage1 = mconcat
     [ packagesStage0
     , append [ array, base, bytestring, containers, deepseq, directory, filepath
-             , ghcPrim, haskeline, integerLibrary, pretty, process, time ]
+             , ghcCabal, ghcPrim, haskeline, integerLibrary, pretty, process
+             , time ]
     , windowsHost      ? append [win32]
     , notM windowsHost ? append [unix]
     , buildHaddock     ? append [xhtml] ]



More information about the ghc-commits mailing list