diff options
author | Steven Knight <knight@baldmt.com> | 2002-09-27 23:03:51 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2002-09-27 23:03:51 (GMT) |
commit | f6141b3f503c8f78fca191bfd59d9785cd81bf10 (patch) | |
tree | 5308bfa21af4adb91d1126edef0648e5fdedb331 /src/engine/SCons/Node | |
parent | 1523e6f372549807f31962bfbb9d429ead2db9d2 (diff) | |
download | SCons-f6141b3f503c8f78fca191bfd59d9785cd81bf10.zip SCons-f6141b3f503c8f78fca191bfd59d9785cd81bf10.tar.gz SCons-f6141b3f503c8f78fca191bfd59d9785cd81bf10.tar.bz2 |
Support overriding construction variables in builder call. (Anthony Roach)
Diffstat (limited to 'src/engine/SCons/Node')
-rw-r--r-- | src/engine/SCons/Node/FSTests.py | 5 | ||||
-rw-r--r-- | src/engine/SCons/Node/NodeTests.py | 30 | ||||
-rw-r--r-- | src/engine/SCons/Node/__init__.py | 23 |
3 files changed, 29 insertions, 29 deletions
diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py index 707d4a2..1d8b0eb 100644 --- a/src/engine/SCons/Node/FSTests.py +++ b/src/engine/SCons/Node/FSTests.py @@ -40,7 +40,7 @@ class Builder: def __init__(self, factory): self.factory = factory - def execute(self, **kw): + def execute(self, target, source, env): global built_it built_it = 1 return 0 @@ -69,6 +69,8 @@ class Environment: return {} def get_scanner(self, skey): return self.scanner + def Override(self, overrides): + return self class BuildDirTestCase(unittest.TestCase): def runTest(self): @@ -103,6 +105,7 @@ class BuildDirTestCase(unittest.TestCase): fs.BuildDir('../var2', 'src') f1 = fs.File('../var1/test1') f2 = fs.File('../var2/test1') + assert hasattr(f1, 'overrides') assert f1.srcpath == os.path.normpath('src/test1'), f1.srcpath assert f2.srcpath == os.path.normpath('src/test1'), f2.srcpath diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py index 31c4ee6..8897b00 100644 --- a/src/engine/SCons/Node/NodeTests.py +++ b/src/engine/SCons/Node/NodeTests.py @@ -39,42 +39,42 @@ built_source = None cycle_detected = None class Builder: - def execute(self, **kw): + def execute(self, target, source, env): global built_it, built_target, built_source, built_args built_it = 1 - built_target = kw['target'] - built_source = kw['source'] - built_args = kw + built_target = target + built_source = source + built_args = env return 0 - def get_contents(self, env, target, source): + def get_contents(self, target, source, env): return 7 class NoneBuilder(Builder): - def execute(self, **kw): - apply(Builder.execute, (self,), kw) + def execute(self, target, source, env): + Builder.execute(self, target, source, env) return None class ListBuilder(Builder): def __init__(self, *nodes): self.nodes = nodes - def execute(self, **kw): + def execute(self, target, source, env): if hasattr(self, 'status'): return self.status for n in self.nodes: n.prepare() - kw['target'] = self.nodes[0] - self.status = apply(Builder.execute, (self,), kw) + target = self.nodes[0] + self.status = Builder.execute(self, target, source, env) class FailBuilder: - def execute(self, **kw): + def execute(self, target, source, env): return 1 class ExceptBuilder: - def execute(self, **kw): + def execute(self, target, source, env): raise SCons.Errors.BuildError class ExceptBuilder2: - def execute(self, **kw): + def execute(self, target, source, env): raise "foo" class Environment: @@ -82,6 +82,8 @@ class Environment: return {} def autogenerate(self, **kw): return {} + def Override(selv, overrides): + return overrides @@ -161,7 +163,7 @@ class NodeTestCase(unittest.TestCase): node.env_set(Environment()) node.path = "qqq" node.sources = ["rrr", "sss"] - node.build_args = { "foo" : 1, "bar" : 2 } + node.overrides = { "foo" : 1, "bar" : 2 } node.build() assert built_it assert type(built_target) == type(MyNode()), type(built_target) diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index 09ceea0..b2bd8ed 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -87,24 +87,21 @@ class Node: self.precious = None self.found_includes = {} self.includes = None - self.build_args = {} + self.overrides = {} # construction variable overrides for building this node self.attributes = self.Attrs() # Generic place to stick information about the Node. self.side_effect = 0 # true iff this node is a side effect self.side_effects = [] # the side effects of building this target - def generate_build_args(self): - dict = copy.copy(self.env.Dictionary()) + def generate_build_env(self): if hasattr(self, 'cwd'): auto = self.env.autogenerate(dir = self.cwd) else: auto = self.env.autogenerate() - dict.update(auto) - dictArgs = { 'env' : dict, - 'target' : self, - 'source' : self.sources } - dictArgs.update(self.build_args) - return dictArgs + dict = {} + dict.update(auto) + dict.update(self.overrides) + return self.env.Override(dict) def build(self): """Actually build the node. Return the status from the build.""" @@ -118,8 +115,7 @@ class Node: stat = self.builder.status except AttributeError: try: - stat = apply(self.builder.execute, (), - self.generate_build_args()) + stat = self.builder.execute(self, self.sources, self.generate_build_env()) except KeyboardInterrupt: raise except UserError: @@ -180,8 +176,7 @@ class Node: def __init__(self, node): self.node = node def get_contents(self): - return apply(self.node.builder.get_contents, (), - self.node.generate_build_args()) + return self.node.builder.get_contents(self.node, self.node.sources, self.node.generate_build_env()) def get_timestamp(self): return None return Adapter(self) @@ -210,7 +205,7 @@ class Node: if implicit_deps_unchanged or calc.current(self, calc.bsig(self)): return else: - # one of this node's sources has changed, so + # one of this node's sources has changed, so # we need to recalculate the implicit deps, # and the bsig: self.implicit = [] |