A fix to the documentation makefile from John D. Mitchell.
[ragel.git] / test / runtests
bloba50c7c920a5dcacfe81df161131b247aab1ad51b
1 #!/bin/bash
4 # Copyright 2006 Adrian Thurston <thurston@cs.queensu.ca>
7 # This file is part of Ragel.
9 # Ragel is free software; you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 2 of the License, or
12 # (at your option) any later version.
14 # Ragel is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with Ragel; if not, write to the Free Software
21 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 while getopts "gcnmleT:F:G:P:CDJRA" opt; do
24 case $opt in
25 T|F|G|P)
26 genflags="$genflags -$opt$OPTARG"
27 options="$options -$opt$OPTARG"
29 n|m|l|e)
30 minflags="$minflags -$opt"
31 options="$options -$opt"
33 c)
34 compile_only="true"
35 options="$options -$opt"
37 g)
38 allow_generated="true"
40 C|D|J|R|A)
41 langflags="$langflags -$opt"
43 esac
44 done
46 [ -z "$minflags" ] && minflags="-n -m -l -e"
47 [ -z "$genflags" ] && genflags="-T0 -T1 -F0 -F1 -G0 -G1 -G2"
48 [ -z "$langflags" ] && langflags="-C -D -J -R -A"
50 shift $((OPTIND - 1));
52 [ -z "$*" ] && set -- *.rl
54 config=../common/config.h
55 ragel=../ragel/ragel
57 cxx_compiler=`sed '/^#define CXX/s/#define CXX *//p;d' $config`
58 c_compiler=`sed '/^#define CC/s/#define CC *//p;d' $config`
59 objc_compiler=`sed '/^#define GOBJC/s/#define GOBJC *//p;d' $config`
60 d_compiler=`sed '/^#define GDC/s/#define GDC *//p;d' $config`
61 java_compiler=`sed '/#define JAVAC/s/#define JAVAC *//p;d' $config`
62 txl_engine=`sed '/^#define TXL/s/#define TXL *//p;d' $config`
63 ruby_engine=`sed '/^#define RUBY/s/#define RUBY *//p;d' $config`
64 csharp_compiler=`sed '/#define GMCS/s/#define GMCS *//p;d' $config`
66 function test_error
68 exit 1;
71 # split_objs=""
72 # if test $split_iters != "$gen_opt"; then
73 # n=0;
74 # while test $n -lt $split_iters; do
75 # part_root=${root}_`awk 'BEGIN {
76 # width = 0;
77 # high = '$split_iters' - 1;
78 # while ( high > 0 ) {
79 # width = width + 1;
80 # high = int(high / 10);
81 # }
82 # suffFormat = "%" width "." width "d\n";
83 # printf( suffFormat, '$n' );
84 # exit 0;
85 # }'`
86 # part_src=${part_root}.c
87 # part_bin=${part_root}.o
88 # echo "$compiler -c $cflags -o $part_bin $part_src"
89 # if ! $compiler -c $cflags -o $part_bin $part_src; then
90 # test_error;
91 # fi
92 # split_objs="$split_objs $part_bin"
93 # n=$((n+1))
94 # done
95 # fi
97 function run_test()
99 echo "$ragel $lang_opt $min_opt $gen_opt -o $code_src $test_case"
100 if ! $ragel $lang_opt $min_opt $gen_opt -o $code_src $test_case; then
101 test_error;
104 out_args=""
105 [ $lang != java ] && out_args="-o ${binary}";
106 [ $lang == csharp ] && out_args="-out:${binary}";
108 # Ruby doesn't need to be compiled.
109 if [ $lang != ruby ]; then
110 echo "$compiler ${cflags} ${out_args} ${code_src}"
111 if ! $compiler ${cflags} ${out_args} ${code_src}; then
112 test_error;
116 if [ "$compile_only" != "true" ]; then
117 echo -n "running $root ... ";
119 exec_cmd=./$binary
120 [ $lang = java ] && exec_cmd="java ${root}"
121 [ $lang = ruby ] && exec_cmd="ruby ${code_src}"
122 [ $lang = csharp ] && exec_cmd="mono ${exec_cmd}"
124 $exec_cmd 2>&1 > $output;
125 if diff $expected_out $output > /dev/null; then
126 echo "passed";
127 else
128 echo "FAILED";
129 test_error;
134 for test_case; do
135 root=${test_case%.rl};
137 if ! [ -f "$test_case" ]; then
138 echo "runtests: not a file: $test_case"; >&2
139 exit 1;
142 # Check if we should ignore the test case
143 ignore=`sed '/@IGNORE:/s/^.*: *//p;d' $test_case`
144 if [ "$ignore" = yes ]; then
145 continue;
148 # If the generated flag is given make sure that the test case is generated.
149 is_generated=`sed '/@GENERATED:/s/^.*: *//p;d' $test_case`
150 if [ "$is_generated" = yes ] && [ "$allow_generated" != true ]; then
151 continue;
154 expected_out=$root.exp;
155 sed '1,/_____OUTPUT_____/d;$d' $test_case > $expected_out
157 lang=`sed '/@LANG:/s/^.*: *//p;d' $test_case`
158 if [ -z "$lang" ]; then
159 echo "$test_case: language unset"; >&2
160 exit 1;
163 case $lang in
164 c++)
165 lang_opt=-C;
166 codegen=../rlgen-cd/rlgen-cd;
167 code_suffix=cpp;
168 compiler=$cxx_compiler;
169 cflags="-pedantic -ansi -Wall -O3"
172 lang_opt=-D;
173 codegen=../rlgen-cd/rlgen-cd;
174 code_suffix=d;
175 compiler=$d_compiler;
176 cflags="-Wall -O3"
179 lang_opt=-C;
180 codegen=../rlgen-cd/rlgen-cd;
181 code_suffix=c;
182 compiler=$c_compiler;
183 cflags="-pedantic -ansi -Wall -O3"
185 obj-c)
186 lang_opt=-C;
187 codegen=../rlgen-cd/rlgen-cd;
188 code_suffix=m;
189 compiler=$objc_compiler
190 cflags="-Wall -O3 -fno-strict-aliasing -lobjc"
192 java)
193 lang_opt=-J;
194 codegen=../rlgen-java/rlgen-java;
195 code_suffix=java;
196 compiler=$java_compiler
197 cflags=""
199 ruby)
200 lang_opt=-R;
201 codegen=../rlgen-ruby/rlgen-ruby;
202 code_suffix=rb;
203 compiler=$ruby_engine
204 cflags=""
206 csharp)
207 lang_opt="-A";
208 codegen=../rlgen-csharp/rlgen-csharp;
209 code_suffix=cs;
210 compiler=$csharp_compiler
211 cflags=""
213 indep)
214 lang_opt="";
216 # If we have no txl engine then skip this test.
217 [ -z "$txl_engine" ] && continue
218 for lang in c d java ruby csharp; do
219 case $lang in
220 c) lf="-C";;
221 d) lf="-D";;
222 java) lf="-J";;
223 ruby) lf="-R";;
224 csharp) lf="-A";;
225 esac
227 echo "$langflags" | grep -e $lf >/dev/null || continue
229 targ=${root}_$lang.rl
230 echo "./langtrans_$lang.sh $test_case > $targ"
231 if ! ./langtrans_$lang.sh $test_case > $targ; then
232 test_error
234 echo "./runtests -g $options $targ"
235 if ! ./runtests -g $options $targ; then
236 test_error
238 done
239 continue;
242 echo "$test_case: unknown language type $lang" >&2
243 exit 1;
245 esac
247 # Make sure that we are interested in the host language.
248 echo "$langflags" | grep -e $lang_opt >/dev/null || continue
250 code_src=$root.$code_suffix;
251 binary=$root.bin;
252 output=$root.out;
254 # If we have no compiler for the source program then skip it.
255 [ -z "$compiler" ] && continue
257 additional_cflags=`sed '/@CFLAGS:/s/^.*: *//p;d' $test_case`
258 [ -n "$additional_cflags" ] && cflags="$cflags $additional_cflags"
260 allow_minflags=`sed '/@ALLOW_MINFLAGS:/s/^.*: *//p;d' $test_case`
261 [ -z "$allow_minflags" ] && allow_minflags="-n -m -l -e"
263 case $lang in
264 c|c++|d)
265 # Using genflags, get the allowed gen flags from the test case. If the
266 # test case doesn't specify assume that all gen flags are allowed.
267 allow_genflags=`sed '/@ALLOW_GENFLAGS:/s/^.*: *//p;d' $test_case`
268 [ -z "$allow_genflags" ] && allow_genflags="-T0 -T1 -F0 -F1 -G0 -G1 -G2"
270 for min_opt in $minflags; do
271 echo "$allow_minflags" | grep -e $min_opt >/dev/null || continue
272 for gen_opt in $genflags; do
273 echo "$allow_genflags" | grep -e $gen_opt >/dev/null || continue
274 run_test
275 done
276 done
279 java)
280 # Not interested in gen opt.
281 gen_opt=""
282 for min_opt in $minflags; do
283 echo "$allow_minflags" | grep -e $min_opt >/dev/null || continue
284 run_test
285 done
288 ruby)
289 # Using genflags, get the allowed gen flags from the test case. If the
290 # test case doesn't specify assume that all gen flags are allowed.
291 allow_genflags=`sed '/@ALLOW_GENFLAGS:/s/^.*: *//p;d' $test_case`
292 [ -z "$allow_genflags" ] && allow_genflags="-T0 -T1 -F0 -F1"
294 for min_opt in $minflags; do
295 echo "$allow_minflags" | grep -e $min_opt >/dev/null || continue
297 for gen_opt in $genflags; do
298 echo "$allow_genflags" | grep -e $gen_opt >/dev/null || continue
299 run_test
300 done
301 done
304 csharp)
305 # Using genflags, get the allowed gen flags from the test case. If the
306 # test case doesn't specify assume that all gen flags are allowed.
307 allow_genflags=`sed '/@ALLOW_GENFLAGS:/s/^.*: *//p;d' $test_case`
308 [ -z "$allow_genflags" ] && allow_genflags="-T0 -T1 -F0 -F1 -G0 -G1"
310 for min_opt in $minflags; do
311 echo "$allow_minflags" | grep -e $min_opt >/dev/null || continue
312 for gen_opt in $genflags; do
313 echo "$allow_genflags" | grep -e $gen_opt >/dev/null || continue
314 run_test
315 done
316 done
318 esac
320 done