#!/bin/sh

test -x ash || {
    echo "No ./ash?! Perhaps you want to run 'ln -s ../../busybox ash'"
    exit
}
test -x printenv || gcc -O2 -o printenv printenv.c || exit $?
test -x recho    || gcc -O2 -o recho    recho.c    || exit $?
test -x zecho    || gcc -O2 -o zecho    zecho.c    || exit $?

PATH="$PWD:$PATH" # for ash and recho/zecho/printenv
export PATH

THIS_SH="$PWD/ash"
export THIS_SH

do_test()
{
    test -d "$1" || return 0
    (
    cd "$1" || { echo "cannot cd $1!"; exit 1; }
    for x in run-*; do
	test -f "$x" || continue
	case "$x" in
	    "$0"|run-minimal|run-gprof) ;;
	    *.orig|*~) ;;
	    #*) echo $x ; sh $x ;;
	    *)
	    sh "$x" >"../$1-$x.fail" 2>&1 && \
	    { echo "$1/$x: ok"; rm "../$1-$x.fail"; } || echo "$1/$x: fail";
	    ;;
	esac
    done
    # Many bash run-XXX scripts just do this,
    # no point in duplication it all over the place
    for x in *.tests; do
	test -x "$x" || continue
	name="${x%%.tests}"
	test -f "$name.right" || continue
	{
	    "$THIS_SH" "./$x" >"$name.xx" 2>&1
	    diff -u "$name.xx" "$name.right" >"../$1-$x.fail" && rm -f "$name.xx" "../$1-$x.fail"
	} && echo "$1/$x: ok" || echo "$1/$x: fail"
    done
    )
}

# main part of this script
# Usage: run-all [directories]

if [ $# -lt 1 ]; then
    # All sub directories
    modules=`ls -d ash-*`

    for module in $modules; do
	echo do_test $module
	do_test $module
    done
else
    while [ $# -ge 1 ]; do
	if [ -d $1 ]; then
	    do_test $1
	fi
	shift
    done
fi
