Bruno Haible <bruno <at> clisp.org> writes:

> > By the way, m4_quote(m4_defn([foo])) is overkill - m4_defn already properly 
> > quotes its output as a single m4 argument, so the m4_quote is a no-op 
(m4_quote 
> > is only useful when collecting multiple unquoted m4 arguments into a single 
> > string).
> 
> m4_quote(m4_defn([foo])) comes from Paul Eggert. I'm a bit leery of removing
> a level of m4 quoting, because
>   - The generated statements in configure are right.
>   - Removing a level of m4 quoting generally means to allow interpretation of
>     some tokens as m4 macros. Which is not desirable here.

But only if those tokens are unquoted.  m4_defn is GUARANTEED to be quoted, to 
begin with.  All m4_quote does is add quoting to unquoted arguments, but since 
m4_defn is a quoted argument, m4_quote(m4_defn) is a no-op.  Trust me.  Or 
don't trust me, and instead run this test:

$ cd autoconf
$ echo 'm4_divert[]m4_define([a],[A])m4_define([foo], [a[a[a]]])dnl         
> foo
> m4_defn([foo])
> m4_quote(m4_defn([foo]))' | m4 -Ilib m4sugar/m4sugar.m4 -
Aa[a]
a[a[a]]
a[a[a]]

Notice - even with the active macro a, the quoting is identical whether you use 
the redundant m4_quote or not.  In other words, we aren't removing a level of 
m4 quoting.

-- 
Eric Blake




Reply via email to