Re: Wacky crash in Clone()
Bill Deegan <[email protected]>
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <CAEyG4CFdgvuzQo+MPMLEa4ekt2q+UFseG+bmWL=SYESRMK0W5A@mail.gmail.com> |
What Mats said... ;) Yes. Adding a bunch of extra logic and modifying/adding env variables to the builder/action execution environments is probably best done in a PsuedoBuilder.. On Wed, Feb 2, 2022 at 10:02 AM Mats Wichmann <[email protected]> wrote: > On 2/2/22 08:05, Marc Branchaud via Scons-users wrote: > > 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): > > This looks like a use case for pseudo builders, via the AddMethod call. > There are sone examples in the user guide > > https://scons.org/doc/production/HTML/scons-user.html#chap-add-method > > > > > 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. > > > > _______________________________________________ > > Scons-users mailing list > > [email protected] > > https://pairlist4.pair.net/mailman/listinfo/scons-users > > _______________________________________________ > Scons-users mailing list > [email protected] > https://pairlist4.pair.net/mailman/listinfo/scons-users > _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users