291 |
debugging their @code{m4} scripts than doing real work. Beware that |
debugging their @code{m4} scripts than doing real work. Beware that |
292 |
@code{m4} may be dangerous for the health of compulsive programmers. |
@code{m4} may be dangerous for the health of compulsive programmers. |
293 |
|
|
294 |
|
|
295 |
@node History |
@node History |
296 |
@section Historical references |
@section Historical references |
297 |
|
|
|
The historical notes included here are fairly incomplete, and not |
|
|
authoritative at all. Please knowledgeable users help us to more |
|
|
properly write this section. |
|
|
|
|
298 |
@code{GPM} has been an important ancestor of @code{m4}. See |
@code{GPM} has been an important ancestor of @code{m4}. See |
299 |
C. Stratchey: ``A General Purpose Macro generator'', Computer Journal |
C. Stratchey: ``A General Purpose Macro generator'', Computer Journal |
300 |
8,3 (1965), pp. 225 ff. @code{GPM} is also succinctly described into |
8,3 (1965), pp. 225 ff. @code{GPM} is also succinctly described into |
301 |
David Gries classic ``Compiler Construction for Digital Computers''. |
David Gries classic ``Compiler Construction for Digital Computers''. |
302 |
|
|
303 |
|
The classic B. Kernighan and P.J. Plauger: ``Software Tools'', |
304 |
|
Addison-Wesley, Inc. (1976) describes and implements a Unix |
305 |
|
macro-processor language, which inspired Dennis Ritchie to write |
306 |
|
@code{m3}, a macro processor for the AP-3 minicomputer. |
307 |
|
|
308 |
|
Kernighan and Ritchie then joined forces to develop the original |
309 |
|
@code{m4}, as described in ``The M4 Macro Processor'', Bell |
310 |
|
Laboratories (1977) which had only 21 builtin macros. |
311 |
|
|
312 |
While @code{GPM} was more @emph{pure}, @code{m4} is meant to deal with |
While @code{GPM} was more @emph{pure}, @code{m4} is meant to deal with |
313 |
the true intricacies of real life: macros can be recognized without being |
the true intricacies of real life: macros can be recognized without |
314 |
pre-announced, skipping whitespace or end-of-lines is easier, more constructs |
being pre-announced, skipping whitespace or end-of-lines is easier, |
315 |
are builtin instead of derived, etc. |
more constructs are builtin instead of derived, etc. |
316 |
|
|
317 |
|
Originally, the Kernighan and Plauger macro-processor, and then |
318 |
|
@code{m3} formed the engine for the Rational FORTRAN preprocessor, |
319 |
|
that is, the @code{Ratfor} equivalent of @code{cpp}. Later, @code{m4} |
320 |
|
was used as a frontend for @code{Ratfor}, @code{C} and @code{Cobol}. |
321 |
|
|
322 |
|
Rene' Seindal released his implementation of @code{m4}, GNU @code{m4}, |
323 |
|
in 1990, with the aim of removing the artificial limitations in many |
324 |
|
of the traditional @code{m4}'s: like maximum line length, macro size, |
325 |
|
number of macros and so on. |
326 |
|
|
327 |
|
The late Professor A. Dain Samples described and implemented a further |
328 |
|
evolution in the form of @code{M5}: ``User's Guide to the M5 Macro |
329 |
|
Language: 2nd edition'', Electronic Announcement on comp.compilers |
330 |
|
newsgroup (1992). |
331 |
|
|
332 |
|
Francois Pinard took over maintainance of GNU @code{m4} in 1992, until |
333 |
|
1994 when he released GNU @code{m4} 1.4, which was the stable release |
334 |
|
for 10 years. In 2004, Paul Eggert released 1.4.1 and 1.4.2 which |
335 |
|
addressed some long standing bugs in the venerable 1.4 release. |
336 |
|
|
337 |
|
Most recently, in 2005 Gary V. Vaughan collected together the many |
338 |
|
patches to GNU @code{m4} 1.4 that were floating around the net and |
339 |
|
released 1.4.3. |
340 |
|
|
|
Originally, @code{m4} was the engine for Rational FORTRAN preprocessor, |
|
|
that is, the @code{ratfor} equivalent of @code{cpp}. |
|
341 |
|
|
342 |
@node Invoking m4 |
@node Invoking m4 |
343 |
@section Invoking @code{m4} |
@section Invoking @code{m4} |