xref: /petsc/config/petsc_harness.sh (revision 29921a8f05c7587ede8fed409dd5e8ff5aa91522)
1*29921a8fSScott Kruger
2*29921a8fSScott Kruger
3*29921a8fSScott Krugerscriptname=`basename $0`
4*29921a8fSScott Krugerrundir=${scriptname%.sh}
5*29921a8fSScott Kruger
6*29921a8fSScott Krugerif test "$PWD"!=`dirname $0`; then
7*29921a8fSScott Kruger  cd `dirname $0`
8*29921a8fSScott Krugerfi
9*29921a8fSScott Krugermkdir -p ${rundir}
10*29921a8fSScott Krugercd ${rundir}
11*29921a8fSScott Kruger
12*29921a8fSScott Kruger#
13*29921a8fSScott Kruger# Method to print out general and script specific options
14*29921a8fSScott Kruger#
15*29921a8fSScott Krugerprint_usage() {
16*29921a8fSScott Kruger
17*29921a8fSScott Krugercat >&2 <<EOF
18*29921a8fSScott KrugerUsage: $0 [options]
19*29921a8fSScott Kruger
20*29921a8fSScott KrugerOPTIONS
21*29921a8fSScott Kruger  -a <args> ......... Override default arguments
22*29921a8fSScott Kruger  -c <cleanup> ...... Cleanup (remove generated files)
23*29921a8fSScott Kruger  -e <args> ......... Add extra arguments to default
24*29921a8fSScott Kruger  -h ................ help: print this message
25*29921a8fSScott Kruger  -n <integer> ...... Override the number of processors to use
26*29921a8fSScott Kruger  -o <output file> .. Override default output file to diff with
27*29921a8fSScott Kruger  -t <testname> ..... Override test name
28*29921a8fSScott Kruger  -v ................ Verbose: Print commands
29*29921a8fSScott KrugerEOF
30*29921a8fSScott Kruger
31*29921a8fSScott Kruger  if declare -f extrausage > /dev/null; then extrausage; fi
32*29921a8fSScott Kruger  exit $1
33*29921a8fSScott Kruger}
34*29921a8fSScott Kruger###
35*29921a8fSScott Kruger##  Arguments for overriding things
36*29921a8fSScott Kruger#
37*29921a8fSScott Krugerverbose=false
38*29921a8fSScott Krugercleanup=false
39*29921a8fSScott Krugerwhile getopts "a:c:e:hn:o:t:v" arg
40*29921a8fSScott Krugerdo
41*29921a8fSScott Kruger  case $arg in
42*29921a8fSScott Kruger    a ) args=$OPTARG     ;;
43*29921a8fSScott Kruger    c ) cleanup=true     ;;
44*29921a8fSScott Kruger    e ) extra_args=$OPTARG     ;;
45*29921a8fSScott Kruger    h ) print_usage; exit ;;
46*29921a8fSScott Kruger    n ) nsize=$OPTARG     ;;
47*29921a8fSScott Kruger    o ) output_file=$OPTARG     ;;
48*29921a8fSScott Kruger    t ) testname=$OPTARG     ;;
49*29921a8fSScott Kruger    v ) verbose=true     ;;
50*29921a8fSScott Kruger    *)  # To take care of any extra args
51*29921a8fSScott Kruger      if test -n "$OPTARG"; then
52*29921a8fSScott Kruger        eval $arg=\"$OPTARG\"
53*29921a8fSScott Kruger      else
54*29921a8fSScott Kruger        eval $arg=found
55*29921a8fSScott Kruger      fi
56*29921a8fSScott Kruger      ;;
57*29921a8fSScott Kruger  esac
58*29921a8fSScott Krugerdone
59*29921a8fSScott Krugershift $(( $OPTIND - 1 ))
60*29921a8fSScott Kruger
61*29921a8fSScott Krugerif test -n "$extra_args"; then
62*29921a8fSScott Kruger  args="$args $extra_args"
63*29921a8fSScott Krugerfi
64*29921a8fSScott Kruger
65*29921a8fSScott Kruger# Init
66*29921a8fSScott Krugersuccess=0; failed=0; failures=""; rmfiles=""
67*29921a8fSScott Krugertotal=0
68*29921a8fSScott Krugertodo=-1; skip=-1
69*29921a8fSScott Kruger
70*29921a8fSScott Krugerfunction petsc_testrun() {
71*29921a8fSScott Kruger  # First arg = Basic command
72*29921a8fSScott Kruger  # Second arg = stdout file
73*29921a8fSScott Kruger  # Third arg = stderr file
74*29921a8fSScott Kruger  # Fourth arg = label for reporting
75*29921a8fSScott Kruger  # Fifth arg = Filter
76*29921a8fSScott Kruger  rmfiles="${rmfiles} $2 $3"
77*29921a8fSScott Kruger  tlabel=$4
78*29921a8fSScott Kruger  filter=$5
79*29921a8fSScott Kruger
80*29921a8fSScott Kruger  if test -z "$filter"; then
81*29921a8fSScott Kruger    cmd="$1 > $2 2> $3"
82*29921a8fSScott Kruger  else
83*29921a8fSScott Kruger    cmd="$1 | $filter > $2 2> $3"
84*29921a8fSScott Kruger  fi
85*29921a8fSScott Kruger  if "${verbose}"; then
86*29921a8fSScott Kruger    printf "${cmd}\n"
87*29921a8fSScott Kruger  fi
88*29921a8fSScott Kruger  eval $cmd
89*29921a8fSScott Kruger  if test $? == 0; then
90*29921a8fSScott Kruger      printf "ok $tlabel $cmd\n"
91*29921a8fSScott Kruger      let success=$success+1
92*29921a8fSScott Kruger  else
93*29921a8fSScott Kruger      printf "not ok $tlabel\n"
94*29921a8fSScott Kruger      awk '{print "#\t" $0}' < $3
95*29921a8fSScott Kruger      let failed=$failed+1
96*29921a8fSScott Kruger      failures="$failures $tlabel"
97*29921a8fSScott Kruger  fi
98*29921a8fSScott Kruger  let total=$success+$failed
99*29921a8fSScott Kruger}
100*29921a8fSScott Kruger
101*29921a8fSScott Krugerfunction petsc_testend() {
102*29921a8fSScott Kruger  logfile=$1/counts/${label}.counts
103*29921a8fSScott Kruger  logdir=`dirname $logfile`
104*29921a8fSScott Kruger  if ! test -d "$logdir"; then
105*29921a8fSScott Kruger    mkdir -p $logdir
106*29921a8fSScott Kruger  fi
107*29921a8fSScott Kruger  if ! test -e "$logfile"; then
108*29921a8fSScott Kruger    touch $logfile
109*29921a8fSScott Kruger  fi
110*29921a8fSScott Kruger  printf "total $total\n" > $logfile
111*29921a8fSScott Kruger  printf "success $success\n" >> $logfile
112*29921a8fSScott Kruger  printf "failed $failed\n" >> $logfile
113*29921a8fSScott Kruger  printf "failures $failures\n" >> $logfile
114*29921a8fSScott Kruger  if test ${todo} -gt 0; then
115*29921a8fSScott Kruger    printf "todo $todo\n" >> $logfile
116*29921a8fSScott Kruger  fi
117*29921a8fSScott Kruger  if test ${skip} -gt 0; then
118*29921a8fSScott Kruger    printf "skip $skip\n" >> $logfile
119*29921a8fSScott Kruger  fi
120*29921a8fSScott Kruger  if $cleanup; then
121*29921a8fSScott Kruger    echo "Cleaning up"
122*29921a8fSScott Kruger    /bin/rm -f $rmfiles
123*29921a8fSScott Kruger  fi
124*29921a8fSScott Kruger}
125