| #! /bin/sh |
| |
| # (C) 1998, 1999, 2000, 2002, 2003, 2004, 2007, 2009, 2010 |
| # Free Software Foundation |
| # Originally by Alexandre Oliva <oliva@dcc.unicamp.br> |
| |
| # This script is Free Software, and it can be copied, distributed and |
| # modified as defined in the GNU General Public License. A copy of |
| # its license can be downloaded from http://www.gnu.org/copyleft/gpl.html |
| |
| # This script processes *.{sum,log} files, producing a shell-script |
| # that sends e-mail to the appropriate lists and renames files to |
| # *.sent. It currently handles only gcc, but it should be quite easy |
| # to modify it to handle other packages and its mailing lists. |
| |
| # The scripts assumes it is run in the root directory of the build |
| # tree, and it will include all .sum files it finds in the mail |
| # report. |
| |
| # configure flags are extracted from ./config.status |
| |
| # if the BOOT_CFLAGS environment variable is set, it will be included |
| # in the mail report too. |
| |
| # The usage pattern of this script is as follows: |
| |
| # test_summary | more # so as to observe what should be done |
| |
| # test_summary | sh # so as to actually send e-mail and move log files |
| |
| # It accepts a few command line arguments. For example: |
| if test x"$1" = "x-h"; then |
| cat <<_EOF |
| -o: re-reads logs that have been mailed already (.sum.sent) |
| -t: prevents logs from being renamed |
| -p: prepend specified file (or list of files: -p "a b") to the report |
| -i: append specified file (or list of files: -i "a b") to the report |
| -m: specify the e-mail address to send notes to. An appropriate default |
| should be selected from the log files. |
| -f: force reports to be mailed; if omitted, only reports that differ |
| from the sent.* version are sent. |
| _EOF |
| exit 0 |
| fi |
| |
| # Find a good awk. |
| if test -z "$AWK" ; then |
| for AWK in gawk nawk awk ; do |
| if type $AWK 2>&1 | grep 'not found' > /dev/null 2>&1 ; then |
| : |
| else |
| break |
| fi |
| done |
| fi |
| |
| : ${filesuffix=}; export filesuffix |
| : ${move=true}; export move |
| : ${forcemail=false}; export forcemail |
| while true; do |
| case "$1" in |
| -o) filesuffix=.sent; move=false; : ${mailto=nobody}; shift;; |
| -t) move=false; shift;; |
| -p) prepend_logs=${prepend_logs+"$prepend_logs "}"$2"; shift 2;; |
| -i) append_logs=${append_logs+"$append_logs "}"$2"; shift 2;; |
| -m) mailto=$2; forcemail=true; shift 2;; |
| -f) unset mailto; forcemail=true; shift;; |
| *) break;; |
| esac |
| done |
| : ${mailto="\" address \""}; export mailto |
| files=`find . -name \*.sum$filesuffix -print | sort` |
| anyfile=false anychange=$forcemail && |
| for file in $files; do |
| [ -f $file ] && |
| anyfile=true && |
| { $anychange || |
| anychange=`diff $file.sent $file 2>/dev/null | |
| if test ! -f $file.sent || |
| egrep '^[<>] (XPASS|FAIL)' >/dev/null; then |
| echo true |
| else |
| echo false |
| fi |
| ` |
| } |
| true |
| done && |
| $anyfile && |
| if $forcemail || $anychange; then :; else mailto=nobody; fi && |
| # We use cat instead of listing the files as arguments to AWK because |
| # GNU awk 3.0.0 would break if any of the filenames contained `=' and |
| # was preceded by an invalid ``variable'' name. |
| ( echo @TOPLEVEL_CONFIGURE_ARGUMENTS@ | ./config.status --file=-; cat $files ) | |
| $AWK ' |
| BEGIN { |
| lang=""; configflags = ""; |
| address="gcc-testresults@gcc.gnu.org"; |
| version="gcc"; |
| print "cat <<'"'"'EOF'"'"' |"; |
| '${prepend_logs+" system(\"cat $prepend_logs\"); "}' |
| } |
| NR == 1 { |
| configflags = $0 " "; |
| srcdir = configflags; |
| sub(/\/configure .*/, "", srcdir); |
| if ( system("test -f " srcdir "/LAST_UPDATED") == 0 ) { |
| printf "LAST_UPDATED: "; |
| system("tail -1 " srcdir "/LAST_UPDATED"); |
| print ""; |
| } |
| |
| sub(/^[^ ]*\/configure */, " ", configflags); |
| sub(/,;t t $/, " ", configflags); |
| sub(/ --with-gcc-version-trigger=[^ ]* /, " ", configflags); |
| sub(/ --norecursion /, " ", configflags); |
| sub(/ $/, "", configflags); |
| sub(/^ *$/, " none", configflags); |
| configflags = "configure flags:" configflags; |
| } |
| /^Running target / { print ""; print; } |
| /^Target / { if (host != "") next; else host = $3; } |
| /^Host / && host ~ /^unix\{.*\}$/ { host = $3 " " substr(host, 5); } |
| /^Native / { if (host != "") next; else host = $4; } |
| /^[ ]*=== [^ ]+ tests ===/ { |
| if (lang == "") lang = " "$2" "; else lang = " "; |
| } |
| $2 == "version" { save = $0; $1 = ""; $2 = ""; version = $0; gsub(/^ */, "", version); gsub(/\r$/, "", version); $0 = save; } |
| /===.*Summary/ { print ""; print; blanks=1; } |
| /tests ===/ || /^(Target|Host|Native)/ || $2 == "version" { print; blanks=1; } |
| /^(XPASS|FAIL|UNRESOLVED|WARNING|ERROR|# of )/ { sub ("\r", ""); print; } |
| /^using:/ { print ""; print; print ""; } |
| # dumpall != 0 && /^X?(PASS|FAIL|UNTESTED)|^testcase/ { dumpall=0; } |
| # dumpall != 0 { print; } |
| # /^FAIL/ { dumpall=1; } |
| /^$/ && blanks>0 { print; --blanks; } |
| END { if (lang != "") { |
| print ""; |
| print "Compiler version: " prefix version lang; |
| print "Platform: " host; |
| print configflags; |
| '${BOOT_CFLAGS+'print "BOOT_CFLAGS='"${BOOT_CFLAGS}"'";'}' |
| if (boot_cflags != 0) print boot_cflags; |
| '${append_logs+" system(\"cat $append_logs\"); "}' |
| print "EOF"; |
| print "Mail -s \"Results for " prefix version lang "testsuite on " host "\" '"${mailto}"' &&"; |
| }} |
| { next; } |
| ' | sed "s/\([\`\$\\\\]\)/\\\\\\1/g" && |
| if $move; then |
| for file in $files `ls -1 $files | sed s/sum$/log/`; do |
| [ -f $file ] && echo "mv `${PWDCMD-pwd}`/$file `${PWDCMD-pwd}`/$file.sent &&" |
| done |
| fi && |
| echo true |
| exit 0 |