m4
m4
Next: Preliminaries, Up: (dir) [Contents][Index]
This manual (28 May 2021) is for GNU M4 (version 1.4.19), a package containing an implementation of the m4 macro language.
Copyright © 1989–1994, 2004–2014, 2016–2017, 2020–2021 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License.”
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). m4
also has builtin functions for including
files, running shell commands, doing arithmetic, etc. Autoconf needs
GNU m4
for generating configure scripts, but not for
running them.
GNU m4
was originally written by René Seindal, with
subsequent changes by François Pinard and other volunteers
on the Internet. All names and email addresses can be found in the
files m4-1.4.19/AUTHORS and
m4-1.4.19/THANKS from the GNU M4
distribution.
This is release 1.4.19. It is now considered stable: future releases in the 1.4.x series are only meant to fix bugs, increase speed, or improve documentation. However…
An experimental feature, which would improve m4
usefulness,
allows for changing the syntax for what is a word in m4
.
You should use:
./configure --enable-changeword
if you want this feature compiled in. The current implementation
slows down m4
considerably and is hardly acceptable. In the
future, m4
2.0 will come with a different set of new features
that provide similar capabilities, but without the inefficiencies, so
changeword will go away and you should not count on it.
• Preliminaries | Introduction and preliminaries | |
• Invoking m4 | Invoking m4
| |
• Syntax | Lexical and syntactic conventions | |
• Macros | How to invoke macros | |
• Definitions | How to define new macros | |
• Conditionals | Conditionals, loops, and recursion | |
• Debugging | How to debug macros and input | |
• Input Control | Input control | |
• File Inclusion | File inclusion | |
• Diversions | Diverting and undiverting output | |
• Text handling | Macros for text handling | |
• Arithmetic | Macros for doing arithmetic | |
• Shell commands | Macros for running shell commands | |
• Miscellaneous | Miscellaneous builtin macros | |
• Frozen files | Fast loading of frozen state | |
• Compatibility | Compatibility with other versions of m4
| |
• Answers | Correct version of some examples | |
• Copying This Package | How to make copies of the overall M4 package | |
• Copying This Manual | How to make copies of this manual | |
• Indices | Indices of concepts and macros | |
— The Detailed Node Listing — Introduction and preliminaries | ||
• Intro | Introduction to m4
| |
• History | Historical references | |
• Bugs | Problems and bugs | |
• Manual | Using this manual | |
Invoking | ||
• Operation modes | Command line options for operation modes | |
• Preprocessor features | Command line options for preprocessor features | |
• Limits control | Command line options for limits control | |
• Frozen state | Command line options for frozen state | |
• Debugging options | Command line options for debugging | |
• Command line files | Specifying input files on the command line | |
Lexical and syntactic conventions | ||
• Names | Macro names | |
• Quoted strings | Quoting input to m4
| |
• Comments | Comments in m4 input
| |
• Other tokens | Other kinds of input tokens | |
• Input processing | How m4 copies input to output
| |
How to invoke macros | ||
• Invocation | Macro invocation | |
• Inhibiting Invocation | Preventing macro invocation | |
• Macro Arguments | Macro arguments | |
• Quoting Arguments | On Quoting Arguments to macros | |
• Macro expansion | Expanding macros | |
How to define new macros | ||
• Define | Defining a new macro | |
• Arguments | Arguments to macros | |
• Pseudo Arguments | Special arguments to macros | |
• Undefine | Deleting a macro | |
• Defn | Renaming macros | |
• Pushdef | Temporarily redefining macros | |
• Indir | Indirect call of macros | |
• Builtin | Indirect call of builtins | |
Conditionals, loops, and recursion | ||
• Ifdef | Testing if a macro is defined | |
• Ifelse | If-else construct, or multibranch | |
• Shift | Recursion in m4
| |
• Forloop | Iteration by counting | |
• Foreach | Iteration by list contents | |
• Stacks | Working with definition stacks | |
• Composition | Building macros with macros | |
How to debug macros and input | ||
• Dumpdef | Displaying macro definitions | |
• Trace | Tracing macro calls | |
• Debug Levels | Controlling debugging output | |
• Debug Output | Saving debugging output | |
Input control | ||
• Dnl | Deleting whitespace in input | |
• Changequote | Changing the quote characters | |
• Changecom | Changing the comment delimiters | |
• Changeword | Changing the lexical structure of words | |
• M4wrap | Saving text until end of input | |
File inclusion | ||
• Include | Including named files | |
• Search Path | Searching for include files | |
Diverting and undiverting output | ||
• Divert | Diverting output | |
• Undivert | Undiverting output | |
• Divnum | Diversion numbers | |
• Cleardivert | Discarding diverted text | |
Macros for text handling | ||
• Len | Calculating length of strings | |
• Index macro | Searching for substrings | |
• Regexp | Searching for regular expressions | |
• Substr | Extracting substrings | |
• Translit | Translating characters | |
• Patsubst | Substituting text by regular expression | |
• Format | Formatting strings (printf-like) | |
Macros for doing arithmetic | ||
• Incr | Decrement and increment operators | |
• Eval | Evaluating integer expressions | |
Macros for running shell commands | ||
• Platform macros | Determining the platform | |
• Syscmd | Executing simple commands | |
• Esyscmd | Reading the output of commands | |
• Sysval | Exit status | |
• Mkstemp | Making temporary files | |
Miscellaneous builtin macros | ||
• Errprint | Printing error messages | |
• Location | Printing current location | |
• M4exit | Exiting from m4
| |
Fast loading of frozen state | ||
• Using frozen files | Using frozen files | |
• Frozen file format | Frozen file format | |
Compatibility with other versions of | ||
• Extensions | Extensions in GNU M4 | |
• Incompatibilities | Facilities in System V m4 not in GNU M4 | |
• Other Incompatibilities | Other incompatibilities | |
Correct version of some examples | ||
• Improved exch | Solution for exch
| |
• Improved forloop | Solution for forloop
| |
• Improved foreach | Solution for foreach
| |
• Improved copy | Solution for copy
| |
• Improved m4wrap | Solution for m4wrap
| |
• Improved cleardivert | Solution for cleardivert
| |
• Improved capitalize | Solution for capitalize
| |
• Improved fatal_error | Solution for fatal_error
| |
How to make copies of the overall M4 package | ||
• GNU General Public License | License for copying the M4 package | |
How to make copies of this manual | ||
• GNU Free Documentation License | License for copying this manual | |
Indices of concepts and macros | ||
• Macro index | Index for all m4 macros
| |
• Concept index | Index for many concepts | |
Next: Preliminaries, Up: (dir) [Contents][Index]