[commit: ghc] wip/nfs-locking: Add buildProgram rule. (3ceca89)

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


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

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

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

commit 3ceca89902487a91a337e5a75f7f1de8b5bd4add
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date:   Mon Dec 7 01:44:10 2015 +0000

    Add buildProgram rule.


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

3ceca89902487a91a337e5a75f7f1de8b5bd4add
 src/Rules/Package.hs |  4 +++-
 src/Rules/Program.hs | 29 +++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/src/Rules/Package.hs b/src/Rules/Package.hs
index 9da4f8b..7a7d854 100644
--- a/src/Rules/Package.hs
+++ b/src/Rules/Package.hs
@@ -7,6 +7,7 @@ import Rules.Dependencies
 import Rules.Documentation
 import Rules.Generate
 import Rules.Library
+import Rules.Program
 import Rules.Resources
 import Target
 
@@ -17,4 +18,5 @@ buildPackage = mconcat
     , generatePackageCode
     , compilePackage
     , buildPackageLibrary
-    , buildPackageDocumentation ]
+    , buildPackageDocumentation
+    , buildProgram ]
diff --git a/src/Rules/Program.hs b/src/Rules/Program.hs
new file mode 100644
index 0000000..14cbea0
--- /dev/null
+++ b/src/Rules/Program.hs
@@ -0,0 +1,29 @@
+module Rules.Program (buildProgram) where
+
+import Expression hiding (splitPath)
+import Oracles
+import Rules.Actions
+import Rules.Library
+import Rules.Resources
+import Settings
+
+buildProgram :: Resources -> PartialTarget -> Rules ()
+buildProgram _ target @ (PartialTarget stage pkg) = do
+    let path      = targetPath stage pkg
+        buildPath = path -/- "build"
+        program   = programPath stage pkg
+
+    (\f -> program == Just f) ?> \bin -> do
+        cSrcs <- cSources target -- TODO: remove code duplication (Library.hs)
+        hSrcs <- hSources target
+        let cObjs = [ buildPath -/- src -<.> osuf vanilla | src <- cSrcs ]
+            hObjs = [ buildPath -/- src  <.> osuf vanilla | src <- hSrcs ]
+            objs  = cObjs ++ hObjs
+        need objs
+        build $ fullTargetWithWay target (Ghc stage) vanilla objs [bin]
+        synopsis <- interpretPartial target $ getPkgData Synopsis
+        putSuccess $ "/--------\n| Successfully built program '"
+            ++ pkgName pkg ++ "' (stage " ++ show stage ++ ")."
+        putSuccess $ "| Executable: " ++ bin
+        putSuccess $ "| Package synopsis: "
+            ++ dropWhileEnd isPunctuation synopsis ++ "." ++ "\n\\--------"



More information about the ghc-commits mailing list