1 1.1 mrg #! /bin/sh 2 1.1 mrg 3 1.1 mrg # (C) 2010 Free Software Foundation 4 1.1 mrg # Written by Ralf Wildenhues <Ralf.Wildenhues (at] gmx.de>. 5 1.1 mrg 6 1.1 mrg # This script is Free Software, and it can be copied, distributed and 7 1.1 mrg # modified as defined in the GNU General Public License. A copy of 8 1.1 mrg # its license can be downloaded from http://www.gnu.org/copyleft/gpl.html 9 1.1 mrg 10 1.1 mrg PROGNAME=test_recheck 11 1.1 mrg 12 1.1 mrg usage () 13 1.1 mrg { 14 1.1 mrg cat <<EOF 15 1.1 mrg Usage: $PROGNAME [-h] [-n] DIR|FILE.sum... 16 1.1 mrg 17 1.1 mrg Rerun unsuccessful tests for testsuites below DIR or for FILE.sum. 18 1.1 mrg 19 1.1 mrg -h display this help and exit 20 1.1 mrg -n dry run, only show what would be run 21 1.1 mrg EOF 22 1.1 mrg exit $? 23 1.1 mrg } 24 1.1 mrg 25 1.1 mrg error () 26 1.1 mrg { 27 1.1 mrg echo "$@" >&2 28 1.1 mrg exit 1 29 1.1 mrg } 30 1.1 mrg 31 1.1 mrg dry= 32 1.1 mrg for arg 33 1.1 mrg do 34 1.1 mrg case $arg in 35 1.1 mrg -h | \?) usage ;; 36 1.1 mrg -n) dry=:; shift ;; 37 1.1 mrg -*) error "unknown argument $arg" ;; 38 1.1 mrg *) break ;; 39 1.1 mrg esac 40 1.1 mrg done 41 1.1 mrg test $# -gt 0 || usage 42 1.1 mrg 43 1.1 mrg # Find a good awk. 44 1.1 mrg if test -z "$AWK" ; then 45 1.1 mrg for AWK in gawk nawk awk 46 1.1 mrg do 47 1.1 mrg if type $AWK 2>&1 | grep 'not found' > /dev/null 2>&1 ; then 48 1.1 mrg : 49 1.1 mrg else 50 1.1 mrg break 51 1.1 mrg fi 52 1.1 mrg done 53 1.1 mrg fi 54 1.1 mrg 55 1.1 mrg : ${MAKE=make} 56 1.1 mrg : ${filesuffix=} 57 1.1 mrg cwd=`pwd` 58 1.1 mrg files=`find "$@" -name \*.sum$filesuffix -print | grep testsuite | sort` 59 1.1 mrg st=0 60 1.1 mrg 61 1.1 mrg for file in $files; do 62 1.1 mrg dir=`echo $file | sed 's,/[^/]*$,,'` 63 1.1 mrg base=`echo $file | sed 's,.*/,,; s,\.sum$,,'` 64 1.1 mrg flags=`$AWK ' 65 1.1 mrg /^Running .*\.exp \.\.\./ { 66 1.1 mrg if (expfile != "" && tests != "") 67 1.1 mrg printf (" %s=\"%s\"", expfile, tests) 68 1.1 mrg expfile = $2 69 1.1 mrg sub (/^[^ ]*\//, "", expfile) 70 1.1 mrg sep = "" 71 1.1 mrg tests = "" 72 1.1 mrg } 73 1.1 mrg /^(FAIL|XPASS|UNRESOLVED|WARNING|ERROR): / { 74 1.1 mrg if (test != $2 "" && $2 != "" ) { 75 1.1 mrg test = $2 76 1.1 mrg tests = tests sep test 77 1.1 mrg sep = " " 78 1.1 mrg } 79 1.1 mrg } 80 1.1 mrg END { 81 1.1 mrg if (expfile != "" && tests != "") 82 1.1 mrg printf (" %s=\"%s\"", expfile, tests) 83 1.1 mrg }' $file` 84 1.1 mrg if test -n "$flags"; then 85 1.1 mrg cd $dir 86 1.1 mrg amflags= 87 1.1 mrg if grep '^AM_RUNTESTFLAGS =' Makefile >/dev/null 2>&1; then 88 1.1 mrg amflags=`echo 'print-runtestflags: ; @echo $(AM_RUNTESTFLAGS)' \ 89 1.1 mrg | ${MAKE} -s -f Makefile -f - print-runtestflags` 90 1.1 mrg fi 91 1.1 mrg echo "(cd $dir && runtest $amflags --tool $base $flags)" 92 1.1 mrg if test -z "$dry"; then 93 1.1 mrg eval runtest --tool $base $flags || st=$? 94 1.1 mrg fi 95 1.1 mrg cd "$cwd" 96 1.1 mrg fi 97 1.1 mrg done 98 1.1 mrg exit $st 99