summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/engine/SCons/Node/FS.py7
-rw-r--r--src/engine/SCons/Node/FSTests.py4
-rw-r--r--src/engine/SCons/Script/__init__.py5
-rw-r--r--test/BuildDir.py33
-rw-r--r--test/CPPPATH.py4
-rw-r--r--test/Repository/BuildDir.py52
-rw-r--r--test/option--U.py2
-rw-r--r--test/option--implicit-cache.py2
8 files changed, 72 insertions, 37 deletions
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py
index aa6482d..fac9627 100644
--- a/src/engine/SCons/Node/FS.py
+++ b/src/engine/SCons/Node/FS.py
@@ -688,6 +688,13 @@ class Dir(Entry):
self._sconsign = SCons.Sig.SConsignFile(self)
return self._sconsign
+ def srcnode(self):
+ """Dir has a special need for srcnode()...if we
+ have a srcdir attribute set, then that *is* our srcnode."""
+ if self.srcdir:
+ return self.srcdir
+ return Entry.srcnode(self)
+
# XXX TODO?
# base_suf
# suffix
diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py
index 1610ec6..8f9f5e4 100644
--- a/src/engine/SCons/Node/FSTests.py
+++ b/src/engine/SCons/Node/FSTests.py
@@ -82,15 +82,19 @@ class BuildDirTestCase(unittest.TestCase):
f1 = fs.File('build/test1')
fs.BuildDir('build', 'src')
f2 = fs.File('build/test2')
+ d1 = fs.Dir('build')
assert f1.srcnode().path == os.path.normpath('src/test1'), f1.srcnode().path
assert f2.srcnode().path == os.path.normpath('src/test2'), f2.srcnode().path
+ assert d1.srcnode().path == 'src', d1.srcnode().path
fs = SCons.Node.FS.FS()
f1 = fs.File('build/test1')
fs.BuildDir('build', '.')
f2 = fs.File('build/test2')
+ d1 = fs.Dir('build')
assert f1.srcnode().path == 'test1', f1.srcnode().path
assert f2.srcnode().path == 'test2', f2.srcnode().path
+ assert d1.srcnode().path == '.', d1.srcnode().path
fs = SCons.Node.FS.FS()
fs.BuildDir('build/var1', 'src')
diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py
index a0bab35..fd43b9a 100644
--- a/src/engine/SCons/Script/__init__.py
+++ b/src/engine/SCons/Script/__init__.py
@@ -997,9 +997,8 @@ def _main():
# -U with default targets
default_targets = SCons.Script.SConscript.default_targets
def check_dir(x):
- reps = SCons.Node.FS.default_fs.Rsearchall(str(x.cwd), must_exist=0,
- clazz=SCons.Node.FS.Dir)
- return target_top in reps
+ cwd = x.cwd.srcnode()
+ return cwd == target_top
default_targets = filter(check_dir, default_targets)
SCons.Script.SConscript.default_targets = default_targets
target_top = None
diff --git a/test/BuildDir.py b/test/BuildDir.py
index 349ed51..e4c6943 100644
--- a/test/BuildDir.py
+++ b/test/BuildDir.py
@@ -80,11 +80,11 @@ var6 = Dir('../build/var6')
BuildDir('build/var1', src)
-BuildDir(var2, src, duplicate=0)
-BuildDir(var3, src)
+BuildDir(var2, src)
+BuildDir(var3, src, duplicate=0)
BuildDir(var4, src, duplicate=0)
-BuildDir(var5, src)
-BuildDir(var6, src, duplicate=0)
+BuildDir(var5, src, duplicate=0)
+BuildDir(var6, src)
env = Environment(CPPPATH='#src', F77PATH='#src')
SConscript('build/var1/SConscript', "env")
@@ -256,6 +256,31 @@ def equal_stats(x,y):
return (stat.S_IMODE(x[stat.ST_MODE]) == stat.S_IMODE(y[stat.ST_MODE]) and
x[stat.ST_MTIME] == y[stat.ST_MTIME])
+# Make sure we did duplicate the source files in build/var2,
+# and that their stats are the same:
+test.fail_test(not os.path.exists(test.workpath('test', 'build', 'var2', 'f1.c')))
+test.fail_test(not os.path.exists(test.workpath('test', 'build', 'var2', 'f2.in')))
+test.fail_test(not equal_stats(test.workpath('test', 'build', 'var2', 'f1.c'), test.workpath('test', 'src', 'f1.c')))
+test.fail_test(not equal_stats(test.workpath('test', 'build', 'var2', 'f2.in'), test.workpath('test', 'src', 'f2.in')))
+
+# Make sure we didn't duplicate the source files in build/var3.
+test.fail_test(os.path.exists(test.workpath('test', 'build', 'var3', 'f1.c')))
+test.fail_test(os.path.exists(test.workpath('test', 'build', 'var3', 'f2.in')))
+test.fail_test(os.path.exists(test.workpath('test', 'build', 'var3', 'b1.f')))
+test.fail_test(os.path.exists(test.workpath('test', 'build', 'var3', 'b2.in')))
+
+# Make sure we didn't duplicate the source files in build/var4.
+test.fail_test(os.path.exists(test.workpath('test', 'build', 'var4', 'f1.c')))
+test.fail_test(os.path.exists(test.workpath('test', 'build', 'var4', 'f2.in')))
+test.fail_test(os.path.exists(test.workpath('test', 'build', 'var4', 'b1.f')))
+test.fail_test(os.path.exists(test.workpath('test', 'build', 'var4', 'b2.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.fail_test(os.path.exists(test.workpath('build', 'var5', 'b1.f')))
+test.fail_test(os.path.exists(test.workpath('build', 'var5', 'b2.in')))
+
# verify that header files in the source directory are scanned properly:
test.write(['test', 'src', 'f1.h'], r"""
#define F1_STR "f1.c 2\n"
diff --git a/test/CPPPATH.py b/test/CPPPATH.py
index 45216c8..a2cae10 100644
--- a/test/CPPPATH.py
+++ b/test/CPPPATH.py
@@ -49,7 +49,7 @@ obj = env.Object(target='foobar/prog', source='subdir/prog.c')
env.Program(target='prog', source=obj)
SConscript('subdir/SConscript', "env")
-BuildDir('variant', 'subdir', duplicate=0)
+BuildDir('variant', 'subdir', 0)
include = Dir('include')
env = Environment(CPPPATH=[include])
SConscript('variant/SConscript', "env")
@@ -168,7 +168,7 @@ obj = env.Object(target='foobar/prog', source='subdir/prog.c')
env.Program(target='prog', source=obj)
SConscript('subdir/SConscript', "env")
-BuildDir('variant', 'subdir')
+BuildDir('variant', 'subdir', 0)
include = Dir('include')
env = Environment(CPPPATH=['inc2', include])
SConscript('variant/SConscript', "env")
diff --git a/test/Repository/BuildDir.py b/test/Repository/BuildDir.py
index 905c618..6687937 100644
--- a/test/Repository/BuildDir.py
+++ b/test/Repository/BuildDir.py
@@ -38,8 +38,8 @@ opts = "-Y " + test.workpath('repository')
#
test.write(['repository', 'SConstruct'], r"""
-BuildDir('build0', 'src')
-BuildDir('build1', 'src', duplicate=0)
+BuildDir('build0', 'src', duplicate=0)
+BuildDir('build1', 'src', duplicate=1)
SConscript('build0/SConscript')
SConscript('build1/SConscript')
""")
@@ -78,9 +78,9 @@ repository/src/bbb.in
repository/src/ccc.in
""")
-test.fail_test(not os.path.exists('work1/build0/aaa.in'))
-test.fail_test(not os.path.exists('work1/build0/bbb.in'))
-test.fail_test(not os.path.exists('work1/build0/ccc.in'))
+test.fail_test(os.path.exists('work1/build0/aaa.in'))
+test.fail_test(os.path.exists('work1/build0/bbb.in'))
+test.fail_test(os.path.exists('work1/build0/ccc.in'))
test.fail_test(not os.path.exists('work1/build0/aaa.mid'))
test.fail_test(not os.path.exists('work1/build0/bbb.mid'))
test.fail_test(not os.path.exists('work1/build0/ccc.mid'))
@@ -91,9 +91,9 @@ repository/src/bbb.in
repository/src/ccc.in
""")
-test.fail_test(os.path.exists('work1/build1/aaa.in'))
-test.fail_test(os.path.exists('work1/build1/bbb.in'))
-test.fail_test(os.path.exists('work1/build1/ccc.in'))
+test.fail_test(not os.path.exists('work1/build1/aaa.in'))
+test.fail_test(not os.path.exists('work1/build1/bbb.in'))
+test.fail_test(not os.path.exists('work1/build1/ccc.in'))
test.fail_test(not os.path.exists('work1/build1/aaa.mid'))
test.fail_test(not os.path.exists('work1/build1/bbb.mid'))
test.fail_test(not os.path.exists('work1/build1/ccc.mid'))
@@ -111,9 +111,9 @@ work1/src/bbb.in
repository/src/ccc.in
""")
-test.fail_test(not os.path.exists('work1/build0/aaa.in'))
-test.fail_test(not os.path.exists('work1/build0/bbb.in'))
-test.fail_test(not os.path.exists('work1/build0/ccc.in'))
+test.fail_test(os.path.exists('work1/build0/aaa.in'))
+test.fail_test(os.path.exists('work1/build0/bbb.in'))
+test.fail_test(os.path.exists('work1/build0/ccc.in'))
test.fail_test(not os.path.exists('work1/build0/aaa.mid'))
test.fail_test(not os.path.exists('work1/build0/bbb.mid'))
test.fail_test(not os.path.exists('work1/build0/ccc.mid'))
@@ -124,9 +124,9 @@ work1/src/bbb.in
repository/src/ccc.in
""")
-test.fail_test(os.path.exists('work1/build1/aaa.in'))
-test.fail_test(os.path.exists('work1/build1/bbb.in'))
-test.fail_test(os.path.exists('work1/build1/ccc.in'))
+test.fail_test(not os.path.exists('work1/build1/aaa.in'))
+test.fail_test(not os.path.exists('work1/build1/bbb.in'))
+test.fail_test(not os.path.exists('work1/build1/ccc.in'))
test.fail_test(not os.path.exists('work1/build1/aaa.mid'))
test.fail_test(not os.path.exists('work1/build1/bbb.mid'))
test.fail_test(not os.path.exists('work1/build1/ccc.mid'))
@@ -144,17 +144,17 @@ test.writable('repository', 0)
#
test.run(chdir = 'work2', options = opts, arguments = '.')
-test.fail_test(not os.path.exists('work2/build0/aaa.in'))
-test.fail_test(not os.path.exists('work2/build0/bbb.in'))
-test.fail_test(not os.path.exists('work2/build0/ccc.in'))
+test.fail_test(os.path.exists('work2/build0/aaa.in'))
+test.fail_test(os.path.exists('work2/build0/bbb.in'))
+test.fail_test(os.path.exists('work2/build0/ccc.in'))
test.fail_test(os.path.exists('work2/build0/aaa.mid'))
test.fail_test(os.path.exists('work2/build0/bbb.mid'))
test.fail_test(os.path.exists('work2/build0/ccc.mid'))
test.fail_test(os.path.exists('work2/build0/output'))
-test.fail_test(os.path.exists('work2/build1/aaa.in'))
-test.fail_test(os.path.exists('work2/build1/bbb.in'))
-test.fail_test(os.path.exists('work2/build1/ccc.in'))
+test.fail_test(not os.path.exists('work2/build1/aaa.in'))
+test.fail_test(not os.path.exists('work2/build1/bbb.in'))
+test.fail_test(not os.path.exists('work2/build1/ccc.in'))
test.fail_test(os.path.exists('work2/build1/aaa.mid'))
test.fail_test(os.path.exists('work2/build1/bbb.mid'))
test.fail_test(os.path.exists('work2/build1/ccc.mid'))
@@ -173,9 +173,9 @@ work2/src/bbb.in
repository/src/ccc.in
""")
-test.fail_test(not os.path.exists('work2/build0/aaa.in'))
-test.fail_test(not os.path.exists('work2/build0/bbb.in'))
-test.fail_test(not os.path.exists('work2/build0/ccc.in'))
+test.fail_test(os.path.exists('work2/build0/aaa.in'))
+test.fail_test(os.path.exists('work2/build0/bbb.in'))
+test.fail_test(os.path.exists('work2/build0/ccc.in'))
test.fail_test(os.path.exists('work2/build0/aaa.mid'))
test.fail_test(not os.path.exists('work2/build0/bbb.mid'))
test.fail_test(os.path.exists('work2/build0/ccc.mid'))
@@ -186,9 +186,9 @@ work2/src/bbb.in
repository/src/ccc.in
""")
-test.fail_test(os.path.exists('work2/build1/aaa.in'))
-test.fail_test(os.path.exists('work2/build1/bbb.in'))
-test.fail_test(os.path.exists('work2/build1/ccc.in'))
+test.fail_test(not os.path.exists('work2/build1/aaa.in'))
+test.fail_test(not os.path.exists('work2/build1/bbb.in'))
+test.fail_test(not os.path.exists('work2/build1/ccc.in'))
test.fail_test(os.path.exists('work2/build1/aaa.mid'))
test.fail_test(not os.path.exists('work2/build1/bbb.mid'))
test.fail_test(os.path.exists('work2/build1/ccc.mid'))
diff --git a/test/option--U.py b/test/option--U.py
index 0160015..23e82b1 100644
--- a/test/option--U.py
+++ b/test/option--U.py
@@ -52,7 +52,7 @@ Default(env.B(target = 'sub1/foo.out', source = 'sub1/foo.in'))
Export('env')
SConscript('sub2/SConscript')
Default(env.B(target = 'sub3/baz.out', source = 'sub3/baz.in'))
-BuildDir('sub2b', 'sub2', duplicate=0)
+BuildDir('sub2b', 'sub2')
SConscript('sub2b/SConscript')
Default(env.B(target = 'sub2/xxx.out', source = 'xxx.in'))
SConscript('SConscript')
diff --git a/test/option--implicit-cache.py b/test/option--implicit-cache.py
index 186b637..4e5cf1e 100644
--- a/test/option--implicit-cache.py
+++ b/test/option--implicit-cache.py
@@ -52,7 +52,7 @@ obj = env.Object(target='prog', source='subdir/prog.c')
env.Program(target='prog', source=obj)
SConscript('subdir/SConscript', "env")
-BuildDir('variant', 'subdir')
+BuildDir('variant', 'subdir', 0)
include = Dir('include')
env = Environment(CPPPATH=['inc2', include])
SConscript('variant/SConscript', "env")