Merge upstream commit '2e646457' into master
* commit '2e646457':
Document example dyndep use cases
Document `dyndep` binding behavior and the dyndep file format
query: load dyndep files for queried edges
graph: load dyndep files
clean: remove outputs specified by dyndep files
clean: remove unnecessary Cleaner constructor variant
Teach builder to load dyndep files when they are ready
Teach RecomputeDirty to load dyndep files that are ready
Teach DependencyScan to load a dyndep file
Add a "dyndep" reserved binding to the manifest format
Add a parser for a new "dyndep" file format
Explicitly avoid repeat deps loading
Make a Builder optionally available to Plan
Factor out output edge ready check from Plan::NodeFinished
Factor out edge marking logic from Plan::AddSubTarget
Teach FakeCommandRunner to support multiple active commands
Allow EdgeFinished and NodeFinished to fail with errors
Assert precondition in BuildStatus::BuildEdgeStarted
Factor out a base class of ManifestParser
ManifestParser: Fix typo {expectd => expected}
This brings in the upstream dyndep feature into our ninja fork. The
majority of the conflicts were from our parallel manifest parser, as
that changed the Lexer and all of the BindingEnv classes, which required
some rewrites. Upstream shares a base parsing class between the
ManifestParser and DyndepParser, that doesn't make sense with our new
parser, so DyndepParser is the only user of the Parser base class.
Colin's validation nodes change also interacts with dyndeps, I pulled in
the new code from his github pull request.
Test: builtin ninja tests
Test: treehugger with updated prebuilt
Change-Id: I90b059d0c28a353d50e74efc9097cc39d88a5583