(m4.info.gz) Extensions
Info Catalog
(m4.info.gz) Compatibility
(m4.info.gz) Incompatibilities
15.1 Extensions in GNU `m4'
===========================
This version of `m4' contains a few facilities that do not exist in
System V `m4'. These extra facilities are all suppressed by using the
`-G' command line option ( Invoking m4), unless overridden by
other command line options.
* In the `$'N notation for macro arguments, N can contain several
digits, while the System V `m4' only accepts one digit. This
allows macros in GNU `m4' to take any number of arguments, and not
only nine ( Arguments).
This means that `define(`foo', `$11')' is ambiguous between
implementations. To portably choose between grabbing the first
parameter and appending 1 to the expansion, or grabbing the
eleventh parameter, you can do the following:
define(`a1', `A1')
=>
dnl First argument, concatenated with 1
define(`_1', `$1')define(`first1', `_1($@)1')
=>
dnl Eleventh argument, portable
define(`_9', `$9')define(`eleventh', `_9(shift(shift($@)))')
=>
dnl Eleventh argument, GNU style
define(`Eleventh', `$11')
=>
first1(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k')
=>A1
eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k')
=>k
Eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k')
=>k
* The `divert' ( Divert) macro can manage more than 9
diversions. GNU `m4' treats all positive numbers as valid
diversions, rather than discarding diversions greater than 9.
* Files included with `include' and `sinclude' are sought in a user
specified search path, if they are not found in the working
directory. The search path is specified by the `-I' option and the
`M4PATH' environment variable ( Search Path).
* Arguments to `undivert' can be non-numeric, in which case the named
file will be included uninterpreted in the output (
Undivert).
* Formatted output is supported through the `format' builtin, which
is modeled after the C library function `printf' ( Format).
* Searches and text substitution through regular expressions are
supported by the `regexp' ( Regexp) and `patsubst' (
Patsubst) builtins.
* The output of shell commands can be read into `m4' with `esyscmd'
( Esyscmd).
* There is indirect access to any builtin macro with `builtin'
( Builtin).
* Macros can be called indirectly through `indir' ( Indir).
* The name of the program, the current input file, and the current
input line number are accessible through the builtins
`__program__', `__file__', and `__line__' ( Location).
* The format of the output from `dumpdef' and macro tracing can be
controlled with `debugmode' ( Debug Levels).
* The destination of trace and debug output can be controlled with
`debugfile' ( Debug Output).
In addition to the above extensions, GNU `m4' implements the
following command line options: `-F', `-G', `-I', `-L', `-R', `-V',
`-W', `-d', `-i', `-l', `--debugfile' and `-t'. Invoking m4,
for a description of these options.
Also, the debugging and tracing facilities in GNU `m4' are much more
extensive than in most other versions of `m4'.
Info Catalog
(m4.info.gz) Compatibility
(m4.info.gz) Incompatibilities
automatically generated byinfo2html