11debfc3dSmrg#! /bin/sh 21debfc3dSmrg 31debfc3dSmrg# (C) 1998, 1999, 2000, 2002, 2003, 2004, 2007, 2009, 2010 41debfc3dSmrg# Free Software Foundation 51debfc3dSmrg# Originally by Alexandre Oliva <oliva@dcc.unicamp.br> 61debfc3dSmrg 71debfc3dSmrg# This script is Free Software, and it can be copied, distributed and 81debfc3dSmrg# modified as defined in the GNU General Public License. A copy of 91debfc3dSmrg# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html 101debfc3dSmrg 111debfc3dSmrg# This script processes *.{sum,log} files, producing a shell-script 121debfc3dSmrg# that sends e-mail to the appropriate lists and renames files to 131debfc3dSmrg# *.sent. It currently handles only gcc, but it should be quite easy 141debfc3dSmrg# to modify it to handle other packages and its mailing lists. 151debfc3dSmrg 161debfc3dSmrg# The scripts assumes it is run in the root directory of the build 171debfc3dSmrg# tree, and it will include all .sum files it finds in the mail 181debfc3dSmrg# report. 191debfc3dSmrg 201debfc3dSmrg# configure flags are extracted from ./config.status 211debfc3dSmrg 221debfc3dSmrg# if the BOOT_CFLAGS environment variable is set, it will be included 231debfc3dSmrg# in the mail report too. 241debfc3dSmrg 251debfc3dSmrg# The usage pattern of this script is as follows: 261debfc3dSmrg 271debfc3dSmrg# test_summary | more # so as to observe what should be done 281debfc3dSmrg 291debfc3dSmrg# test_summary | sh # so as to actually send e-mail and move log files 301debfc3dSmrg 311debfc3dSmrg# It accepts a few command line arguments. For example: 321debfc3dSmrgif test x"$1" = "x-h"; then 331debfc3dSmrg cat <<_EOF 341debfc3dSmrg -o: re-reads logs that have been mailed already (.sum.sent) 351debfc3dSmrg -t: prevents logs from being renamed 361debfc3dSmrg -p: prepend specified file (or list of files: -p "a b") to the report 371debfc3dSmrg -i: append specified file (or list of files: -i "a b") to the report 381debfc3dSmrg -m: specify the e-mail address to send notes to. An appropriate default 391debfc3dSmrg should be selected from the log files. 401debfc3dSmrg -f: force reports to be mailed; if omitted, only reports that differ 411debfc3dSmrg from the sent.* version are sent. 421debfc3dSmrg_EOF 431debfc3dSmrg exit 0 441debfc3dSmrgfi 451debfc3dSmrg 461debfc3dSmrg# Find a good awk. 471debfc3dSmrgif test -z "$AWK" ; then 481debfc3dSmrg for AWK in gawk nawk awk ; do 491debfc3dSmrg if type $AWK 2>&1 | grep 'not found' > /dev/null 2>&1 ; then 501debfc3dSmrg : 511debfc3dSmrg else 521debfc3dSmrg break 531debfc3dSmrg fi 541debfc3dSmrg done 551debfc3dSmrgfi 561debfc3dSmrg 571debfc3dSmrg: ${filesuffix=}; export filesuffix 581debfc3dSmrg: ${move=true}; export move 591debfc3dSmrg: ${forcemail=false}; export forcemail 601debfc3dSmrgwhile true; do 611debfc3dSmrg case "$1" in 621debfc3dSmrg -o) filesuffix=.sent; move=false; : ${mailto=nobody}; shift;; 631debfc3dSmrg -t) move=false; shift;; 641debfc3dSmrg -p) prepend_logs=${prepend_logs+"$prepend_logs "}"$2"; shift 2;; 651debfc3dSmrg -i) append_logs=${append_logs+"$append_logs "}"$2"; shift 2;; 661debfc3dSmrg -m) mailto=$2; forcemail=true; shift 2;; 671debfc3dSmrg -f) unset mailto; forcemail=true; shift;; 681debfc3dSmrg *) break;; 691debfc3dSmrg esac 701debfc3dSmrgdone 711debfc3dSmrg: ${mailto="\" address \""}; export mailto 721debfc3dSmrgfiles=`find . -name \*.sum$filesuffix -print | sort` 731debfc3dSmrganyfile=false anychange=$forcemail && 741debfc3dSmrgfor file in $files; do 751debfc3dSmrg [ -f $file ] && 761debfc3dSmrg anyfile=true && 771debfc3dSmrg { $anychange || 781debfc3dSmrg anychange=`diff $file.sent $file 2>/dev/null | 791debfc3dSmrg if test ! -f $file.sent || 801debfc3dSmrg egrep '^[<>] (XPASS|FAIL)' >/dev/null; then 811debfc3dSmrg echo true 821debfc3dSmrg else 831debfc3dSmrg echo false 841debfc3dSmrg fi 851debfc3dSmrg ` 861debfc3dSmrg } 871debfc3dSmrg true 881debfc3dSmrgdone && 891debfc3dSmrg$anyfile && 901debfc3dSmrgif $forcemail || $anychange; then :; else mailto=nobody; fi && 911debfc3dSmrg# We use cat instead of listing the files as arguments to AWK because 921debfc3dSmrg# GNU awk 3.0.0 would break if any of the filenames contained `=' and 931debfc3dSmrg# was preceded by an invalid ``variable'' name. 941debfc3dSmrg( echo @TOPLEVEL_CONFIGURE_ARGUMENTS@ | ./config.status --file=-; cat $files ) | 951debfc3dSmrg$AWK ' 961debfc3dSmrgBEGIN { 971debfc3dSmrg lang=""; configflags = ""; 981debfc3dSmrg address="gcc-testresults@gcc.gnu.org"; 991debfc3dSmrg version="gcc"; 1001debfc3dSmrg print "cat <<'"'"'EOF'"'"' |"; 1011debfc3dSmrg'${prepend_logs+" system(\"cat $prepend_logs\"); "}' 1021debfc3dSmrg} 1031debfc3dSmrgNR == 1 { 1041debfc3dSmrg configflags = $0 " "; 1051debfc3dSmrg srcdir = configflags; 106*a2dc1f3fSmrg sub(/\/configure\047? .*/, "", srcdir); 107*a2dc1f3fSmrg sub(/^\047/, "", srcdir); 1081debfc3dSmrg if ( system("test -f " srcdir "/LAST_UPDATED") == 0 ) { 1091debfc3dSmrg printf "LAST_UPDATED: "; 1101debfc3dSmrg system("tail -1 " srcdir "/LAST_UPDATED"); 1111debfc3dSmrg print ""; 1121debfc3dSmrg } 1131debfc3dSmrg 114*a2dc1f3fSmrg sub(/^[^ ]*\/configure\047? */, " ", configflags); 1151debfc3dSmrg sub(/,;t t $/, " ", configflags); 1161debfc3dSmrg sub(/ --with-gcc-version-trigger=[^ ]* /, " ", configflags); 1171debfc3dSmrg sub(/ --norecursion /, " ", configflags); 1181debfc3dSmrg sub(/ $/, "", configflags); 1191debfc3dSmrg sub(/^ *$/, " none", configflags); 1201debfc3dSmrg configflags = "configure flags:" configflags; 1211debfc3dSmrg} 1221debfc3dSmrg/^Running target / { print ""; print; } 1231debfc3dSmrg/^Target / { if (host != "") next; else host = $3; } 1241debfc3dSmrg/^Host / && host ~ /^unix\{.*\}$/ { host = $3 " " substr(host, 5); } 1251debfc3dSmrg/^Native / { if (host != "") next; else host = $4; } 1261debfc3dSmrg/^[ ]*=== [^ ]+ tests ===/ { 1271debfc3dSmrg if (lang == "") lang = " "$2" "; else lang = " "; 1281debfc3dSmrg} 1291debfc3dSmrg$2 == "version" { save = $0; $1 = ""; $2 = ""; version = $0; gsub(/^ */, "", version); gsub(/\r$/, "", version); $0 = save; } 130a05ac97eSmrg/===.*Summary/ { print ""; print; blanks=1; } 1311debfc3dSmrg/tests ===/ || /^(Target|Host|Native)/ || $2 == "version" { print; blanks=1; } 1321debfc3dSmrg/^(XPASS|FAIL|UNRESOLVED|WARNING|ERROR|# of )/ { sub ("\r", ""); print; } 1331debfc3dSmrg/^using:/ { print ""; print; print ""; } 1341debfc3dSmrg# dumpall != 0 && /^X?(PASS|FAIL|UNTESTED)|^testcase/ { dumpall=0; } 1351debfc3dSmrg# dumpall != 0 { print; } 1361debfc3dSmrg# /^FAIL/ { dumpall=1; } 1371debfc3dSmrg/^$/ && blanks>0 { print; --blanks; } 1381debfc3dSmrgEND { if (lang != "") { 1391debfc3dSmrg print ""; 1401debfc3dSmrg print "Compiler version: " prefix version lang; 1411debfc3dSmrg print "Platform: " host; 1421debfc3dSmrg print configflags; 1431debfc3dSmrg '${BOOT_CFLAGS+'print "BOOT_CFLAGS='"${BOOT_CFLAGS}"'";'}' 1441debfc3dSmrg if (boot_cflags != 0) print boot_cflags; 1451debfc3dSmrg'${append_logs+" system(\"cat $append_logs\"); "}' 1461debfc3dSmrg print "EOF"; 1471debfc3dSmrg print "Mail -s \"Results for " prefix version lang "testsuite on " host "\" '"${mailto}"' &&"; 1481debfc3dSmrg}} 1491debfc3dSmrg{ next; } 1501debfc3dSmrg' | sed "s/\([\`\$\\\\]\)/\\\\\\1/g" && 1511debfc3dSmrgif $move; then 1521debfc3dSmrg for file in $files `ls -1 $files | sed s/sum$/log/`; do 1531debfc3dSmrg [ -f $file ] && echo "mv `${PWDCMD-pwd}`/$file `${PWDCMD-pwd}`/$file.sent &&" 1541debfc3dSmrg done 1551debfc3dSmrgfi && 1561debfc3dSmrgecho true 1571debfc3dSmrgexit 0 158