test_recheck revision 1.5 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