]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
Fix up AC_INIT vs. " issues, and document it.
authorEric Blake <eblake@redhat.com>
Mon, 19 Jul 2010 22:39:45 +0000 (16:39 -0600)
committerEric Blake <eblake@redhat.com>
Mon, 19 Jul 2010 23:32:04 +0000 (17:32 -0600)
* doc/autoconf.texi (Initializing configure): Improve
documentation on argument restrictions.
* NEWS: Tweak information.
* lib/autoconf/general.m4 (_AC_INIT_GENERAL): New macro, that also
rejects literal ".
(_AC_INIT_PACKAGE): Use it to plug hole in last patch.
* tests/base.at (AC_INIT with unusual version strings): Enhance
test.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
NEWS
doc/autoconf.texi
lib/autoconf/general.m4
tests/base.at

index 9d7889041ff440206fead0c7ade451f0d581ea43..a9ee19540319c0c7ac626fa56afa637b957fa34f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2010-07-19  Eric Blake  <eblake@redhat.com>
+
+       Fix up AC_INIT vs. " issues, and document it.
+       * doc/autoconf.texi (Initializing configure): Improve
+       documentation on argument restrictions.
+       * NEWS: Tweak information.
+       * lib/autoconf/general.m4 (_AC_INIT_GENERAL): New macro, that also
+       rejects literal ".
+       (_AC_INIT_PACKAGE): Use it to plug hole in last patch.
+       * tests/base.at (AC_INIT with unusual version strings): Enhance
+       test.
+
 2010-07-19  Eric Blake  <eblake@redhat.com>
        and Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
diff --git a/NEWS b/NEWS
index bf64a99b2fecad9078cab5c899d2828800b1f563..a8683c624cefe3b6e68e359bc366584d19819292 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -14,11 +14,11 @@ GNU Autoconf NEWS - User visible changes.
    file for inspection by the commands in the ACTION-IF-TRUE argument.
 
 ** AC_INIT again allows parentheses and other characters that are literal
-   in both quoted and unquoted here-documents in its PACKAGE and
-   VERSION arguments.  This is relevant for packages not using these
-   strings nor products like PACKAGE_STRING in other contexts, e.g.,
-   for Automake, and may be subject to further restrictions in the
-   future.  Regression introduced in 2.66.
+   in quoted and unquoted here-documents and in double-quoted strings
+   in its PACKAGE and VERSION arguments.  This is relevant for
+   packages not using these strings nor products like PACKAGE_STRING
+   in other contexts, e.g., for Automake, and may be subject to
+   further restrictions in the future.  Regression introduced in 2.66.
 
 
 * Major changes in Autoconf 2.66 (2010-07-02) [stable]
index be7e3ef52483bf236056a66e12b99b194baa0cf2..8d0f7d3e5851c434e0b51240ba85cd48f3e83244 100644 (file)
@@ -1844,9 +1844,12 @@ distribution tar ball names (e.g., @samp{autoconf}).  It defaults to
 other than alphanumerics and underscores are changed to @samp{-}.  If
 provided, @var{url} should be the home page for the package.
 
-It is preferable that the arguments of @code{AC_INIT} be static, i.e.,
-there should not be any shell computation, but they can be computed by
-M4.
+The arguments of @code{AC_INIT} must be static, i.e., there should not
+be any shell computation, but they can be computed by M4 (the use of
+@code{m4_esyscmd} is permissible).  This is because the package
+information strings are expanded at M4 time into several contexts, and
+must give the same text at shell time whether used in double-quoted
+strings, quoted here-documents, or unquoted here-documents.
 
 The following M4 macros (e.g., @code{AC_PACKAGE_NAME}), output variables
 (e.g., @code{PACKAGE_NAME}), and preprocessor symbols (e.g.,
index 2873660119c1fa44cbc235bce71807d2d6dfc5d7..477c4ab8eca296ef09504fd3ebd040c87df6c43f 100644 (file)
@@ -224,15 +224,20 @@ AU_ALIAS([AC_HELP_STRING], [AS_HELP_STRING])
 # The solution is to require AC_INIT in each of these macros.  AC_INIT
 # has the needed magic so that it can't be expanded twice.
 
-
+# _AC_INIT_LITERAL(STRING)
+# ------------------------
+# Reject STRING if it cannot be used as-is in double-quoted strings,
+# as well as quoted and unquoted here-docs.
+m4_define([_AC_INIT_LITERAL],
+[m4_if(m4_index([$1], dnl font-lock"
+["])AS_LITERAL_HEREDOC_IF([$1], [-]), [-1-], [],
+  [m4_warn([syntax], [AC_INIT: not a literal: $1])])])
 
 # _AC_INIT_PACKAGE(PACKAGE-NAME, VERSION, BUG-REPORT, [TARNAME], [URL])
 # ---------------------------------------------------------------------
 m4_define([_AC_INIT_PACKAGE],
-[AS_LITERAL_HEREDOC_IF([$1], [],
-                      [m4_warn([syntax], [AC_INIT: not a literal: $1])])
-AS_LITERAL_HEREDOC_IF([$2], [],
-                     [m4_warn([syntax], [AC_INIT: not a literal: $2])])
+[_AC_INIT_LITERAL([$1])
+_AC_INIT_LITERAL([$2])
 AS_LITERAL_IF([$3], [],  [m4_warn([syntax], [AC_INIT: not a literal: $3])])
 m4_ifndef([AC_PACKAGE_NAME],
          [m4_define([AC_PACKAGE_NAME],     [$1])])
index ac4ab27b185db8fdaa368c86d435a7cec83aab26..6dc9a177dbdb9894578d8267d71a3d195e7868fd 100644 (file)
@@ -226,16 +226,45 @@ AT_CLEANUP
 AT_SETUP([AC_INIT with unusual version strings])
 
 AT_DATA([configure.ac],
-[[AC_INIT([GNU String++ with spaces (foo)],
-         [2.48++ (2010-07-03)], [http://clisp.cons.org/], [clisp])
+[[AC_INIT([GNU String++ with  spaces (foo)],
+         [2.48++  (2010-07-03)], [http://clisp.cons.org/], [clisp])
 AC_OUTPUT
 ]])
 
+if echo 'ab*c' | grep -F 'ab*c' >/dev/null 2>&1; then
+  FGREP="grep -F"
+else
+  FGREP=fgrep
+fi
+
 AT_CHECK_AUTOCONF([-Werror])
 AT_CHECK_CONFIGURE([-q])
 AT_CHECK_CONFIGURE([--help])
-AT_CHECK_CONFIGURE([--version])
-AT_CHECK([./config.status --version], [], [ignore])
+AT_CHECK_CONFIGURE([--version], [], [stdout])
+AT_CHECK([$FGREP 'GNU String++ with  spaces (foo)' stdout], [], [ignore])
+AT_CHECK([$FGREP '2.48++  (2010-07-03)' stdout], [], [ignore])
+
+AT_CHECK([./config.status --version], [], [stdout])
+AT_CHECK([$FGREP 'GNU String++ with  spaces (foo)' stdout], [], [ignore])
+AT_CHECK([$FGREP '2.48++  (2010-07-03)' stdout], [], [ignore])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU "String++"],
+         [2.48], [http://clisp.cons.org/], [clisp])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
+AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU String++],
+         ["codename" 2.48], [http://clisp.cons.org/], [clisp])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
+AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])
 
 AT_CLEANUP