On Mon, Feb 02, 2026 at 01:52:07PM -0600, Eric Blake wrote: > In practice, I've tested with BSD m4, which behaves almost like GNU m4 > in allowing arbitrary strings to be defined as a macro, and then later > retrieved using defn, ifdef, or dumpdef, but with one caveat - BSD m4 > will not support the empty string as a macro name, even though GNU m4 > has no problem with that. But beyond that, I can't definitively state > whether there are other implementations of m4 that will choke on > attempting to define an atypical macro name.
As a postscript not quite related your original question: Today I noticed that in GNU m4, defn(`a', `b') produces the contents of `a' first, then `b'; but BSD m4 produces the contents of `b' first, then `a'. So portable scripts should consider using defn(`a')defn(`b') rather than getting defn() itself to do concatenation, even though my read of POSIX says the GNU interpretation is desired. -- Eric Blake, Principal Software Engineer Red Hat, Inc. Virtualization: qemu.org | libguestfs.org
