Gavin Smith
2016-06-12 10:25:38 UTC
Hello,
In the Autoconf manual we read:
====
When you use the same text in a macro argument, you must therefore
have an extra quotation level (since one is stripped away by the macro
substitution). In general, then, it is a good idea to use double
quoting for all literal string arguments, either around just the
problematic portions, or over the entire argument:
AC_MSG_WARN([[AC_DC] stinks --Iron Maiden])
AC_MSG_WARN([[AC_DC stinks --Iron Maiden]])
However, the above example triggers a warning about a possibly
unexpanded macro when running autoconf, because it collides with the
namespace of macros reserved for the Autoconf language. To be really
safe, you can use additional escaping (either a quadrigraph, or
creative shell constructs) to silence that particular warning:
echo "Hard rock was here! --AC""_DC"
AC_MSG_WARN([[AC@&***@_DC stinks --Iron Maiden]])
====
https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Autoconf-Language.html#Autoconf-Language
Note what it says: "triggers a warning". However, it seems in some
cases, using a word that looks like it could be a macro triggers a
hard error, not just a warning:
$ autoreconf -iv
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal
configure.ac:4: warning: macro 'AM_DC' not found in library
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf
configure.ac:4: error: possibly undefined macro: AM_DC
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1
Any ideas which it is: is it actually forbidden, or should it be just a warning?
I intend to put information about this here:
http://buildsystem-manual.sourceforge.net/Macro-name-quoting.html#Macro-name-quoting
, which I've adapted from the test in the automake manual.
Contents of files:
$ cat configure.ac
AC_INIT([helloprog], [1.0])
AM_INIT_AUTOMAKE
echo AM_DC rocks
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
$ cat Makefile.am
AUTOMAKE_OPTIONS=foreign dist-xz
$
In the Autoconf manual we read:
====
When you use the same text in a macro argument, you must therefore
have an extra quotation level (since one is stripped away by the macro
substitution). In general, then, it is a good idea to use double
quoting for all literal string arguments, either around just the
problematic portions, or over the entire argument:
AC_MSG_WARN([[AC_DC] stinks --Iron Maiden])
AC_MSG_WARN([[AC_DC stinks --Iron Maiden]])
However, the above example triggers a warning about a possibly
unexpanded macro when running autoconf, because it collides with the
namespace of macros reserved for the Autoconf language. To be really
safe, you can use additional escaping (either a quadrigraph, or
creative shell constructs) to silence that particular warning:
echo "Hard rock was here! --AC""_DC"
AC_MSG_WARN([[AC@&***@_DC stinks --Iron Maiden]])
====
https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Autoconf-Language.html#Autoconf-Language
Note what it says: "triggers a warning". However, it seems in some
cases, using a word that looks like it could be a macro triggers a
hard error, not just a warning:
$ autoreconf -iv
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal
configure.ac:4: warning: macro 'AM_DC' not found in library
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf
configure.ac:4: error: possibly undefined macro: AM_DC
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1
Any ideas which it is: is it actually forbidden, or should it be just a warning?
I intend to put information about this here:
http://buildsystem-manual.sourceforge.net/Macro-name-quoting.html#Macro-name-quoting
, which I've adapted from the test in the automake manual.
Contents of files:
$ cat configure.ac
AC_INIT([helloprog], [1.0])
AM_INIT_AUTOMAKE
echo AM_DC rocks
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
$ cat Makefile.am
AUTOMAKE_OPTIONS=foreign dist-xz
$