Vasily,
On 15.12.2014 20:35, Vasily wrote:
Hi Dirk,
Thanks for the reply!
I get this running the SConstruct I attached:
$> scons .
scons: Reading SConscript files ...
TypeError: Tried to lookup Dir 'some_entry' as a File.:
File "C:\Vass\Work\Temp\scons_glob_bug\SConstruct", line 22:
d2[0].srcnode()
File "C:\Python27\scons-2.1.0\SCons\Node\FS.py", line 743:
srcnode.must_be_same(self.__class__)
File "C:\Python27\scons-2.1.0\SCons\Node\FS.py", line 626:
(self.__class__.__name__, self.path, klass.__name__))
Note: I've checked it agains SCons 2.1.0 (pretty old, but that's what we use
internally right now, maybe it's already fixed?..)
I had another look and I tested your example with the latest SCons 2.3.4 and 2.1.0 as well. Both times I get the cyclic dependency
error...
This seems to be logical to me, because of the following line:
d1 = variant_exec(env1, 'var1', env1.Command, 'some_entry', 'some_entry',
Mkdir("$TARGET"))
, where you specify "some_entry" as target *and* source for the Mkdir().
You don't need to do this, setting the source to [] (empty list) should work
fine.
After this change I was finally able to reproduce your error output: the problem is not so much in the Glob itself, but in the fact
that you're trying to handle directories but aren't telling SCons so. As a default, SCons assumes that simple strings (like the ones
returned from the Glob call) refer to file type entries. So, if a folder "some_entry" exists, but the Glob() returns a "some_entry"
these two collide. For resolving this you have to explicitly convert the list of globbed strings to Dir nodes...find an example
SConstruct attached.
I hope this explains things and helps you further.
Regards,
Dirk
def variant_exec(env, variant_dir, func, *args, **kw):
oldwd = env.fs.getcwd()
env.VariantDir(variant_dir, '.', duplicate=0)
env.fs.chdir(env1.Dir(variant_dir))
try:
return func(*args, **kw)
finally:
env.fs.chdir(oldwd)
env1 = DefaultEnvironment()
env2 = env1.Clone()
d1 = variant_exec(env1, 'var1', env1.Command, env1.Dir('some_entry'), [],
Mkdir("$TARGET"))
d1[0].srcnode()
def DirGlob(env, pattern):
return env.Dir(env.Glob(pattern))
d2 = variant_exec(env2, 'var2', DirGlob, env2, '*_entry')
d1[0].disambiguate()
d1[0].srcnode()
d2[0].disambiguate()
d2[0].srcnode()
_______________________________________________
Scons-dev mailing list
[email protected]
https://pairlist2.pair.net/mailman/listinfo/scons-dev