[Scons-users] Should PseudoBuilder's get access to OverrideEnvironment values if called via one

Bill Deegan bill at baddogconsulting.com
Thu Apr 25 22:13:57 EDT 2019


Indeed it shoud.
repo updated.
Here's fixed example:

from SCons.Environment import OverrideEnvironment

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")

oenv=OverrideEnvironment(env,TEST_VAR='abc')

oenv.InstallInBinDirs(env.Program('main.c')) # installs hello in both bin
dirs

print("Override id:%s"%id(oenv))



And output:
$ python ~/devel/scons/git/as_scons/src/script/scons.py --debug=explain
scons: Reading SConscript files ...
TypeError: __init__() got an unexpected keyword argument 'TEST_VAR':
  File
"/Users/bdbaddog/devel/scons/bugs/Scons-psuedobuilder_no_override_access/SConstruct",
line 15:
    oenv=OverrideEnvironment(env,TEST_VAR='abc')



On Thu, Apr 25, 2019 at 6:39 PM Gary Oberbrunner <garyo at oberbrunner.com>
wrote:

> Sorry, I have a cold.
>  Still: oenv.InstallInBinDirs(...) ?
>
> --Gary
>
> On Thu, Apr 25, 2019, 6:37 PM Gary Oberbrunner <garyo at oberbrunner.com>
> wrote:
>
>> Shouldn't that say oenv.install_in_bin_dir(...)?
>>
>> --Gary
>>
>> On Thu, Apr 25, 2019, 6:06 PM Bill Deegan <bill at baddogconsulting.com>
>> wrote:
>>
>>> 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
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20190425/a07ab883/attachment.html>


More information about the Scons-users mailing list