bootstrap: AC_INIT may have more than four parameters
authorEric Blake <eblake@redhat.com>
Wed, 8 May 2013 20:29:19 +0000 (14:29 -0600)
committerEric Blake <eblake@redhat.com>
Wed, 8 May 2013 20:43:02 +0000 (14:43 -0600)
For packages that did
  AC_INIT([package], [version], [bug-report], [], [url])
the extraction script was grabbing url instead of package for the
value of $package.

Furthermore, while we guarantee LC_ALL=C, this code is liable to
be copied and pasted to a script that doesn't use the C locale and
thus where a range expression may misbehave.

* build-aux/bootstrap (extract_package_name): Correctly extract
non-empty tarname field.  Avoid range in regex.
Based on a report by Sami Kerola <kerolasa@iki.fi>.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
build-aux/bootstrap

index 31f9dbf..2e8f618 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-05-08  Eric Blake  <eblake@redhat.com>
+
+       bootstrap: AC_INIT may have more than four parameters
+       * build-aux/bootstrap (extract_package_name): Correctly extract
+       non-empty tarname field.  Avoid range in regex.
+       Based on a report by Sami Kerola <kerolasa@iki.fi>.
+
 2013-05-07  Paul Eggert  <eggert@cs.ucla.edu>
 
        qacl: port to MS-Windows port of GNU Emacs
index 96f1e76..0cbea66 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Print a version string.
-scriptversion=2013-03-08.16; # UTC
+scriptversion=2013-05-08.20; # UTC
 
 # Bootstrap this package from checked-out sources.
 
@@ -140,20 +140,21 @@ po_download_command_format2=\
 "wget --mirror -nd -q -np -A.po -P '%s' \
  http://translationproject.org/latest/%s/"
 
+# Prefer a non-empty tarname (4th argument of AC_INIT if given), else
+# fall back to the package name (1st argument with munging)
 extract_package_name='
-  /^AC_INIT(/{
-     /.*,.*,.*, */{
-       s///
-       s/[][]//g
-       s/)$//
+  /^AC_INIT(\[*/{
+     s///
+     /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{
+       s//\1/
+       s/[],)].*//
        p
        q
      }
-     s/AC_INIT(\[*//
-     s/]*,.*//
+     s/[],)].*//
      s/^GNU //
      y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
-     s/[^A-Za-z0-9_]/-/g
+     s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g
      p
   }
 '