| M4(1) | General Commands Manual | M4(1) |
m4 — macro
language processor
m4 |
[-EgPs]
[-Dname[=value]]
[-d flags]
[-I dirname]
[-o filename]
[-t macro]
[-Uname]
[file ...] |
The 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, m4 reads
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
input. 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:
-Dname[=value]NULL).-d
flagsBy default, trace is set to "eq".
-E-E flag is
specified, if warnings are issued, execution continues but
m4 will exit with a non-zero exit status. When
multiple -E flags are specified, execution will
halt upon issuing the first warning and m4 will
exit with a non-zero exit status. This behaviour matches GNU-m4 1.4.9 and
later.-g-I
dirname-o
filename-Pdefine, use
m4_define.-s-t
macro-Unamem4 provides the following built-in macros.
They may be redefined, losing their original meaning. Return values are null
unless otherwise stated.
builtin(name)changecom(startcomment,
endcomment)# 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.
changequote(beginquote,
endquote)`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.
decr(arg)define(name,
value)defn(name,
...)divert(num)m4 concatenates 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).divnumdnldumpdef(name,
...)errprint(msg)esyscmd(cmd)m4.eval(expr[,radix[,minimum]])expr(expr)eval.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
NULL is returned if no other matches were
found.include(name)-I on 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.incr(arg)index(string,
substring)index(the quick brown fox jumped, fox) returns
16). If the second argument is not found, index returns -1.indir(macro,
arg1, ...)len(arg)m4exit(code)m4wrap(todo)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
m4wrap()
get inserted in sequence at the final EOF.
maketemp(template)mkstemp.mkstemp(template)paste(file)patsubst(string,
regexp, replacement)popdef(arg,
...)pushdefed definition for each
argument.pushdef(macro,
def)define, but it saves
the definition on a stack for later retrieval by
popdef().regexp(string,
regexp, replacement)shift(arg1,
...)sinclude(file)include, except it ignores any
errors.spaste(file)paste(), except it ignores any
errors.substr(string,
offset, length)syscmd(cmd)sysvalsyscmd.traceon(arg,
...)traceoff(arg,
...)translit(string,
mapfrom, mapto)undefine(name1,
...)undivert(arg,
...)unix__line____file__The 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 -E flag.
B. W. Kernighan and D. M. Ritchie, The M4 Macro Processor, AT&T Bell Laboratories, Computing Science Technical Report, 59, July 1977.
The m4 utility is compliant with the
IEEE Std 1003.1-2008 (“POSIX.1”)
specification.
The flags [-dEgIPot] and the macros
builtin, esyscmd,
expr, format,
indir, paste,
patsubst, regexp,
spaste, unix,
__line__, and __file__ are
extensions to that specification.
maketemp is not supposed to be a synonym
for 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 traceon and
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.
The built-ins pushdef and
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
stack instead.
All built-ins do expand without arguments in many other
m4.
Many other m4 have dire size limitations
with respect to buffer sizes.
Ozan Yigit <oz@sis.yorku.ca> and Richard A. O'Keefe <ok@goanna.cs.rmit.OZ.AU>.
GNU-m4 compatibility extensions by Marc Espie <espie@openbsd.org>.
| June 14, 2022 | openbsd |