On 09/13/2011 03:09 PM, Bruno Haible wrote:
Please, can you turn off these "m4 comments" for Autoconf 3.0?
You can turn them off yourself with m4_changecom(). This hasn't been a
regularly requested feature, but I'm worried about the
backwards-compatibility aspect of doing it globally.
Now about the macros in gnulib. I guess this one is not problematic?
There are many #include statements like this.
tanl.m4:54: AC_CHECK_DECL([tanl], , [HAVE_DECL_TANL=0],
[#include<math.h>])
Underquoted (and autoconf has magic in AC_CHECK_DECL that tries to deal
with the underquoting, since this is so common), since the fourth
argument of AC_CHECK_DECL is supposed to allow further m4 macro
expansion when used properly. Should be:
AC_CHECK_DECL([tanl], , [HAVE_DECL_TANL=0], [[#include <math.h>]])
Note how the fourth argument is double-quoted, since we want the # to be
treated as a literal output character, and not single-quoted, since we
don't want any further macro expansion done by AC_CHECK_DECL to
mistakenly treat #include <math.h> as anything needing m4 expansion.
Which of the following code lines should be changed, for maintainability?
absolute-header.m4:87: s#^/[^/]#//&#
Underquoted. I'd recommend using | instead of # in the sed snippet, at
which point you then need double-quoting to get the literal bracket
expression into the output. Minimal double quoting:
s|^/[[^/]]|//&|
or copy-and-pastable double-quoting:
[
s|^/[^/]|//&|
]
csharpcomp.m4:15: AC_MSG_CHECKING([for C[#] compiler])
Correctly double-quoted (with minimal range), also possible to use
maximal double-quoting as:
AC_MSG_CHECKING([[for C# compiler]])
csharpexec.m4:15: AC_MSG_CHECKING([for C[#] program execution engine])
csharp.m4:11: AC_MSG_CHECKING([for preferred C[#] implementation])
Likewise for these two.
csharp.m4:13: [ --enable-csharp[[=IMPL]] choose preferred C[#]
implementation (pnet or mono)],
The second argument to AC_ARG_ENABLE should generally be using
AS_HELP_STRING to get better line-wrapping capabilities. As written,
this is a literal string and properly quoted, but if rewritten to use
AS_HELP_STRING, it is overquoted (AS_HELP_STRING, and any other macro
that does word wrapping with no further m4 expansion, already documents
that no double-quoting is needed; that is, any macro argument that does
not fit the rule of thumb where using double-quoting prevents further
macro expansion, because no further macro expansion will occur, should
already be documented as such).
csharp.m4:21: [Define if pnet is the preferred C# implementation.])
csharp.m4:25: [Define if mono is the preferred C# implementation.])
Properly quoted: AC_DEFINE documents that the third argument is one of
those contexts that does word wrapping with no further m4 expansion.
include_next.m4:226:
gl_absolute_header_sed='\#'"${gl_dirsep_regex}"']m4_defn([gl_HEADER_NAME])[#{
include_next.m4:227:
s#.*"\(.*'"${gl_dirsep_regex}"']m4_defn([gl_HEADER_NAME])[\)".*#\1#
include_next.m4:228: s#^/[^/]#//&#
What started this conversation, and rather difficult to decipher. Hence
my recommendation to use s||| instead of s###, at which point you need
double-quoting to preserve literal bracket regex.
po.m4:122: cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e
"s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/"> "$ac_dir/POTFILES"
Similar to the include_next question about why we are using # as the sed
delimiter.
--
Eric Blake ebl...@redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org