summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-12-17 02:15:25 (GMT)
committerSteven Knight <knight@baldmt.com>2004-12-17 02:15:25 (GMT)
commit5a53a86e487de2c6d93bf5f8a1df1ae61f983a67 (patch)
tree17355dfd6143b1d5cec76e519f51ca5bdff0ddeb /src
parentac942908a6f1ee9291ff4a8a21e6d4d4fbc41f64 (diff)
downloadSCons-5a53a86e487de2c6d93bf5f8a1df1ae61f983a67.zip
SCons-5a53a86e487de2c6d93bf5f8a1df1ae61f983a67.tar.gz
SCons-5a53a86e487de2c6d93bf5f8a1df1ae61f983a67.tar.bz2
Make AlwaysBuild() work with Aliases.
Diffstat (limited to 'src')
-rw-r--r--src/CHANGES.txt4
-rw-r--r--src/engine/SCons/Node/NodeTests.py57
-rw-r--r--src/engine/SCons/Node/__init__.py2
3 files changed, 35 insertions, 28 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index c59f61f..e97ea15 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -159,6 +159,10 @@ RELEASE 0.97 - XXX
matter whether the dependency file is in a Repository or not.
This may cause recompilations upon upgrade to this version.
+ - Make AlwaysBuild() work with Alias and Python value Nodes (making
+ it much simpler to support aliases like "clean" that just invoke
+ an arbitrary action).
+
From Wayne Lee:
- Avoid "maximum recursion limit" errors when removing $(-$) pairs
diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py
index 335c1a5..3c402d0 100644
--- a/src/engine/SCons/Node/NodeTests.py
+++ b/src/engine/SCons/Node/NodeTests.py
@@ -186,6 +186,18 @@ class MyNode(SCons.Node.Node):
def get_found_includes(self, env, scanner, target):
return scanner(self)
+class Calculator:
+ def __init__(self, val):
+ self.max_drift = 0
+ class M:
+ def __init__(self, val):
+ self.val = val
+ def signature(self, args):
+ return self.val
+ def collect(self, args):
+ return reduce(lambda x, y: x+y, args, self.val)
+ self.module = M(val)
+
class NodeTestCase(unittest.TestCase):
@@ -445,6 +457,23 @@ class NodeTestCase(unittest.TestCase):
node = SCons.Node.Node()
assert node.current() is None
+ def test_children_are_up_to_date(self):
+ """Test the children_are_up_to_date() method used by subclasses
+ """
+ n1 = SCons.Node.Node()
+ n2 = SCons.Node.Node()
+
+ calc = Calculator(111)
+
+ n1.add_source(n2)
+ assert n1.children_are_up_to_date(calc), "expected up to date"
+ n2.set_state(SCons.Node.executed)
+ assert not n1.children_are_up_to_date(calc), "expected not up to date"
+ n2.set_state(SCons.Node.up_to_date)
+ assert n1.children_are_up_to_date(calc), "expected up to date"
+ n1.always_build = 1
+ assert not n1.children_are_up_to_date(calc), "expected not up to date"
+
def test_env_set(self):
"""Test setting a Node's Environment
"""
@@ -464,15 +493,6 @@ class NodeTestCase(unittest.TestCase):
def test_calc_bsig(self):
"""Test generic build signature calculation
"""
- class Calculator:
- def __init__(self, val):
- self.max_drift = 0
- class M:
- def __init__(self, val):
- self.val = val
- def collect(self, args):
- return reduce(lambda x, y: x+y, args, self.val)
- self.module = M(val)
node = SCons.Node.Node()
result = node.calc_bsig(Calculator(222))
assert result == 222, result
@@ -482,15 +502,6 @@ class NodeTestCase(unittest.TestCase):
def test_calc_csig(self):
"""Test generic content signature calculation
"""
- class Calculator:
- def __init__(self, val):
- self.max_drift = 0
- class M:
- def __init__(self, val):
- self.val = val
- def signature(self, args):
- return self.val
- self.module = M(val)
node = SCons.Node.Node()
result = node.calc_csig(Calculator(444))
assert result == 444, result
@@ -500,16 +511,6 @@ class NodeTestCase(unittest.TestCase):
def test_gen_binfo(self):
"""Test generating a build information structure
"""
- class Calculator:
- def __init__(self, val):
- self.max_drift = 0
- class M:
- def __init__(self, val):
- self.val = val
- def collect(self, args):
- return reduce(lambda x, y: x+y, args, self.val)
- self.module = M(val)
-
node = SCons.Node.Node()
binfo = node.gen_binfo(Calculator(666))
assert isinstance(binfo, SCons.Node.BuildInfo), binfo
diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py
index f0e750b..c7a652d 100644
--- a/src/engine/SCons/Node/__init__.py
+++ b/src/engine/SCons/Node/__init__.py
@@ -839,6 +839,8 @@ class Node:
rebind their current() method to this method."""
# Allow the children to calculate their signatures.
self.binfo = self.gen_binfo(calc)
+ if self.always_build:
+ return None
state = 0
for kid in self.children(None):
s = kid.get_state()