Hash :
af385f3f
Author :
Date :
2006-10-14T20:36:03
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
#! /bin/csh -f
#
# Part of automation of the testing process for the Tokenizer/De-Tokenizer
# Automate Execution of Tokenizing and De-Tokenizing the various test-cases
# Updated Thu, 09 Feb 2006 at 13:10 PST by David L. Paktor
# Run this from the parent-directory of the various Test categories.
# Sym-links to the binaries should be here.
# Each Test category directory must have a TestArgs file,
# formatted as follows:
# Lines starting with # (Pound-sign Space) are comments,
# and are ignored
# Blank lines are also allowed, and are also ignored
# Valid lines have four comma-separated fields:
# Test-file base-name
# Result-file label
# Extra command-line switches
# A script-command, to be run after, for specific
# verification of this Test. Arguments can also
# be included in this field, as long as they have
# no commas.
# An unspecified intermediate field must be represented as
# an empty field separated by commas from the fields
# preceding and following.
# Lines that have no label, no switches, and no script
# do not need any commas.
# The -v (verbose) switch will always be used and does not need
# to be explicitly specified. However, if the "script-command"
# field starts with +V (case-sensitive), then the -v (verbose)
# switch will not be used.
#
# The Test-file base-name field may have multiple base-names,
# to run a multiple-file batch command.
# If a multiple-file batch is run:
# The Result-file label will apply only to the Log file.
# To Do:
# Contrive a way to run the second through last input files as
# separate individual jobs (with same command-line switches)
# This needs to be co-ordinated with the Auto-Compare script:
# It will need to compare the .FC files from the batch with
# those from the individual runs.
# Initial error-checking:
if ( ( ! -x ./toke ) || ( ! -x ./detok ) || ( ! -x ./romheaders ) ) then
echo 'Starting in wrong directory. Executable toke, detok and romheaders are not here.'
exit 1
endif
set TArgFiles = `find . -name TestArgs -exec expr {} : '\./\(.*\)' \;`
if ( $#TArgFiles == 0 ) then
echo 'No TestArgs files found in subdirectories.'
echo 'Starting in wrong directory?'
exit 1
endif
set parent = `pwd`
set tokex = `pwd`/toke
set detokex = `pwd`/detok
set romhdrex = `pwd`/romheaders
set chirren = `echo $TArgFiles | tr ' ' \\012 | sed -e 'sX/[^/]*$XXg'`
# The "verbose" flag is now a variable.
set vflg = '-v'
# Let's show a progress-downcount and time, stamps and elapsed.
# Find the count; leave the max number on display:
set cnt = `egrep '^[^#].*' $TArgFiles | wc -l`
echo ''
set starttime = `date +'%T'`
echo $starttime
echo $cnt
foreach dir ( $chirren )
cd $dir
set lindxmax = `cat TestArgs | wc -l`
set lindx = 0
while ( $lindx < $lindxmax )
@ lindx++
set targline = `sed -n ${lindx}p TestArgs`
if ( $#targline == 0 ) continue
if ( "$targline[1]" == "#" ) continue
set ttargs = `echo $targline | awk -F , '{print $1}'`
# One more error-check:
set tfths = ''
set fcfils = ''
unset FMissing
foreach tfth ( $ttargs )
if ( ! -f ${tfth}.fth ) then
echo File Not found: ${dir}/${tfth}.fth
echo Please update ${dir}/TestArgs file, line $lindx
set FMissing
endif
set tfths = ( $tfths ${tfth}.fth )
set fcfils = ( $fcfils ${tfth}.fc )
end
if ( $?FMissing ) continue
set ttarg = $ttargs[1]
set outfile = ''
set label = `echo $targline | awk -F , '{print $2}'`
if ( "$label" != "" ) then
set label = .$label
if ( $#tfths == 1 ) then
set fcfils = ${ttarg}${label}.fc
set outfile = ( -o $fcfils )
endif
endif
# We don't set the switches as a shell-variable because we might
# need to preserve quoted groupings that have embedded spaces.
# Collect the script-command.
# Awkward place to expect a "+V" option, but it'll have to serve....
set scriptcmd = `echo $targline | awk -F , '{print $4}'`
if ( $#scriptcmd > 0 ) then
if ( "$scriptcmd[1]" == "+V" ) then
set vflg = ""
if ( $#scriptcmd == 1 ) then
set scriptcmd = ""
else
set scriptcmd = ( $scriptcmd[2-] )
endif
endif
endif
echo -n X${cnt}' ' | tr X \\015
@ cnt--
# Now do it.
set doromhdr = 0
echo toke $vflg `sed -n ${lindx}p TestArgs | awk -F , '{print $3}'` $outfile ${tfths} >& ${ttarg}${label}.Log
echo '' >>& ${ttarg}${label}.Log
eval $tokex $vflg `sed -n ${lindx}p TestArgs | awk -F , '{print $3}'` $outfile ${tfths} >>& ${ttarg}${label}.Log
set vflg = '-v'
foreach fcfil ( $fcfils )
if ( -f ${fcfil} ) then
$detokex -v -o ${fcfil} > ${fcfil:r}.DeTok
set doromhdr = `grep 'PCI Header identified' ${fcfil:r}.DeTok | wc -l`
if ( $doromhdr ) then
$romhdrex ${fcfil} > ${fcfil:r}.RomHdr
endif
endif
end
if ( "$scriptcmd" != "" ) then
eval $scriptcmd
endif
end
cd $parent
end
# Clear the display-line
echo -n X' 'X | tr X \\015
# Show time, stamps and elapsed.
date +'%T'
echo $starttime ' (Started)'