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 <eblake@redhat.com>
This commit is contained in:
Eric Blake 2010-07-19 16:39:45 -06:00
parent f4f4a26c01
commit 77469e1b54
5 changed files with 66 additions and 17 deletions

View File

@ -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>

10
NEWS
View File

@ -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]

View 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.,

View 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])])

View 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