Next: Invoking m4, Previous: Intro, Up: Preliminaries
GPM was an important ancestor of m4. See
C. Stratchey: “A General Purpose Macro generator”, Computer Journal
8,3 (1965), pp. 225 ff. GPM is also succinctly described into
David Gries classic “Compiler Construction for Digital Computers”.
The classic B. Kernighan and P.J. Plauger: “Software Tools”,
Addison-Wesley, Inc. (1976) describes and implements a Unix
macro-processor language, which inspired Dennis Ritchie to write
m3, a macro processor for the AP-3 minicomputer.
Kernighan and Ritchie then joined forces to develop the original
m4, as described in “The M4 Macro Processor”, Bell
Laboratories (1977). It had only 21 builtin macros.
While GPM was more pure, m4 is meant to deal with
the true intricacies of real life: macros can be recognized without
being pre-announced, skipping whitespace or end-of-lines is easier,
more constructs are builtin instead of derived, etc.
Originally, the Kernighan and Plauger macro-processor, and then
m3, formed the engine for the Rational FORTRAN preprocessor,
that is, the Ratfor equivalent of cpp. Later, m4
was used as a frontend for Ratfor, C and Cobol.
René Seindal released his implementation of m4, GNU
m4,
in 1990, with the aim of removing the artificial limitations in many
of the traditional m4 implementations, such as maximum line
length, macro size, or number of macros.
The late Professor A. Dain Samples described and implemented a further
evolution in the form of M5: “User's Guide to the M5 Macro
Language: 2nd edition”, Electronic Announcement on comp.compilers
newsgroup (1992).
François Pinard took over maintenance of GNU m4 in
1992, until 1994 when he released GNU m4 1.4, which was
the stable release for 10 years. It was at this time that GNU
Autoconf decided to require GNU m4 as its underlying
engine, since all other implementations of m4 had too many
limitations.
More recently, in 2004, Paul Eggert released 1.4.1 and 1.4.2 which
addressed some long standing bugs in the venerable 1.4 release.
Then in 2005 Gary V. Vaughan collected together the many
patches to GNU m4 1.4 that were floating around the net and
released 1.4.3 and 1.4.4. And in 2006, Eric Blake joined the team and
prepared patches for the release of 1.4.5, 1.4.6, and 1.4.7.
Meanwhile, development has continued on new features for m4, such
as dynamic module loading and additional builtins. When complete,
GNU m4 2.0 will start a new series of releases.