#!/bin/sh
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
# 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
#
# This file is part of DejaGnu.
#
# DejaGnu is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# DejaGnu is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with DejaGnu; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.

# This script was written by Rob Savoye. The script finds the proper
# expect shell and then starts DejaGnu.

# 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@/[^/]*$@@')

# 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=$((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 its installed location,
# otherwise start if from the source tree.
#
# runtest.exp is found in @datadir@ (set by configure), 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 \
    /usr/share/dejagnu \
    /usr/local/share/dejagnu ; 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

if ! type "$expectbin" > /dev/null 2> /dev/null ; then
    echo "ERROR: unable to find expect in the PATH"
    exit 1
fi

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