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