Refactor LocalBuildInfo interface.
This is an omnibus patch, with the overall goal of making
LocalBuildInfo Great Again. The essential ideas:
* New type 'TargetInfo' which bundles together 'ComponentLocalBuildInfo'
and 'Component'. Eventually, it will also record file paths / module
targets. This data structure is basically what you want; a lot of
old Cabal code did lots of gyrations converting from
'ComponentLocalBuildInfo' to 'Component' and vice versa, now
it's all centralized.
* The "new" API for 'LocalBuildInfo' is in
"Distribution.Types.LocalBuildInfo". The general principle
is, where we previous dealt in 'ComponentLocalBuildInfo',
we now deal in 'TargetInfo'. There are shockingly few
functions we need!
* I've restored 'componentsConfigs' to its Cabal 1.24 signature
for BC.
* I killed a number of unused functions from "Distribution.Simple.LocalBuildInfo":
'getLocalComponent', 'maybeGetDefaultLibraryLocalBuildInfo',
'maybeGetComponentLocalBuildInfo', 'checkComponentsCyclic' and
'enabledComponents'. For each I checked on Hackage that they were
not used.
* 'getComponentLocalBuildInfo', 'withComponentsInBuildOrder' and
'componentsInBuildOrder' are deprecated to encourage people
to instead use the 'TargetInfo's to finger which components
they want built.
* 'ComponentLocalBuildInfo' now stores internally the computed
'componentInternalDeps', so that 'LocalBuildInfo' can simply store
a graph of 'ComponentLocalBuildInfo'.
* The code in Configure has been streamlined to use our new Graph
data type to great success.
* The type of 'runTest' changed to take a 'ComponentLocalBuildInfo',
bringing it more in line with everything else.
* New function 'readTargetInfos' which combines 'readBuildTargets'
and 'checkBuildTargets', which is what you really wanted anyway.
Signed-off-by:
Edward Z. Yang <ezyang@cs.stanford.edu>