#!/bin/sh

bindir="/usr/local/bin"
DEFAULT_TET_ROOT="/usr/local/share"
PACKAGE_VERSION="0.99.1"

TCC="${TCC-${bindir}/tcc}"
PERL=${PERL-perl}
XTS_CONFIG="${XTS_CONFIG-${bindir}/xts-config}"
XTS_REPORT="${XTS_REPORT-${bindir}/xts-report}"

prog=$0
config=
config_in="${TET_ROOT-$DEFAULT_TET_ROOT}/xts5/tetexec.cfg.in"
basedir=xts-results
scenario=

help()
{
	cat << EOF
Usage: $prog [OPTION]... [SCENARIO]
Execute the XTS tests in SCENARIO (all by default).

  -c, --config CONFIG		use the tet config file CONFIG
  -h, --help			display this help text and exit
  -o, --output DIRECTORY	output results in DIRECTORY
				  (default: $basedir)
  -V, --version			display the version and exit
EOF
}

while [ -n "$1" ]; do
	case "$1" in
	-c|--config)
		config=$2
		shift
		;;
	-o|--output)
		basedir=$2
		shift
		;;
	-h|--help)
		help
		exit 0
		;;
	-V|--version)
		echo $PACKAGE_VERSION
		exit 0
		;;
	-*)
		echo "error: unrecognized option \"$1\"" >&2
		echo "See \"$prog --help\" for more information" >&2
		exit 1
		;;
	*)
		if [ -n "$scenario" ]; then
			echo "error: only one scenario allowed" >&2
			exit 1
		fi
		scenario=$1
	esac
	shift
done

# Create the config file if necessary
if [ -z "$config" ]; then
	config=`mktemp tetexec.cfg.XXXXXXXXXX`
	trap 'rm -f "$config"' 0 1 2 3 15
	if ! "$PERL" "$XTS_CONFIG" < "$config_in" > "$config"; then
		echo "error: failed to create config file $config" >&2
		exit 1
	fi		
else
	if [ ! -r "$config" ]; then
		echo "error: cannot read config file $config" >&2
		exit 1
	fi
fi

# Create the output directory
outdir="$basedir/`date +%F-%T`"
if [ ! -d "$outdir" ] && ! mkdir -p "$outdir"; then
	echo "error: failed to create output directory $outdir" >&2
	exit 1
fi

# run the tests
"$TCC" -e -i "$outdir" -x "$config" xts5 $scenario
ret=$?

# generate a short report
"$XTS_REPORT" -d2 -f "$outdir/journal" > "$outdir/summary"

# return the tcc exit code
exit $ret
