# Summarize the installation log, printing errors along with | |
# enough context to make sense of them. | |
BEGIN { | |
# print verbose | |
cd = "" | |
out = "/dev/stdout" | |
statuslen = 0 | |
debug = 0 | |
updates = "/dev/stderr" | |
} | |
function myflush(f) | |
{ | |
# fflush is not available on sun, but system("") appears to work everywhere | |
system("") | |
} | |
function clearstatus(noflush, i) | |
{ | |
if(!updates) | |
return | |
for(i=0; i<statuslen; i++) | |
printf("\b \b") >updates | |
statuslen = 0 | |
if(!noflush) | |
myflush(updates) | |
} | |
function status(s) | |
{ | |
if(!updates) | |
return | |
clearstatus(1) | |
printf(" %s ", s) >updates | |
statuslen = length(s)+5 | |
myflush(updates) | |
} | |
debug!=0 { print "# " $0 } | |
/^$/ { next } | |
/^echo cd / { next } | |
/^\+\+ pwd/ { next } | |
/^\* /{ | |
clearstatus() | |
if(debug) print "% mark" | |
print >out | |
myflush(out) | |
if(copy){ | |
print >copy | |
myflush(copy) | |
} | |
cmd = "" | |
printtabs = 1 # print indented lines immediately following | |
errors = 0 | |
next | |
} | |
/^ / && printtabs!=0 { | |
clearstatus() | |
print >out | |
myflush(out) | |
if(copy){ | |
print >copy | |
myflush(copy) | |
} | |
next | |
} | |
{ printtabs = 0 } | |
/^(9a|9c|9l|9ar|9?install|cat pdf|cp|rm|mv|mk|9 yacc|9 lex|9 rc|do|for i|if|mk|gcc|cpp|cp|sh|cmp|rc|\.\/o)($|[^:])/ { | |
if(debug) print "% start" | |
errors = 0 | |
cmd = "" | |
if(!verbose) | |
cmd = cmd cd | |
cmd = cmd $0 "\n" | |
next | |
} | |
/^cd .+; mk .+/ && !verbose { | |
dir = $2 | |
sub(/;$/, "", dir) | |
status(dir " mk " $4) | |
} | |
/^cd / { | |
if(debug) print "% cd" | |
errors = 0 | |
if(verbose){ | |
print >out | |
myflush(out) | |
if(copy){ | |
print >copy | |
myflush(copy) | |
} | |
} | |
cd = $0 "\n" | |
cmd = "" | |
next | |
} | |
{ | |
cmd = cmd $0 "\n" | |
} | |
errors != 0 { | |
clearstatus() | |
if(debug) print "% errors" | |
printf "%s", cmd >out | |
myflush(out) | |
if(copy){ | |
printf "%s", cmd >copy | |
myflush(copy) | |
} | |
cmd = "" | |
next | |
} | |
/^( |then|else|fi|done|[ar] - [^ ]*\.o$)/ { | |
next | |
} | |
/^(conflicts:)/ { | |
if(debug) print "% skip1" | |
next | |
} | |
/(up to date|nothing to see|assuming it will be|loop not entered)/ { | |
next | |
} | |
/(nodes\(%e\)|packed transitions)/ { | |
if(debug) print "% skip2" | |
next | |
} | |
{ | |
# unexpected line | |
clearstatus() | |
if(debug) print "% errors1" | |
errors = 1 | |
printf ">>> %s", cmd >out | |
myflush(out) | |
if(copy){ | |
printf ">>> %s", cmd >copy | |
myflush(copy) | |
} | |
cmd = "" | |
} | |