X-Git-Url: http://nitlanguage.org diff --git a/tests/tests.sh b/tests/tests.sh index 80e75c1..2769eba 100755 --- a/tests/tests.sh +++ b/tests/tests.sh @@ -19,6 +19,23 @@ # Set lang do default to avoid failed tests because of locale export LANG=C +export LC_ALL=C +export NIT_TESTING=true +export NIT_SRAND=0 + +unset NIT_DIR + +# Get the first Java lib available +shopt -s nullglob +JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)))) + +paths=`echo $JAVA_HOME/jre/lib/*/{client,server}/libjvm.so` +paths=($paths) +JNI_LIB_PATH=`dirname ${paths[0]}` +shopt -u nullglob + +outdir="out" +compdir=".nit_compile" usage() { @@ -28,159 +45,411 @@ Usage: $e [options] modulenames -o option Pass option to the engine -v Verbose (show tests steps) -h This help ---tap Produce TAP output --engine Use a specific engine (default=nitc) +--noskip Do not skip a test even if the .skip file matches +--outdir Use a specific output folder (default=out/) +--compdir Use a specific temporary compilation folder (default=.nit_compile) +--node Run as a node in parallel, will not output context information +--autosav Copy the .res files directly in the sav folder overriding existing .res files END } +# Run a command with a timeout and a time count. +# Options: +# -o file write the user time into file (REQUIRED). see `-o` in `man time` +# -a append the time to the file (instead of overwriting it). see `-a` in `man time` +saferun() +{ + local stop=false + local o= + local a= + while [ $stop = false ]; do + case "$1" in + -o) o="$2"; shift; shift;; + -a) a="-a"; shift;; + *) stop=true + esac + done + if test -d "$1"; then + find $1 | sort + elif test -n "$TIME"; then + $TIME -o "$o" $a $TIMEOUT "$@" + else + if test -n "$a"; then echo 0 >> "$o"; else echo 0 > "$o"; fi + $TIMEOUT "$@" + fi +} + +# Output a timestamp attribute for XML, or an empty line +timestamp() +{ + if test -n "$TIMESTAMP"; then + echo "timestamp='`$TIMESTAMP`'" + else + echo "" + fi + +} + +# Get platform specific commands ########################## + +# Detect a working timeout +if sh -c "timelimit echo" 1>/dev/null 2>&1; then + TIMEOUT="timelimit -t 600" +elif sh -c "timeout 1 echo" 1>/dev/null 2>&1; then + TIMEOUT="timeout 600s" +else + echo "No timelimit or timeout command detected. Tests may hang :(" +fi + +# Detect a working time command +if env time --quiet -f%U true 2>/dev/null; then + TIME="env time --quiet -f%U" +elif env time -f%U true 2>/dev/null; then + TIME="env time -f%U" +else + TIME= +fi + +# Detect a working date command +if date -Iseconds >/dev/null 2>&1; then + TIMESTAMP="date -Iseconds" +else + TIMESTAMP= +fi + +# $1 is the pattern of the test +# $2 is the file to compare to +# the result is: +# 0: if the file to compare to do not exists +# 1: if the file match +# 2: if the file match with soso +# 3: if the file do not match +function compare_to_result() +{ + local pattern="$1" + local sav="$2" + if [ ! -r "$sav" ]; then return 0; fi + test "`cat -- "$sav"`" = "UNDEFINED" && return 1 + diff -u -- "$sav" "$outdir/$pattern.res" > "$outdir/$pattern.diff.sav.log" + if [ "$?" == 0 ]; then + return 1 + fi + sed '/[Ww]arning/d;/[Ee]rror/d' "$outdir/$pattern.res" > "$outdir/$pattern.res2" + sed '/[Ww]arning/d;/[Ee]rror/d' "$sav" > "$outdir/$pattern.sav2" + grep '[Ee]rror' "$outdir/$pattern.res" >/dev/null && echo "Error" >> "$outdir/$pattern.res2" + grep '[Ee]rror' "$sav" >/dev/null && echo "Error" >> "$outdir/$pattern.sav2" + diff -u "$outdir/$pattern.sav2" "$outdir/$pattern.res2" > "$outdir/$pattern.diff.sav.log2" + if [ "$?" == 0 ]; then + return 2 + else + return 3 + fi +} + +function xmlesc() +{ + sed 's/&/\&/g; s//\>/g; s/"/\"/g; s/'"'"'/\'/g'< "out/$pattern.diff.sav.log" - if [ "$?" == 0 ]; then - SAV=OK - else - SAV=NOK - fi - sed '/[Ww]arning/d;/[Ee]rror/d' "out/$pattern.res" > "out/$pattern.res2" - sed '/[Ww]arning/d;/[Ee]rror/d' "sav/$pattern.sav" > "out/$pattern.sav2" - grep '[Ee]rror' "out/$pattern.res" >/dev/null && echo "Error" >> "out/$pattern.res2" - grep '[Ee]rror' "sav/$pattern.sav" >/dev/null && echo "Error" >> "out/$pattern.sav2" - diff -u "out/$pattern.res2" "out/$pattern.sav2" > "out/$pattern.diff.sav2.log" - if [ "$?" == 0 ]; then - SOSO=OK - else - SOSO=NOK - fi - fi - if [ -r "sav/$pattern.fail" ]; then - diff -u "out/$pattern.res" "sav/$pattern.fail" > "out/$pattern.diff.fail.log" - if [ "$?" == 0 ]; then - FAIL=OK - else - FAIL=NOK - fi - sed '/[Ww]arning/d;/[Ee]rror/d' "out/$pattern.res" > "out/$pattern.res2" - sed '/[Ww]arning/d;/[Ee]rror/d' "sav/$pattern.fail" > "out/$pattern.fail2" - grep '[Ee]rror' "out/$pattern.res" >/dev/null && echo "Error" >> "out/$pattern.res2" - grep '[Ee]rror' "sav/$pattern.fail" >/dev/null && echo "Error" >> "out/$pattern.fail2" - diff -u "out/$pattern.res2" "out/$pattern.fail2" > "out/$pattern.diff.fail2.log" - if [ "$?" == 0 ]; then - SOSOF=OK - else - SOSOF=NOK - fi - fi - grep 'NOT YET IMPLEMENTED' "out/$pattern.res" >/dev/null + NSOSOF="" + OLD="" + LIST="" + FIRST="" + echo >>$xml "" + #for sav in "sav/$engine/fixme/$pattern.res" "sav/$engine/$pattern.res" "sav/fixme/$pattern.res" "sav/$pattern.res" "sav/$pattern.sav"; do + for savdir in $savdirs; do + sav=$savdir/fixme/$pattern.res + compare_to_result "$pattern" "$sav" + case "$?" in + 0) + ;; # no file + 1) + OLD="$LIST" + FIXME="$sav" + LIST="$LIST $sav" + ;; + 2) + if [ -z "$FIRST" ]; then + SOSOF="$sav" + FIRST="$sav" + fi + LIST="$LIST $sav" + ;; + 3) + if [ -z "$FIRST" ]; then + NFIXME="$sav" + FIRST="$sav" + fi + LIST="$LIST $sav" + ;; + esac + + sav=$savdir/$pattern.res + compare_to_result "$pattern" "$sav" + case "$?" in + 0) + ;; # no file + 1) + OLD="$LIST" + SAV="$sav" + LIST="$LIST $sav" + ;; + 2) + if [ -z "$FIRST" ]; then + SOSO="$sav" + FIRST="$sav" + fi + LIST="$LIST $sav" + ;; + 3) + if [ -z "$FIRST" ]; then + NSAV="$sav" + FIRST="$sav" + fi + LIST="$LIST $sav" + ;; + esac + done + OLD=`echo "$OLD" | sed -e 's/ */ /g' -e 's/^ //' -e 's/ $//'` + grep 'NOT YET IMPLEMENTED' "$outdir/$pattern.res" >/dev/null NYI="$?" - if [ "x$SAV" = "xOK" ]; then - if [ -n "$tap" ]; then - echo "ok - $description" - elif [ "x$FAIL" = "x" ]; then - echo "[ok] out/$pattern.res" + if [ -n "$SAV" ]; then + if [ -n "$OLD" ]; then + echo "[*ok*] $outdir/$pattern.res $SAV - but $OLD remains!" + echo >>$xml "" + remains="$remains $OLD" + test "$autosav" = "true" && rm "$OLD" else - echo "[ok] out/$pattern.res - but sav/$pattern.fail remains!" + echo "[ok] $outdir/$pattern.res $SAV" fi ok="$ok $pattern" - elif [ "x$FAIL" = "xOK" ]; then - if [ -n "$tap" ]; then - echo "not ok - $description # TODO expected failure" + elif [ -n "$FIXME" ]; then + if [ -n "$OLD" ]; then + echo "[*fixme*] $outdir/$pattern.res $FIXME - but $OLD remains!" + echo >>$xml "" + remains="$remains $OLD" + test "$autosav" = "true" && rm "$OLD" else - echo "[fail] out/$pattern.res" + echo "[fixme] $outdir/$pattern.res $FIXME" + echo >>$xml "" fi - ok="$ok $pattern" - elif [ "x$SOSO" = "xOK" ]; then - if [ -n "$tap" ]; then - echo "ok - $description # SOSO" - else - echo "[soso] out/$pattern.res sav/$pattern.sav" - fi - ok="$ok $pattern" + todos="$todos $pattern" elif [ "x$NYI" = "x0" ]; then - if [ -n "$tap" ]; then - echo "not ok - $description # TODO not yet implemented" - else - echo "[todo] out/$pattern.res -> not yet implemented" - fi - ok="$ok $pattern" - elif [ "x$SOSOF" = "xOK" ]; then - if [ -n "$tap" ]; then - echo "not ok - $description # TODO SOSO expected failure" - else - echo "[fail soso] out/$pattern.res sav/$pattern.fail" - fi - ok="$ok $pattern" - elif [ "x$SAV" = "xNOK" ]; then - if [ -n "$tap" ]; then - echo "not ok - $description" - else - echo "[======= fail out/$pattern.res sav/$pattern.sav =======]" - fi + echo "[todo] $outdir/$pattern.res -> not yet implemented" + echo >>$xml "" + todos="$todos $pattern" + elif [ -n "$SOSO" ]; then + echo "[======= soso $outdir/$pattern.res $SOSO =======]" + echo >>$xml "" + echo >>$xml ">$xml -n 50 + echo >>$xml "]]>" nok="$nok $pattern" echo "$ii" >> "$ERRLIST" - elif [ "x$FAIL" = "xNOK" ]; then - if [ -n "$tap" ]; then - echo "not ok - $description" - else - echo "[======= changed out/$pattern.res sav/$pattern.fail ======]" - fi + test "$autosav" = "true" && cp "$outdir/$pattern.res" "$SOSO" + elif [ -n "$SOSOF" ]; then + echo "[======= fixme soso $outdir/$pattern.res $SOSOF =======]" + echo >>$xml "" + echo >>$xml ">$xml -n 50 + echo >>$xml "]]>" nok="$nok $pattern" echo "$ii" >> "$ERRLIST" - else - if [ -n "$tap" ]; then - echo "ok - $description # skip no sav" - else - echo "[=== no sav ===] out/$pattern.res" - fi + test "$autosav" = "true" && cp "$outdir/$pattern.res" && "$SOSO" + elif [ -n "$NSAV" ]; then + echo "[======= fail $outdir/$pattern.res $NSAV =======]" + echo >>$xml "" + echo >>$xml ">$xml -n 50 + echo >>$xml "]]>" + nok="$nok $pattern" + echo "$ii" >> "$ERRLIST" + test "$autosav" = "true" && cp "$outdir/$pattern.res" "$NSAV" + elif [ -n "$NFIXME" ]; then + echo "[======= changed $outdir/$pattern.res $NFIXME ======]" + echo >>$xml "" + echo >>$xml ">$xml -n 50 + echo >>$xml "]]>" + nok="$nok $pattern" + echo "$ii" >> "$ERRLIST" + test "$autosav" = "true" && cp "$outdir/$pattern.res" "$NFIXME" + elif [ -s "$outdir/$pattern.res" ]; then + echo "[=== no sav ===] $outdir/$pattern.res is not empty" + echo >>$xml "" + echo >>$xml ">$xml -- "$outdir/$pattern.res" + echo >>$xml "]]>" nos="$nos $pattern" + echo "$ii" >> "$ERRLIST" + test "$autosav" = "true" && cp "$outdir/$pattern.res" "sav/" + else + # no sav but empty res + echo "[0k] $outdir/$pattern.res is empty" + ok="$ok $pattern" + fi + if test -s "$outdir/$pattern.cmp.err"; then + echo >>$xml ">$xml -- "$outdir/$pattern.cmp.err" + echo >>$xml "]]>" + fi + echo >>$xml "" +} + +need_skip() +{ + test "$noskip" = true && return 1 + if echo "$1" | grep -f "$engine.skip" >/dev/null 2>&1; then + echo "=> $2: [skip]" + echo >>$xml "" + return 0 + fi + if test -n "$isinterpret" && echo "$1" | grep -f "exec.skip" >/dev/null 2>&1; then + echo "=> $2: [skip exec]" + echo >>$xml "" + return 0 + fi + + # Skip by OS + os_skip_file=`uname`.skip + if test -e $os_skip_file && echo "$1" | grep -f "$os_skip_file" >/dev/null 2>&1; then + echo "=> $2: [skip os]" + echo >>$xml "" + return 0 + fi + return 1 +} + +skip_exec() +{ + test "$noskip" = true && return 1 + if echo "$1" | grep -f "exec.skip" >/dev/null 2>&1; then + echo -n "_ " + return 0 + fi + return 1 +} + +skip_cc() +{ + test "$noskip" = true && return 1 + if echo "$1" | grep -f "cc.skip" >/dev/null 2>&1; then + return 0 fi + return 1 } find_nitc() { - ((tapcount=tapcount+1)) - name="$engine" + name="$enginebinname" recent=`ls -t ../src/$name ../src/$name_[0-9] ../bin/$name ../c_src/$name 2>/dev/null | head -1` if [[ "x$recent" == "x" ]]; then - if [ -n "$tap" ]; then - echo "not ok - find engine $name" - echo "Bail out! Could not find engine $name, aborting" - else - echo "Could not find engine $name, aborting" - fi + echo "Could not find binary for engine $engine, aborting" exit 1 fi - if [ -n "$tap" ]; then - echo "ok - find engine $name: $recent" - else - echo "Using engine $name from: $recent" + if [ "x$isnode" = "xfalse" ]; then + echo "Found binary for engine $engine: $recent $OPT" fi NITC=$recent } verbose=false +isnode=false +autosav=false stop=false -tapcount=0 engine=nitc +noskip= +savdirs= while [ $stop = false ]; do case $1 in -o) OPT="$OPT $2"; shift; shift;; -v) verbose=true; shift;; -h) usage; exit;; - --tap) tap=true; shift;; --engine) engine="$2"; shift; shift;; + --noskip) noskip=true; shift;; + --outdir) outdir="$2"; shift; shift;; + --compdir) compdir="$2"; shift; shift;; + --node) isnode=true; shift;; + --autosav) autosav=true; shift;; *) stop=true esac done +enginebinname=$engine +isinterpret= +case $engine in + nitc|nitg) + engine=nitg-s; + enginebinname=nitc; + OPT="--separate $OPT --compile-dir $compdir" + savdirs="sav/nitg-common/" + ;; + nitcs|nitg-s) + enginebinname=nitc; + OPT="--separate $OPT --compile-dir $compdir" + savdirs="sav/nitg-common/" + ;; + nitce|nitg-e) + enginebinname=nitc; + OPT="--erasure $OPT --compile-dir $compdir" + savdirs="sav/nitg-common/" + ;; + nitcsg|nitg-sg) + enginebinname=nitc; + OPT="--semi-global $OPT --compile-dir $compdir" + savdirs="sav/nitg-common/" + ;; + nitcg|nitg-g) + enginebinname=nitc; + OPT="--global $OPT --compile-dir $compdir" + savdirs="sav/nitg-common/" + ;; + nit) + engine=niti + isinterpret=true + ;; + niti) + enginebinname=nit + isinterpret=true + ;; + nitvm) + isinterpret=true + enginebinname=nit + OPT="--vm $OPT" + savdirs="sav/niti/" + ;; + emscripten) + enginebinname=nitc + OPT="-m emscripten_nodejs.nit --semi-global $OPT --compile-dir $compdir" + savdirs="sav/nitg-sg/" + ;; + nitc) + echo "disabled engine $engine" + exit 0 + ;; + *) + echo "unknown engine $engine" + exit 1 + ;; +esac + +savdirs="sav/$engine $savdirs sav/" # The default nitc compiler [ -z "$NITC" ] && find_nitc @@ -188,23 +457,26 @@ done # Set NIT_DIR if needed [ -z "$NIT_DIR" ] && export NIT_DIR=.. - # Mark to distinguish files among tests # MARK= -# File where error tests are outputed -# Old ERRLIST is backuped -ERRLIST=${ERRLIST:-errlist} -ERRLIST_TARGET=$ERRLIST - if [ $# = 0 ]; then usage; exit fi +# CLEAN the out directory +rm -rf "$outdir/" 2>/dev/null +mkdir "$outdir" 2>/dev/null + +# File where error tests are outputed +# Old ERRLIST is backuped +ERRLIST=${ERRLIST:-errlist} +ERRLIST_TARGET=$ERRLIST + # Initiate new ERRLIST if [ "x$ERRLIST" = "x" ]; then - ERRLIST=/dev=null + ERRLIST=/dev/null else ERRLIST=$ERRLIST.tmp > "$ERRLIST" @@ -212,16 +484,29 @@ fi ok="" nok="" +todos="" -# CLEAN the out directory -rm -rf out/ 2>/dev/null -mkdir out 2>/dev/null +if [ "x$XMLDIR" = "x" ]; then + xml="tests-$engine.xml" +else + sum=`echo $@ | md5sum | cut -f1 -d " "` + xml="$XMLDIR/tests-$engine-$sum.xml" + mkdir -p "$XMLDIR" +fi + +echo >$xml "" for ii in "$@"; do - if [ ! -f $ii ]; then + if [ ! -f "$ii" ]; then echo "File '$ii' does not exist." continue fi + f=`basename -- "$ii" .nit` + + pack="tests.${engine}".`echo $ii | perl -p -e 's|^../([^/]*)/([a-zA-Z_]*).*|\1.\2| || s|^([a-zA-Z]*)[^_]*_([a-zA-Z]*).*|\1.\2| || s|\W*([a-zA-Z_]*).*|\1|'` + + # Sould we skip the file for this engine? + need_skip "$f" "$f" "$pack" && continue tmp=${ii/../AA} if [ "x$tmp" = "x$ii" ]; then @@ -230,66 +515,105 @@ for ii in "$@"; do includes="-I alt" fi - f=`basename "$ii" .nit` - for i in "$ii" `./alterner.pl --start '#' --altsep '_' $ii`; do - bf=`basename $i .nit` - ff="out/$bf" - test -z "$tap" && echo -n "=> $bf: " + for i in "$ii" `./alterner.pl --start '#' --altsep '_' -- "$ii"`; do + bf=`basename -- "$i" .nit` + ff="$outdir/$bf" + + # Sould we skip the alternative for this engine? + need_skip "$bf" "$bf" "$pack" && continue + + echo -n "=> $bf: " if [ -f "$f.inputs" ]; then inputs="$f.inputs" + export MNIT_READ_INPUT="$f.inputs" else inputs=/dev/null + export MNIT_READ_INPUT=/dev/null + fi + + ffout="$ff.bin" + if [ "$engine" = "emscripten" ]; then + ffout="$ff.bin.js" fi - if [ "$engine" = "nit" ]; then - cat > "./$ff.bin" < "$ff.bin" < "$ff.cmp.err" > "$ff.compile.log" ERR=0 + echo 0.0 > "$ff.time.out" else + if skip_cc "$bf"; then + nocc="--no-cc" + else + nocc= + fi # Compile if [ "x$verbose" = "xtrue" ]; then echo "" - echo $NITC --no-color $OPT -o "$ff.bin" "$i" "$includes" + echo $NITC --no-color $OPT -o "$ffout" "$includes" $nocc "$i" fi - $NITC --no-color $OPT -o "$ff.bin" "$i" $includes 2> "$ff.cmp.err" > "$ff.compile.log" + NIT_NO_STACK=1 JNI_LIB_PATH=$JNI_LIB_PATH JAVA_HOME=$JAVA_HOME \ + saferun -o "$ff.time.out" $NITC --no-color $OPT -o "$ffout" $includes $nocc "$i" 2> "$ff.cmp.err" > "$ff.compile.log" ERR=$? if [ "x$verbose" = "xtrue" ]; then - cat "$ff.compile.log" - cat >&2 "$ff.cmp.err" + cat -- "$ff.compile.log" + cat >&2 -- "$ff.cmp.err" + fi + fi + if [ "$engine" = "emscripten" ]; then + echo > "$ff.bin" "nodejs $ffout \"\$@\"" + chmod +x "$ff.bin" + if grep "Fatal Error: more than one primitive class" "$ff.compile.log" > /dev/null; then + echo " [skip] do no not imports kernel" + echo >>$xml "" + continue fi fi if [ "$ERR" != 0 ]; then - test -z "$tap" && echo -n "! " - cat "$ff.cmp.err" "$ff.compile.log" > "$ff.res" - process_result $bf $bf - elif [ -x "./$ff.bin" ]; then - cp "$ff.cmp.err" "$ff.res" - test -z "$tap" && echo -n ". " + echo -n "! " + cat -- "$ff.compile.log" "$ff.cmp.err" > "$ff.res" + process_result "$bf" "$bf" "$pack" + elif [ -n "$nocc" ]; then + # not compiled + echo -n "nocc " + > "$ff.res" + process_result "$bf" "$bf" "$pack" + elif [ -x "$ff.bin" ]; then + if skip_exec "$bf"; then + # No exec + > "$ff.res" + process_result "$bf" "$bf" "$pack" + break + fi + echo -n ". " # Execute args="" if [ "x$verbose" = "xtrue" ]; then echo "" - echo "NIT_NO_STACK=1 ./$ff.bin" $args + echo "NIT_NO_STACK=1 $ff.bin" $args fi - NIT_NO_STACK=1 "./$ff.bin" $args < "$inputs" >> "$ff.res" 2>"$ff.err" + NIT_NO_STACK=1 LD_LIBRARY_PATH=$JNI_LIB_PATH \ + saferun -a -o "$ff.time.out" "$ff.bin" $args < "$inputs" > "$ff.res" 2>"$ff.err" + mv "$ff.time.out" "$ff.times.out" + awk '{ SUM += $1} END { print SUM }' "$ff.times.out" > "$ff.time.out" + if [ "x$verbose" = "xtrue" ]; then - cat "$ff.res" - cat >&2 "$ff.err" + cat -- "$ff.res" + cat >&2 -- "$ff.err" fi if [ -f "$ff.write" ]; then - cat "$ff.write" >> "$ff.res" + cat -- "$ff.write" >> "$ff.res" elif [ -d "$ff.write" ]; then - LANG=C /bin/ls -F $ff.write >> "$ff.res" - fi - if [ -s "$ff.err" ]; then - cat "$ff.err" >> "$ff.res" + LANG=C /bin/ls -F "$ff.write" >> "$ff.res" fi - process_result $bf $bf + cp -- "$ff.res" "$ff.res2" + cat -- "$ff.cmp.err" "$ff.err" "$ff.res2" > "$ff.res" + process_result "$bf" "$bf" "$pack" if [ -f "$f.args" ]; then fargs=$f.args @@ -299,63 +623,86 @@ END args="$line" bff=$bf"_args"$cptr fff=$ff"_args"$cptr + name="$bf args $cptr" + + # Sould we skip the input for this engine? + need_skip "$bff" " $name" "$pack" && continue + + # use a specific inputs file, if required + if [ -f "$bff.inputs" ]; then + ffinputs="$bff.inputs" + else + ffinputs="$inputs" + fi + rm -rf "$fff.res" "$fff.err" "$fff.write" 2> /dev/null if [ "x$verbose" = "xtrue" ]; then echo "" - echo "NIT_NO_STACK=1 ./$ff.bin" $args + echo "NIT_NO_STACK=1 $ff.bin" $args fi - test -z "$tap" && echo -n "==> args #"$cptr " " - sh -c "NIT_NO_STACK=1 ./$ff.bin ''$args < $inputs > $fff.res 2>$fff.err" + echo -n "==> $name " + echo "$ff.bin $args" > "$fff.bin" + chmod +x "$fff.bin" + WRITE="$fff.write" saferun -o "$fff.time.out" sh -c "NIT_NO_STACK=1 $fff.bin < $ffinputs > $fff.res 2>$fff.err" if [ "x$verbose" = "xtrue" ]; then - cat "$fff.res" - cat >&2 "$fff.err" + cat -- "$fff.res" + cat >&2 -- "$fff.err" fi if [ -f "$fff.write" ]; then - cat "$fff.write" >> "$fff.res" + cat -- "$fff.write" >> "$fff.res" elif [ -d "$fff.write" ]; then - LANG=C /bin/ls -F $fff.write >> "$fff.res" + LANG=C /bin/ls -F -- "$fff.write" >> "$fff.res" fi if [ -s "$fff.err" ]; then - cat "$fff.err" >> "$fff.res" + cp -- "$fff.res" "$fff.res2" + cat -- "$fff.err" "$fff.res2" > "$fff.res" fi - process_result $bff " args #$cptr" - done < $fargs + process_result "$bff" " $name" "$pack" + done < "$fargs" fi + elif [ -f "$ff.bin" ]; then + #Not executable (platform?)" + > "$ff.res" + process_result "$bf" "$bf" "$pack" else - test -z "$tap" && echo -n "! " - cat "$ff.cmp.err" > "$ff.res" + echo -n "! " + cat -- "$ff.cmp.err" > "$ff.res" echo "Compilation error" > "$ff.res" - process_result $bf "$bf" + process_result "$bf" "$bf" "$pack" fi done done -if [ -n "$tap" ]; then - echo "1..$tapcount" - echo "# ok:" `echo $ok | wc -w` - echo "# not ok:" `echo $nok | wc -w` - echo "# no sav:" `echo $nos | wc -w` - exit -fi - -echo "ok: " `echo $ok | wc -w` "/" `echo $ok $nok $nos | wc -w` +if [ "x$isnode" = "xfalse" ]; then + echo "engine: $engine ($enginebinname $OPT)" + echo "ok: " `echo $ok | wc -w` "/" `echo $ok $nok $nos $todos | wc -w` -if [ -n "$nok" ]; then - echo "fail: $nok" - echo "There were $(echo $nok | wc -w) errors ! (see file $ERRLIST)" -fi -if [ -n "$nos" ]; then - echo "no sav: $nos" + if [ -n "$nok" ]; then + echo "fail: $nok" + echo "There were $(echo $nok | wc -w) errors ! (see file $ERRLIST)" + fi + if [ -n "$nos" ]; then + echo "no sav: $nos" + fi + if [ -n "$todos" ]; then + echo "todo/fixme: $todos" + fi + if [ -n "$remains" ]; then + echo "sav that remains: $remains" + fi fi # write $ERRLIST if [ "x$ERRLIST" != "x" ]; then - if [ -x "$ERRLIST_TARGET" ]; then + if [ -f "$ERRLIST_TARGET" ]; then mv "$ERRLIST_TARGET" "${ERRLIST_TARGET}.bak" fi - mv $ERRLIST $ERRLIST_TARGET + uniq $ERRLIST > $ERRLIST_TARGET + rm $ERRLIST fi +echo >>$xml "" + if [ -n "$nok" ]; then exit 1 else