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