LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* coloring stdout && stderr, small kbuild example
@ 2008-04-09 15:02 Oleg Verych
2008-04-09 15:14 ` Bernd Petrovitsch
2008-04-09 15:39 ` coloring stdout && stderr, small kbuild example Oleg Verych
0 siblings, 2 replies; 7+ messages in thread
From: Oleg Verych @ 2008-04-09 15:02 UTC (permalink / raw)
To: Andrew Morton; +Cc: Linux Kernel Mailing List, kbuild devel list
Those boring never-ending builds...
Can some dualCPU power be spent, if building is interactive (i.e. sent to
terminal), to have them a bit colored?
My last rant about "colored printk()" led away from kernel developers
and their solutions. But now, let me share something.
(maybe some terminal emulators have more colors, finally?) usage:
olecom@flower:/tmp/blinux$ stty -tostop ; mkfifo stdout.pipe stderr.pipe
olecom@flower:/tmp/blinux$ sh ./colorize-linux-build.sh <stdout.pipe &
[1] 22070
olecom@flower:/tmp/blinux$ COLORIZERR=y sh colorize-linux-build.sh <stderr.pipe &
[2] 22145
olecom@flower:/tmp/blinux$
olecom@flower:/tmp/blinux$ LANG=C make >stdout.pipe 2>stderr.pipe
make -C /mnt/zdev0/linux-2.6 O=/dev/shm/blinux/.
Using /mnt/zdev0/linux-2.6 as source for kernel
GEN /dev/shm/blinux/Makefile
CHK include/linux/version.h
CHK include/linux/utsrelease.h
CALL /mnt/zdev0/linux-2.6/scripts/checksyscalls.sh
CHK include/linux/compile.h
VDSOSYM arch/x86/vdso/vdso-syms.lds
VDSOSYM arch/x86/vdso/vdso32-syscall-syms.lds
VDSOSYM arch/x86/vdso/vdso32-sysenter-syms.lds
VDSOSYM arch/x86/vdso/vdso32-syms.lds
LD arch/x86/vdso/built-in.o
CC mm/memory.o
olecom@flower:/tmp/blinux$
make[3]: *** [mm/memory.o] Interrupt
make[2]: *** [mm] Interrupt
make[1]: *** [sub-make] Interrupt
make: *** [all] Interrupt
[1]- Done sh ./colorize-linux-build.sh <stdout.pipe
[2]+ Done COLORIZERR=yes sh colorize-linux-build.sh <stderr.pipe
olecom@flower:/tmp/blinux$
________________________________________________________________________
#!/bin/sh
# colorize linux build
# Time-stamp: Wed Apr 9 13:78:13 CEST 2008 olecom@flower.upol.cRAzY
color() {
# $1 -- regex
# $2 -- color code
# $3 -- next color code (default is $D)
# $4 -- regex match number (s///flags)
printf %s "`eval echo $TERMINAL_OUTPUT`"
}
# for tty
[ -t 1 ] && {
# escape symbol
E=`printf '\033'`
# default fg && bg rendering ; reset attributes
D="7" ; RESET="$E[0m"
# basic attributes (reset bg color and bold, set fg color)
V="$E[40;22;3"
# wrap regex with color ; goto exit
TERMINAL_OUTPUT='{s-"$1"-"$V$2m&$V${3-'$D'}m"-$4 ";" b}'
}
# process stdout
[ -z "$COLORIZERR" ] && {
sed "
/CC/` color CC '6;1'`
/LD/` color LD '2;1'`
/AS/` color AS '5;1'`
/GEN/`color GEN '2;1'`
/UPD/`color UPD '2;1'`
/CHK/`color CHK '3;1'`
/CA/` color CALL '6'`
s-^-${V}2m-
"
printf "$RESET
"
}
# process stderr (once)
while read ERROR
do OUT=$OUT'
'$ERROR
done
printf "\033[1;37;41m$OUT$RESET
"
exit
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: coloring stdout && stderr, small kbuild example
2008-04-09 15:02 coloring stdout && stderr, small kbuild example Oleg Verych
@ 2008-04-09 15:14 ` Bernd Petrovitsch
2008-04-09 15:40 ` Oleg Verych
` (2 more replies)
2008-04-09 15:39 ` coloring stdout && stderr, small kbuild example Oleg Verych
1 sibling, 3 replies; 7+ messages in thread
From: Bernd Petrovitsch @ 2008-04-09 15:14 UTC (permalink / raw)
To: Oleg Verych; +Cc: Andrew Morton, Linux Kernel Mailing List, kbuild devel list
On Mit, 2008-04-09 at 17:02 +0200, Oleg Verych wrote:
> Those boring never-ending builds...
>
> Can some dualCPU power be spent, if building is interactive (i.e. sent to
> terminal), to have them a bit colored?
>
> My last rant about "colored printk()" led away from kernel developers
> and their solutions. But now, let me share something.
I don't know if it's of any use for you but there is already
*) color-make - http://bre.klaki.net/programs/colormake/ - and
*) color-gcc - http://schlueters.de/colorgcc.html -
out there.
Bernd
--
Firmix Software GmbH http://www.firmix.at/
mobil: +43 664 4416156 fax: +43 1 7890849-55
Embedded Linux Development and Services
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: coloring stdout && stderr, small kbuild example
2008-04-09 15:02 coloring stdout && stderr, small kbuild example Oleg Verych
2008-04-09 15:14 ` Bernd Petrovitsch
@ 2008-04-09 15:39 ` Oleg Verych
1 sibling, 0 replies; 7+ messages in thread
From: Oleg Verych @ 2008-04-09 15:39 UTC (permalink / raw)
To: Andrew Morton; +Cc: Linux Kernel Mailing List, kbuild devel list
Forgot, email can be piped ('|' in mutt) to have script ready
to this line: sed '1,/^___/d' >/tmp/colorize-linux-build.sh'
--
sed 'sed && sh + olecom = love' << ''
http://kernelnewbies.org/olecom
-o--=O`C
#oo'L O
<___=E M
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: coloring stdout && stderr, small kbuild example
2008-04-09 15:14 ` Bernd Petrovitsch
@ 2008-04-09 15:40 ` Oleg Verych
2008-04-09 17:39 ` Oleg Verych
2008-04-12 18:32 ` Pavel Machek
2 siblings, 0 replies; 7+ messages in thread
From: Oleg Verych @ 2008-04-09 15:40 UTC (permalink / raw)
To: Bernd Petrovitsch
Cc: Andrew Morton, Linux Kernel Mailing List, kbuild devel list
> I don't know if it's of any use for you but there is already
> *) color-make - http://bre.klaki.net/programs/colormake/ - and
> *) color-gcc - http://schlueters.de/colorgcc.html -
> out there.
Yea (subject: small kbuild example).
_____
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: coloring stdout && stderr, small kbuild example
2008-04-09 15:14 ` Bernd Petrovitsch
2008-04-09 15:40 ` Oleg Verych
@ 2008-04-09 17:39 ` Oleg Verych
2008-04-12 18:32 ` Pavel Machek
2 siblings, 0 replies; 7+ messages in thread
From: Oleg Verych @ 2008-04-09 17:39 UTC (permalink / raw)
To: Bernd Petrovitsch; +Cc: Linux Kernel Mailing List, kbuild devel list
Time flies...
> > My last rant about "colored printk()" led away from kernel developers
> > and their solutions. But now, let me share something.
That was about "The True Kernel Developer's Way to Coloring"
by Jonathan Corbet October 9, 2007 http://lwn.net/Articles/253726/
Bernd Petrovitsch @ Wed, Apr 09, 2008 at 05:14:00PM +0200:
> I don't know if it's of any use for you but there is already
> *) color-make - http://bre.klaki.net/programs/colormake/ - and
> *) color-gcc - http://schlueters.de/colorgcc.html -
> out there.
Please, show those to http://udrepper.livejournal.com/17109.html
`perl` is more welcome in Debian, btw.
Free versions of color_proc_cpuinfo && color_meminfo:
TERMINAL_OUTPUT='s-"$1"-"$V$2m&$V${3-'$D'}m"-$4'
`color '[^:]*' 4 3`
`color : 3 2`
`color AMD 6 2`
`color Intel 6 2`
`color Athlon '6;44' 2`
`color Pentium '6;44' 2`
Invent Your Own Easily(R)
--
sed 'sed && sh + olecom = love' << ''
-o--=O`C
#oo'L O
<___=E M
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: coloring stdout && stderr, small kbuild example
2008-04-09 15:14 ` Bernd Petrovitsch
2008-04-09 15:40 ` Oleg Verych
2008-04-09 17:39 ` Oleg Verych
@ 2008-04-12 18:32 ` Pavel Machek
2008-04-13 15:27 ` lide: linux ide, just concept idea (Re: coloring stdout && stderr, small kbuild example) Oleg Verych
2 siblings, 1 reply; 7+ messages in thread
From: Pavel Machek @ 2008-04-12 18:32 UTC (permalink / raw)
To: Bernd Petrovitsch
Cc: Oleg Verych, Andrew Morton, Linux Kernel Mailing List, kbuild devel list
Hi!
> > Those boring never-ending builds...
> >
> > Can some dualCPU power be spent, if building is interactive (i.e. sent to
> > terminal), to have them a bit colored?
> >
> > My last rant about "colored printk()" led away from kernel developers
> > and their solutions. But now, let me share something.
>
> I don't know if it's of any use for you but there is already
> *) color-make - http://bre.klaki.net/programs/colormake/ - and
> *) color-gcc - http://schlueters.de/colorgcc.html -
> out there.
icecc seems to do the coloring, too...
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* lide: linux ide, just concept idea (Re: coloring stdout && stderr, small kbuild example)
2008-04-12 18:32 ` Pavel Machek
@ 2008-04-13 15:27 ` Oleg Verych
0 siblings, 0 replies; 7+ messages in thread
From: Oleg Verych @ 2008-04-13 15:27 UTC (permalink / raw)
To: Pavel Machek
Cc: Bernd Petrovitsch, Andrew Morton, Linux Kernel Mailing List,
kbuild devel list
Hallo.
Pavel Machek @ Sat, Apr 12, 2008 at 7:32 PM:
> icecc seems to do the coloring, too...
This one? http://en.opensuse.org/Icecream
,--
|0.7.3 (r552930):
|[..]
| - builtin colorgcc
`--
Now i'm being pointed to C++ one. Alright!
== Check this out then. ==
Linus says, make it working somehow and release, so...
I'd like to have it in menuconfig window running gcc on every */M
(i want alot more, without ncurses, perl, C++ using kernel, sh, sed)
extract$ sed '1,/^__/d' >/tmp/lide.sh
use (in OBJDIR)$ clear ; sh /tmp/lide.sh kdefc
kdefc is a user friendly thing for `make defconfig`
ksecmis is one for funny `make CONFIG_DEBUG_SECTION_MISMATCH=y`
any ordinary command will work, no command -- interactive mode.
Coloring and painting is for children, big daddies usually don't get it,
as well as most basic userspace possible(: /bin/sh ).
(any tty braindamage is a cool tty design from 70s, not sh + sed)
--
Text processing(for newbies): http://kernelnewbies.org/olecom
Tech VA: http://kerneltrap.org/blog/9104
-o--=O`C
#oo'L O
<___=E M
________
#!/bin/sh
# linux integrated development environment (without text editor/pager)
# Time-stamp: Sun Apr 13 16:79:15 CEST 2008 olecom@flower.upol.cRAzY
[ "$lideRELOAD" ] || {
[ -t 1 ] || exec dd count=1 # notty
#sed(){
# busybox -- cryptic errors from internal `sed`
# sed -- dash crashes
#}
stty -tostop
rm -rf /tmp/stderr.pipe /tmp/stdout.pipe
mkfifo /tmp/stderr.pipe /tmp/stdout.pipe
# /tmp/stderr.txt is for `tee ` and off-line pager
}
set +i -e
# own syntax:
# $E is 'ESC[' = '\233'
# fork tty service
sed "s-[$]E-`printf '\233'`-g" << '# here' | /bin/sh -s &
# ${E} is ESC ; Ignored symbol for stderr prefix
E=`printf '\033'` ; I=`printf '\177'`
# default fg;bg rendering ; reset attributes
D="7" ; RESET="$E0m"
# basic attributes (reset bg color and bold, set fg color)
V="$E40;22;3"
# wrap regex, multiple times per line
T=\''\"s-$1-$V$2m&$V${3-'$D'}m-$4;\"'\'
eval '
color_lide() {
# wrap regex with color
# $1 -- regex ; $2 -- color code ; $3 -- next color code (default is $D)
# $4 -- s///flags
printf %s "`eval echo '"$T"'`"
}
scolor_lide() {
# color() with speed optimizing jump, thus, one match in line
printf %s "{`eval echo '"$T"'` ; b_$REGION}"
}
'
T=color_lide
## setup of regions
# main load: stdout region, content is cut on width = $W
# small load: stderr, no cut; stderr out is rare, thus full lines
# parameters: all have content line limits (*LINES - 1)
# *ORIGIN is a row placing (FIXME: add colons)
# console output concurrency: whole region is out with cursor move
# (no save/restore of it)
outLINES=10 ; outORIGIN=1 ; W=77
errLINES=14 ; errORIGIN=$(($outLINES + 5))
PMT="$E$(($outLINES + 3));1Hprompt:"
sed_GET_CHUNK=':addnl ; $!{ s $ '$EK' ; N ; baddnl }'
[ "$lideRELOAD" ] || {
sed "# sed does final new lines here
$sed_GET_CHUNK
s ,-- $E$outORIGIN;1H& ;
s/ . -/$E30m&/g
s 0 1 ; s 0 2 ; s 0 3 ; s 0 4 ; s 0 5 ; s 0 6 ;
s-___-$E$errORIGIN;1H$E1;34;40m&$E31m-1
s-___-$E34m&$E31m-2
s/ _ /$E37m&$E31m/g
" << "---"
,-- kbuild: s - t - d - o - u - t --
|
|
`--
___ kbuild: s _ t _ d _ e _ r _ r ___
---
printf "$PMT\n"
}
# shift title string
outORIGIN=$(($outORIGIN + 1))
errORIGIN=$(($errORIGIN + 1))
## handling of content
region(){
# buffered output with no more than LINES in continuously running `sed`
# $1 -- type (out, stderr etc.) ; $2 -- region''s final line decoration
eval 'printf %s "
# get prev. buffer; append current line
x ; G
# remove overflowed head (this sed''s something:)
$'"$1"'LINES,19810702s-^[^\\n]*\\n--
#$'"$1"'LINES,\$s-[^\\n]*\\n--
# last line --^^ address yields debbug#475464: lost cycle
# save buffer; move to ${1}ORIGIN and print whole region
h ; s .* $E$'"$1"'ORIGIN;1H&\\n'"$2"' ;
"'
}
lideSYNTAX="
/[.,%/;:]/s [.,%/;:] $E1;36m&$E22;3${D}m g
/'/s-'\([^']*\)'-$E35m'$E36m\1$E35m'$E3${D}m-g"'
/"/s-"\([^"]*\)"-$E1;32;40m"$E22;39;44m\1$E1;32;40m"$E22;3'$D'm-g'"
/(/s-(\([^)]*\))-$E1;33m($E22;3${D}m\1$E1;33m)$E22;3${D}m-g
"
REGION=err
sed_STDERR="
$lideSYNTAX
# hard error
/^$I/s-.*-$E1;5;41;37m&${V}1;25;m$EK-
# ordinary
/^$I/!s-.*-&$EK-
# example of being freindly to kernel developers and kbuild users
/make /{s~make CONFIG_DEBUG_SECTION_MISMATCH=y~ksecmis~;b_$REGION}
# UPPER symbols:
`$T '[[:upper:]_]\{3,\}' '2' '1' g`
/[Ww][Aa][Rr]/`$T '[Ww][Aa][Rr][Nn][Ii][Nn][Gg]' '7;41;1' '1;40;22'`
/:/`$T '^[^:]*:' '2;1' $D`
:_$REGION
`region $REGION '$PMT'`
"
REGION=out
sed_OUT="
s-\(.\{0,$W\}\).*-|\1$EK-
/^|#/`s$T '#.*' '3'`
$lideSYNTAX
/:/`$T '^[^:]*:' '2;1' $D`
/ CC/`s$T CC '6;1'`
/ LD/`s$T LD '2;1'`
/ AS/`s$T AS '5;1'`
/ GE/`s$T GEN '2;1'`
/ UP/`s$T UPD '2;1'`
/ CH/`s$T CHK '3;1'`
/ CA/`s$T CALL '6'`
s-^-${V}${D}m-
:_$REGION
`region $REGION '\\\`--$PMT'`
"
unset lideSYNTAX
trap '
printf "$RESET$E$(($errORIGIN + $errLINES))H"
kill -1 $JJ ; kill -KILL $JJ
' EXIT HUP INT TERM QUIT
# close script's input, remove own stderr
exec 0<&- 2>/dev/null
tee -a /tmp/stderr.txt </tmp/stderr.pipe |
sed -u "$sed_STDERR" & JJ=$!' '$JJ
sed "$sed_OUT" </tmp/stdout.pipe #>out.pipe & JJ=$!' '$JJ
exit
# stdout/stderr coloring daemon ends
# here
JJ=$! # save its pid
unset lideRELOAD
HISTLINE=:
lideCHECK_EXIT_STATUS='
S=$? ; Ex=Ex ; [ 0 -ne "$S" ] && Ex="\177"$Ex
sleep 1 # fix braindamage due to cuncurrency, buffers, other tty crap
printf 1>&2 "${Ex}it status: $S\n"'
trap "$lideCHECK_EXIT_STATUS"'"user interface is over\n"
kill -1 $JJ
rm -rf /tmp/stderr.pipe /tmp/stdout.pipe
exit
' EXIT HUP QUIT
trap 'echo got SIGINT or SIGTERM 1>&2' INT TERM
exec 1>/tmp/stdout.pipe 2>/tmp/stderr.pipe
set +e
echo '# examples of being freindly to kernel developers and kbuild users:
commands: ksecmis ; kdefc ; (add yours) ; `make` crap ; any other
leave: hell (`exit` is ignored)
'
lideBUILTINS="
ksecmis) LINE='make CONFIG_DEBUG_SECTION_MISMATCH=y' ;;
kdefc) LINE='make defconfig' ;;
# add yours here
"
eval '
batch() {
case $1 in
'"$lideBUILTINS"'
*) LINE=\"\$@\" ;;
esac
eval "echo \"$LINE\" ; $LINE ; "'"$lideCHECK_EXIT_STATUS"'
}
interactive() {
while read LINE
do echo "$LINE"
case $LINE in
'"$lideBUILTINS"'
hell) LINE=break ;;
exit) LINE="" ;;
#reload) kill -1 $JJ ; export lideRELOAD=y ; exec /bin/sh $0 ;;
esac
eval "${LINE:-$HISTLINE} ; "'"$lideCHECK_EXIT_STATUS"'
[ "$LINE" ] && HISTLINE=$LINE
done
}
'
# `eval` must complete itself, no infinite loops inside
unset lideCHECK_EXIT_STATUS lideBUILTINS
[ -z "$1" ] && interactive || batch "$@"
sed 'sed && sh + olecom = love' << '' >&2
WTFPLed-by: olecom
see license: http://sam.zoy.org/wtfpl/
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-04-13 15:07 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-09 15:02 coloring stdout && stderr, small kbuild example Oleg Verych
2008-04-09 15:14 ` Bernd Petrovitsch
2008-04-09 15:40 ` Oleg Verych
2008-04-09 17:39 ` Oleg Verych
2008-04-12 18:32 ` Pavel Machek
2008-04-13 15:27 ` lide: linux ide, just concept idea (Re: coloring stdout && stderr, small kbuild example) Oleg Verych
2008-04-09 15:39 ` coloring stdout && stderr, small kbuild example Oleg Verych
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).