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).
maketemp
(see Mkstemp) macro behaves like mkstemp
,
creating a new file with a unique name on every invocation, rather than
following the insecure behavior of replacing the trailing `X'
characters with the m4
process id.
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
.