The specification for "m4" is as specified in the SUS but with the following differences as listed below.
output version information and exit
unbuffer output, ignore interrupts
stop execution after first warning
suppress some warnings for builtins
force a m4_ prefix to all builtins
search this directory second for includes
equivalent to the -D option
delete builtin NAME
equivalent to -s option
suppress all GNU extensions
set symbol lookup hash table size
change artificial nesting limit
produce a frozen state on FILE at end
reload a frozen state from FILE at start
set debug level (no FLAGS implies 'aeq'). FLAGS is any of:
trace for all macro calls, not only 'ed
show actual arguments
show expansion
quote values as necessary, with a or e flag
show before collect, after collect and after call
add a unique macro call id, useful with c flag
say current input file name
say current input line number
show results of path searches
show changes in input files
shorthand for all of the above flags
trace NAME when it will be defined
restrict macro tracing size
redirect debug and trace output