summaryrefslogtreecommitdiff
path: root/test/ragel.d/gentests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragel.d/gentests.sh')
-rw-r--r--test/ragel.d/gentests.sh506
1 files changed, 0 insertions, 506 deletions
diff --git a/test/ragel.d/gentests.sh b/test/ragel.d/gentests.sh
deleted file mode 100644
index ac3eef2a..00000000
--- a/test/ragel.d/gentests.sh
+++ /dev/null
@@ -1,506 +0,0 @@
-#!/bin/bash
-
-#
-# Test Case Features
-# ------------------
-# If the test case has a directory by the same name, copy it into the
-# working direcotory.
-#
-# @RAGEL_FILE: file name to pass on the command line instead of file created
-# by extracting section. Does not work with translated test cases.
-#
-
-TRANS=./trans
-
-# Make available to to test directories below us that are not part of this
-# repository and cannot source one dir up.
-export RAGEL_BIN="@SUBJ_RAGEL_BIN@"
-export RAGEL_CPPFLAGS="@SUBJ_RAGEL_CPPFLAGS@"
-export RAGEL_LDFLAGS="@SUBJ_RAGEL_LDFLAGS@"
-
-export RAGEL_C_BIN="@SUBJ_RAGEL_C_BIN@"
-export RAGEL_D_BIN="@SUBJ_RAGEL_D_BIN@"
-export RAGEL_JAVA_BIN="@SUBJ_RAGEL_JAVA_BIN@"
-export RAGEL_RUBY_BIN="@SUBJ_RAGEL_RUBY_BIN@"
-export RAGEL_CSHARP_BIN="@SUBJ_RAGEL_CSHARP_BIN@"
-export RAGEL_GO_BIN="@SUBJ_RAGEL_GO_BIN@"
-export RAGEL_OCAML_BIN="@SUBJ_RAGEL_OCAML_BIN@"
-export RAGEL_ASM_BIN="@SUBJ_RAGEL_ASM_BIN@"
-export RAGEL_RUST_BIN="@SUBJ_RAGEL_RUST_BIN@"
-export RAGEL_CRACK_BIN="@SUBJ_RAGEL_CRACK_BIN@"
-export RAGEL_JULIA_BIN="@SUBJ_RAGEL_JULIA_BIN@"
-
-function sig_exit()
-{
- echo
- exit 1;
-}
-
-trap sig_exit SIGINT
-trap sig_exit SIGQUIT
-trap sig_exit SIGTERM
-
-wk=working
-test -d $wk || mkdir $wk
-echo $wk/* | xargs rm -Rf
-
-while getopts "gcnmleT:F:W:G:P:CDJRAZOUKY-:" opt; do
- case $opt in
- T|F|W|G|P)
- genflags="$genflags -$opt$OPTARG"
- gen_opts="$gen_opts -$opt$OPTARG"
- ;;
- n|m|l|e)
- genflags="$genflags -$opt"
- gen_opts="$gen_opts -$opt"
- ;;
- c)
- compile_only="true"
- gen_opts="$gen_opts -$opt"
- ;;
- g)
- allow_generated="true"
- ;;
- C|D|J|R|A|Z|O|R|K|Y|U)
- langflags="$langflags -$opt"
- ;;
- -)
- case $OPTARG in
- asm)
- langflags="$langflags --$OPTARG"
- gen_opts="$gen_opts --$OPTARG"
- ;;
- integral-tables|string-tables)
- genflags="$genflags --$OPTARG"
- gen_opts="$gen_opts --$OPTARG"
- ;;
- *)
- echo "$0: unrecognized option --$OPTARG" >&2
- exit 1
- ;;
- esac
- ;;
- ?)
- exit 1;
- ;;
- esac
-done
-
-[ -z "$langflags" ] && langflags="-C --asm -R -Y -O -U -J -Z -D -A -K"
-[ -z "$genflags" ] && genflags="-T0 -T1 -F0 -F1 -W0 -W1 -G0 -G1 -G2 -n -m -e --string-tables"
-
-shift $((OPTIND - 1));
-
-[ -z "$*" ] && set -- *.rl
-
-ragel="@RAGEL_BIN@"
-
-cxx_compiler="@CXX@"
-c_compiler="@CC@"
-objc_compiler="@CC@"
-d_compiler="@D_BIN@"
-java_compiler="@JAVAC_BIN@"
-ruby_engine="@RUBY_BIN@"
-csharp_compiler="@CSHARP_BIN@"
-go_compiler="@GO_BIN@"
-ocaml_compiler="@OCAML_BIN@"
-rust_compiler="@RUST_BIN@"
-crack_interpreter="@CRACK_BIN@"
-julia_interpreter="@JULIA_BIN@"
-gnustep_config="@GNUSTEP_CONFIG@"
-assembler="@ASM_BIN@"
-
-if [ -z "$gnustep_config" ]; then
- objc_compiler=""
-fi
-
-function test_error
-{
- exit 1;
-}
-
-function exec_cmd()
-{
- lang=$1
-
- case $lang in
- java) exec_cmd="java -classpath $wk $classname" ;;
- ruby) exec_cmd="ruby $code_src" ;;
- csharp) exec_cmd="mono $binary" ;;
- ocaml) exec_cmd="ocaml $code_src" ;;
- crack) exec_cmd="$crack_interpreter $code_src" ;;
- julia) exec_cmd="$julia_interpreter $code_src" ;;
- indep) echo "error: exec_cmd: indep not executable"; exit 1 ;;
- *) exec_cmd=./$binary ;;
- esac
-}
-
-
-function lang_opts()
-{
- lang=$1
-
- case $lang in
- c)
- lang_opt=-C;
- code_suffix=c;
- interpreted=false
- compiler=$c_compiler;
- host_ragel=$RAGEL_BIN
- flags="-Wall -O3 -I. -Wno-variadic-macros"
- libs=""
- prohibit_flags=""
- ;;
- cg)
- # For testing ragel-c using goto based.
- lang_opt=-C;
- code_suffix=c;
- interpreted=false
- compiler=$c_compiler;
- host_ragel=$RAGEL_C_BIN
- flags="-Wall -O3 -I. -Wno-variadic-macros"
- libs=""
- prohibit_flags="--string-tables"
- ;;
- cv)
- # For testing ragel-c using var-based
- lang_opt=-C;
- code_suffix=c;
- interpreted=false
- compiler=$c_compiler;
- host_ragel="$RAGEL_C_BIN --var-backend"
- flags="-Wall -O3 -I. -Wno-variadic-macros"
- libs=""
- prohibit_flags="-G0 -G1 -G2 --string-tables"
- ;;
- c++)
- lang_opt=-C;
- code_suffix=cpp;
- interpreted=false
- compiler=$cxx_compiler;
- host_ragel=$RAGEL_BIN
- flags="-Wall -O3 -I. -Wno-variadic-macros"
- libs=""
- prohibit_flags=""
- ;;
- obj-c)
- lang_opt=-C;
- code_suffix=m;
- interpreted=false
- compiler=$objc_compiler
- host_ragel=$RAGEL_BIN
- if [ -z "$gnustep_config" ]; then
- flags=""
- else
- flags="`$gnustep_config --objc-flags`"
- fi
- libs="-lobjc -lgnustep-base"
- prohibit_flags=""
- ;;
- d)
- lang_opt=-D;
- code_suffix=d;
- interpreted=false
- compiler=$d_compiler;
- host_ragel=$RAGEL_D_BIN
- flags="-Wall -O3"
- libs=""
- prohibit_flags="--string-tables"
- ;;
- java)
- lang_opt=-J;
- code_suffix=java;
- interpreted=false
- compiler=$java_compiler
- host_ragel=$RAGEL_JAVA_BIN
- flags=""
- libs=""
- prohibit_flags="-G0 -G1 -G2 --string-tables"
- ;;
- ruby)
- lang_opt=-R;
- code_suffix=rb;
- interpreted=true
- compiler=$ruby_engine
- host_ragel=$RAGEL_RUBY_BIN
- flags=""
- libs=""
- prohibit_flags="-G0 -G1 -G2 --string-tables"
- ;;
- csharp)
- lang_opt="-A";
- code_suffix=cs;
- interpreted=false
- compiler=$csharp_compiler
- host_ragel=$RAGEL_CSHARP_BIN
- flags=""
- libs=""
- prohibit_flags="-G2 --string-tables"
- ;;
- go)
- lang_opt="-Z"
- code_suffix=go
- interpreted=false
- compiler=$go_compiler
- host_ragel=$RAGEL_GO_BIN
- flags="build"
- libs=""
- prohibit_flags="--string-tables"
- ;;
- ocaml)
- lang_opt="-O"
- code_suffix=ml
- interpreted=true
- compiler=$ocaml_compiler
- host_ragel=$RAGEL_OCAML_BIN
- flags=""
- libs=""
- prohibit_flags="-G0 -G1 -G2 --string-tables"
- ;;
- asm)
- lang_opt="--asm"
- code_suffix=s
- interpreted=false
- compiler="$assembler"
- host_ragel=$RAGEL_ASM_BIN
- flags=""
- libs=""
- prohibit_flags="-T0 -T1 -F0 -F1 -W0 -W1 -G0 -G1 --string-tables"
- ;;
- rust)
- lang_opt="-U"
- code_suffix=rs
- interpreted=false
- compiler=$rust_compiler
- host_ragel=$RAGEL_RUST_BIN
- flags="-A non_upper_case_globals -A dead_code \
- -A unused_variables -A unused_assignments -A unused_mut -A unused_parens"
- libs=""
- prohibit_flags="-G0 -G1 -G2 --string-tables"
- ;;
- crack)
- lang_opt="-K"
- code_suffix=crk
- interpreted=true
- compiler=$crack_interpreter
- host_ragel=$RAGEL_CRACK_BIN
- prohibit_flags="-G0 -G1 -G2 --string-tables"
- ;;
- julia)
- lang_opt="-Y"
- code_suffix=jl
- interpreted=true
- compiler=$julia_interpreter
- host_ragel=$RAGEL_JULIA_BIN
- prohibit_flags="-G0 -G1 -G2 --string-tables"
- ;;
- indep)
- ;;
- *)
- echo "$translated: unknown language type '$lang'" >&2
- exit 1;
- ;;
- esac
-
- prohibit_flags="$prohibit_flags $case_prohibit_flags"
-}
-
-function run_test()
-{
- code_src=$wk/`echo $lroot$gen_opt.$code_suffix | sed 's/-\+/_/g'`
- binary=$wk/`echo $lroot$gen_opt.bin | sed 's/-\+/_/g'`
- output=$wk/`echo $lroot$gen_opt.out | sed 's/-\+/_/g'`
- diff=$wk/`echo $lroot$gen_opt.diff | sed 's/-\+/_/g'`
- sh=$wk/`echo $lroot$gen_opt.sh | sed 's/-\+/_/g'`
- log=$wk/`echo $lroot$gen_opt.log | sed 's/-\+/_/g'`
- intermed=$wk/`echo $lroot$gen_opt.ri | sed 's/-\+/_/g'`
- classfile=$wk/`echo $lroot$gen_opt.class | sed 's/-\+/_/g'`
- classname=`echo $lroot$gen_opt | sed 's/-\+/_/g'`
-
- opts="$gen_opt $min_opt $enc_opt $f_opt"
- args="-I. $opts -o $code_src $translated"
-
- cat >> $sh <<-EOF
- echo testing $lroot $opts
- $host_ragel $args
- EOF
-
- if [ $lang == java ]; then
- cat >> $sh <<-EOF
- sed -i 's/\<$lroot\>/$classname/g' $code_src
- EOF
- fi
-
- out_args=""
- [ $lang != java ] && out_args="-o $binary";
- [ $lang == csharp ] && out_args="-out:$binary";
-
- # Some langs are just interpreted.
- if [ $interpreted != "true" ]; then
- cat >> $sh <<-EOF
- $compiler $flags $out_args $code_src \
- $libs >>$log 2>>$log
- EOF
- fi
-
- exec_cmd $lang
- if [ "$compile_only" != "true" ]; then
- if [ -n "$FILTER" ]; then
- exec_cmd="$exec_cmd | $FILTER"
- fi
-
- cat >> $sh <<-EOF
- $exec_cmd 2>> $log >> $output
- EOF
-
- cat >> $sh <<-EOF
- diff -u --strip-trailing-cr $expected_out $output > $diff
- # rm -f $intermed $code_src $binary $classfile $output
- EOF
-
- fi
-
- echo $sh
-}
-
-
-function run_options()
-{
- translated=$1
-
- lroot=`basename $translated`
- lroot=${lroot%.rl};
-
- lang_opts $lang
-
- [ -n "$additional_cflags" ] && flags="$flags $additional_cflags"
-
- # If we have no compiler for the source program then skip it.
- [ -z "$compiler" ] && return
-
- # Make sure that we are interested in the host language.
- echo "$langflags" | grep -qe $lang_opt || return
-
- for gen_opt in $genflags; do
- echo "" "$prohibit_flags" | \
- grep -e $gen_opt >/dev/null && continue
-
- run_test
- done
- unset gen_opt
-}
-
-function run_translate()
-{
- test_case=$1
-
- # Recompute the root.
- root=`basename $test_case`
- root=${root%.rl};
-
- # Check if we should ignore the test case
- enabled=`sed '/@ENABLED:/s/^.*: *//p;d' $test_case`
- if [ -n "$enabled" ] || [ "$enabled" = true ]; then
- return;
- fi
-
- # If the generated flag is given make sure that the test case is generated.
- is_generated=`sed '/@GENERATED:/s/^.*: *//p;d' $test_case`
- if [ "$is_generated" = true ] && [ "$allow_generated" != true ]; then
- return;
- fi
-
- # Override the test case file name.
- RAGEL_FILE=`sed '/@RAGEL_FILE:/s/^.*: *//p;d' $test_case`
-
- # Filter to pass output through. Shell code.
- FILTER=`sed '/@FILTER:/s/^.*: *//p;d' $test_case`
-
- # If the test case has a directory by the same name, copy it into the
- # working direcotory.
- if [ -d $root ]; then
- cp -a $root $wk/
- fi
-
- expected_out=$wk/$root.exp;
- case_rl=${root}.rl
-
- sed '1,/^##* * OUTPUT ##*/d' $test_case > $expected_out
-
- prohibit_languages=`sed '/@PROHIBIT_LANGUAGES:/s/^.*: *//p;d' $test_case`
-
- # Add these into the langugage-specific defaults selected in run_options
- case_prohibit_flags=`sed '/@PROHIBIT_FLAGS:/s/^.*: *//p;d' $test_case`
-
- lang=`sed '/@LANG:/s/^.*: *//p;d' $test_case`
- if [ -z "$lang" ]; then
- echo "$test_case: language unset"; >&2
- return
- fi
-
- cases=""
-
- if [ $lang == indep ]; then
- for lang in c cg cv asm d csharp go java ruby ocaml rust crack julia; do
- case $lang in
- c) lf="-C" ;;
- cg) lf="-C" ;;
- cv) lf="-C" ;;
- asm) lf="--asm" ;;
- d) lf="-D" ;;
- csharp) lf="-A" ;;
- go) lf="-Z" ;;
- java) lf="-J" ;;
- ruby) lf="-R" ;;
- ocaml) lf="-O" ;;
- rust) lf="-U" ;;
- crack) lf="-K" ;;
- julia) lf="-Y" ;;
- esac
-
- echo "$prohibit_languages" | grep -q "\<$lang\>" && continue;
- echo "$langflags" | grep -qe $lf || continue
-
- # Translate to target language and strip off output.
- targ=${root}_$lang.rl
-
- $TRANS $lang $wk/$targ $test_case ${root}_${lang}
-
- cases="$cases $wk/$targ"
-
- run_options $wk/$targ
- done
- else
-
- sed '/^##* * OUTPUT ##*/,$d' $test_case > $wk/$case_rl
-
- cases=$wk/$case_rl
-
- if [ -n "$RAGEL_FILE" ]; then
- cases="$RAGEL_FILE"
- fi
-
- run_options $cases
- fi
-}
-
-go()
-{
- # Before we generate and test cases verify that all files exist. It is nice
- # to catch this early.
- for test_case; do
- if ! [ -f $test_case ]; then
- echo "$test_case: could not find file" >&2
- missing_file=true
-
- fi
- done
-
- [ "$missing_file" = true ] && exit 1;
-
- for test_case; do
- run_translate $test_case
- done
-}
-
-go "$@"