Use fine-grain dependencies in buildPackageDependencies.
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Sat, 1 Aug 2015 13:16:12 +0000 (14:16 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Sat, 1 Aug 2015 13:16:12 +0000 (14:16 +0100)
src/Rules/Dependencies.hs

index 251a233..656e853 100644 (file)
@@ -17,17 +17,17 @@ buildPackageDependencies target =
         pkg       = Target.package target
         path      = targetPath stage pkg
         buildPath = path -/- "build"
+        dropBuild = (pkgPath pkg ++) . drop (length buildPath)
     in do
-        (buildPath -/- "haskell.deps") %> \file -> do
-            srcs <- interpretExpr target getHsSources
-            build $ fullTarget target srcs (GhcM stage) [file]
+        (buildPath <//> "*.c.deps") %> \depFile -> do
+            let srcFile = dropBuild . dropExtension $ depFile
+            build $ fullTarget target [srcFile] (GccM stage) [depFile]
 
         (buildPath -/- "c.deps") %> \file -> do
             srcs <- pkgDataList $ CSrcs path
-            deps <- forM srcs $ \src -> do
-                let srcFile = pkgPath pkg -/- src
-                    depFile = buildPath -/- takeFileName src <.> "deps"
-                build $ fullTarget target [srcFile] (GccM stage) [depFile]
-                liftIO . readFile $ depFile
+            deps <- forM srcs $ \src -> readFile' $ buildPath -/- src <.> "deps"
             writeFileChanged file (concat deps)
-            liftIO $ removeFiles buildPath ["*.c.deps"]
+
+        (buildPath -/- "haskell.deps") %> \file -> do
+            srcs <- interpretExpr target getHsSources
+            build $ fullTarget target srcs (GhcM stage) [file]