Not sure exactly about what you fixed, but as you speak about coloring, I wanted to share the colorizer tool I am using. Compared to what was proposed in the wiki, it allows to colorize everything in stdout and/or stderr, being printed either by scons itself or by external commands spawned by scons. In order to do this, indeed, I had to overwrite the spawn method. Works only on unix, I used basic terminal color codes.
import sys import os import re import select import subprocess import platform c_underline = "\033[04m" c_blink = "\033[05m" c_norm = "\033[00m" # Normal c_black = "\033[30m" c_red = "\033[31m" c_green = "\033[32m" c_yellow = "\033[33m" c_blue = "\033[34m" c_purple = "\033[35m" c_cyan = "\033[36m" c_white = "\033[37m" # Bold cb_black = "\033[1;30m" cb_red = "\033[1;31m" cb_green = "\033[1;32m" cb_yellow = "\033[1;33m" cb_blue = "\033[1;34m" cb_purple = "\033[1;35m" cb_cyan = "\033[1;36m" cb_white = "\033[1;37m" # BackGround cback_blue = "\033[1;44m" cback_white = "\033[1;47m" cback_black = "\033[1;45m" #------------------------------------------------------------------------------ # regexps and what they will be replaced with #------------------------------------------------------------------------------ colorPatterns = [ (re.compile(r'(.*: [Ww]arning[:,].*)') , r'%s[Warning] %s\1%s' % (cb_red, cb_yellow, c_norm)), (re.compile(r'(.*: [Ee]rror[:,].*)') , r'%s[Error] \1%s' % (cb_red, c_norm)), (re.compile(r'\[(CC|CXX|UIC|MOC|Q2K|RCC|RAN|LNK)\](.*?)([^/]+)$') , r'%s[\1]%s\2%s\3%s' % (c_blue, c_purple, cb_purple, c_norm)), ] #------------------------------------------------------------------------------ # Colorize a line according to defined patterns #------------------------------------------------------------------------------ def colorize(line): for regexp, replacement in colorPatterns: line = regexp.sub(replacement, line) return line; #------------------------------------------------------------------------------ # Allows to hijack default stdout and stderr to colorize them #------------------------------------------------------------------------------ class Colorizer(object): def __init__(self, redirected): self.buf = '' self.redirected = redirected def isatty(self): return self.redirected.isatty() def write(self, msg): if self.buf: msg = self.buf + msg self.buf = '' line, sep, msg = msg.partition('\n') while sep: self.redirected.write(colorize(line)+'\n') line, sep, msg = msg.partition('\n') if line: self.buf = line def __del__(self): if self.buf: self.redirected.write(colorize(self.buf)) #------------------------------------------------------------------------------ # Asynchroneously stream subprocess stdout/stderr to our own stdout/stderr #------------------------------------------------------------------------------ def colorizeSpawn(shell, escape, cmd, args, env): proc = subprocess.Popen(' '.join(args), stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, env=env ) monitoredStreams = [proc.stdout, proc.stderr] while monitoredStreams: rsig, wsig, xsig = select.select(monitoredStreams, [], []) if proc.stdout in rsig: data = os.read(proc.stdout.fileno(), 1024) if data: sys.stdout.write(data) else: proc.stdout.close() monitoredStreams.remove(proc.stdout) if proc.stderr in rsig: data = os.read(proc.stderr.fileno(), 1024) if data: sys.stderr.write(data) else: proc.stderr.close() monitoredStreams.remove(proc.stderr) ret = proc.poll() return ret #------------------------------------------------------------------------------ # Initialize the colorizer #------------------------------------------------------------------------------ def generate(env, **kw): if platform.system() != 'Windows': if type(sys.stdout) == file and sys.stdout.isatty(): env['SPAWN'] = colorizeSpawn sys.stdout = Colorizer(sys.stdout) if type(sys.stderr) == file and sys.stderr.isatty(): env['SPAWN'] = colorizeSpawn sys.stderr = Colorizer(sys.stderr) def exists(env): return 1 2014-02-12 16:25 GMT+01:00 Kenny, Jason L <jason.l.ke...@intel.com>: > > Fix async subprocess execution with proper handling of std* streams. > > So I fixed the issue with output in Parts. I not saying it could not be > clean up some more. However it solves the output issues, and adds coloring > ( which seems to need some fixing in certain cases.. ie mac mostly) and > logging support. It might not be too hard for someone to move the code over > to SCons and integrated its usage into SCons. > > > > Just a thought. > > > > Jason > > > > *From:* scons-dev-boun...@scons.org [mailto:scons-dev-boun...@scons.org] *On > Behalf Of *Bill Deegan > *Sent:* Tuesday, February 11, 2014 5:58 PM > *To:* SCons developer list > *Subject:* Re: [Scons-dev] Fwd: [GSoC Mentors Announce] Now Accepting > Applications for Mentoring Organizations for GSoC 2014 > > > > Anatoly, > > While I agree many of the things in your list would be nice to get done. > I'm not sure most of them are a good thing for a GSOC student to attempt. > > Few students would have the time to ramp up on all the info needed and > make some concrete contributions in the time allowed. > > my 2cents. > > -Bill > > > > On Tue, Feb 11, 2014 at 12:35 PM, anatoly techtonik <techto...@gmail.com> > wrote: > > On Tue, Feb 11, 2014 at 11:30 PM, anatoly techtonik <techto...@gmail.com> > wrote: > > On Mon, Feb 3, 2014 at 10:05 PM, Gary Oberbrunner <ga...@oberbrunner.com> > wrote: > >> Hi folks; if we want to get a GSoC project this year, now's the time to > >> think about it. > >> > >> Top of my priority list for a GSoC student would be someone to convert > >> everything to python3, finishing what we've started already. > > > > Can of worms. IMHO. > > > >> Other ideas? > > > > Concentrate on visualizing and documenting how SCons works. Cleaning > > up and opening internals to the public. Enhance test running, bring > > back slaves. List current workflows and tools discovery, research best > > practices and see how the tool discovery should be improved. > > > > Research and document the problem of compiling C programs. > > Research and document the problem of compiling C++ programs. > > Enhance documentation. > > Add more design touches. > > Integrate best practices from other projects. > > > > Fix async subprocess execution with proper handling of std* streams. > > Also integrate with https://github.com/facebook/watchman to speed up > rebuilds (instead of scanning the whole tree again and again). > > -- > anatoly t. > > _______________________________________________ > Scons-dev mailing list > Scons-dev@scons.org > http://two.pairlist.net/mailman/listinfo/scons-dev > > > > _______________________________________________ > Scons-dev mailing list > Scons-dev@scons.org > http://two.pairlist.net/mailman/listinfo/scons-dev > >
_______________________________________________ Scons-dev mailing list Scons-dev@scons.org http://two.pairlist.net/mailman/listinfo/scons-dev