diff options
| author | Steven Knight <knight@baldmt.com> | 2004-11-13 21:56:57 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2004-11-13 21:56:57 (GMT) |
| commit | 09cad6ed1ffb436742adbbf6608bb094b4a236e2 (patch) | |
| tree | b6c4b1f529c82d39dab94b26fb1440980955c8fe /src/engine/SCons/Node | |
| parent | 206adf4366654b0c3fcf8c9131140f0c11ae0a5f (diff) | |
| download | SCons-09cad6ed1ffb436742adbbf6608bb094b4a236e2.zip SCons-09cad6ed1ffb436742adbbf6608bb094b4a236e2.tar.gz SCons-09cad6ed1ffb436742adbbf6608bb094b4a236e2.tar.bz2 | |
Allow Alias Nodes to have Actions.
Diffstat (limited to 'src/engine/SCons/Node')
| -rw-r--r-- | src/engine/SCons/Node/Alias.py | 45 | ||||
| -rw-r--r-- | src/engine/SCons/Node/AliasTests.py | 14 | ||||
| -rw-r--r-- | src/engine/SCons/Node/NodeTests.py | 13 | ||||
| -rw-r--r-- | src/engine/SCons/Node/__init__.py | 7 |
4 files changed, 55 insertions, 24 deletions
diff --git a/src/engine/SCons/Node/Alias.py b/src/engine/SCons/Node/Alias.py index 89127a3..c361838 100644 --- a/src/engine/SCons/Node/Alias.py +++ b/src/engine/SCons/Node/Alias.py @@ -39,11 +39,15 @@ import SCons.Node import SCons.Util class AliasNameSpace(UserDict.UserDict): - def Alias(self, name): - if self.has_key(name): - raise SCons.Errors.UserError - self[name] = SCons.Node.Alias.Alias(name) - return self[name] + def Alias(self, name, **kw): + if isinstance(name, SCons.Node.Alias.Alias): + return name + try: + a = self[name] + except KeyError: + a = apply(SCons.Node.Alias.Alias, (name,), kw) + self[name] = a + return a def lookup(self, name): try: @@ -59,18 +63,11 @@ class Alias(SCons.Node.Node): def __str__(self): return self.name - def build(self): - """A "builder" for aliases.""" - pass - + really_build = SCons.Node.Node.build current = SCons.Node.Node.children_are_up_to_date - def sconsign(self): - """An Alias is not recorded in .sconsign files""" - pass - def is_under(self, dir): - # Make Alias nodes get built regardless of + # Make Alias nodes get built regardless of # what directory scons was run from. Alias nodes # are outside the filesystem: return 1 @@ -82,7 +79,25 @@ class Alias(SCons.Node.Node): for kid in self.children(None): contents = contents + kid.get_contents() return contents - + + def sconsign(self): + """An Alias is not recorded in .sconsign files""" + pass + + # + # + # + + def build(self): + """A "builder" for aliases.""" + pass + + def convert(self): + try: del self.builder + except AttributeError: pass + self.reset_executor() + self.build = self.really_build + default_ans = AliasNameSpace() SCons.Node.arg2nodes_lookups.append(default_ans.lookup) diff --git a/src/engine/SCons/Node/AliasTests.py b/src/engine/SCons/Node/AliasTests.py index afae46b..417cc2b 100644 --- a/src/engine/SCons/Node/AliasTests.py +++ b/src/engine/SCons/Node/AliasTests.py @@ -42,15 +42,11 @@ class AliasTestCase(unittest.TestCase): """ ans = SCons.Node.Alias.AliasNameSpace() - a = ans.Alias('a1') - assert a.name == 'a1', a.name - - try: - ans.Alias('a1') - except SCons.Errors.UserError: - pass - else: - raise TestFailed, "did not catch expected UserError" + a1 = ans.Alias('a1') + assert a1.name == 'a1', a1.name + + a2 = ans.Alias('a1') + assert a1 is a2, (a1, a2) def test_lookup(self): """Test the lookup() method diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py index 657ac9b..e0956e1 100644 --- a/src/engine/SCons/Node/NodeTests.py +++ b/src/engine/SCons/Node/NodeTests.py @@ -390,6 +390,19 @@ class NodeTestCase(unittest.TestCase): n1.builder_set(Builder(is_explicit=None)) assert not n1.has_explicit_builder() + def test_get_builder(self): + """Test the get_builder() method""" + n1 = SCons.Node.Node() + b = n1.get_builder() + assert b is None, b + b = n1.get_builder(777) + assert b == 777, b + n1.builder_set(888) + b = n1.get_builder() + assert b == 888, b + b = n1.get_builder(999) + assert b == 888, b + def test_multiple_side_effect_has_builder(self): """Test the multiple_side_effect_has_builder() method """ diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index 36b0aed..fc3d7ec 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -329,6 +329,13 @@ class Node: directories).""" return self.has_builder() and self.builder.is_explicit + def get_builder(self, default_builder=None): + """Return the set builder, or a specified default value""" + try: + return self.builder + except AttributeError: + return default_builder + multiple_side_effect_has_builder = has_builder def is_derived(self): |
