#!/bin/sh
#
# runtest -- basically all this script does is find the proper expect
#	     shell and then run DejaGnu.
#
# Written by Rob Savoye <rob@welcomehome.org>
#

#
# Get the execution path to this script and the current directory.
#
mypath=${0-.}
if expr ${mypath} : '.*/.*' > /dev/null
then
    :
else
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
    for dir in $PATH
    do
	test -z "$dir" && dir=.
	if test -x $dir/$mypath
	then
	    mypath=$dir/$mypath
	    break
	fi
    done
    IFS="$save_ifs"
fi
execpath=`echo ${mypath} | sed  -e 's@/[^/]*$@@'`
# rootme=`pwd`

#
# get the name by which runtest was invoked and extract the config triplet
#
runtest=`echo ${mypath} | sed -e 's@^.*/@@'`
target=`echo $runtest | sed -e 's/-runtest$//'`
if [ "$target" != runtest ] ; then
    target="--target ${target}"
else
    target=""
fi

#
# Find the right expect binary to use. If a variable EXPECT exists,
# it takes precedence over all other tests. Otherwise look for a freshly
# built one, and then use one in the path.
#
if [ x"$EXPECT" != x ] ; then
  expectbin=$EXPECT
else
  if [ -x "$execpath/expect" ] ; then
    expectbin=$execpath/expect
  else
      expectbin=expect
    fi
fi

# just to be safe...
if [ -z "$expectbin" ]; then
  echo "ERROR: No expect shell found"
  exit 1
fi

# This wrapper script will set up run-time library search PATHs
if [ -x "$expectbin-bld.sh" ]; then
  expectbin="${CONFIG_SHELL-/bin/sh} $expectbin-bld.sh"
fi

#
# Extract a few options from the option list.
#
verbose=0
debug=""
for a in "$@" ; do
  case $a in
      -v|--v|-verb*|--verb*)    verbose=`expr $verbose + 1`;;
      -D0|--D0)       debug="-D 0" ;;
      -D1|--D1)       debug="-D 1" ;;
  esac
done

if expr $verbose \> 0 > /dev/null ; then
  echo Expect binary is $expectbin
fi

#
# find runtest.exp. First we look in it's installed location, otherwise
# start if from the source tree.
#
# runtest.exp is found in (autoconf-configure-set) @datadir@, but
# $execpath is @bindir@.  We're assuming that
#
# @datadir@ == @bindir@/../share
# or
# @datadir@ == @bindir@/../../share
#
# which is a very weak assumption
#
for i in `echo ${execpath} | sed  -e 's@/[^/]*$@/share/dejagnu@'` `echo ${execpath} | sed  -e 's@/[^/]*/[^/]*$@/share/dejagnu@'` $execpath ; do
    if expr $verbose \> 1 > /dev/null ; then
	echo Looking for $i/runtest.exp.
    fi
    if [ -f $i/runtest.exp ] ; then
	runpath=$i
	if expr $verbose \> 0 > /dev/null ; then
	    echo Using $i/runtest.exp as main test driver
	fi
        break;
    fi
done
# check for an environment variable
if [ x"$DEJAGNULIBS" != x ] ; then
    runpath=$DEJAGNULIBS
    if expr $verbose \> 0 > /dev/null ; then
	echo Using $DEJAGNULIBS/runtest.exp as main test driver
    fi
fi
if [ x"$runpath" = x ] ; then
    echo "ERROR: runtest.exp does not exist."
    exit 1
fi

exec $expectbin $debug -- $runpath/runtest.exp $target ${1+"$@"}
