.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.3.
.TH M4 "1" "February 2026" "GNU M4 1.4.21" "User Commands"
.SH NAME
m4 \- macro processor
.SH SYNOPSIS
.B m4
[\fI\,OPTION\/\fR]... [\fI\,FILE\/\fR]...
.SH DESCRIPTION
Process macros in FILEs.  If no FILE or if FILE is `\-', standard input
is read.
.PP
Mandatory or optional arguments to long options are mandatory or optional
for short options too.
.SS "Operation modes:"
.TP
\fB\-\-help\fR
display this help and exit
.TP
\fB\-\-version\fR
output version information and exit
.TP
\fB\-E\fR, \fB\-\-fatal\-warnings\fR
once: warnings become errors, twice: stop
execution at first error
.TP
\fB\-i\fR, \fB\-\-interactive\fR
unbuffer output, ignore interrupts
.TP
\fB\-P\fR, \fB\-\-prefix\-builtins\fR
force a `m4_' prefix to all builtins
.TP
\fB\-Q\fR, \fB\-\-quiet\fR, \fB\-\-silent\fR
suppress some warnings for builtins
.TP
\fB\-\-warn\-macro\-sequence\fR[=\fI\,REGEXP\/\fR]
warn if macro definition matches REGEXP,
.IP
default \e$\e({[^}]*}\e|[0\-9][0\-9]+\e)
.TP
\fB\-W\fR, \fB\-\-word\-regexp\fR=\fI\,REGEXP\/\fR
use REGEXP for macro name syntax
.SS "Preprocessor features:"
.TP
\fB\-D\fR, \fB\-\-define=NAME\fR[=\fI\,VALUE\/\fR]
define NAME as having VALUE, or empty
.TP
\fB\-I\fR, \fB\-\-include\fR=\fI\,DIRECTORY\/\fR
append DIRECTORY to include path
.TP
\fB\-s\fR, \fB\-\-synclines\fR
generate `#line NUM "FILE"' lines
.TP
\fB\-U\fR, \fB\-\-undefine\fR=\fI\,NAME\/\fR
undefine NAME
.SS "Limits control:"
.TP
\fB\-g\fR, \fB\-\-gnu\fR
override \fB\-G\fR to re\-enable GNU extensions
.TP
\fB\-G\fR, \fB\-\-traditional\fR
suppress all GNU extensions
.TP
\fB\-H\fR, \fB\-\-hashsize\fR=\fI\,PRIME\/\fR
set symbol lookup hash table size [65537]
.TP
\fB\-L\fR, \fB\-\-nesting\-limit\fR=\fI\,NUMBER\/\fR
change nesting limit, 0 for unlimited [0]
.SS "Frozen state files:"
.TP
\fB\-F\fR, \fB\-\-freeze\-state\fR=\fI\,FILE\/\fR
produce a frozen state on FILE at end
.TP
\fB\-R\fR, \fB\-\-reload\-state\fR=\fI\,FILE\/\fR
reload a frozen state from FILE at start
.SS "Debugging:"
.TP
\fB\-d\fR, \fB\-\-debug\fR[=\fI\,FLAGS\/\fR]
set debug level (no FLAGS implies `aeq')
.TP
\fB\-\-debugfile\fR[=\fI\,FILE\/\fR]
redirect debug and trace output to FILE
(default stderr, discard if empty string)
.TP
\fB\-l\fR, \fB\-\-arglength\fR=\fI\,NUM\/\fR
restrict macro tracing size
.TP
\fB\-t\fR, \fB\-\-trace\fR=\fI\,NAME\/\fR
trace NAME when it is defined
.SS "FLAGS is any of:"
.TP
a
show actual arguments
.TP
c
show before collect, after collect and after call
.TP
e
show expansion
.TP
f
say current input file name
.TP
i
show changes in input files
.TP
l
say current input line number
.TP
p
show results of path searches
.TP
q
quote values as necessary, with a or e flag
.TP
t
trace for all macro calls, not only traceon'ed
.TP
x
add a unique macro call id, useful with c flag
.TP
V
shorthand for all of the above flags
.PP
If defined, the environment variable `M4PATH' is a colon\-separated list
of directories included after any specified by `\-I'.
.PP
Exit status is 0 for success, 1 for failure, 63 for frozen file version
mismatch, or whatever value was passed to the m4exit macro.
.SH AUTHOR
Written by Rene' Seindal.
.SH "REPORTING BUGS"
Report bugs to: bug\-m4@gnu.org
.br
GNU M4 home page: <https://www.gnu.org/software/m4/>
.br
General help using GNU software: <https://www.gnu.org/gethelp/>
.SH COPYRIGHT
Copyright \(co 2026 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
.br
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
.SH "SEE ALSO"
The full documentation for
.B m4
is maintained as a Texinfo manual.  If the
.B info
and
.B m4
programs are properly installed at your site, the command
.IP
.B info m4
.PP
should give you access to the complete manual.
