[Scons-users] adding text to compile line
Bill Deegan
bill at baddogconsulting.com
Sun Jan 28 21:12:26 EST 2024
Try using:
env['LINKCOMSTR'] =f"[{label}]: $LINKCOM"
?
On Sun, Jan 28, 2024 at 12:04 AM daggs via Scons-users <
scons-users at scons.org> wrote:
> Greetings.
>
> question, I've defined the str as such: env['LINKCOMSTR'] = "[" + label +
> "]: " + env['LINKCOM']
> and now I'm seeing $( and $) added to prints, is there any way to remove
> them?
>
> Thanks,
>
> Dagg
>
> *Sent:* Tuesday, January 23, 2024 at 10:38 AM
> *From:* "Jeremy Elson" <jelson at gmail.com>
> *To:* "SCons users mailing list" <scons-users at scons.org>
> *Subject:* Re: [Scons-users] adding text to compile line
> Sure!
>
>
> On Sun, Jan 21, 2024 at 6:29 PM Bill Deegan <bill at baddogconsulting.com>
> wrote:
>
>> Jeremy,
>>
>> Any chance you could contribute that to the
>> https://github.com/SCons/scons-contrib repo?
>>
>> Pretty interesting.
>> -Bill
>>
>> On Sun, Jan 21, 2024 at 1:40 PM Jeremy Elson <jelson at gmail.com> wrote:
>>
>>> This is a lot more than what OP asked for, but I'll describe the custom
>>> output code I wrote for one of my Scons-based build systems.(It's not
>>> open-source, so I can't link to the full code.)
>>>
>>> My goal was to replace all the raw command-line output with something
>>> like:
>>>
>>> Compiling src/app/foo.c
>>> Compiling src/app/bar.c
>>> Linking build/libs/libfoo.a
>>> Linking build/output/foo.elf
>>> Signing build/output/foo.elf
>>>
>>> In this case, "Compiling" and "Linking" are standard scons rules;
>>> "Signing" is a custom builder. The trick is that for some of the outputs,
>>> such as Compiling, should show the name of the source. Others, such as
>>> Linking, show the name of the target.
>>>
>>> First, I defined a class called SpinnerPrinter that looks sort of like
>>> this:
>>>
>>> class SpinnerPrinter:
>>> SPINNER = '<<spinner>>'
>>> SOURCE = 'src'
>>> TARGET = 'trg'
>>>
>>> def spin_source(s):
>>> return SpinnerPrinter.SPINNER + SpinnerPrinter.SOURCE + s
>>>
>>> def spin_target(s):
>>> return SpinnerPrinter.SPINNER + SpinnerPrinter.TARGET + s
>>>
>>> Then, in my function that sets up the scons build env, I have code that
>>> looks like the examples below. I call spin_source to indicate the build
>>> output should use the source filenames, and spin_target to show it should
>>> be target. The COMSTRs all end up being configuration strings for the
>>> custom output function.
>>>
>>> if not build_options.verbose:
>>> env['PRINT_CMD_LINE_FUNC'] = SpinnerPrinter().spinner_print
>>> # Overrides to standard builders
>>> env['CCCOMSTR'] = SpinnerPrinter.spin_source("Compiling")
>>> env['ASPPCOMSTR'] = SpinnerPrinter.spin_source("Assembling")
>>> env['LINKCOMSTR'] = SpinnerPrinter.spin_target("Linking")
>>> env['ARCOMSTR'] = SpinnerPrinter.spin_target("Creating library")
>>>
>>> # locally defined builders
>>> env['PROTOBUFCOMSTR'] = SpinnerPrinter.spin_source("Creating protobuf")
>>> env['SIGNCOMSTR'] = SpinnerPrinter.spin_source("Signing")
>>>
>>> The SpinnerPrinter class has a function spinner_print that uses the
>>> config string to generate the output based on the config
>>> string generated by spin_source and spin_target:
>>>
>>> def spinner_print(self, s, target, source, env):
>>> # Regular (non-spinner-aware) strings just get emitted as
>>> # usual
>>> if not s.startswith(self.SPINNER):
>>> sys.stdout.write(s + "\n")
>>> return
>>>
>>> # take off the marker
>>> s = s[len(self.SPINNER):]
>>>
>>> # figure out if we are supposed to print the source or target
>>> which = s[0:3]
>>>
>>> # Generate the prefix (the part printed before the filename).
>>> print_prefix = s[3:]
>>> # Find out what filename to print as part of the output. We'd
>>> # rather print the name of the source, but steps such as
>>> # library creation have a zillion sources and one target, so
>>> # we'll print the target instead for those.
>>> if which == SpinnerPrinter.SOURCE:
>>> file_to_print = source[0]
>>> else:
>>> file_to_print = target[0]
>>> fn_to_print = os.path.realpath(str(file_to_print))
>>>
>>> # Combine the directive we were given (e.g. "Compiling")
>>> # with the filename
>>> sys.stdout.write(f"{print_prefix} {fn_to_print}\n"
>>>
>>> This can be made much fancier; I've elided various details. For example,
>>> the real spinner senses if stdout is a tty. If it is a tty, it uses ANSI
>>> escape sequences so the output lines overwrite themselves, and it prints
>>> only the part of the filename that fits on a single terminal line (after
>>> sensing its width). So when our team builds from the command-line, a normal
>>> build does not use any terminal space at all! When running from a script,
>>> the "Compiling" and "Linking" lines all appear as separate lines. And
>>> without the --verbose option, the entire custom output block is skipped and
>>> full command-lines get printed (the default scons behavior).
>>>
>>> Hopefully this helps someone! We've been very happy with how it works
>>> (and with scons in general).
>>>
>>> -Jeremy
>>>
>>> On Sun, Jan 21, 2024 at 1:07 PM Bill Deegan <bill at baddogconsulting.com>
>>> wrote:
>>>
>>>> Dagg,
>>>>
>>>> What Mats said.. with more detail.
>>>>
>>>> So if your compiling c++, the relevant variables are
>>>> CXXCOM, CXXCOMSTR
>>>> SHCXXCOM, SHCXXCOMSTR
>>>>
>>>> The *STR variables are what is output to the screen, the non *STR are
>>>> what's used to build the command line and execute.
>>>> replace CXX with CC for C compiles..
>>>> You can see the complete list of such variables in the manpage:
>>>> https://scons.org/doc/production/HTML/scons-man.html
>>>>
>>>> Hope this helps~!
>>>> -=Bill
>>>>
>>>> On Sun, Jan 21, 2024 at 11:07 AM Mats Wichmann <mats at wichmann.us>
>>>> wrote:
>>>>
>>>>> On January 21, 2024 5:40:14 AM MST, daggs via Scons-users <
>>>>> scons-users at scons.org> wrote:
>>>>> >Greetings,
>>>>> >
>>>>> >I want to add a prefix the compile line scons is displaying, is it
>>>>> possible?
>>>>> >
>>>>> >Thanks,
>>>>> >
>>>>> >Dagg
>>>>> >_______________________________________________
>>>>> >Scons-users mailing list
>>>>> >Scons-users at scons.org
>>>>> >https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>
>>>>> yes.
>>>>>
>>>>> sorry not at a place I can answer more fully, but can modify the
>>>>> relevant COMSTR (command string), or supply your own $PRINT_CMD_LINE_FUNC
>>>>> --
>>>>> Sent from my Android device with K-9 Mail. Please excuse my brevity.
>>>>> _______________________________________________
>>>>> 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
>>>
>>> _______________________________________________
>>> 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
>
> _______________________________________________ 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/20240128/4a844958/attachment-0001.htm>
More information about the Scons-users
mailing list