Hadrian: Fix untracked dependencies
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Thu, 14 Feb 2019 14:29:50 +0000 (14:29 +0000)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Wed, 20 Feb 2019 14:59:16 +0000 (09:59 -0500)
commit1dad4fc27ea128a11ba0077f459494c2a1ca0d5c
treec5b569c56435e699c03fca5ad08cf03cb8b21b80
parent908b4b8659713f0b7a1704ce33c7fa30e3e0ffc3
Hadrian: Fix untracked dependencies

This is a preparation for #16295: https://ghc.haskell.org/trac/ghc/ticket/16295

This commit mostly focuses on getting rid of untracked dependencies,
which prevent Shake's new `--shared` feature from appropriately caching
build rules.

There are three different solutions to untracked dependencies:

* Track them! This is the obvious and the best approach, but in some
  situations we cannot use it, for example, because a build rule creates
  files whose names are not known statically and hence cannot be
  specified as the rule's outputs.

* Use Shake's `produces` to record outputs dynamically, within the rule.

* Use Shake's `historyDisable` to disable caching for a particular build
  rule. We currently use this approach only for `ghc-pkg` which mutates
  the package database and the file `package.cache`.

These two tickets are fixed as the result:

Ticket #16271: ​https://ghc.haskell.org/trac/ghc/ticket/16271

Ticket #16272: ​https://ghc.haskell.org/trac/ghc/ticket/16272 (this one
is fixed only partially: we correctly record the dependency, but we
still copy files into the RTS build tree).
25 files changed:
hadrian/hadrian.cabal
hadrian/src/Base.hs
hadrian/src/Builder.hs
hadrian/src/Context.hs
hadrian/src/Hadrian/Haskell/Cabal.hs
hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
hadrian/src/Hadrian/Haskell/Cabal/Type.hs
hadrian/src/Hadrian/Oracles/Cabal/Rules.hs
hadrian/src/Oracles/ModuleFiles.hs
hadrian/src/Packages.hs
hadrian/src/Rules.hs
hadrian/src/Rules/Compile.hs
hadrian/src/Rules/Configure.hs
hadrian/src/Rules/Dependencies.hs
hadrian/src/Rules/Documentation.hs
hadrian/src/Rules/Generate.hs
hadrian/src/Rules/Gmp.hs
hadrian/src/Rules/Libffi.hs
hadrian/src/Rules/Register.hs
hadrian/src/Settings.hs
hadrian/src/Settings/Builders/Ghc.hs
hadrian/src/Settings/Builders/GhcPkg.hs
hadrian/src/Settings/Builders/Hsc2Hs.hs
hadrian/src/Settings/Default.hs
utils/touchy/touchy.cabal