|M4(1)||General Commands Manual||M4(1)|
m4 — macro
m4 utility is a macro processor that
can be used as a front end to any language (e.g., C, ratfor, fortran, lex,
and yacc). If no input files are given,
from the standard input, otherwise files specified on the command line are
processed in the given order. Input files can be regular files, files in the
m4 include paths, or a single dash (‘-’), denoting standard
m4 writes the processed text to the standard
output, unless told otherwise.
Macro calls have the form name(argument1[, argument2, ..., argumentN]).
There cannot be any space following the macro name and the open parenthesis (‘(’). If the macro name is not followed by an open parenthesis it is processed with no arguments.
Macro names consist of a leading alphabetic or underscore possibly followed by alphanumeric or underscore characters, e.g., valid macro names match the pattern “[a-zA-Z_][a-zA-Z0-9_]*”.
In arguments to macros, leading unquoted space, tab, and newline
(‘\n’) characters are ignored. To quote strings, use left and
right single quotes (e.g., ‘ this is a string with a leading
space’). You can change the quote characters with the
changequote built-in macro.
Most built-ins don't make any sense without arguments, and hence are not recognized as special when not followed by an open parenthesis.
The options are as follows:
By default, trace is set to "eq".
-Eflag is specified, if warnings are issued, execution continues but
m4will exit with a non-zero exit status. When multiple
-Eflags are specified, execution will halt upon issuing the first warning and
m4will exit with a non-zero exit status. This behaviour matches GNU-m4 1.4.9 and later.
m4 provides the following built-in macros.
They may be redefined, losing their original meaning. Return values are null
unless otherwise stated.
# This is a comment
With no arguments, comments are turned off. With one single argument, the end comment sequence is set to the newline character.
`Here is a quoted string'
With no arguments, the default quotes are restored. With one single argument, the close quote sequence is set to the newline character.
m4concatenates all the queues in numerical order to produce the final output. Initially the output queue is 0. The divert macro allows you to select a new output queue (an invalid argument passed to divert causes output to be discarded).
format(formatstring, arg1, ...)
ifdef(name, yes, no)
NULL. The word "unix" is predefined.
ifelse(a, b, yes, ...)
ifelse() returns the third argument yes. If the match fails the three arguments are discarded and the next three arguments are used until there is zero or one arguments left, either this last argument or
NULLis returned if no other matches were found.
-Ion the command line, then the environment variable
M4PATH, as a colon-separated list of directories. Include aborts with an error message if the file cannot be included.
index(the quick brown fox jumped, fox)returns 16). If the second argument is not found index returns -1.
indir(macro, arg1, ...)
EOF, usually for cleanup purposes (e.g.,
m4wrap("cleanup(tempfile)")causes the macro cleanup to be invoked after all other processing is done).
Multiple calls to
get inserted in sequence at the final
patsubst(string, regexp, replacement)
pushdefed definition for each argument.
define, but it saves the definition on a stack for later retrieval by
regexp(string, regexp, replacement)
include, except it ignores any errors.
paste(), except it ignores any errors.
substr(string, offset, length)
translit(string, mapfrom, mapto)
m4 utility exits 0 on success,
and >0 if an error occurs.
But note that the
m4exit macro can modify
the exit status, as can the
B. W. Kernighan and D. M. Ritchie, The M4 Macro Processor, AT&T Bell Laboratories, Computing Science Technical Report, 59, July 1977.
m4 utility is compliant with the
IEEE Std 1003.1-2008 (“POSIX.1”)
The flags [
-dEgIPot] and the macros
extensions to that specification.
maketemp is not supposed to be a synonym
mkstemp, but instead to be an insecure temporary
file name creation function. It is marked by IEEE Std
1003.1-2008 (“POSIX.1”) as being obsolescent and should
not be used if portability is a concern.
The output format of
dumpdef are not specified in any standard, are
likely to change and should not be relied upon. The current format of
tracing is closely modelled on
gnu-m4, to allow
autoconf to work.
popdef handle macro definitions as a stack. However,
define interacts with the stack in an undefined way.
In this implementation,
define replaces the top-most
definition only. Other implementations may erase all definitions on the
All built-ins do expand without arguments in many other
m4 have dire size limitations
with respect to buffer sizes.
GNU-m4 compatibility extensions by Marc Espie <firstname.lastname@example.org>.
|March 8, 2021||OpenBSD-current|