| M4(1) | General Commands Manual | M4(1) | 
m4 —
| m4 | [ -EGgiPQsv]
      [-Dname[=value]]
      [-dflags]
      [-Ffilename]
      [-Idirname]
      [-Lnumber]
      [-ofilename]
      [-Rfilename]
      [-tmacro]
      [-Uname]
      [file ...] | 
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:
-D,
    --define
    name[=value]NULL).-d,
    --debug
    flagsBy default, trace is set to “eq”.
-E,
    --fatal-warningsm4 exit.-F,
    --freeze-state
    filename-G,
    --traditional-g,
    --gnu--help-I,
    --include
    dirname-i,
    --interactive-L,
    --nesting-limit-o,
    --error-output
    filename-P,
    --prefix-builtinsdefine, use
      m4_define.-Q,
    --quiet,
    - -silent-R,
    --reload-state
    filename-s,
    --synclines-t,
    --trace
    macro-U,
    --undefine
    name-v,
    --versionm4 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)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__m4 utility is compliant with the
  IEEE Std 1003.1-2008 (“POSIX.1”)
  specification.
The flags [-dgIot] and the macros
    builtin, esyscmd,
    expr, format,
    indir, paste,
    patsubst, regexp,
    spaste, unix,
    __line__, and __file__ are
    extensions to that specification.
The output format of tracing and 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.
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.
GNU-m4 compatibility extensions by Marc Espie <espie@cvs.openbsd.org>.
| June 25, 2020 | NetBSD 9.4 |