117680Spst#! /bin/sh
298527Sfenner
317680Spst# Copyright (C) 2000-2002, 2004, 2005, 2011, 2012, 2016, 2020  Niels M��ller
417680Spst#
517680Spst# This program is free software; you can redistribute it and/or modify
617680Spst# it under the terms of the GNU General Public License as published by
717680Spst# the Free Software Foundation; either version 2 of the License, or
817680Spst# (at your option) any later version.
917680Spst#
1017680Spst# This program is distributed in the hope that it will be useful,
1117680Spst# but WITHOUT ANY WARRANTY; without even the implied warranty of
1217680Spst# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1317680Spst# GNU General Public License for more details.
1417680Spst#
1517680Spst# You should have received a copy of the GNU General Public License along
1617680Spst# with this program; if not, write to the Free Software Foundation, Inc.,
1717680Spst# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1817680Spst
1917680Spstfailed=0
2017680Spstall=0
2198527Sfenner
2298527Sfennerdebug='no'
2353146Sbriantestflags=''
2417680Spst
2517680Spstif [ -z "$srcdir" ] ; then
2617680Spst  srcdir=`pwd`
2717680Spstfi
2817680Spst
2917680Spstexport srcdir
3017680Spst
3117680Spstif [ -n "$TEST_SHLIB_DIR" ] ; then
3275118Sfenner  # Prepend to LD_LIBRARY_PATH, if it is alredy set.
3375118Sfenner  LD_LIBRARY_PATH="${TEST_SHLIB_DIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
3417680Spst  # For MACOS
3575118Sfenner  DYLD_LIBRARY_PATH="$TEST_SHLIB_DIR"
3675118Sfenner  # For Windows
3775118Sfenner  PATH="${TEST_SHLIB_DIR}:${PATH}"
3875118Sfenner  # For Wine
3975118Sfenner  WINEPATH="${TEST_SHLIB_DIR}${WINEPATH:+;$WINEPATH}"
4075118Sfenner
4175118Sfenner  export LD_LIBRARY_PATH
4275118Sfenner  export DYLD_LIBRARY_PATH
4375118Sfenner  export PATH
4498527Sfenner  export WINEPATH
4598527Sfennerfi
4675118Sfenner
4775118Sfenner# When used in make rules, we sometimes get the filenames VPATH
4875118Sfenner# expanded, but usually not.
4998527Sfennerfind_program () {
5098527Sfenner    case "$1" in
5175118Sfenner	*/*)
5275118Sfenner	  echo "$1"
5375118Sfenner	  ;;
5498527Sfenner	*)
5575118Sfenner	  if [ -x "$1" ] ; then
5675118Sfenner	      echo "./$1"
5798527Sfenner	  elif [ -x "$1.exe" ] ; then
5875118Sfenner	      echo "./$1.exe"
5975118Sfenner	  else
6098527Sfenner	      echo "$srcdir/$1"
6198527Sfenner	  fi
6298527Sfenner	  ;;
6398527Sfenner    esac
6417680Spst}
6517680Spst
6698527Sfennerenv_program () {
6717680Spst  if [ -x "$1" ] ; then
6817680Spst    if "$1"; then : ; else
6939297Sfenner      echo FAIL: $1
7017680Spst      exit 1
7117680Spst    fi
7239297Sfenner  fi
7317680Spst}
7417680Spst
7517680Spsttest_program () {
7656896Sfenner  testname=`basename "$1" .exe`
7756896Sfenner  testname=`basename "$testname" -test`
7817680Spst  if [ -z "$EMULATOR" ] || head -1 "$1" | grep '^#!' > /dev/null; then
7917680Spst    "$1" $testflags
8075118Sfenner  else
8117680Spst    $EMULATOR "$1" $testflags
8217680Spst  fi
8356896Sfenner  case "$?" in
8417680Spst      0)
8556896Sfenner	echo PASS: $testname
8698527Sfenner	all=`expr $all + 1`
8798527Sfenner	;;
8856896Sfenner      77)
8917680Spst	echo SKIP: $testname
9017680Spst      ;;
9117680Spst      *)
9217680Spst	echo FAIL: $testname
9317680Spst	failed=`expr $failed + 1`
9417680Spst	all=`expr $all + 1`
9556896Sfenner	;;
9675118Sfenner  esac
9717680Spst}
9826180Sfenner
9926180Sfennerenv_program `find_program setup-env`
10026180Sfenner
10126180Sfennerwhile test $# != 0
10226180Sfennerdo
10326180Sfenner  case "$1" in
10426180Sfenner  --debug)
10526180Sfenner    debug=yes
10626180Sfenner    ;;
10726180Sfenner  -v)
10826180Sfenner    testflags='-v'
10998527Sfenner    ;;
11098527Sfenner  -*)
11156896Sfenner    echo >&2 'Unknown option `'"$1'"
11298527Sfenner    exit 1
11356896Sfenner    ;;
11426180Sfenner  *)
11526180Sfenner    break
11626180Sfenner    ;;
11726180Sfenner  esac
11826180Sfenner  shift
11926180Sfennerdone
12026180Sfenner
12126180Sfenner# Comment out special handling for zero arguments to support separate
12226180Sfenner# tests-build/tests-run.
12326180Sfenner#if [ $# -eq 0 ] ; then
12426180Sfenner#  for f in *-test; do test_program "./$f"; done
12526180Sfenner#else
12626180Sfenner  for f in "$@" ; do test_program `find_program "$f"`; done
12726180Sfenner#fi
12826180Sfenner
12926180Sfennerif [ $failed -eq 0 ] ; then
13026180Sfenner  banner="All $all tests passed"
13117680Spstelse
13217680Spst  banner="$failed of $all tests failed"
13317680Spstfi
13417680Spstdashes=`echo "$banner" | sed s/./=/g`
13517680Spstecho "$dashes"
13617680Spstecho "$banner"
13717680Spstecho "$dashes"
13817680Spst
13917680Spstif [ "x$debug" = xno ] ; then
14098348Sfenner  env_program `find_program teardown-env`
14198348Sfennerfi
14298348Sfenner
14398348Sfenner[ "$failed" -eq 0 ]
14498348Sfenner