Fix aliases as dependencies. (Anthony Roach)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 9 Aug 2002 20:58:20 +0000 (20:58 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 9 Aug 2002 20:58:20 +0000 (20:58 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@436 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Node/Alias.py
test/Alias.py

index a4d91fc22690f476560bac60a4a65c9174161421..4902256db27b6a133f457cf927931a3ccde7c7e4 100644 (file)
@@ -26,6 +26,9 @@ RELEASE 0.09 -
 
  - Issue a warning and continue when finding a corrupt .sconsign file.
 
+ - Fix using an alias as a dependency of a target so that if one of the
+   alias' dependencies gets rebuilt, the resulting target will, too.
+
 
 
 RELEASE 0.08 - Mon, 15 Jul 2002 12:08:51 -0500
index 276750f2ca3c7ccbdb630b397faadaf325dd75e3..f2c8f34f745ba1247112574b64d88c3bb131d4e5 100644 (file)
@@ -63,14 +63,6 @@ class Alias(SCons.Node.Node):
         """A "builder" for aliases."""
         pass
 
-    def set_bsig(self, bsig):
-        """An alias has no signature."""
-        self.bsig = None
-
-    def set_csig(self, csig):
-        """An alias has no signature."""
-        self.csig = None
-
     def current(self, calc):
         """If all of our children were up-to-date, then this
         Alias was up-to-date, too."""
@@ -95,6 +87,14 @@ class Alias(SCons.Node.Node):
         # what directory scons was run from. Alias nodes
         # are outside the filesystem:
         return 1
+
+    def get_contents(self):
+        """The contents of an alias is the concatenation
+        of all the contents of its sources"""
+        contents = ""
+        for kid in self.children(None):
+            contents = contents + kid.get_contents()
+        return contents
         
 default_ans = AliasNameSpace()
 
index aff9c2afd9e31d20e45ccd1314f554b45656ef3f..ca9075f0036122d52bf8a5d202fae4387392ef15 100644 (file)
@@ -27,10 +27,11 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 import os
 import sys
 import TestSCons
+import TestCmd
 
 python = sys.executable
 
-test = TestSCons.TestSCons()
+test = TestSCons.TestSCons(match=TestCmd.match_re)
 
 test.subdir('sub1', 'sub2')
 
@@ -117,4 +118,44 @@ test.run(arguments = 'blat')
 test.fail_test(not os.path.exists(test.workpath('f2.out')))
 test.fail_test(not os.path.exists(test.workpath('f3.out')))
 
+test.write('f3.in', "f3.in 2 \n")
+
+test.run(arguments = 'f1.out', stdout=""".* build.py f3.out f3.in
+.* build.py f1.out f1.in
+""")
+
+test.up_to_date(arguments = 'f1.out')
+
+test.write('SConstruct', """
+SetBuildSignatureType('content')
+B = Builder(action = r"%s build.py $TARGET $SOURCES")
+env = Environment()
+env['BUILDERS']['B'] = B
+env.B(target = 'f1.out', source = 'f1.in')
+env.B(target = 'f2.out', source = 'f2.in')
+env.B(target = 'f3.out', source = 'f3.in')
+SConscript('sub1/SConscript', "env")
+SConscript('sub2/SConscript', "env")
+env.Alias('foo', ['f2.out', 'sub1'])
+env.Alias('bar', ['sub2', 'f3.out'])
+env.Alias('blat', ['sub2', 'f3.out'])
+env.Alias('blat', ['f2.out', 'sub1'])
+env.Depends('f1.out', 'bar')
+""" % python)
+
+os.unlink(test.workpath('f1.out'))
+
+test.run(arguments = 'f1.out')
+
+test.fail_test(not os.path.exists(test.workpath('f1.out')))
+
+test.write('f3.in', "f3.in 3 \n")
+
+test.run(arguments = 'f1.out', stdout=""".* build.py f3.out f3.in
+.* build.py f1.out f1.in
+""")
+
+test.up_to_date(arguments = 'f1.out')
+
+
 test.pass_test()