Re: adding text to compile line
daggs via Scons-users <[email protected]> Tue, 30 Jan 2024 20:49:48 +0100
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <trinity-5f2aabde-b491-43e9-b815-11e4a85ff742-1706644188891@3c-app-mailcom-bs05> |
still the same output Sent: Monday, January 29, 2024 at 4:12 AM From: "Bill Deegan" <[email protected]> To: "SCons users mailing list" <[email protected]> Cc: "daggs" <[email protected]> Subject: Re: [Scons-users] adding text to compile line Try using: env['LINKCOMSTR'] =f"[{label}]: $LINKCOM" ? On Sun, Jan 28, 2024 at 12:04 AM daggs via Scons-users <[email protected] > 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" <[email protected] > To: "SCons users mailing list" <[email protected] > Subject: Re: [Scons-users] adding text to compile line Sure! On Sun, Jan 21, 2024 at 6:29 PM Bill Deegan <[email protected] > 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 <[email protected] > 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 <[email protected] > 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 <[email protected] > wrote: On January 21, 2024 5:40:14 AM MST, daggs via Scons-users <[email protected] > wrote: >Greetings, > >I want to add a prefix the compile line scons is displaying, is it possible? > >Thanks, > >Dagg >_______________________________________________ >Scons-users mailing list >[email protected] > 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 [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 _______________________________________________ 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 _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users