Implement build rule for template-hsc.h, fix #44.
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Sat, 26 Dec 2015 18:31:46 +0000 (18:31 +0000)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Sat, 26 Dec 2015 18:31:46 +0000 (18:31 +0000)
shaking-up-ghc.cabal
src/Main.hs
src/Rules/Install.hs [new file with mode: 0644]
src/Settings/Builders/Hsc2Hs.hs

index 1e0fbbf..941651b 100644 (file)
@@ -47,6 +47,7 @@ executable ghc-shake
                        , Rules.Generators.GhcBootPlatformH
                        , Rules.Generators.GhcPlatformH
                        , Rules.Generators.VersionHs
+                       , Rules.Install
                        , Rules.Library
                        , Rules.Oracles
                        , Rules.Package
index 0dc8d96..fdc43cd 100644 (file)
@@ -3,12 +3,14 @@ import Rules
 import Rules.Cabal
 import Rules.Config
 import Rules.Generate
+import Rules.Install
 import Rules.Oracles
 
 main :: IO ()
 main = shakeArgs options $ do
     cabalRules      -- see Rules.Cabal
     configRules     -- see Rules.Config
+    installRules    -- see Rules.Install
     generateTargets -- see Rules
     generateRules   -- see Rules.Generate
     oracleRules     -- see Rules.Oracles
diff --git a/src/Rules/Install.hs b/src/Rules/Install.hs
new file mode 100644 (file)
index 0000000..b592728
--- /dev/null
@@ -0,0 +1,11 @@
+module Rules.Install (installRules) where
+
+import Expression
+import GHC
+
+installRules :: Rules ()
+installRules = do
+    "inplace/lib/template-hsc.h" %> \out -> do
+        let source = pkgPath hsc2hs -/- "template-hsc.h"
+        putBuild $ "| Copying " ++ source ++ " -> " ++ out
+        copyFileChanged source out
index 0c6172d..6721aaf 100644 (file)
@@ -6,6 +6,9 @@ import Predicates (builder, stage0, notStage0)
 import Settings
 import Settings.Builders.GhcCabal hiding (cppArgs)
 
+templateHsc :: FilePath
+templateHsc = "inplace/lib/template-hsc.h"
+
 hsc2HsArgs :: Args
 hsc2HsArgs = builder Hsc2Hs ? do
     stage   <- getStage
@@ -21,6 +24,7 @@ hsc2HsArgs = builder Hsc2Hs ? do
     version <- if stage == Stage0
                then lift $ ghcCanonVersion
                else getSetting ProjectVersionInt
+    lift $ need [templateHsc]
     mconcat [ arg $ "--cc=" ++ ccPath
             , arg $ "--ld=" ++ ccPath
             , notM windowsHost ? arg "--cross-safe"
@@ -33,7 +37,7 @@ hsc2HsArgs = builder Hsc2Hs ? do
             , notStage0 ? arg ("--cflag=-D" ++ tArch ++ "_HOST_ARCH=1")
             , notStage0 ? arg ("--cflag=-D" ++ tOs   ++ "_HOST_OS=1"  )
             , arg ("--cflag=-D__GLASGOW_HASKELL__=" ++ version)
-            , arg $ "--template=" ++ top -/- "inplace/lib/template-hsc.h"
+            , arg $ "--template=" ++ top -/- templateHsc
             , arg $ "-I" ++ top -/- "inplace/lib/include/"
             , arg =<< getInput
             , arg "-o", arg =<< getOutput ]