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