[Scons-users] Wacky crash in Clone()
Marc Branchaud
marcnarc at xiplink.com
Wed Feb 2 10:05:32 EST 2022
On 2022-01-25 14:57, Bill Deegan wrote:
> Can you be more specific about what info an action would want to change
> with the builder?
> More details = possible expert help on how to implement it in a "safe" way..
Recall that I have a "BaseBuilder" and a "MyBuilder" that extends/adapts
it (I'm omitting the generate() and exists() functions):
site_scons/BaseBuilder.py
def builder(target, source, env):
# Do some bookkeeping, then run the build command:
subprocess.call( ... )
site_scons/site_tools/MyBuilder.py
import BaseBuilder
def builder(target, source, env):
# Set up stuff for the BaseBuilder, then run it.
return BaseBuilder.builder(target, source, env)
MyBuilder wants to do things like add extra options and/or set shell
environment variables for the command run by the BaseBuilder.
There is also a "PlainBuilder" that just invokes the BaseBuilder
directly (I did not show this in my original message):
site_scons/site_tools/PlainBuilder.py
import BaseBuilder
def generate(env, **kwargs):
env['BUILDERS']['PlainBuilder'] = env.Builder(
action = env.Action(
BaseBuilder.builder,
BaseBuilder.message,
)
)
Invocations of PlainBuilder will themselves set their own options and/or
shell variables for the command.
Whatever MyBuilder sets up for BaseBuilder should not pollute
PlainBuilder invocations of BaseBuilder.
In SCons 2.x I did this by cloning the build environment inside
MyBuilder and tweaking the clone as needed.
In SCons 4.x I changed this to use a module-level "overrides" dict
inside BaseBuilder.py.
(Sorry for the slow replay. After I managed to fix my problem, $work
priorities took over.)
M.
More information about the Scons-users
mailing list