halt='use the print_ver_ function instead...' \
$(_sc_search_regexp)
+# Enforce print_ver_ tracking of dependencies
+# Each coreutils specific program a test requires
+# should be tagged by calling through env(1).
+sc_env_test_dependencies:
+ @cd $(top_srcdir) && GIT_PAGER= git grep -E \
+ "env ($$(build-aux/gen-lists-of-programs.sh --list-progs | \
+ grep -vF '[' |paste -d'|' -s))" tests | \
+ sed "s/\([^:]\):.*env \([^)' ]*\).*/\1 \2/" | uniq | \
+ while read test prog; do \
+ printf '%s' $$test | grep -q '\.pl$$' && continue; \
+ grep -q "print_ver_.* $$prog" $$test \
+ || echo $$test should call: print_ver_ $$prog; \
+ done | grep . && exit 1 || :
+
# Use framework_failure_, not the old name without the trailing underscore.
sc_prohibit_framework_failure:
@prohibit='\<framework_''failure\>' \
# Not installed by "make install", but must be built when creating
# a distribution tarball.
-EXTRA_MANS=`for p in $no_install_progs_default; do echo man/$p.1; done`
+EXTRA_MANS=`for p in $no_install_progs_default $gl_no_install_prog; do
+ echo man/$p.1
+ done`
# Replace all the programs by the single binary and symlinks if specified.
single_binary_progs=
# sourcing init.sh.
print_ver_()
{
+ require_built_ "$@"
if test "$VERBOSE" = yes; then
local i
for i in $*; do
# To indicate that $prog is a shell built-in, you'd make it a string 'ref'.
# E.g., call run_tests ($prog, \$prog, \@Tests, $save_temps, $verbose);
# If it's a ref, invoke it via "env":
+ my $built_prog = ref $prog ? $$prog : $prog;
my @prog = ref $prog ? (qw(env --), $$prog) : $prog;
# Warn about empty t_spec.
}
return 1 if $bad_test_name;
+ $ENV{built_programs} =~ /\b$built_prog\b/ ||
+ CuSkip::skip "required program(s) not built [$built_prog]\n";
+
# FIXME check exit status
system (@prog, '--version') if $verbose;
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ cp getfacl setfacl
+print_ver_ cp
require_acl_
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ dd
+print_ver_ dd printf
{
# Two lines, EBCDIC " A A" and " A ", followed by all the bytes in order.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
+print_ver_ du
export LC_ALL=C
export TZ=UTC0
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
+print_ver_ du
mkdir -p a/b/c/d/e || framework_failure_
printf 'a/b/c\na/b\na\n' > exp || framework_failure_
endif
# Options passed to the perl invocations running the perl test scripts.
-TESTSUITE_PERL_OPTIONS = -w -I$(srcdir)/tests -MCoreutils -MCuSkip
+TESTSUITE_PERL_OPTIONS = -w -I$(srcdir)/tests -MCuSkip -MCoreutils
# '$f' is set by the Automake-generated test harness to the path of the
# current test script stripped of VPATH components, and is used by the
# CuTmpdir module to determine the name of the temporary files to be
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ ls
+print_ver_ ls printf
require_root_
grep '^#define HAVE_CAP 1' $CONFIG_HEADER > /dev/null \
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ ls
+print_ver_ ls test
symlink_to_rel=
for i in /*; do
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ arch
-require_built_ arch
-
arch > out || fail=1
uname -m > exp || fail=1
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ chroot
-
-require_built_ chroot
+print_ver_ chroot pwd
# These tests verify exact status of internal failure; since none of
# them actually run a command, we don't need root privileges
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ groups
-require_built_ groups
# Coreutils 6.9 and earlier failed to display information on first argument
# if later argument was --.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ groups
-require_built_ groups
groups --version | sed 's/^groups/id/; /^$/q' > out || fail=1
id --version | sed '/^$/q' > exp || fail=1
# Use env to avoid invoking built-in sleep of Solaris 11's /bin/sh.
kill_setup () {
- env sleep 10m & pid=$!
+ external=env
+ $external sleep 10m & pid=$!
args=$pid
}
# that cannot be done.
sub setuid_setup()
{
- my $test = shell_quote "$ENV{abs_top_builddir}/src/test";
+ my $test = 'env test';
system (qq(touch setuid && chmod u+s setuid && $test -u setuid &&
touch setgid && chmod g+s setgid && $test -g setgid &&
mkdir sticky && chmod +t sticky && $test -k sticky &&
# printenv as a builtin, so we must invoke it via "env".
# But beware of $_, set by many shells to the last command run.
# Also, filter out LD_PRELOAD, which is set when running under valgrind.
-# Note the apparently redundant "env env": this is to ensure to get
+# Note the apparently redundant "env env": this is to ensure to get
# env's output the same way as that of printenv and works around a bug
# on aarch64 at least where libc's execvp reverses the order of the
# output.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-prog='env printf'
-
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ printf
+prog='env printf'
+
# Equivalent output to ls --quoting=shell-escape
-env printf '%q\n' '' "'" a 'a b' '~a' 'a~' "$(env printf %b 'a\r')" > out
+$prog '%q\n' '' "'" a 'a b' '~a' 'a~' "$($prog %b 'a\r')" > out
cat <<\EOF > exp || framework_failure_
''
''\'''
if test "$LOCALE_FR_UTF8" != "none"; then
(
#printable multi-byte
- LC_ALL=$f env printf '%q\n' 'áḃç' > out
+ LC_ALL=$f $prog '%q\n' 'áḃç' > out
#non-printable multi-byte
- LC_ALL=$f env printf '%q\n' "$(LC_ALL=$f env printf '\u0378')" >> out
+ LC_ALL=$f $prog '%q\n' "$(LC_ALL=$f $prog '\u0378')" >> out
#printable multi-byte in C locale
- LC_ALL=C env printf '%q\n' 'áḃç' >> out
+ LC_ALL=C $prog '%q\n' 'áḃç' >> out
)
cat <<\EOF > exp || framework_failure_
áḃç
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ readlink
+print_ver_ readlink pwd
cwd=$(env pwd -P)
# To trigger this bug, we have to construct a name/situation during
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ sort
+print_ver_ sort printf
number() { cat -n | sed 's/^ *//'; }
print_ver_ stdbuf
getlimits_
-require_built_ stdbuf
# stdbuf fails when the absolute top build dir name contains e.g.,
# space, TAB, NL
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
-my $prog = "$ENV{abs_top_builddir}/src/test";
my @Tests =
(
# In coreutils-5.93, this diagnostic lacked the newline.
my $save_temps = $ENV{DEBUG};
my $verbose = $ENV{VERBOSE};
-
-my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
+my $prog = 'test';
+my $fail = run_tests ($program_name, \$prog, \@Tests, $save_temps, $verbose);
exit $fail;
{
my $exp = new Expect;
$exp->log_user(0);
+ $ENV{built_programs} =~ /\b$cmd\b/ || next;
$exp->spawn("$cmd 2> $stderr")
or (warn "$ME: cannot run '$cmd': $!\n"), $fail=1, next;
# No input for cut -f2.
# Check the many small items case,
# both fitting and overflowing the internal buffer
-if env true $(seq 4000); then
+external=env
+if external true $(seq 4000); then
for i in 100 4000; do
seq $i | paste -s -d ' ' | sed p > out.1
yes $(seq $i) | head -n2 > out.2
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ mv getfacl setfacl
+print_ver_ mv
require_acl_
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ readlink
+print_ver_ readlink pwd
pwd=$(pwd)
my_pwd=$(env pwd -P)
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ readlink
+print_ver_ readlink pwd
pwd=$(pwd)
my_pwd=$(env pwd -P)
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ readlink
+print_ver_ readlink pwd
pwd=$(pwd)
my_pwd=$(env pwd -P)
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ tail
+print_ver_ tail sleep
# Terminate any background gdb/tail process
cleanup_() {
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ tail
+print_ver_ tail sleep
# Terminate any background gdb/tail process
cleanup_() {
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ touch
+print_ver_ touch test
touch -c no-file > /dev/null 2>&1 || fail=1
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ touch
+print_ver_ touch test
ln -s nowhere dangling || framework_failure_
touch file || framework_failure_