[commit: ghc] wip/nfs-locking: Minor revision (061dcf1)

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


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

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

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

commit 061dcf1f9b7a9dd7e907e6393ad20751054fba99
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date:   Wed Jul 19 01:27:44 2017 +0100

    Minor revision
    
    See #238


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

061dcf1f9b7a9dd7e907e6393ad20751054fba99
 src/Rules/Library.hs | 45 +++++++++++++++++----------------------------
 1 file changed, 17 insertions(+), 28 deletions(-)

diff --git a/src/Rules/Library.hs b/src/Rules/Library.hs
index b746279..d832264 100644
--- a/src/Rules/Library.hs
+++ b/src/Rules/Library.hs
@@ -1,6 +1,5 @@
 module Rules.Library (
-    buildPackageLibrary, buildPackageGhciLibrary,
-    buildDynamicLib
+    buildPackageLibrary, buildPackageGhciLibrary, buildDynamicLib
 ) where
 
 import Data.Char
@@ -13,15 +12,15 @@ import Flavour
 import GHC
 import Oracles.ModuleFiles
 import Oracles.PackageData
-import Oracles.Dependencies (contextDependencies)
+import Oracles.Dependencies
 import Settings
 import Settings.Path
 import Target
 import UserSettings
 import Util
 
-getLibraryObjs :: Context -> Action [FilePath]
-getLibraryObjs context at Context{..} = do
+libraryObjects :: Context -> Action [FilePath]
+libraryObjects context at Context{..} = do
     hsObjs   <- hsObjects    context
     noHsObjs <- nonHsObjects context
 
@@ -31,34 +30,26 @@ getLibraryObjs context at Context{..} = do
 
     split <- interpretInContext context $ splitObjects flavour
     let getSplitObjs = concatForM hsObjs $ \obj -> do
-             let dir = dropExtension obj ++ "_" ++ osuf way ++ "_split"
-             contents <- liftIO $ IO.getDirectoryContents dir
-             return . map (dir -/-) $ filter (not . all (== '.')) contents
+            let dir = dropExtension obj ++ "_" ++ osuf way ++ "_split"
+            contents <- liftIO $ IO.getDirectoryContents dir
+            return . map (dir -/-) $ filter (not . all (== '.')) contents
 
     (noHsObjs ++) <$> if split then getSplitObjs else return hsObjs
 
 buildDynamicLib :: Context -> Rules ()
 buildDynamicLib context at Context{..} = do
-    -- macOS
-    matchGhcVersionedFilePath libPrefix "dylib" ?> buildDynamicLibUNIX
+    let path       = buildPath context
+        libPrefix  = path -/- "libHS" ++ pkgNameString package
+    -- OS X
+    matchGhcVersionedFilePath libPrefix "dylib" ?> buildDynamicLibUnix
     -- Linux
-    matchGhcVersionedFilePath libPrefix "so" ?> buildDynamicLibUNIX
+    matchGhcVersionedFilePath libPrefix "so"    ?> buildDynamicLibUnix
     -- TODO: Windows
   where
-    path       = buildPath context
-    libPrefix  = path -/- "libHS" ++ pkgNameString package
-
-    buildDynamicLibUNIX so = do
+    buildDynamicLibUnix so = do
         deps <- contextDependencies context
-
-        forM_ deps $ \dep -> do
-            lib <- pkgLibraryFile dep
-            need [lib]
-
-        removeFile so
-
-        objs <- getLibraryObjs context
-
+        need =<< mapM pkgLibraryFile deps
+        objs <- libraryObjects context
         build $ Target context (Ghc LinkHs stage) objs [so]
 
 buildPackageLibrary :: Context -> Rules ()
@@ -66,12 +57,10 @@ buildPackageLibrary context at Context {..} = do
     let path       = buildPath context
         libPrefix  = path -/- "libHS" ++ pkgNameString package
     matchVersionedFilePath libPrefix (waySuffix way <.> "a") ?> \a -> do
-        removeFile a
-
-        objs <- getLibraryObjs context
-
+        objs <- libraryObjects context
         asuf <- libsuf way
         let isLib0 = ("//*-0" ++ asuf) ?== a
+        removeFile a
         if isLib0 then build $ Target context (Ar stage) []   [a] -- TODO: Scan for dlls
                   else build $ Target context (Ar stage) objs [a]
 



More information about the ghc-commits mailing list