diff options
author | Eric Blake <eblake@redhat.com> | 2010-09-17 15:54:59 -0600 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2010-09-17 15:57:49 -0600 |
commit | 2dd21704d63c4e7567695a9e43dc1631b930efe2 (patch) | |
tree | cf090976bf354b83bc2946b9a95001bb411aa9fc /tests | |
parent | 95732b834e5dead84fefa7b6d387f61048ed21b3 (diff) | |
download | coreutils-2dd21704d63c4e7567695a9e43dc1631b930efe2.tar.xz |
maint: update to latest gnulib
* gnulib: Update to latest.
* src/copy.c (copy_reg): Use fdutimens instead of gl_futimens.
* src/touch.c (touch): Adjust parameter order.
* tests/init.sh: Resync from upstream.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/init.sh | 117 |
1 files changed, 95 insertions, 22 deletions
diff --git a/tests/init.sh b/tests/init.sh index bc82d69a9..d655fbbb6 100644 --- a/tests/init.sh +++ b/tests/init.sh @@ -79,6 +79,19 @@ fail_() { warn_ "$ME_: failed test: $@"; Exit 1; } skip_() { warn_ "$ME_: skipped test: $@"; Exit 77; } framework_failure_() { warn_ "$ME_: set-up failure: $@"; Exit 99; } +# Sanitize this shell to POSIX mode, if possible. +DUALCASE=1; export DUALCASE +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; + esac +fi + # We require $(...) support unconditionally. # We require a few additional shell features only when $EXEEXT is nonempty, # in order to support automatic $EXEEXT emulation: @@ -90,44 +103,90 @@ framework_failure_() { warn_ "$ME_: set-up failure: $@"; Exit 99; } # shells until we find one that passes. If one is found, re-exec it. # If no acceptable shell is found, skip the current test. # +# The "...set -x; P=1 true 2>err..." test is to disqualify any shell that +# emits "P=1" into err, as /bin/sh from SunOS 5.11 and OpenBSD 4.7 do. +# # Use "9" to indicate success (rather than 0), in case some shell acts # like Solaris 10's /bin/sh but exits successfully instead of with status 2. +# Eval this code in a subshell to determine a shell's suitability. +# 10 - passes all tests; ok to use +# 9 - ok, but enabling "set -x" corrupts application stderr; prefer higher score +# ? - not ok gl_shell_test_script_=' test $(echo y) = y || exit 1 -test -z "$EXEEXT" && exit 9 +score_=10 +if test "$VERBOSE" = yes; then + test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9 +fi +test -z "$EXEEXT" && exit $score_ shopt -s expand_aliases alias a-b="echo zoo" v=abx test ${v%x} = ab \ && test ${v#a} = bx \ && test $(a-b) = zoo \ - && exit 9 + && exit $score_ ' if test "x$1" = "x--no-reexec"; then shift else - # 'eval'ing the above code makes Solaris 10's /bin/sh exit with $? set to 2. - # It does not evaluate any of the code after the "unexpected" `('. Thus, - # we must run it in a subshell. - ( eval "$gl_shell_test_script_" ) > /dev/null 2>&1 - if test $? = 9; then - : # The current shell is adequate. No re-exec required. - else - # Search for a shell that meets our requirements. - for re_shell_ in "${CONFIG_SHELL:-no_shell}" /bin/sh bash dash zsh pdksh fail - do - test "$re_shell_" = no_shell && continue - test "$re_shell_" = fail && skip_ failed to find an adequate shell + # Assume a working shell. Export to subshells (setup_ needs this). + gl_set_x_corrupts_stderr_=false + export gl_set_x_corrupts_stderr_ + + # Record the first marginally acceptable shell. + marginal_= + + # Search for a shell that meets our requirements. + for re_shell_ in __current__ "${CONFIG_SHELL:-no_shell}" \ + /bin/sh bash dash zsh pdksh fail + do + test "$re_shell_" = no_shell && continue + + # If we've made it all the way to the sentinel, "fail" without + # finding even a marginal shell, skip this test. + if test "$re_shell_" = fail; then + test -z "$marginal_" && skip_ failed to find an adequate shell + re_shell_=$marginal_ + break + fi + + # When testing the current shell, simply "eval" the test code. + # Otherwise, run it via $re_shell_ -c ... + if test "$re_shell_" = __current__; then + # 'eval'ing this code makes Solaris 10's /bin/sh exit with + # $? set to 2. It does not evaluate any of the code after the + # "unexpected" first `('. Thus, we must run it in a subshell. + ( eval "$gl_shell_test_script_" ) > /dev/null 2>&1 + else "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null - if test $? = 9; then - # Found an acceptable shell. - exec "$re_shell_" "$0" --no-reexec "$@" - echo "$ME_: exec failed" 1>&2 - exit 127 - fi - done + fi + + st_=$? + + # $re_shell_ works just fine. Use it. + test $st_ = 10 && break + + # If this is our first marginally acceptable shell, remember it. + if test "$st_:$marginal_" = 9: ; then + marginal_="$re_shell_" + gl_set_x_corrupts_stderr_=true + fi + done + + if test "$re_shell_" != __current__; then + # Found a usable shell. Preserve -v and -x. + case $- in + *v*x* | *x*v*) opts_=-vx ;; + *v*) opts_=-v ;; + *x*) opts_=-x ;; + *) opts_= ;; + esac + exec "$re_shell_" $opts_ "$0" --no-reexec "$@" + echo "$ME_: exec failed" 1>&2 + exit 127 fi fi @@ -181,6 +240,9 @@ find_exe_basenames_() feb_result_= feb_sp_= for feb_file_ in $feb_dir_/*.exe; do + if test "x$feb_file_" = "x$feb_dir_/*.exe" && test ! -f "$feb_file_"; then + return 0 + fi case $feb_file_ in *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;; *) # Remove leading file name components as well as the .exe suffix. @@ -246,7 +308,18 @@ path_prepend_() setup_() { - test "$VERBOSE" = yes && set -x + if test "$VERBOSE" = yes; then + # Test whether set -x may cause the selected shell to corrupt an + # application's stderr. Many do, including zsh-4.3.10 and the /bin/sh + # from SunOS 5.11, OpenBSD 4.7 and Irix 5.x and 6.5. + # If enabling verbose output this way would cause trouble, simply + # issue a warning and refrain. + if $gl_set_x_corrupts_stderr_; then + warn_ "using SHELL=$SHELL with 'set -x' corrupts stderr" + else + set -x + fi + fi initial_cwd_=$PWD |