Drop need from build. Add appropriate needs to build rules.
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Fri, 7 Aug 2015 11:26:57 +0000 (12:26 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Fri, 7 Aug 2015 11:26:57 +0000 (12:26 +0100)
src/Rules/Actions.hs
src/Rules/Compile.hs
src/Rules/Data.hs
src/Rules/Dependencies.hs

index 50eb87f..062a5d5 100644 (file)
@@ -21,7 +21,7 @@ buildWithResources rs target = do
     let builder = Target.builder target
         deps    = Target.dependencies target
     needBuilder builder
-    need deps
+    -- need deps -- TODO: think if needs could be done here
     path    <- builderPath builder
     argList <- interpret target getArgs
     -- The line below forces the rule to be rerun if the args hash has changed
index 6f57a81..223f9b2 100644 (file)
@@ -35,6 +35,11 @@ compilePackage _ target = do
         when (null cDeps && null hDeps) $
             putError $ "Cannot determine sources for '" ++ obj ++ "'."
 
+        when (not (null cDeps) && not (null hDeps)) $
+            putError $ "Both .c and .hs sources found for '" ++ obj ++ "'."
+
+        need $ hDeps ++ cDeps
+
         if null cDeps
         then build $ fullTargetWithWay target hSrcDeps (Ghc stage) way [obj]
         else build $ fullTarget        target cDeps    (Gcc stage)     [obj]
index 8f365e8..8b3eb05 100644 (file)
@@ -45,6 +45,7 @@ buildPackageData (Resources ghcCabal ghcPkg) target = do
                 depPkgs      = intersectOrd cmp (sort pkgs) deps
             need [ targetPath stage p -/- "package-data.mk" | p <- depPkgs ]
 
+            need [cabal]
             buildWithResources [(ghcCabal, 1)] $
                 fullTarget target [cabal] GhcCabal files
 
index bee85c6..ea47241 100644 (file)
@@ -22,15 +22,17 @@ buildPackageDependencies _ target =
     in do
         (buildPath <//> "*.c.deps") %> \depFile -> do
             let srcFile = dropBuild . dropExtension $ depFile
+            need [srcFile]
             build $ fullTarget target [srcFile] (GccM stage) [depFile]
 
         (buildPath -/- "c.deps") %> \file -> do
             srcs <- pkgDataList $ CSrcs path
             let depFiles = [ buildPath -/- src <.> "deps" | src <- srcs ]
-            need depFiles -- increase parallelism by needing all at once
+            need depFiles
             deps <- mapM readFile' depFiles
             writeFileChanged file (concat deps)
 
         (buildPath -/- "haskell.deps") %> \file -> do
             srcs <- interpret target getHsSources
+            need srcs
             build $ fullTarget target srcs (GhcM stage) [file]