mirror of
git://git.sv.gnu.org/autoconf
synced 2024-12-03 02:00:36 +08:00
Avoid AIX 6.1 ksh88 ECHO_C command substitution bug.
* lib/m4sugar/m4sh.m4 (_AS_ECHO_N_PREPARE): Ensure more than one character is output with `\c'; reset echo output state if buggy ksh was detected, and set ECHO_T instead of ECHO_C. * doc/autoconf.texi (Limitations of Builtins): Document it. * tests/m4sh.at (ECHO_C): New test. * THANKS: Update. Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
This commit is contained in:
parent
6c358e8f6a
commit
06aeca6abe
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
||||
2009-06-30 Jan Madzik <jmadzik@gmail.com> (tiny change)
|
||||
Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
||||
|
||||
Avoid AIX 6.1 ksh88 ECHO_C command substitution bug.
|
||||
* lib/m4sugar/m4sh.m4 (_AS_ECHO_N_PREPARE): Ensure more than
|
||||
one character is output with `\c'; reset echo output state
|
||||
if buggy ksh was detected, and set ECHO_T instead of ECHO_C.
|
||||
* doc/autoconf.texi (Limitations of Builtins): Document it.
|
||||
* tests/m4sh.at (ECHO_C): New test.
|
||||
* THANKS: Update.
|
||||
|
||||
2009-06-27 William Pursell <bill.pursell@gmail.com> (tiny change)
|
||||
|
||||
Fix grammaro in documenation.
|
||||
|
1
THANKS
1
THANKS
@ -160,6 +160,7 @@ Iohannes m zmoelnig zmoelnig@iem.at
|
||||
J C Fitzgerald v7022@wave.co.nz
|
||||
Jaap Haitsma jaap@haitsma.org
|
||||
James A. Lupo lupoja@feynman.ml.wpafb.af.mil
|
||||
Jan Madzik jmadzik@gmail.com
|
||||
Jason Molenda jsm@cygnus.com
|
||||
Jeff Garzik jgarzik@pobox.com
|
||||
Jeff Painter ?
|
||||
|
@ -15733,7 +15733,10 @@ their handling. For @samp{echo '\n' | wc -l}, the @command{sh} of
|
||||
Solaris outputs 2, but Bash and Zsh (in @command{sh} emulation mode) output 1.
|
||||
The problem is truly @command{echo}: all the shells
|
||||
understand @samp{'\n'} as the string composed of a backslash and an
|
||||
@samp{n}.
|
||||
@samp{n}. Within a command substitution, @samp{echo 'string\c'} will
|
||||
mess up the internal state of ksh88 on AIX 6.1 so that it will print
|
||||
the first character @samp{s} only, followed by a newline, and then
|
||||
entirely drop the output of the next echo in a command substitution.
|
||||
|
||||
Because of these problems, do not pass a string containing arbitrary
|
||||
characters to @command{echo}. For example, @samp{echo "$foo"} is safe
|
||||
|
@ -780,14 +780,19 @@ m4_defun_init([_AS_ECHO_LOG],
|
||||
# display the checking message. In addition, caching something used once
|
||||
# has little interest.
|
||||
# Idea borrowed from dist 3.0. Use `*c*,', not `*c,' because if `\c'
|
||||
# failed there is also a newline to match.
|
||||
# failed there is also a newline to match. Use `xy' because `\c' echoed
|
||||
# in a command substitution prints only the first character of the output
|
||||
# with ksh version M-11/16/88f on AIX 6.1; it needs to be reset by another
|
||||
# backquoted echo.
|
||||
m4_defun([_AS_ECHO_N_PREPARE],
|
||||
[ECHO_C= ECHO_N= ECHO_T=
|
||||
case `echo -n x` in @%:@((((
|
||||
case `echo -n x` in @%:@(((((
|
||||
-n*)
|
||||
case `echo 'x\c'` in
|
||||
case `echo 'xy\c'` in
|
||||
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
|
||||
*) ECHO_C='\c';;
|
||||
xy) ECHO_C='\c';;
|
||||
*) echo `echo ksh88 bug on AIX 6.1` > /dev/null
|
||||
ECHO_T=' ';;
|
||||
esac;;
|
||||
*)
|
||||
ECHO_N='-n';;
|
||||
|
@ -1412,3 +1412,23 @@ AT_CHECK_M4SH
|
||||
AT_CHECK([./script])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
## -------- ##
|
||||
## ECHO_C. ##
|
||||
## -------- ##
|
||||
|
||||
AT_SETUP([ECHO_C])
|
||||
|
||||
AT_DATA_M4SH([script.as], [[dnl
|
||||
AS_INIT
|
||||
_AS_PREPARE
|
||||
foo=`echo foobar`
|
||||
echo "$foo"
|
||||
]])
|
||||
|
||||
AT_CHECK_M4SH
|
||||
AT_CHECK([./script], [], [foobar
|
||||
])
|
||||
|
||||
AT_CLEANUP
|
||||
|
Loading…
Reference in New Issue
Block a user