Fix for relative CPPPATH when BuildDir() is in use. (Charles Crain)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 14 May 2002 21:08:38 +0000 (21:08 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 14 May 2002 21:08:38 +0000 (21:08 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@372 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Node/FS.py
src/engine/SCons/Node/FSTests.py
test/BuildDir.py

index ee716a592396da3da94892550789edf39a83d3d4..ebcd7f54266448e7cf8b56ea2b093cccb6044660 100644 (file)
 
 RELEASE 0.08 - 
 
+  From Charles Crain:
+
+  - Fixed a bug with relative CPPPATH dirs when using BuildDir().
+    (Bug reported by Bob Summerwill.)
+
   From Steven Knight:
 
   - Add a "platform=" keyword argument to Environment instantiation,
index 6ccd1460ead28f82d4280793d4e0b162e9e8d5fe..61cd80c6f3bab2494361c5bea138ebf40321580b 100644 (file)
@@ -499,6 +499,21 @@ class Dir(Entry):
             self._sconsign = SCons.Sig.SConsignFile(self)
         return self._sconsign
 
+    def __str__(self):
+        # Reimplemented from Entry since, unlike for
+        # Entry and File, we want to return the source
+        # path *even if* the builder is non-zero
+        # (which it always is for a directory)
+        if self.duplicate:
+            return self.path
+        else:
+            return self.srcpath
+
+    def exists(self):
+        # Again, directories are special...we don't care if their
+        # source path exists, we only care about the path.
+        return os.path.exists(self.path)
+
 
 
 # XXX TODO?
index ef0c72bb732e0d0457f2ec080d2644911f29b684..ee825637243f4d15d5d004d1ab9748119d9a40c6 100644 (file)
@@ -108,6 +108,12 @@ class BuildDirTestCase(unittest.TestCase):
         assert f2.srcpath == os.path.normpath('src/test1'), str(f2)
         assert str(f2) == os.path.normpath('build/var2/test1'), str(f2)
 
+        d1 = fs.Dir('build/var1')
+        d2 = fs.Dir('build/var2')
+
+        assert str(d1) == 'src', str(d1)
+        assert str(d2) == os.path.normpath('build/var2'), str(d2)
+
         # Test to see if file_link() works...
         test=TestCmd(workdir='')
         test.subdir('src','build')
index 4b835a6bfc47c2adfc7d19bc597c49950f233d7c..c547ef90232b06f94eddc35c2c1144e369c60672 100644 (file)
@@ -44,18 +44,22 @@ foo31 = test.workpath('build', 'var3', 'foo1' + _exe)
 foo32 = test.workpath('build', 'var3', 'foo2' + _exe)
 foo41 = test.workpath('build', 'var4', 'foo1' + _exe)
 foo42 = test.workpath('build', 'var4', 'foo2' + _exe)
+foo51 = test.workpath('build', 'var5', 'foo1' + _exe)
+foo52 = test.workpath('build', 'var5', 'foo2' + _exe)
 
 test.write('SConstruct', """
 src = Dir('src')
 var2 = Dir('build/var2')
 var3 = Dir('build/var3')
 var4 = Dir('build/var4')
+var5 = Dir('build/var5')
 
 
 BuildDir('build/var1', src)
 BuildDir(var2, src)
 BuildDir(var3, src, duplicate=0)
 BuildDir(var4, src, duplicate=0)
+BuildDir(var5, src, duplicate=0)
 
 env = Environment(CPPPATH='#src')
 SConscript('build/var1/SConscript', "env")
@@ -65,6 +69,8 @@ env = Environment(CPPPATH=src)
 SConscript('build/var3/SConscript', "env")
 SConscript(File('SConscript', var4), "env")
 
+env = Environment(CPPPATH='.')
+SConscript('build/var5/SConscript', "env")
 """) 
 
 test.subdir('src')
@@ -129,14 +135,20 @@ test.run(program = foo31, stdout = "f1.c\n")
 test.run(program = foo32, stdout = "f2.c\n")
 test.run(program = foo41, stdout = "f1.c\n")
 test.run(program = foo42, stdout = "f2.c\n")
+test.run(program = foo51, stdout = "f1.c\n")
+test.run(program = foo52, stdout = "f2.c\n")
 
 # Make sure we didn't duplicate the source files in build/var3.
 test.fail_test(os.path.exists(test.workpath('build', 'var3', 'f1.c')))
 test.fail_test(os.path.exists(test.workpath('build', 'var3', 'f2.in')))
 
-# Make sure we didn't duplicate the source files in build/var3.
+# Make sure we didn't duplicate the source files in build/var4.
 test.fail_test(os.path.exists(test.workpath('build', 'var4', 'f1.c')))
 test.fail_test(os.path.exists(test.workpath('build', 'var4', 'f2.in')))
 
+# Make sure we didn't duplicate the source files in build/var5.
+test.fail_test(os.path.exists(test.workpath('build', 'var5', 'f1.c')))
+test.fail_test(os.path.exists(test.workpath('build', 'var5', 'f2.in')))
+
 
 test.pass_test()