1#!@AM_TEST_RUNNER_SHELL@
2# @configure_input@
3#
4# Copyright (C) 2012-2021 Free Software Foundation, Inc.
5#
6# This program is free software; you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation; either version 2, or (at your option)
9# any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14# GNU General Public License for more details.
15#
16# You should have received a copy of the GNU General Public License
17# along with this program.  If not, see <https://www.gnu.org/licenses/>.
18
19# Run an Automake test from the command line.
20
21set -e; set -u
22
23: ${AM_TEST_RUNNER_SHELL='@AM_TEST_RUNNER_SHELL@'}
24: ${AM_PROVE_CMD='prove'}
25: ${AM_PROVEFLAGS='--merge --verbose'}
26: ${srcdir='@srcdir@'}
27: ${abs_srcdir='@abs_srcdir@'}
28: ${abs_builddir='@abs_builddir@'}
29: ${PATH_SEPARATOR='@PATH_SEPARATOR@'}
30
31# For sourcing of extra "shell libraries" by our test scripts.  As per
32# POSIX, sourcing a file with '.' will cause it to be looked up in $PATH
33# in case it is given with a relative name containing no slashes.
34if test "$srcdir" != .; then
35  PATH=$abs_srcdir/t/ax$PATH_SEPARATOR$PATH
36fi
37PATH=$abs_builddir/t/ax$PATH_SEPARATOR$PATH
38export PATH
39
40# For use by the testsuite framework.  The Automake test harness
41# define this, so we better do the same.
42export srcdir
43
44# Some testsuite-influential variables should be overridable from the
45# test scripts, but not from the environment.
46# Keep this in sync with the 'Makefile.am:AM_TESTS_ENVIRONMENT'.
47for v in \
48  required \
49  am_test_protocol \
50  am_serial_tests \
51  am_test_prefer_config_shell \
52  am_original_AUTOMAKE \
53  am_original_ACLOCAL \
54  am_test_lib_sourced \
55  test_lib_sourced \
56; do
57  eval "$v= && unset $v" || exit 1
58done
59unset v
60
61xecho () { printf '%s\n' "$*"; }
62error () { echo "$0: $*" >&2; exit 255; }
63
64# Some shell flags should be passed over to the test scripts.
65shell_opts=
66while test $# -gt 0; do
67  case $1 in
68    --help)
69       xecho "Usage: $0 [--shell=PATH] [-k] [SHELL-OPTIONS]" \
70             "[VAR=VALUE ...] TEST [TEST-OPTIONS]"
71       exit $?
72       ;;
73    --shell)
74       test $# -gt 1 || error "missing argument for option '$1'"
75       AM_TEST_RUNNER_SHELL=$2
76       shift
77       ;;
78    --shell=*)
79       AM_TEST_RUNNER_SHELL=${1#--shell=}
80       ;;
81    -o)
82       test $# -gt 1 || error "missing argument for option '$1'"
83       shell_opts="$shell_opts -o $2"
84       shift
85       ;;
86    -k|--keep-testdir|--keep-testdirs)
87       keep_testdirs=yes; export keep_testdirs;;
88    -*)
89       # Assume it is an option to pass through to the shell.
90       shell_opts="$shell_opts $1";;
91    *=*)
92       var=${1%%=*} val=${1#*=}
93       xecho "$var" | LC_ALL=C grep '^[a-zA-Z_][a-zA-Z0-9_]*$' >/dev/null \
94         || error "'$var': invalid variable name"
95       eval "$var=\$val && export $var" || exit 1
96       ;;
97     *)
98       break;;
99  esac
100  shift
101done
102
103test $# -gt 0 || error "missing argument"
104
105tst=$1; shift
106
107case $tst in
108  /*) ;;
109   *) if test -f ./$tst; then
110        tst=./$tst
111      # Support for VPATH build.
112      elif test -f $srcdir/$tst; then
113        tst=$srcdir/$tst
114      else
115        error "could not find test '$tst'"
116      fi
117      ;;
118esac
119
120case $tst in
121  *.sh)
122    exec $AM_TEST_RUNNER_SHELL $shell_opts "$tst" ${1+"$@"} ;;
123  *.tap)
124    exec "$AM_PROVE_CMD" $AM_PROVEFLAGS -e \
125         "$AM_TEST_RUNNER_SHELL $shell_opts" "$tst" ${1+"$@"} ;;
126  *)
127    error "test '$tst' has an unrecognized extension" ;;
128esac
129
130error "dead code reached"
131