summaryrefslogtreecommitdiff
path: root/site_scons
diff options
context:
space:
mode:
authorMathew Robinson <mathew@chasinglogic.io>2020-03-03 09:42:43 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-04-26 23:18:08 +0000
commit76e7de4df5b74f1a1b9bf84b1d0384ae360dad32 (patch)
treeb5701c20daba8c27b926cbdfcc8305500d2392f5 /site_scons
parentd9bb2fb9a9ad973c9599dae84d60f78b69422468 (diff)
downloadmongo-76e7de4df5b74f1a1b9bf84b1d0384ae360dad32.tar.gz
SERVER-46129 Fix various DAG inconsistencies
Some dependencies were getting wired when they should not or were false dependencies. (cherry picked from commit 727fe1181cc8ff8d3c6282662229d28651a927d9)
Diffstat (limited to 'site_scons')
-rw-r--r--site_scons/site_tools/ninja_next.py17
1 files changed, 14 insertions, 3 deletions
diff --git a/site_scons/site_tools/ninja_next.py b/site_scons/site_tools/ninja_next.py
index 89cae89d8ef..fe437b8738f 100644
--- a/site_scons/site_tools/ninja_next.py
+++ b/site_scons/site_tools/ninja_next.py
@@ -61,7 +61,11 @@ def _mkdir_action_function(env, node):
return {
"outputs": get_outputs(node),
"rule": "CMD",
- "implicit": get_dependencies(node),
+ # implicit explicitly omitted, we translate these so they can be
+ # used by anything that depends on these but commonly this is
+ # hit with a node that will depend on all of the fake
+ # srcnode's that SCons will never give us a rule for leading
+ # to an invalid ninja file.
"variables": {
# On Windows mkdir "-p" is always on
"cmd": "{mkdir} $out".format(
@@ -101,7 +105,13 @@ def is_valid_dependent_node(node):
check because some nodes (like src files) won't have builders but
are valid implicit dependencies.
"""
- return not isinstance(node, SCons.Node.Alias.Alias) or node.children()
+ if isinstance(node, SCons.Node.Alias.Alias):
+ return node.children()
+
+ if not node.env:
+ return True
+
+ return not node.env.get("NINJA_SKIP")
def alias_to_ninja_build(node):
@@ -110,7 +120,7 @@ def alias_to_ninja_build(node):
"outputs": get_outputs(node),
"rule": "phony",
"implicit": [
- get_path(n) for n in node.children() if is_valid_dependent_node(n)
+ get_path(src_file(n)) for n in node.children() if is_valid_dependent_node(n)
],
}
@@ -506,6 +516,7 @@ class NinjaState:
return False
self.builds.append(build)
+ self.built.update(build["outputs"])
return True
def is_generated_source(self, output):