summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-09-27 23:03:51 (GMT)
committerSteven Knight <knight@baldmt.com>2002-09-27 23:03:51 (GMT)
commitf6141b3f503c8f78fca191bfd59d9785cd81bf10 (patch)
tree5308bfa21af4adb91d1126edef0648e5fdedb331 /src/engine/SCons/Node
parent1523e6f372549807f31962bfbb9d429ead2db9d2 (diff)
downloadSCons-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.py5
-rw-r--r--src/engine/SCons/Node/NodeTests.py30
-rw-r--r--src/engine/SCons/Node/__init__.py23
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 = []