GNU m4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible, although it has some extensions (for example, handling more than 9 positional parameters to macros). GNU m4 also has built-in functions for including files, running shell commands, doing arithmetic, etc. Autoconf needs GNU m4 for generating `configure' scripts, but not for running them.
| Tags | Text Processing Filters |
|---|---|
| Licenses | GPL |
| Implementation | C |
Recent releases


Release Notes: Regressions in the "index" builtin were fixed, avoiding false positives and negatives on several platforms. A number of portability improvements were inherited from gnulib.


Release Notes: A longstanding bug where the "format" builtin could crash on an invalid format string was fixed. Compilation against newer glibc and on AIX 7.1BETA was fixed. A number of portability improvements were inherited from gnulib.


Release Notes: A security issue in "make dist", reported as CVE-2009-4029, was resolved. The new "-g"/"--gnu" command-line option now overrides "-G"/"--traditional", in preparation for not supporting GNU extensions and behaving POSIXly correct without it. The "-L"/"--nesting-limit" command-line option now defaults to 0 for unlimited on platforms that can detect and deal with stack overflow. The "--debugfile" command line option now defaults to stderr. The input engine was optimized for faster processing. Several performance improvements were made. Several portability issues and regressions were resolved.


Release Notes: Security fixes were made for the -F option. A regression introduced in 1.4.9b in the "divert" builtin was fixed. The output of the "maketemp" and "mkstemp" builtins is now quoted if a file was created. The "defn" builtin was enhanced to support concatenation of multiple text arguments, as required by POSIX. The "format" builtin was enhanced to parse all C99 floating point numbers. The "index" builtin was enhanced to guarantee linear behavior.


Release Notes: Running "./configure --infodir=/usr/share/info" now works correctly. When any file named on the command line is missing, the program exits with a status of 1.