Re: persistent but local tweaks to a node's environment

Mats Wichmann <[email protected]>
Newsgroups gmane.comp.programming.tools.scons.user
Message-ID <[email protected]>
On 7/24/21 4:18 AM, Gabe Black wrote:
> Hi! The project I work on builds several different versions of its 
> outputs, like a debug version, an optimized version, etc. Also, some 
> files in the project, for instance automatically generated files, need 
> to have slightly customized build flags, like disabling certain warnings 
> that are false positives and/or are in source we can't change.
> 
> Right now we handle that by creating an environment for each build, 
> which I think is the standard approach. Unfortunately, we then have to 
> have a separate step which goes through and generates new environments 
> based on those for each file that needs its slightly customized build flags.
> 
> What I would *like* to do, is to be able to specify for any given node 
> that it should build using the flags that would be implied by the 
> environment that's pulling it in, except that they should be tweaked 
> just a little bit. Something like:
> 
> Object('foo.cc', '-Wno-deprecated-copy')
> 
> and then:
> 
> opt.Program('foo.opt', 'foo.cc', CCFLAGS='${CCFLAGS} -O3')
> debug.Program('foo.debug', 'foo.cc', CCFLAGS='${CCFLAGS} -g', 
> OBJSUFFIX='.do')
> etc
> 
> and then have foo.do build with "-Wno-deprecated-copy -g", and foo.o 
> build with "-Wno-deprecated-copy -O3"
> 
> The problem is, that as soon as I tell SCons to use custom variables, it 
> Clone-s the underlying environment and disassociates from the underlying 
> environment.

could you explain what you're seeing a little further?

In the case of construction variable overrides in a builder call, it 
doesn't Clone, as that's considered expensive, it just builds an 
override dictionary, and it doesn't disassociate - it retains the 
underlying construction environment and only applies the override dict 
if there were any overrides - so it's supposed to be a kind of 
copy-on-write setup.  Since this doesn't seem to match what you're 
seeing it would be good to figure out what's actually happening.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.