Re: Portability problems of "Usual Tools" not described in manual

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

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 3/17/2009 8:43 AM:
> Thanks for the report.  I would like to verify these claims before
> applying any patches, but agree that they are probably worth mentioning.
> 
>> 1. sed behaves entirely unpredictable on lines that are not newline-terminated.
> 
> Confirmed.  POSIX states that sed is only required to operate on text
> files, and also that a file without a trailing newline is not a text file.

This has actually already been done:
http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=b2bde72

>> 2. On HP-UX 11.23, regexp matching with expr does not allow multiple sub-
>>    expressions:
> 
>>      bash-3.1$ expr 'Xfoo' : 'X\(f\(oo\)*\)$'
>>      expr: More than one '\(' was used.
> 
> Ouch.  I don't have access to HP-UX to verify, but this means we need to
> audit autoconf source to make sure we don't violate this restriction.
> 
>> 3. On GNU/Linux the regexp "$", when used with older versions of expr,
>>    matches newlines embedded in the match string:
> 
>>      bash-3.1$ baz='foo
>>      > bar'
>>      bash-3.1$ expr "X$baz" : 'X\(foo\)$' || echo baz
>>      foo
> 
> I'm assuming this was from an older version of coreutils?  Can someone
> determine 'expr --version' in the broken case, to see when it was fixed?

Both expr issues are mentioned in this patch, now applied:

- --
Don't work too hard, make some time for fun as well!

Eric Blake             ebb9@xxxxxxx
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAknAT7QACgkQ84KuGfSFAYCb8ACfdcGsMmGLQ/QKlXoBbclnhVAr
X6oAoMP2yNoZyxlxLP7eqWzbZqWch0K1
=16+4
-----END PGP SIGNATURE-----
>From abee382683d1b977f2ab4a91121b4277045e6d5a Mon Sep 17 00:00:00 2001
From: Eric Blake <ebb9@xxxxxxx>
Date: Tue, 17 Mar 2009 19:33:08 -0600
Subject: [PATCH] Manual: mention more expr pitfalls.

* doc/autoconf.texi (Limitations of Usual Tools) <expr (:)>:
Mention HP-UX limitation, and $ ambiguity.
* THANKS: Update.
Reported by Jens Schmidt, in http://bugs.debian.org/466990.

Signed-off-by: Eric Blake <ebb9@xxxxxxx>
---
 ChangeLog         |    8 ++++++++
 THANKS            |    1 +
 doc/autoconf.texi |   23 +++++++++++++++++++++++
 3 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 259004e..3829924 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-03-18  Eric Blake  <ebb9@xxxxxxx>
+
+	Manual: mention more expr pitfalls.
+	* doc/autoconf.texi (Limitations of Usual Tools) <expr (:)>:
+	Mention HP-UX limitation, and $ ambiguity.
+	* THANKS: Update.
+	Reported by Jens Schmidt, in http://bugs.debian.org/466990.
+
 2009-03-17  Jim Meyering  <meyering@xxxxxxxxxx>

 	Manual: fix a typo.
diff --git a/THANKS b/THANKS
index c3e19a2..8d8bb37 100644
--- a/THANKS
+++ b/THANKS
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index a0a19b8..a4cb0d1 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -16642,6 +16642,21 @@ Limitations of Usual Tools
 @samp{^}.  Patterns are automatically anchored so leading @samp{^} is
 not needed anyway.

+On the other hand, the behavior of the @samp{$} anchor is not portable
+on multi-line strings.  Posix is ambiguous whether the anchor applies to
+each line, as was done in older versions of @acronym{GNU} Coreutils, or
+whether it applies only to the end of the overall string, as in
+Coreutils 6.0 and most other implementations.
+
+@example
+$ @kbd{baz='foo}
+> @kbd{bar'}
+$ @kbd{expr "X$baz" : 'X\(foo\)$'}
+
+$ @kbd{expr-5.97 "X$baz" : 'X\(foo\)$'}
+foo
+@end example
+
 The Posix standard is ambiguous as to whether
 @samp{expr 'a' : '\(b\)'} outputs @samp{0} or the empty string.
 In practice, it outputs the empty string on most platforms, but portable
@@ -16718,6 +16733,14 @@ Limitations of Usual Tools
 1
 @end example

+On @acronym{HP-UX} 11, @command{expr} only supports a single
+sub-expression.
+
+@example
+$ @kbd{expr 'Xfoo' : 'X\(f\(oo\)*\)$'}
+expr: More than one '\(' was used.
+@end example
+

 @item @command{fgrep}
 @c ------------------
-- 
1.6.1.2

_______________________________________________
Autoconf mailing list
Autoconf@xxxxxxx
http://lists.gnu.org/mailman/listinfo/autoconf

[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux