Next: Incompatibilities, Up: Compatibility
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 (see Invoking m4), unless
overridden by other command line options.
$
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 (see 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
divert
(see Divert) macro can manage more than 9
diversions. GNU m4
treats all positive numbers as valid
diversions, rather than discarding diversions greater than 9.
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 (see Search Path).
undivert
can be non-numeric, in which case the named
file will be included uninterpreted in the output (see Undivert).
format
builtin, which
is modeled after the C library function printf
(see Format).
regexp
(see Regexp) and patsubst
(see Patsubst) builtins.
m4
with
esyscmd
(see Esyscmd).
builtin
(see Builtin).
indir
(see Indir).
__program__
,
__file__
, and __line__
(see Location).
dumpdef
and macro tracing can be
controlled with debugmode
(see Debug Levels).
debugfile
(see 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. See 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
.