diff options
33 files changed, 55 insertions, 37 deletions
@@ -527,6 +527,20 @@ sc_prohibit_verbose_version: 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\>' \ diff --git a/configure.ac b/configure.ac index fc1a0526b..66c8cbe16 100644 --- a/configure.ac +++ b/configure.ac @@ -517,7 +517,9 @@ man1_MANS=` # 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= @@ -659,6 +659,7 @@ retry_delay_() # sourcing init.sh. print_ver_() { + require_built_ "$@" if test "$VERBOSE" = yes; then local i for i in $*; do diff --git a/tests/Coreutils.pm b/tests/Coreutils.pm index bd2088f65..632960ae0 100644 --- a/tests/Coreutils.pm +++ b/tests/Coreutils.pm @@ -224,6 +224,7 @@ sub run_tests ($$$$$) # 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. @@ -271,6 +272,9 @@ sub run_tests ($$$$$) } 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; diff --git a/tests/cp/acl.sh b/tests/cp/acl.sh index e397ff063..591479c0b 100755 --- a/tests/cp/acl.sh +++ b/tests/cp/acl.sh @@ -18,7 +18,7 @@ # 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_ diff --git a/tests/dd/ascii.sh b/tests/dd/ascii.sh index be6494a0b..5f96a2d3e 100755 --- a/tests/dd/ascii.sh +++ b/tests/dd/ascii.sh @@ -17,7 +17,7 @@ # 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. diff --git a/tests/du/bigtime.sh b/tests/du/bigtime.sh index 95fa1932d..990853ecd 100755 --- a/tests/du/bigtime.sh +++ b/tests/du/bigtime.sh @@ -17,6 +17,7 @@ # 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 diff --git a/tests/du/max-depth.sh b/tests/du/max-depth.sh index 25ad46896..3c0b0bc00 100755 --- a/tests/du/max-depth.sh +++ b/tests/du/max-depth.sh @@ -17,6 +17,7 @@ # 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_ diff --git a/tests/local.mk b/tests/local.mk index f65f7bcc8..675607e7a 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -32,7 +32,7 @@ TESTSUITE_PERL = $(SHELL) $(srcdir)/no-perl 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 diff --git a/tests/ls/capability.sh b/tests/ls/capability.sh index bd32be263..2a85c7c47 100755 --- a/tests/ls/capability.sh +++ b/tests/ls/capability.sh @@ -17,7 +17,7 @@ # 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 \ diff --git a/tests/ls/root-rel-symlink-color.sh b/tests/ls/root-rel-symlink-color.sh index 0b977fcb6..41ad34205 100755 --- a/tests/ls/root-rel-symlink-color.sh +++ b/tests/ls/root-rel-symlink-color.sh @@ -17,7 +17,7 @@ # 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 diff --git a/tests/misc/arch.sh b/tests/misc/arch.sh index d5ae58228..1c924a0cf 100755 --- a/tests/misc/arch.sh +++ b/tests/misc/arch.sh @@ -19,8 +19,6 @@ . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src print_ver_ arch -require_built_ arch - arch > out || fail=1 uname -m > exp || fail=1 diff --git a/tests/misc/chroot-fail.sh b/tests/misc/chroot-fail.sh index 14499edd7..fe4178b1e 100755 --- a/tests/misc/chroot-fail.sh +++ b/tests/misc/chroot-fail.sh @@ -18,9 +18,7 @@ . "${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 diff --git a/tests/misc/groups-dash.sh b/tests/misc/groups-dash.sh index 8f7ec7590..1d9674324 100755 --- a/tests/misc/groups-dash.sh +++ b/tests/misc/groups-dash.sh @@ -18,7 +18,6 @@ . "${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 --. diff --git a/tests/misc/groups-version.sh b/tests/misc/groups-version.sh index 443944352..f6de3f2ef 100755 --- a/tests/misc/groups-version.sh +++ b/tests/misc/groups-version.sh @@ -18,7 +18,6 @@ . "${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 diff --git a/tests/misc/help-version.sh b/tests/misc/help-version.sh index 29468edbd..1878ae94d 100755 --- a/tests/misc/help-version.sh +++ b/tests/misc/help-version.sh @@ -213,7 +213,8 @@ id_setup () { args=-u; } # 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 } diff --git a/tests/misc/ls-misc.pl b/tests/misc/ls-misc.pl index d3897737e..6932e4d0a 100755 --- a/tests/misc/ls-misc.pl +++ b/tests/misc/ls-misc.pl @@ -55,7 +55,7 @@ sub shell_quote($) # 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 && diff --git a/tests/misc/printenv.sh b/tests/misc/printenv.sh index 862b48ba8..0be97e880 100755 --- a/tests/misc/printenv.sh +++ b/tests/misc/printenv.sh @@ -23,7 +23,7 @@ print_ver_ printenv # 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. diff --git a/tests/misc/printf-quote.sh b/tests/misc/printf-quote.sh index 73fc404b8..e6183007b 100755 --- a/tests/misc/printf-quote.sh +++ b/tests/misc/printf-quote.sh @@ -16,13 +16,13 @@ # 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_ '' ''\''' @@ -40,11 +40,11 @@ f=$LOCALE_FR_UTF8 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_ áḃç diff --git a/tests/misc/readlink-fp-loop.sh b/tests/misc/readlink-fp-loop.sh index 50ada55e8..0e18fe72b 100755 --- a/tests/misc/readlink-fp-loop.sh +++ b/tests/misc/readlink-fp-loop.sh @@ -17,7 +17,7 @@ # 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 diff --git a/tests/misc/sort-debug-keys.sh b/tests/misc/sort-debug-keys.sh index 776fb67cf..a0a287401 100755 --- a/tests/misc/sort-debug-keys.sh +++ b/tests/misc/sort-debug-keys.sh @@ -17,7 +17,7 @@ # 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/^ *//'; } diff --git a/tests/misc/stdbuf.sh b/tests/misc/stdbuf.sh index 428d4a2f1..66b644bdd 100755 --- a/tests/misc/stdbuf.sh +++ b/tests/misc/stdbuf.sh @@ -20,7 +20,6 @@ print_ver_ stdbuf getlimits_ -require_built_ stdbuf # stdbuf fails when the absolute top build dir name contains e.g., # space, TAB, NL diff --git a/tests/misc/test-diag.pl b/tests/misc/test-diag.pl index f498d1a80..c120509c7 100755 --- a/tests/misc/test-diag.pl +++ b/tests/misc/test-diag.pl @@ -23,7 +23,6 @@ use strict; # 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. @@ -34,6 +33,6 @@ my @Tests = 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; diff --git a/tests/misc/tty-eof.pl b/tests/misc/tty-eof.pl index c1b4b785f..f7f549207 100755 --- a/tests/misc/tty-eof.pl +++ b/tests/misc/tty-eof.pl @@ -68,6 +68,7 @@ $@ { 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. diff --git a/tests/misc/yes.sh b/tests/misc/yes.sh index 79f8b87c0..a5e81776e 100755 --- a/tests/misc/yes.sh +++ b/tests/misc/yes.sh @@ -31,7 +31,8 @@ done # 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 diff --git a/tests/mv/acl.sh b/tests/mv/acl.sh index b09125c5a..d1471dc22 100755 --- a/tests/mv/acl.sh +++ b/tests/mv/acl.sh @@ -18,7 +18,7 @@ # 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_ diff --git a/tests/readlink/can-e.sh b/tests/readlink/can-e.sh index 05f297b7c..eb49bc648 100755 --- a/tests/readlink/can-e.sh +++ b/tests/readlink/can-e.sh @@ -17,7 +17,7 @@ # 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) diff --git a/tests/readlink/can-f.sh b/tests/readlink/can-f.sh index 4b25fc63d..b157bbf6e 100755 --- a/tests/readlink/can-f.sh +++ b/tests/readlink/can-f.sh @@ -17,7 +17,7 @@ # 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) diff --git a/tests/readlink/can-m.sh b/tests/readlink/can-m.sh index 2eb13565a..0bcbd64a7 100755 --- a/tests/readlink/can-m.sh +++ b/tests/readlink/can-m.sh @@ -17,7 +17,7 @@ # 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) diff --git a/tests/tail-2/inotify-race.sh b/tests/tail-2/inotify-race.sh index 4ce05083f..546cb8525 100755 --- a/tests/tail-2/inotify-race.sh +++ b/tests/tail-2/inotify-race.sh @@ -21,7 +21,7 @@ # 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_() { diff --git a/tests/tail-2/inotify-race2.sh b/tests/tail-2/inotify-race2.sh index 1e01d5051..78d8b548a 100755 --- a/tests/tail-2/inotify-race2.sh +++ b/tests/tail-2/inotify-race2.sh @@ -20,7 +20,7 @@ # 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_() { diff --git a/tests/touch/no-create-missing.sh b/tests/touch/no-create-missing.sh index 7ad1a3a9a..90ec6dc69 100755 --- a/tests/touch/no-create-missing.sh +++ b/tests/touch/no-create-missing.sh @@ -17,7 +17,7 @@ # 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 diff --git a/tests/touch/no-dereference.sh b/tests/touch/no-dereference.sh index fc0c72378..cddcbbeaf 100755 --- a/tests/touch/no-dereference.sh +++ b/tests/touch/no-dereference.sh @@ -17,7 +17,7 @@ # 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_ |