#!/bin/sh

unset LANG LANGUAGE
unset LC_COLLATE
unset LC_CTYPE
unset LC_MONETARY
unset LC_MESSAGES
unset LC_NUMERIC
unset LC_TIME
unset LC_ALL

test -x hush || {
    echo "No ./hush - creating a link to ../../busybox"
    ln -s ../../busybox hush
}
if test -e ../../.config ; then
	eval $(sed -e '/^#/d' -e '/^$/d' -e 's:^:export :' ../../.config)
fi

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

THIS_SH="$PWD/hush"
export THIS_SH

do_test()
{
    test -d "$1" || return 0
    d=${d%/}
#   echo Running tests in directory "$1"
    (
    tret=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
#	echo Running test: "$x"
	(
	    "$THIS_SH" "./$x" >"$name.xx" 2>&1
	    test $? -eq 77 && rm -f "../$1-$x.fail" && exit 77
	    diff -u "$name.xx" "$name.right" >"../$1-$x.fail" && rm -f "$name.xx" "../$1-$x.fail"
	)
	case $? in
		0)  echo "$1/$x: ok";;
		77) echo "$1/$x: skip (feature disabled)";;
		*)  echo "$1/$x: fail"; tret=1;;
	esac
    done
    exit ${tret}
    )
}

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

ret=0

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

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

exit ${ret}
