summaryrefslogtreecommitdiffstats
path: root/src/missing_deps.cc
diff options
context:
space:
mode:
authorTomasz Śniatowski <tsniatowski@vewd.com>2021-02-15 12:06:30 (GMT)
committerTomasz Śniatowski <tsniatowski@vewd.com>2021-02-22 22:48:58 (GMT)
commitb94a891ac9fcd0cee80652197c03633d752ad068 (patch)
tree01f3831172d27a1b211949f191060c227c4c73b0 /src/missing_deps.cc
parentbc69a640de3d22512fca69b1f997fb7b832addb1 (diff)
downloadNinja-b94a891ac9fcd0cee80652197c03633d752ad068.zip
Ninja-b94a891ac9fcd0cee80652197c03633d752ad068.tar.gz
Ninja-b94a891ac9fcd0cee80652197c03633d752ad068.tar.bz2
missingdeps: add exception for targets that dep on build.ninja
A "missing dep path" to build.ninja is a false positive, skip reporting it.
Diffstat (limited to 'src/missing_deps.cc')
-rw-r--r--src/missing_deps.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/missing_deps.cc b/src/missing_deps.cc
index a0fd048..adce2d2 100644
--- a/src/missing_deps.cc
+++ b/src/missing_deps.cc
@@ -114,6 +114,14 @@ void MissingDependencyScanner::ProcessNodeDeps(Node* node, Node** dep_nodes,
std::set<Edge*> deplog_edges;
for (int i = 0; i < dep_nodes_count; ++i) {
Node* deplog_node = dep_nodes[i];
+ // Special exception: A dep on build.ninja can be used to mean "always
+ // rebuild this target when the build is reconfigured", but build.ninja is
+ // often generated by a configuration tool like cmake or gn. The rest of
+ // the build "implicitly" depends on the entire build being reconfigured,
+ // so a missing dep path to build.ninja is not an actual missing dependecy
+ // problem.
+ if (deplog_node->path() == "build.ninja")
+ return;
Edge* deplog_edge = deplog_node->in_edge();
if (deplog_edge) {
deplog_edges.insert(deplog_edge);