Node:Redefined M4 Macros, Next:, Up:Programming in M4sugar



Redefined M4 Macros

With a few exceptions, all the M4 native macros are moved in the m4_ pseudo-namespace, e.g., M4sugar renames define as m4_define etc.

Some M4 macros are redefined, and are slightly incompatible with their native equivalent.

dnl Macro
This macro kept its original name: no m4_dnl is defined.

m4_defn (macro) Macro
Contrary to the M4 builtin, this macro fails if macro is not defined. See m4_undefine.

m4_exit (exit-status) Macro
This macro corresponds to m4exit.

m4_if (comment) Macro
m4_if (string-1, string-2, equal, [not-equal]) Macro
m4_if (string-1, string-2, equal, ...) Macro
This macro corresponds to ifelse.

m4_undefine (macro) Macro
Contrary to the M4 builtin, this macro fails if macro is not defined. Use
m4_ifdef([macro], [m4_undefine([macro])])

to recover the behavior of the builtin.

m4_bpatsubst (string, regexp, [replacement]) Macro
This macro corresponds to patsubst. The name m4_patsubst is kept for future versions of M4sh, on top of GNU M4 which will provide extended regular expression syntax via epatsubst.

m4_popdef (macro) Macro
Contrary to the M4 builtin, this macro fails if macro is not defined. See m4_undefine.

m4_bregexp (string, regexp, [replacement]) Macro
This macro corresponds to regexp. The name m4_regexp is kept for future versions of M4sh, on top of GNU M4 which will provide extended regular expression syntax via eregexp.

m4_wrap (text) Macro
This macro corresponds to m4wrap.

You are encouraged to end text with [], so that there are no risks that two consecutive invocations of m4_wrap result in an unexpected pasting of tokens, as in

m4_define([foo], [Foo])
m4_define([bar], [Bar])
m4_define([foobar], [FOOBAR])
m4_wrap([bar])
m4_wrap([foo])
=>FOOBAR