Contents | < Browse | Browse >
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, 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).

   * 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' built-in, which
     is modeled after the C library function `printf' (Format).

   * Searches and text substitution through regular expressions are
     supported by the `regexp' and `patsubst' built-ins 
     (Regexp . and Patsubst).

   * The output of shell commands can be read into `m4' with `esyscmd'
     (Esyscmd).

   * There is indirect access to any built-in macro with `builtin'
     (Builtin).

   * Macros can be called indirectly through `indir' Indir).

   * The name of the current input file and the current input line
     number are accessible through the built-ins `__file__' and
     `__line__' (Errprint).

   * 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: `-V', `-d', `-l', `-o', `-N', `-I' and
`-t'.  For a description of these options, Invoking m4 .

   Also, the debugging and tracing facilities in GNU `m4' are much more
extensive than in most other versions of `m4'.