autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: coreutils-5.1.3 released: bug-fix-only, candidate for stable 5.2.0


From: Daniel Jacobowitz
Subject: Re: coreutils-5.1.3 released: bug-fix-only, candidate for stable 5.2.0
Date: Thu, 12 Feb 2004 11:17:32 -0500
User-agent: Mutt/1.5.1i

On Thu, Feb 12, 2004 at 01:24:07AM -0800, Paul Eggert wrote:
> > i.e. the \b is processed.  This interacts very badly with
> > --program-transform-name='s/g\(.*\)/g\1-3.4/',
> 
> Hmm, but your script doesn't necessarily indicate any problem with
> --program-transform-name.
> 
> POSIX says that the last echo is equivalent to
> 
> $ echo 'a\b'
> 
> and that the results are implementation-defined, since 'echo' has
> undefined behavior if its operands contain a backslash.  (On
> XSI-conformant systems, the system must print a backslash; perhaps
> that's what ash did.)
> 
> --program-transform-name doesn't pass backslash to echo, so it won't
> run into that problem.
> 
> For example, with POSIX you must get this behavior:
> 
> $ a='a\b'
> $ expr "X$a" : 'X\(.*\)'
> a\b

That's a neat trick, I didn't know it.  Is this in the shell
portability guide?  Note that all --enable, --with, and A=B options are
passed through echo and sed, at least as of the latest version I have
installed.

My comment was based on a previous version of autoconf which passed
ac_optarg to echo; I see that this was fixed in June 2000, so I suppose
I must have been looking at a very old version.  I thought I'd
double-checked with 2.57 at the time but I suppose not.  Oh, wait, here
it is, in _AC_INIT_PREPARE:

    case $ac_arg in
...
dnl If you change this globbing pattern, test it on an old shell --
dnl it's sensitive.  Putting any kind of quote in it causes syntax errors.
  [  *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)]
      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
    esac

So subdirs get corrupted --program-transform-name.  There are plenty of
other instances, even this jewel with a wildly incorrect comment:

# Double any \ or $.  echo might interpret backslashes.
# By default was `s,x,x', remove it if useless.
cat <<\_ACEOF >conftest.sed
s/[\\$]/&&/g;s/;s,x,x,$//
_ACEOF
program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
rm conftest.sed

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer




reply via email to

[Prev in Thread] Current Thread [Next in Thread]