diff options
-rw-r--r-- | src/engine/SCons/Node/FS.py | 7 | ||||
-rw-r--r-- | src/engine/SCons/Node/FSTests.py | 4 | ||||
-rw-r--r-- | src/engine/SCons/Script/__init__.py | 5 | ||||
-rw-r--r-- | test/BuildDir.py | 33 | ||||
-rw-r--r-- | test/CPPPATH.py | 4 | ||||
-rw-r--r-- | test/Repository/BuildDir.py | 52 | ||||
-rw-r--r-- | test/option--U.py | 2 | ||||
-rw-r--r-- | test/option--implicit-cache.py | 2 |
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") |