+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>
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]
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.,
# 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])])
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