From: Eric Blake Date: Mon, 19 Jul 2010 22:39:45 +0000 (-0600) Subject: Fix up AC_INIT vs. " issues, and document it. X-Git-Tag: v2.67~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=77469e1b540b69b1e89dabcebd7b271cce67e269;p=thirdparty%2Fautoconf.git 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. Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index 9d788904..a9ee1954 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2010-07-19 Eric Blake + + 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 and Ralf Wildenhues diff --git a/NEWS b/NEWS index bf64a99b..a8683c62 100644 --- 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] diff --git a/doc/autoconf.texi b/doc/autoconf.texi index be7e3ef5..8d0f7d3e 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -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., diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index 28736601..477c4ab8 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -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])]) diff --git a/tests/base.at b/tests/base.at index ac4ab27b..6dc9a177 100644 --- a/tests/base.at +++ b/tests/base.at @@ -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