diff options
author | Mathew Robinson <mathew@chasinglogic.io> | 2020-03-03 09:42:43 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-04-26 23:18:08 +0000 |
commit | 76e7de4df5b74f1a1b9bf84b1d0384ae360dad32 (patch) | |
tree | b5701c20daba8c27b926cbdfcc8305500d2392f5 /site_scons | |
parent | d9bb2fb9a9ad973c9599dae84d60f78b69422468 (diff) | |
download | mongo-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.py | 17 |
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): |