#!/bin/sh
m4 --version
pwd=`pwd`
tmp=m4-tmp.$$
trap 'stat=$?; cd $pwd; rm -rf $tmp && exit $stat' 0
trap '(exit $?); exit $?' 1 2 13 15
framework_failure=0
mkdir $tmp || framework_failure=1
if test $framework_failure = 1; then
echo "$0: failure in testing framework" 1>&2
(exit 1); exit 1
fi
out=$tmp/m4-out
err=$tmp/m4-err
xout=$tmp/m4-xout
xerr=$tmp/m4-xerr
failed=
skipped=
m4=`m4 --help | sed -e 's/Usage: \(.*\) \[OPTION.*/\1/' \
-e 's/\\\\/\\\\\\\\/g' -e 1q`
examples=.
if test "x$1" = x-I ; then
examples="$2"
shift; shift
fi
for file
do
test -f "$file" || {
echo "No such file: $file"
continue
}
echo "Checking $file"
sed -e '/^dnl @/d' -e '/^\^D$/q' "$file" \
| LC_MESSAGES=C m4 -d -I "$examples" - >$out 2>$err
if test $? = 77 ; then
skipped="$skipped $file"
cat $err
continue
fi
sed -e '/^dnl @result{}/!d' -e 's///' -e "s|\.\./examples|$examples|" \
"$file" > $xout
if cmp -s $out $xout; then
:
else
failed="$failed $file:out"
echo `sed -e 's/^dnl //' -e 1q $file`
echo "$file: stdout mismatch"
diff $xout $out
fi
sed -e '/^dnl @error{}/!d' -e 's///' -e "s|^m4:|$m4:|" "$file" > $xerr
if cmp -s $err $xerr; then
:
else
failed="$failed $file:err"
echo `sed -e 's/^dnl //' -e 1q $file`
echo "$file: stderr mismatch"
diff $xerr $err
fi
done
rm -f $out $err $xout $xerr
echo
if test -n "$skipped"; then
echo "Skipped checks were:"
echo " $skipped"
fi
if test -z "$failed"; then
echo "All checks successful"
stat=0
else
echo "Failed checks were:"
echo " $failed"
stat=1
fi
(exit $stat); exit $stat