[Scons-users] Attaching an emitter to an existing builder

Mats Wichmann mats at wichmann.us
Thu Jan 28 10:11:46 EST 2021

On 1/27/21 3:11 PM, Bill Deegan wrote:
> Jeremy,
> Greetings!
> You're not the first to mention adding the map file as a side effect. 
> (or target)
> Please go ahead and file and Issue on github for this.
> Ideally with a simple example, what the gcc flag is, and what the file 
> naming/location would be?
> So likely the easiest way to add an emitter to Program() would be the 
> following (not tested)
> env.Append(PROGEMITTER = [my_map_emitter])
> Give that a try and let us know if it works for you?
> Also there's a discord server for scons help if you'd like to ask 
> questions/get help there.
> https://discord.gg/bXVpWAy <https://discord.gg/bXVpWAy>
> Hope that helps!
> -Bill

For inspiration, the mslink tool does this (as does the qt tool) - see 
the somewhat messy SCons/Tool/mslink.py.

Meanwhile, while many tools use add_emitter, the code for add_emitter 
itself includes this comment:

         This assumes that emitter has been initialized with an
         appropriate dictionary type, and will throw a TypeError if
         not, so the caller is responsible for knowing that this is an
         appropriate method to call for the Builder in question.

>              env["BUILDERS"]["Program"].add_emitter(
>                  suffix = ".map",
>                  emitter = map_emitter)
>     But it throws an exception:
>     TypeError: 'EmitterProxy' object does not support item assignment

So I guess "expected"? although pretty awkward....

More information about the Scons-users mailing list