Should PseudoBuilder's get access to OverrideEnvironment values if called via one
Bill Deegan <[email protected]>
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <CAEyG4CGVGYxd8K0jh+p5j+4OhRUYwHXGY-YZgf=y4zsMCR=xoQ@mail.gmail.com> |
Currently they don't
See sample git repo:
https://github.com/bdbaddog/Scons-psuedobuilder_no_override_access/tree/master
SConstruct:
DefaultEnvironment(tools=[])
env=Environment(BIN='mybin',LOCALBIN='localbin')
def install_in_bin_dirs(env, source):
"""Install source in both bin dirs"""
i1 = env.Install("$BIN", source)
i2 = env.Install("$LOCALBIN", source)
print("TEST_VAR=%s"%env['TEST_VAR'])
return [i1[0], i2[0]] # Return a list, like a normal builder
env.AddMethod(install_in_bin_dirs, "InstallInBinDirs")
env.InstallInBinDirs(env.Program('main.c')) # installs hello in both
bin dirs
oenv=OverrideEnvironment(env,TEST_VAR='abc')
print("Override id:%s"%id(oenv))
Yields:
$ python ~/devel/scons/git/as_scons/src/script/scons.py
scons: Reading SConscript files ...
KeyError: 'TEST_VAR':
File "/Users/bdbaddog/devel/scons/bugs/Scons-psuedobuilder_no_override_access/SConstruct",
line 13:
env.InstallInBinDirs(env.Program('main.c')) # installs hello in
both bin dirs
File "/Users/bdbaddog/devel/scons/git/as_scons/src/script/../engine/SCons/Environment.py",
line 224:
return self.method(*nargs, **kwargs)
File "/Users/bdbaddog/devel/scons/bugs/Scons-psuedobuilder_no_override_access/SConstruct",
line 8:
print("TEST_VAR=%s"%env['TEST_VAR'])
File "/Users/bdbaddog/devel/scons/git/as_scons/src/script/../engine/SCons/Environment.py",
line 410:
return self._dict[key]
This is because PsuedoBuilder's are wrapped with the Environment()
they are added to.
Via MethodWrapper()
Which caused a couple hours of debugging to find today..
Unless someone can propose a reasonable reason it shouldn't I'll file
a github issue.
-Bill
_______________________________________________
Scons-users mailing list
[email protected]
https://pairlist4.pair.net/mailman/listinfo/scons-users