m4 is a macro processor, in the sense that it copies its input to the output, expanding macros as it goes. Macros are either builtin or user-defined, and can take any number of arguments. Besides just doing macro expansion, `m4' has builtin functions for including named files, running shell commands, doing integer arithmetic, manipulating text in various ways, performing recursion, etc.... `m4' can be used either as a front-end to a compiler, or as a macro processor in its own right. Its primary use is by autoconf, to generate configure scripts from a library of m4 macros.