mirror of
https://https.git.savannah.gnu.org/git/gnulib.git
synced 2026-04-28 06:33:36 +00:00
* all-modules: Update comments. * build-aux/install-reloc: Likewise. * build-aux/reloc-ldflags: Likewise. * gnulib-tool: Likewise. * gnulib-tool.py: Likewise. * gnulib-tool.sh: Likewise. * lib/aligned-malloc.h: Likewise. * lib/boot-time.c: Likewise. * lib/c32is-impl.h: Likewise. * lib/c32srtombs-state.c: Likewise. * lib/c32to-impl.h: Likewise. * lib/c32width.c: Likewise. * lib/errno.in.h: Likewise. * lib/euidaccess.c: Likewise. * lib/fbufmode.c: Likewise. * lib/fenv-except-state-get.c: Likewise. * lib/fenv-except-state-set.c: Likewise. * lib/fenv-except-tracking-clear.c: Likewise. * lib/fenv-except-tracking-set.c: Likewise. * lib/fenv-except-tracking-test.c: Likewise. * lib/fenv-except-trapping.c: Likewise. * lib/fenv-round.c: Likewise. * lib/fflush.c: Likewise. * lib/fileblocks.c: Likewise. * lib/forkpty.c: Likewise. * lib/fpending.c: Likewise. * lib/fpurge.c: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.c: Likewise. * lib/freadptr.c: Likewise. * lib/freadseek.c: Likewise. * lib/fseeko.c: Likewise. * lib/fseterr.c: Likewise. * lib/fsusage.c: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.c: Likewise. * lib/getdomainname.c: Likewise. * lib/idpriv-drop.c: Likewise. * lib/idpriv-droptemp.c: Likewise. * lib/limits.in.h: Likewise. * lib/mbrtoc16.c: Likewise. * lib/mbrtoc32.c: Likewise. * lib/mbsrtoc32s-state.c: Likewise. * lib/mbsrtowcs-state.c: Likewise. * lib/mbtowc-lock.h: Likewise. * lib/minmax.h: Likewise. * lib/netdb.in.h: Likewise. * lib/pipe-filter-ii.c: Likewise. * lib/posix_openpt.c: Likewise. * lib/ptsname_r.c: Likewise. * lib/readutmp.c: Likewise. * lib/readutmp.h: Likewise. * lib/resource-ext.h: Likewise. * lib/safe-read.h: Likewise. * lib/safe-write.h: Likewise. * lib/save-cwd.c: Likewise. * lib/stdbool.in.h: Likewise. * lib/striconv.c: Likewise. * lib/striconveh.c: Likewise. * lib/termcap.h: Likewise. * lib/terminfo.h: Likewise. * lib/unistd.in.h: Likewise. * lib/vasnprintf.c: Likewise. * lib/wcrtomb.c: Likewise. * lib/wcsrtombs-state.c: Likewise. * m4/fenv-environment.m4: Likewise. * m4/fenv-exceptions-state.m4: Likewise. * m4/fenv-exceptions-tracking.m4: Likewise. * m4/fenv-rounding.m4: Likewise. * m4/fmod.m4: Likewise. * m4/getdomainname.m4: Likewise. * m4/getloadavg.m4: Likewise. * m4/getopt.m4: Likewise. * m4/hypot.m4: Likewise. * m4/hypotf.m4: Likewise. * m4/hypotl.m4: Likewise. * m4/iconv.m4: Likewise. * m4/intl-thread-locale.m4: Likewise. * m4/largefile.m4: Likewise. * m4/libdl.m4: Likewise. * m4/locale-ja.m4: Likewise. * m4/locale_h.m4: Likewise. * m4/log.m4: Likewise. * m4/log10.m4: Likewise. * m4/log10f.m4: Likewise. * m4/logf.m4: Likewise. * m4/modf.m4: Likewise. * m4/modff.m4: Likewise. * m4/modfl.m4: Likewise. * m4/pthread-rwlock.m4: Likewise. * m4/semaphore.m4: Likewise. * m4/socklen.m4: Likewise. * m4/stdint.m4: Likewise. * m4/strtod.m4: Likewise. * m4/strtof.m4: Likewise. * m4/strtold.m4: Likewise. * modules/sigsegv: Likewise. * posix-modules: Likewise. * pygnulib/GLImport.py: Likewise. * tests/init.sh: Likewise. * tests/test-echo.sh: Likewise. * tests/test-isatty.c: Likewise. * tests/test-math-h.c: Likewise. * tests/test-nonblocking-pipe.h: Likewise. * tests/test-nonblocking-socket.h: Likewise. * tests/test-strtod.h: Likewise. * tests/test-strtof.h: Likewise. * tests/test-strtold.h: Likewise. * tests/test-vasnprintf.c: Likewise. * tests/test-vasnwprintf.c: Likewise.
166 lines
5.2 KiB
Bash
Executable File
166 lines
5.2 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
# func_exit STATUS
|
|
# exit with status
|
|
func_exit ()
|
|
{
|
|
(exit $1); exit $1
|
|
}
|
|
|
|
# func_fatal_error message
|
|
# outputs to stderr a fatal error message, and terminates the program.
|
|
func_fatal_error ()
|
|
{
|
|
echo "test-echo.sh: *** $1" 1>&2
|
|
echo "test-echo.sh: *** Stop." 1>&2
|
|
func_exit 1
|
|
}
|
|
|
|
# Ensure an 'echo' command that does not interpret backslashes.
|
|
# Test cases:
|
|
# echo '\n' | wc -l prints 1 when OK, 2 when KO
|
|
# echo '\t' | grep t > /dev/null has return code 0 when OK, 1 when KO
|
|
# This problem is a weird heritage from SVR4. BSD got it right (except that
|
|
# BSD echo interprets '-n' as an option, which is also not desirable).
|
|
# Nowadays the problem occurs in 4 situations:
|
|
# - in bash, when the shell option xpg_echo is set (bash >= 2.04)
|
|
# or when it was built with --enable-usg-echo-default (bash >= 2.0)
|
|
# or when it was built with DEFAULT_ECHO_TO_USG (bash < 2.0),
|
|
# - in zsh, when sh-emulation is not set,
|
|
# - in ksh (e.g. AIX /bin/sh and Solaris /usr/xpg4/bin/sh are ksh instances,
|
|
# and HP-UX /bin/sh behaves similarly),
|
|
# - in Solaris /bin/sh.
|
|
# We try the following workarounds:
|
|
# - for all: respawn using $CONFIG_SHELL if that is set and works.
|
|
# - for bash >= 2.04: unset the shell option xpg_echo.
|
|
# - for bash >= 2.0: define echo to a function that uses the printf built-in.
|
|
# - for bash < 2.0: define echo to a function that uses cat of a here document.
|
|
# - for zsh: turn sh-emulation on.
|
|
# - for ksh: alias echo to 'print -r'.
|
|
# - for ksh: alias echo to a function that uses cat of a here document.
|
|
# - for Solaris /bin/sh: respawn using /bin/ksh and rely on the ksh workaround.
|
|
# - otherwise: respawn using /bin/sh and rely on the workarounds.
|
|
# When respawning, we pass --no-reexec as first argument, so as to avoid
|
|
# turning this script into a fork bomb in unlucky situations.
|
|
have_echo=
|
|
if echo '\t' | grep t > /dev/null; then
|
|
have_echo=yes # Lucky!
|
|
fi
|
|
# Try the workarounds.
|
|
# Respawn using $CONFIG_SHELL if that is set and works.
|
|
if test -z "$have_echo" \
|
|
&& test "X$1" != "X--no-reexec" \
|
|
&& test -n "$CONFIG_SHELL" \
|
|
&& test -f "$CONFIG_SHELL" \
|
|
&& $CONFIG_SHELL -c 'echo '\t' | grep t > /dev/null'; then
|
|
exec $CONFIG_SHELL "$0" --no-reexec "$@"
|
|
exit 127
|
|
fi
|
|
# For bash >= 2.04: unset the shell option xpg_echo.
|
|
if test -z "$have_echo" \
|
|
&& test -n "$BASH_VERSION" \
|
|
&& (shopt -o xpg_echo; echo '\t' | grep t > /dev/null) 2>/dev/null; then
|
|
shopt -o xpg_echo
|
|
have_echo=yes
|
|
fi
|
|
# For bash >= 2.0: define echo to a function that uses the printf built-in.
|
|
# For bash < 2.0: define echo to a function that uses cat of a here document.
|
|
# (There is no win in using 'printf' over 'cat' if it is not a shell built-in.)
|
|
if test -z "$have_echo" \
|
|
&& test -n "$BASH_VERSION"; then \
|
|
if type printf 2>/dev/null | grep / > /dev/null; then
|
|
# 'printf' is not a shell built-in.
|
|
echo ()
|
|
{
|
|
cat <<EOF
|
|
$*
|
|
EOF
|
|
}
|
|
else
|
|
# 'printf' is a shell built-in.
|
|
echo ()
|
|
{
|
|
printf '%s\n' "$*"
|
|
}
|
|
fi
|
|
if echo '\t' | grep t > /dev/null; then
|
|
have_echo=yes
|
|
fi
|
|
fi
|
|
# For zsh: turn sh-emulation on.
|
|
if test -z "$have_echo" \
|
|
&& test -n "$ZSH_VERSION" \
|
|
&& (emulate sh) >/dev/null 2>&1; then
|
|
emulate sh
|
|
fi
|
|
# For ksh: alias echo to 'print -r'.
|
|
if test -z "$have_echo" \
|
|
&& (type print) >/dev/null 2>&1; then
|
|
# A 'print' command exists.
|
|
if type print 2>/dev/null | grep / > /dev/null; then
|
|
:
|
|
else
|
|
# 'print' is a shell built-in.
|
|
if (print -r '\told' | grep told > /dev/null) 2>/dev/null; then
|
|
# 'print' is the ksh shell built-in.
|
|
alias echo='print -r'
|
|
fi
|
|
fi
|
|
fi
|
|
if test -z "$have_echo" \
|
|
&& echo '\t' | grep t > /dev/null; then
|
|
have_echo=yes
|
|
fi
|
|
# For ksh: alias echo to a function that uses cat of a here document.
|
|
# The ksh manual page says:
|
|
# "Aliasing is performed when scripts are read, not while they are executed.
|
|
# Therefore, for an alias to take effect, the alias definition command has
|
|
# to be executed before the command which references the alias is read."
|
|
# Because of this, we have to play strange tricks with have_echo, to ensure
|
|
# that the top-level statement containing the test starts after the 'alias'
|
|
# command.
|
|
if test -z "$have_echo"; then
|
|
bsd_echo ()
|
|
{
|
|
cat <<EOF
|
|
$*
|
|
EOF
|
|
}
|
|
alias echo=bsd_echo 2>/dev/null
|
|
fi
|
|
if test -z "$have_echo" \
|
|
&& echo '\t' | grep t > /dev/null; then
|
|
have_echo=yes
|
|
fi
|
|
if test -z "$have_echo"; then
|
|
unalias echo 2>/dev/null
|
|
fi
|
|
# For Solaris /bin/sh: respawn using /bin/ksh.
|
|
if test -z "$have_echo" \
|
|
&& test "X$1" != "X--no-reexec" \
|
|
&& test -f /bin/ksh; then
|
|
exec /bin/ksh "$0" --no-reexec "$@"
|
|
exit 127
|
|
fi
|
|
# Otherwise: respawn using /bin/sh.
|
|
if test -z "$have_echo" \
|
|
&& test "X$1" != "X--no-reexec" \
|
|
&& test -f /bin/sh; then
|
|
exec /bin/sh "$0" --no-reexec "$@"
|
|
exit 127
|
|
fi
|
|
if test -z "$have_echo"; then
|
|
func_fatal_error "Shell does not support 'echo' correctly. Please install GNU bash and set the environment variable CONFIG_SHELL to point to it."
|
|
fi
|
|
if echo '\t' | grep t > /dev/null; then
|
|
: # Works fine now.
|
|
else
|
|
func_fatal_error "Shell does not support 'echo' correctly. Workaround does not work. Please report this as a bug to bug-gnulib@gnu.org."
|
|
fi
|
|
if test "X$1" = "X--no-reexec"; then
|
|
shift
|
|
fi
|
|
|
|
# This command determines the exit code.
|
|
echo '\t' | grep t > /dev/null
|