Fix builder dependencies on generated files (#363)
authorZhen Zhang <izgzhen@gmail.com>
Thu, 20 Jul 2017 17:14:15 +0000 (01:14 +0800)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Thu, 20 Jul 2017 17:14:15 +0000 (18:14 +0100)
src/Rules.hs
src/Rules/Generate.hs
src/Rules/Program.hs
src/Rules/Test.hs
src/Settings/Builders/GhcCabal.hs
src/Settings/Builders/Hsc2Hs.hs
src/Settings/Path.hs
src/Util.hs

index 69fcaee..359d3e9 100644 (file)
@@ -29,7 +29,6 @@ allStages = [minBound ..]
 -- or Stage1Only targets
 topLevelTargets :: Rules ()
 topLevelTargets = action $ do
-    need $ Rules.Generate.inplaceLibCopyTargets
     let libraryPackages = filter isLibrary (knownPackages \\ [rts, libffi])
     need =<< if stage1Only
              then do
index 3507027..80eca91 100644 (file)
@@ -1,6 +1,6 @@
 module Rules.Generate (
     isGeneratedCFile, isGeneratedCmmFile, generatePackageCode, generateRules,
-    copyRules, includesDependencies, generatedDependencies, inplaceLibCopyTargets
+    copyRules, includesDependencies, generatedDependencies
     ) where
 
 import Base
@@ -24,18 +24,6 @@ import Target
 import UserSettings
 import Util
 
--- | Files that need to be copied over to inplace/lib
--- ref: ghc/ghc.mk:142
--- ref: driver/ghc.mk
--- ref: utils/hsc2hs/ghc.mk:35
-inplaceLibCopyTargets :: [FilePath]
-inplaceLibCopyTargets = map (inplaceLibPath -/-)
-  [ "ghc-usage.txt"
-  , "ghci-usage.txt"
-  , "platformConstants"
-  , "settings"
-  , "template-hsc.h" ]
-
 primopsSource :: FilePath
 primopsSource = "compiler/prelude/primops.txt.pp"
 
index 846c694..710829b 100644 (file)
@@ -14,7 +14,7 @@ import Oracles.Path (topDirectory)
 import Rules.Wrappers (WrappedBinary(..), Wrapper, inplaceWrappers)
 import Settings
 import Settings.Path (buildPath, inplaceLibBinPath, rtsContext, objectPath,
-                      inplaceLibPath, inplaceBinPath)
+                      inplaceLibPath, inplaceBinPath, inplaceLibCopyTargets)
 import Target
 import UserSettings
 import Util
@@ -28,6 +28,8 @@ buildProgram rs context@Context {..} = when (isProgram package) $ do
     buildPath context -/- programName context <.> exe %>
         buildBinaryAndWrapper rs context
 
+    when (package == ghc) $ want inplaceLibCopyTargets
+
     -- Rules for programs built in install directories
     when (stage == Stage0 || package == ghc) $ do
         -- Some binaries in inplace/bin are wrapped
index fc059ab..93e97c2 100644 (file)
@@ -10,6 +10,7 @@ import Oracles.Config.Flag
 import Oracles.Config.Setting
 import Oracles.Path
 import Settings
+import Settings.Path (inplaceLibCopyTargets)
 import Target
 import Util
 
@@ -17,7 +18,7 @@ import Util
 testRules :: Rules ()
 testRules = do
     "validate" ~> do
-        need $ Rules.Generate.inplaceLibCopyTargets
+        need inplaceLibCopyTargets
         needBuilder $ Ghc CompileHs Stage2
         needBuilder $ GhcPkg Update Stage1
         needBuilder Hpc
index 18816e1..33a7b99 100644 (file)
@@ -4,7 +4,7 @@ module Settings.Builders.GhcCabal (
 
 import Context
 import Flavour
-import Settings.Builders.Common
+import Settings.Builders.Common hiding (package)
 import Util
 
 ghcCabalBuilderArgs :: Args
@@ -12,6 +12,8 @@ ghcCabalBuilderArgs = builder GhcCabal ? do
     verbosity <- lift $ getVerbosity
     top       <- getTopDirectory
     context   <- getContext
+    when (package context /= deriveConstants) $
+        lift (need inplaceLibCopyTargets)
     mconcat [ arg "configure"
             , arg =<< getPackagePath
             , arg $ top -/- buildPath context
index ba98654..a9ec9c5 100644 (file)
@@ -1,9 +1,7 @@
 module Settings.Builders.Hsc2Hs (hsc2hsBuilderArgs) where
 
 import Settings.Builders.Common
-
-templateHsc :: FilePath
-templateHsc = "inplace/lib/template-hsc.h"
+import Settings.Path (templateHscPath)
 
 hsc2hsBuilderArgs :: Args
 hsc2hsBuilderArgs = builder Hsc2Hs ? do
@@ -20,7 +18,6 @@ hsc2hsBuilderArgs = 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 +30,7 @@ hsc2hsBuilderArgs = 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 -/- templateHsc
+            , arg $ "--template=" ++ top -/- templateHscPath
             , arg $ "-I" ++ top -/- "inplace/lib/include/"
             , arg =<< getInput
             , arg "-o", arg =<< getOutput ]
index 0be1838..c8153bf 100644 (file)
@@ -6,7 +6,7 @@ module Settings.Path (
     pkgConfFile, packageDbStamp, bootPackageConstraints, packageDependencies,
     objectPath, inplaceBinPath, inplaceLibBinPath, inplaceLibPath,
     inplaceInstallPath, autogenPath, pkgInplaceConfig, ghcSplitPath, stripCmdPath,
-    pkgSetupConfigFile
+    pkgSetupConfigFile, inplaceLibCopyTargets, templateHscPath
     ) where
 
 import Base
@@ -214,3 +214,18 @@ stripCmdPath = do
         "arm-unknown-linux" ->
              return ":" -- HACK: from the make-based system, see the ref above
         _ -> return "strip"
+
+-- | Files that need to be copied over to inplace/lib
+-- ref: ghc/ghc.mk:142
+-- ref: driver/ghc.mk
+-- ref: utils/hsc2hs/ghc.mk:35
+inplaceLibCopyTargets :: [FilePath]
+inplaceLibCopyTargets = map (inplaceLibPath -/-)
+  [ "ghc-usage.txt"
+  , "ghci-usage.txt"
+  , "platformConstants"
+  , "settings"
+  , "template-hsc.h" ]
+
+templateHscPath :: FilePath
+templateHscPath = "inplace/lib/template-hsc.h"
index 37743c0..7ea567e 100644 (file)
@@ -22,6 +22,7 @@ import Oracles.Path
 import Oracles.Config.Setting
 import Settings
 import Settings.Builders.Ar
+import Settings.Path
 import Target
 import UserSettings