xref: /netbsd-src/external/gpl3/gcc/dist/contrib/test_recheck (revision 48fb7bfab72acd4281a53bbee5ccf3f809019e75)
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