(m4.info)Top
GNU M4
******
This manual (31 December 2016) is for GNU M4 (version 1.4.18), a package
containing an implementation of the m4 macro language.
Copyright (C) 1989-1994, 2004-2014, 2016 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 Rene' Seindal, with subsequent
changes by Franc,ois Pinard and other volunteers on the Internet. All
names and email addresses can be found in the files 'm4-1.4.18/AUTHORS'
and 'm4-1.4.18/THANKS' from the GNU M4 distribution.
This is release 1.4.18. 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 'm4'
- 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 'm4'
- 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
automatically generated by info2www version 1.2.2.9