forked from openbios/fcode-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAutoExec
164 lines (142 loc) · 5.39 KB
/
AutoExec
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
#! /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)'