mirror of
https://https.git.savannah.gnu.org/git/m4.git
synced 2026-01-26 15:39:10 +00:00
* NEWS: Add some blurbs. * .prev-version: Record previous version. * cfg.mk (old_NEWS_hash): Update. Signed-off-by: Eric Blake <eblake@redhat.com> [this is a mish-mash of two patches from branch-1.4:] (cherry picked from commit 658427104bbe515249f728d8524e975167e6533d) (cherry picked from commit e0140bd91ce0d2dfcdd1df22472d81ed13489d46)
1229 lines
53 KiB
Plaintext
1229 lines
53 KiB
Plaintext
GNU M4 NEWS - History of user-visible changes. -*- outline -*-
|
||
|
||
* Noteworthy changes in Version 1.9b (201x-??-??) [beta]
|
||
Released by ????, based on git version 1.9a-*
|
||
|
||
NOTE - there are still a number of FIXMEs to resolve before this can be
|
||
promoted to 2.0.
|
||
|
||
** Building M4
|
||
|
||
*** The build environment has been updated to modern GNU practices,
|
||
depending on newer features of Autoconf, Automake, Libtool, Gettext,
|
||
and Gnulib to be more portable to a wide variety of platforms.
|
||
|
||
** New command line behavior
|
||
|
||
*** If the POSIXLY_CORRECT environment variable is set, it implies the
|
||
`-G' and `-Q' options, effectively giving a more fully POSIX-compliant
|
||
implementation with only compatible GNU extensions.
|
||
|
||
*** New `-b'/`--batch' command-line option to force non-interactive mode.
|
||
Also, in addition to `-e'/`--interactive' requesting interactive mode,
|
||
m4 now follows the lead of sh, and automatically enters interactive
|
||
mode when there are no files specified, and when both standard input
|
||
and standard error are terminals.
|
||
|
||
*** New `-B'/`--prepend-include' command-line option allows prepending to
|
||
the include path, rather than always searching `.' first.
|
||
|
||
*** New `--debuglen' command-line option matches the spelling of a new
|
||
macro, and the old spelling `--arglength' now issues a warning that it
|
||
might be withdrawn in the future.
|
||
|
||
*** The `-g'/`--gnu' command-line option is now required to allow all GNU
|
||
extensions when POSIXLY_CORRECT is set.
|
||
|
||
*** The `-H'/`--hashsize' command-line options, which were made no-ops in
|
||
a previous beta, now issue a deprecation warning.
|
||
|
||
*** The `-L'/`--nesting-limit' command-line option now performs argument
|
||
validation and accepts an optional multiplier suffix.
|
||
|
||
*** New `-p'/`--pushdef' and `--popdef' command-line options allow more
|
||
control over macro definitions from the command line between input
|
||
files.
|
||
|
||
*** New `--posix' command-line option is a synonym for `-G'/`--traditional'.
|
||
|
||
*** New `-r'/`--regexp-syntax' command-line option changes the default
|
||
regular expression syntax used by M4. Without this option, M4
|
||
continues to use EMACS style expressions. A new section in the info
|
||
docs explains the differences between them, and what builtins are
|
||
affected.
|
||
|
||
*** New `--safer' command-line option cripples the potentially unsafe
|
||
builtins `debugfile', `esyscmd', `maketemp', `mkdtemp', `mkstemp', and
|
||
`syscmd'.
|
||
|
||
*** New `--syncoutput' command-line option matches the builtin added in a
|
||
previous beta, and provides more control over sync line generation
|
||
from the command line between input files. The previous options
|
||
`-s'/`--synclines' remain as aliases for `--syncoutput=1'.
|
||
|
||
*** New `--traceoff' command-line option, and new spelling `--traceon' for
|
||
`--trace', allow more control over macro tracing from the command line
|
||
between input files.
|
||
|
||
*** New `--warnings' command-line option re-enables warnings, overriding
|
||
`-Q'/`--quiet'/`--silent', allowing warnings even when POSIXLY_CORRECT.
|
||
|
||
*** When GNU extensions are enabled, any command line arguments that wauld
|
||
have been interpreted as input file names with previous releases are
|
||
still searched for as before, but will first attempt to be loaded as
|
||
compiled modules before falling back on loading as m4 input. In
|
||
POSIXLY_CORRECT mode, only m4 input files in the current directory can
|
||
be loaded.
|
||
|
||
** POSIX conformance
|
||
|
||
*** The `defn' builtin now allows any number of arguments, as POSIX requires.
|
||
- FIXME: This still doesn't work with concatenating builtins with text.
|
||
|
||
- FIXME: POSIX recommends using ${10} instead of $10 for the tenth
|
||
positional argument. We should deprecate $10.
|
||
|
||
** Removed builtins
|
||
|
||
*** The experimental `epatsubst' and `eregexp' builtins have been removed
|
||
in favor of a new `changeresyntax' builtin.
|
||
|
||
*** The `load' builtin, introduced in previous betas has been removed in
|
||
lieu of richer `include' and `sinclude' functionality.
|
||
|
||
** New builtins
|
||
|
||
*** New `changeresyntax' builtin allows programmatic setting of the default
|
||
regular expression flavor, to match `-r'/`--regexp-syntax' command-line
|
||
option.
|
||
|
||
*** New `debuglen' builtin allows runtime setting of debug output length,
|
||
previously controlled only by the `-l' command line argument.
|
||
Additionally, whether using the new macro or the command line argument,
|
||
the length limitation now affects dumpdef output as well as trace
|
||
output, undergoes argument validation, and accepts an optional
|
||
multiplier suffix.
|
||
- FIXME the multiplier suffix isn't reliable yet
|
||
|
||
*** New `mkdtemp' builtin parallels `mkstemp', but allows the creation of
|
||
temporary directories instead of files.
|
||
|
||
*** New `refcount' builtin allows tracking how many times a module has
|
||
been loaded.
|
||
- FIXME: consider making m4modules smarter for this purpose
|
||
|
||
*** New `renamesyms' builtin allows programmatic renaming of all symbols
|
||
according to a regular expression.
|
||
- FIXME: This feature can cause core dumps when renaming multiple
|
||
symbols to the same name.
|
||
|
||
*** New `__traditional__' builtin identifies when the traditional module
|
||
is loaded instead of the gnu module.
|
||
|
||
*** The `modules' and `symbols' builtins, introduced in previous betas,
|
||
have been renamed `m4modules' and `m4symbols', in order to minimize
|
||
problems when upgrading from 1.4.x and processing English text. To
|
||
prevent future problems, any future macro added as a GNU extension will
|
||
either be blind (ie. be unrecognized without arguments), or begin with
|
||
the prefix `m4' or `__'.
|
||
|
||
** Changed behavior of builtins
|
||
|
||
*** The module identifier builtins, such as `__gnu__', `__m4_version__',
|
||
and `__unix__', now warn if given arguments.
|
||
|
||
*** The `builtin' builtin now has a special form, where if the first
|
||
argument is exactly the special token representing defn(`builtin'), the
|
||
expansion is the special token representing the builtin named in the
|
||
second argument. This allows regenerating a macro with a more
|
||
efficient mapping directly to a builtin function, rather than through
|
||
textual indirection through further expansions of `builtin'.
|
||
|
||
*** The `changesyntax' builtin has been improved, to make it easier to add
|
||
and remove characters from a syntax class without having to specify the
|
||
entire set of characters in that class. It also supports new syntax
|
||
categories, `$', `{' and `}', for extended argument handling in macro
|
||
definitions. See the manual for more examples.
|
||
|
||
*** New `m' flag to `-d'/`--debug' command-line option or `debugmode'
|
||
builtin traces actions related to module loading and unloading, and
|
||
affects `dumpdef' and trace output to show where builtins come from.
|
||
New `s' flag shows the entire stack of `pushdef' definitions during
|
||
`dumpdef'. The `c' flag has been updated to add information to the
|
||
first line to show the definition of the macro being expanded.
|
||
|
||
*** The `eval' and `mpeval' builtins now support the following new
|
||
operators: `>>>', `\', and `,'.
|
||
|
||
*** When GNU extensions are enabled, the `include' and `sinclude' builtins
|
||
continue to search directories one at a time, but will first attempt to
|
||
load arguments as compiled modules and then as m4 input before moving
|
||
to the next directory in the search path. In POSIXLY_CORRECT mode,
|
||
only m4 input in the current directory can be loaded.
|
||
|
||
*** The `maketemp' builtin now always warns that it is obsolete, even in GNU
|
||
mode where it uses the same secure algorithm as `mkstemp', because of
|
||
the recommendation of POSIX to obsolete `maketemp' as inherently
|
||
insecure when obeying POSIX.
|
||
|
||
*** The `m4symbols' builtin now warns if given a builtin token instead of
|
||
a macro name. It remains silent for undefined macros.
|
||
|
||
*** The `patsubst' and `regexp' builtins have a new optional 4th argument
|
||
to use a different regular expression syntax for the duration of that
|
||
invocation.
|
||
|
||
*** The semantics of the `traceon' and `traceoff' builtins now match
|
||
traditional implementations: when called without arguments, they affect
|
||
global state rather than affecting only the macros defined at that
|
||
moment. The manual includes an example of how to recover 1.4.x
|
||
semantics.
|
||
|
||
** Other changes
|
||
|
||
*** The syntax of frozen files format V2 has been improved to save
|
||
additional state. This includes the `R' directive for default regular
|
||
expression syntax, the `t' directive for traced macros, and the `d'
|
||
directive for debug mode. Existing directives with consecutive strings
|
||
now require an intermediate newline, for faster parsing. Also, a V2
|
||
file can now be represented completely in ASCII, thanks to escape
|
||
sequences. Unfortunately, files frozen by M4 1.4q cannot be read by
|
||
1.9b, but since 1.4q was not widely distributed, this is not expected
|
||
to be much of an issue, and comes with the territory of using a beta
|
||
release.
|
||
- FIXME: format 2 still needs to catch more missing state; once 2.0 is
|
||
released, any further changes would introduce format 3.
|
||
|
||
*** Improvements made in the 1.4.x and 1.6 stable series have been
|
||
incorporated.
|
||
|
||
|
||
* Noteworthy changes in Version 1.6 (????-??-??) [stable]
|
||
Released by ????, based on git versions 1.4.10b.x-* and 1.5.*
|
||
|
||
** Fix regression introduced in 1.4.4b where using `traceon' could delete
|
||
a macro. This was most noticeable with `traceon(`traceon')', but
|
||
would also happen in cases such as `foo(traceon(`foo'))'.
|
||
|
||
** Fix regressions introduced in 1.4.10b:
|
||
*** Using `builtin' or `indir' to perform nested `shift' calls triggered
|
||
an assertion failure (not present in 1.4.11).
|
||
*** The command-line option -dV, as well as the builtin `debugmode(V)',
|
||
failed to enable `t' and `c' debug options (not present in 1.4.11).
|
||
*** Comments that contain unbalanced quotes were not rescanned correctly
|
||
when passed through $@ (not present in 1.4.11).
|
||
*** Using `defn' on a traced but undefined macro triggered an assertion
|
||
failure (also present in 1.4.11, but not 1.4.12).
|
||
|
||
** Remove the undocumented command-line option '-N', as no one complained
|
||
about the assertion failure regression that it introduced in 1.4.7.
|
||
|
||
** The `-o'/`--error-output' command-line options, which were replaced by
|
||
`--debugfile' in 1.4.7, now issue a deprecation warning. This warning
|
||
harmlessly triggers with versions of Autoconf 2.60 and earlier, but can
|
||
be silenced by applying this patch:
|
||
http://git.sv.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=714eeee87
|
||
|
||
** Fix the `m4wrap' builtin to accumulate wrapped text in FIFO order, as
|
||
required by POSIX. The manual mentions a way to restore the LIFO order
|
||
present in earlier GNU M4 versions. NOTE: this change exposes a bug
|
||
in Autoconf 2.59 and earlier (which was fixed in Autoconf 2.60).
|
||
|
||
If you want your package to work with pre-installed Autoconf without
|
||
requiring 2.60, then add these lines to your project's configure.ac,
|
||
prior to calling AC_INIT:
|
||
|
||
# As long as this project is not ready to upgrade to autoconf 2.60
|
||
# or newer, make sure that newer M4 will still use LIFO order:
|
||
m4_define([m4_wrap], [m4_ifdef([_$0_text],
|
||
[m4_define([_$0_text], [$1]m4_defn([_$0_text]))],
|
||
[m4_define([_$0_text], [$1])m4_builtin([m4wrap],
|
||
[m4_default(m4_defn([_$0_text])m4_undefine([_$0_text]))])])])
|
||
|
||
On the other hand, if you want to install Autoconf 2.59 or earlier,
|
||
then apply this patch:
|
||
http://git.sv.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=56d42fa71
|
||
|
||
** The `changecom' builtin semantics now match traditional
|
||
implementations; if the start-comment string resembles a macro name or
|
||
the start-quote string, comments are effectively disabled.
|
||
|
||
** The `divert' builtin now accepts an optional second argument of text
|
||
that is immediately placed in the new diversion, regardless of whether
|
||
the current expansion is nested within argument collection of another
|
||
macro. It has also been optimized for faster performance.
|
||
|
||
** The `substr' builtin now treats negative arguments as indices relative
|
||
to the end of the string, and accepts an optional fourth argument of
|
||
text to supply in place of the selected substring. The manual gives an
|
||
example of how to recover M4 1.4.x behavior, as well as an example of
|
||
simulating the new negative argument semantics with older M4.
|
||
|
||
** The `index' builtin now takes an optional third argument as the index
|
||
to begin searching from, with a negative argument relative to the end of
|
||
the string.
|
||
|
||
** The `-d'/`--debug' command-line option now understands `-' and `+'
|
||
modifiers, the way the builtin `debugmode' has always done; this allows
|
||
`-d-V' to disable prior debug settings from the command line, similar to
|
||
using the builtin `debugmode' without arguments. The option
|
||
`--debugmode' is added as an alias for `-d'. The new flag `d' is added
|
||
to control whether dereferencing an undefined macro causes a warning;
|
||
this flag is enabled by default if neither `-d' nor `-E' are specified.
|
||
The new flag `o' is added to control whether `dumpdef' outputs to stderr
|
||
or the current `debugfile' location. When the command line option is
|
||
given the empty string, the mode is treated as `+adeq' instead of `aeq'.
|
||
Also, the position of `-d' with respect to files on the command line is
|
||
now significant.
|
||
|
||
** A new predefined text macro, `__m4_version__', expands to the unquoted
|
||
version number of M4, if GNU extensions are enabled. While you should
|
||
generally favor feature tests over version number checks, this macro can
|
||
be used, via `defn', to determine whether the version of m4 processing
|
||
your file is adequate.
|
||
|
||
** The `defn', `popdef', and `undefine' builtins gained a new warning when
|
||
operating on an undefined macro name, to match the warning already
|
||
present in `builtin', `indir', and `dumpdef'. For backwards
|
||
compatibility, the warning can be disabled by using `debugmode(`-d')'
|
||
(or the command line option `--debug=-d'). The flag is also cleared by
|
||
the command line option `-E'/`--fatal-warnings', so that scripts written
|
||
for 1.4.x do not cause the script to fail because of new warnings.
|
||
|
||
** Enhance the `indir' builtin to trace indirect macros, where the trace
|
||
is requested via `traceon' or the command-line option `-t'. Previously,
|
||
it was impossible to trace macro names such as `foo-bar' which could
|
||
only be invoked indirectly, without relying on global tracing (such as
|
||
with `debugmode(`t')') or the experimental `changeword'.
|
||
|
||
** Aspects of tracing output that were previously undocumented have been
|
||
slightly altered, and the effect of the builtin `debugmode' on trace
|
||
output is more fully documented. As POSIX does not specify trace output
|
||
format, parsing such output is inherently fragile in the first place.
|
||
The intent is that future M4 versions will not change documented trace
|
||
output without adding additional `debugmode' flags.
|
||
|
||
** Enhance the `ifdef', `ifelse', and `shift' builtins, as well as all
|
||
user macros, to transparently handle builtin tokens generated by `defn'.
|
||
|
||
** Allow the concatenation of builtin macros with arbitrary text in
|
||
several contexts, via the `defn' builtin or argument expansion, rather
|
||
than warning and converting the builtin token to an empty string.
|
||
However, it is still not possible to use a concatenated builtin when
|
||
defining a macro.
|
||
|
||
** Enhance the `defn', `dumpdef', `ifdef', `popdef', `traceon', `traceoff',
|
||
and `undefine' macros to warn when encountering a builtin token in the
|
||
context of a macro name, rather than acting on the empty string. This
|
||
was already done for `define', `pushdef', `builtin', and `indir'.
|
||
|
||
** Enhance the `eval' builtin to understand the `?:' operator, and
|
||
downgrade a failed parse due to an unknown operator from an error to a
|
||
warning.
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
* Noteworthy changes in release 1.4.18 (2016-12-31) [stable]
|
||
|
||
** Diagnose --word-regexp as unsupported if it was not configured.
|
||
|
||
** Preliminary support for OS/2.
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
|
||
* Noteworthy changes in release 1.4.17 (2013-09-17) [stable]
|
||
|
||
** Fix compilation with newer glibc headers.
|
||
|
||
** Fix a failure with diverting large amounts of text on mingw (does
|
||
not affect platforms that can rename an open file).
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
|
||
* Noteworthy changes in release 1.4.16 (2011-03-01) [stable]
|
||
|
||
** Fix regressions in the `index' builtin. On glibc platforms, this
|
||
avoids false positives from a strstr bug in glibc 2.9 through 2.12;
|
||
on many other platforms, it fixes two separate regressions, a false
|
||
positive introduced in 1.4.11 and a false negative in 1.4.15.
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
|
||
* Noteworthy changes in release 1.4.15 (2010-08-31) [stable]
|
||
|
||
** Fix regression introduced in 1.4.9b where the `format' builtin could
|
||
crash on an invalid format string.
|
||
|
||
** Fix compilation against newer glibc, and on AIX 7.1BETA.
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
* Noteworthy changes in Version 1.4.14 (2010-02-24) [stable]
|
||
Released by Eric Blake, based on git version 1.4.13.*
|
||
|
||
** Fix regression introduced in 1.4.12 where executing with stdout closed
|
||
could crash m4 on exit on some platforms.
|
||
|
||
** Fix regressions introduced in 1.4.13 in the `esyscmd' builtin, where
|
||
closed file descriptors could interfere with child execution, and where
|
||
a child status of 127 made m4 print a spurious message to stderr.
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
* Noteworthy changes in Version 1.4.13 (2009-04-01) [stable]
|
||
Released by Eric Blake, based on git version 1.4.12.*
|
||
|
||
** The manual is now distributed under the terms of FDL 1.3.
|
||
|
||
** The `divert' and `undivert' builtins have been made more efficient
|
||
when using temporary files for large diversions.
|
||
|
||
** The `translit' builtin has been made more efficient when the second
|
||
argument is short.
|
||
|
||
** The input engine has been optimized for faster processing.
|
||
|
||
** The command line option `--debugfile', introduced in 1.4.7, now
|
||
treats its argument as optional, in order to allow setting the debug
|
||
output back to stderr when used without an argument; and order is now
|
||
significant with respect to command line files. You must therefore use
|
||
`m4 --debugfile=trace file', not `m4 file --debugfile trace'. This
|
||
change does not affect the deprecated `-o'/`--error-output' option.
|
||
|
||
** The `syscmd' and `esyscmd' builtins can be configured to use an
|
||
alternate shell, via the new `configure' option `--with-syscmd-shell'.
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
* Noteworthy changes in Version 1.4.12 (2008-10-10) [stable]
|
||
Released by Eric Blake, based on git version 1.4.11.*
|
||
|
||
** Fix regression introduced in 1.4.4b where using `traceon' could delete
|
||
a macro. This was most noticeable with `traceon(`traceon')', but
|
||
would also happen in cases such as `foo(traceon(`foo'))'.
|
||
|
||
** Fix regression introduced in 1.4.7 where `m4 -N9' died with an assertion
|
||
failure.
|
||
|
||
** Fix regression introduced in 1.4.11 where `defn' died with an assertion
|
||
failure on a traced but undefined macro.
|
||
|
||
** New `-g'/`--gnu' command-line option overrides `-G'/`--traditional'.
|
||
For now, the environment variable POSIXLY_CORRECT has no effect on M4
|
||
behavior; but a future release of M4 will behave as though --traditional
|
||
is implied if POSIXLY_CORRECT is set (this future change is necessary,
|
||
because in the current release, there is no way to disable GNU
|
||
extensions that conflict with POSIX without the use of a non-POSIX
|
||
command-line argument). Clients of M4 that want to use GNU extensions,
|
||
even when POSIXLY_CORRECT is set, should start using the -g command-line
|
||
argument, even though it is currently a no-op if -G did not appear
|
||
earlier in the command line, so that the client will not break in the
|
||
face of an upgraded m4 and a POSIXLY_CORRECT execution environment.
|
||
|
||
** The `-L'/`--nesting-limit' command-line option now defaults to 0 for
|
||
unlimited on platforms that can detect and deal with stack overflow. On
|
||
systems that lack alternate stack support, such as Cygwin, and on
|
||
systems that do not obey the POSIX semantics for distinguishing stack
|
||
overflow from other exceptions, such as Linux, you can optionally
|
||
install the libsigsegv library (version 2.6 or newer recommended) to
|
||
enhance m4's ability to accurately report stack overflow:
|
||
http://www.gnu.org/software/libsigsegv/
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
* Noteworthy changes in Version 1.4.11 (2008-04-02) [stable]
|
||
Released by Eric Blake, based on git version 1.4.10a
|
||
|
||
** Security fixes for the -F option, for bugs present since -F was
|
||
introduced in 1.3: Avoid core dump with 'm4 -F file -t undefined', and
|
||
avoid arbitrary code execution with certain file names.
|
||
|
||
** Fix regression introduced in 1.4.9b in the `divert' builtin when more
|
||
than 512 kibibytes are saved in diversions on platforms like NetBSD
|
||
or darwin where fopen(name,"a+") seeks to the end of the file.
|
||
|
||
** The output of the `maketemp' and `mkstemp' builtins is now quoted if a
|
||
file was created. This is a minor security fix, because it was possible
|
||
(although rather unlikely) that an unquoted string could match an
|
||
existing macro name, such that use of the `mkstemp' output would trigger
|
||
inadvertent macro expansion and operate on the wrong file name.
|
||
|
||
** Enhance the `defn' builtin to support concatenation of multiple text
|
||
arguments, as required by POSIX. However, at this time, it is not
|
||
possible to concatenate a builtin macro with anything else; a warning is
|
||
now issued if this is attempted, although a future version of M4 may
|
||
lift this restriction to match other implementations.
|
||
|
||
** Enhance the `format' builtin to parse all C99 floating point numbers,
|
||
even on platforms where strtod(3) is buggy, although the replacement
|
||
function does have the known issue of rounding errors when parsing
|
||
some decimal floating point values. This fixes testsuite failures
|
||
introduced in 1.4.9b.
|
||
|
||
** Enhance the `index' builtin to guarantee linear behavior, in spite of
|
||
the surprisingly large number of systems with a brain-dead quadratic
|
||
strstr(3).
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
* Noteworthy changes in Version 1.4.10b (2008-02-25) [beta]
|
||
Released by Eric Blake, based on git version 1.4.10a
|
||
|
||
Note that M4 1.4.10b was released prior to 1.4.11, and includes all the
|
||
features of 1.4.11 except for C99 parsing in the `format' builtin. It also
|
||
contains the following beta features that were deemed worth deferring until
|
||
1.6:
|
||
|
||
** Further enhance the `index' builtin to often achieve sublinear results.
|
||
|
||
** Enhance the `regexp' and `patsubst' builtins to cache frequently used
|
||
regular expressions, which speeds up typical Autoconf usage.
|
||
|
||
** Enhance the `format' builtin to warn for more suspicious usages, such as
|
||
missing arguments or problems parsing according to the format string.
|
||
|
||
** Enhance the `ifelse' and `shift' builtins so that tail-recursive
|
||
algorithms based on `$@' operate in linear, rather than quadratic, time
|
||
and memory.
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
* Noteworthy changes in Version 1.4.10 (2007-07-09) [stable]
|
||
Released by Eric Blake, based on CVS version 1.4.9c
|
||
|
||
** Upgrade from GPL version 2 to GPL version 3 or later.
|
||
|
||
** A number of portability improvements inherited from gnulib.
|
||
|
||
** Avoid undefined behavior introduced in 1.4.9b in the `format' builtin
|
||
when handling %c. However, this area of code has never been documented,
|
||
and currently does not match the POSIX behavior of printf(1), so it may
|
||
have further changes in the next version.
|
||
|
||
* Noteworthy changes in Version 1.4.9b (2007-05-29) [beta]
|
||
Released by Eric Blake, based on CVS version 1.4.9a
|
||
|
||
** Fix regression introduced in 1.4.9 in the `eval' builtin when performing
|
||
division.
|
||
|
||
** Fix regression introduced in 1.4.8 in the `-F' option that made it
|
||
impossible to freeze more than 512 kibibytes of diverted text.
|
||
|
||
** The synclines option `-s' no longer generates sync lines in the middle of
|
||
multiline comments or quoted strings.
|
||
|
||
** Work around a number of corner-case POSIX compliance bugs in various
|
||
broken stdio libraries. In particular, the `syscmd' builtin behaves
|
||
more predictably when stdin is seekable.
|
||
|
||
** The `format' builtin now understands formats such as %a, %A, and %'hhd,
|
||
and works around a number of platform printf bugs. Furthermore, the
|
||
sequence format(%*.*d,-1,-1,1) no longer outputs random data. However,
|
||
some non-compliant platforms such as mingw still have known bugs in
|
||
strtod that may cause testsuite failures.
|
||
|
||
** The testsuite is improved to also run gnulib portability tests for the
|
||
features that M4 imports from gnulib.
|
||
|
||
* Noteworthy changes in Version 1.4.9 (2007-03-23) [stable]
|
||
Released by Eric Blake, based on CVS version 1.4.8c
|
||
|
||
** Minor documentation and portability cleanups.
|
||
|
||
* Noteworthy changes in Version 1.4.8b (2007-02-24) [beta]
|
||
Released by Eric Blake, based on CVS version 1.4.8a
|
||
|
||
** Fix a regression introduced in 1.4.8 that made m4 unable to process
|
||
files larger than 2GiB on some platforms.
|
||
|
||
** Fix a regression introduced in 1.4.8 that made m4 dump core when
|
||
invoked as 'm4 -- file'.
|
||
|
||
** The `eval' builtin now follows C precedence rules. Additionally, the
|
||
short-circuit operators correctly short-circuit division by zero. The
|
||
previously undocumented alias of '=' meaning '==' in eval now triggers a
|
||
deprecation warning, so that a future version of M4 can implement a form
|
||
of variable assignment as an extension.
|
||
|
||
** The `include' builtin now affects exit status on failure, as required by
|
||
POSIX. Use `sinclude' if you need a successful exit status.
|
||
|
||
** The `-E'/`--fatal-warnings' command-line option now has two levels. When
|
||
specified only once, warnings affect exit status, but execution
|
||
continues, so that you can see all warnings instead of fixing them one
|
||
at a time. To achieve 1.4.8 behavior, where the first warning
|
||
immediately exits, specify -E twice on the command line.
|
||
|
||
** A new `--warn-macro-sequence' command-line option allows detection of
|
||
sequences in `define' and `pushdef' definitions that match an optional
|
||
regular expression. The default regular expression is
|
||
`\$\({[^}]*}\|[0-9][0-9]+\)', corresponding to the sequences that might
|
||
not behave correctly when upgrading to the eventual M4 2.0. By default,
|
||
M4 2.0 will follow the POSIX requirement that a macro definition
|
||
containing `$11' must expand to the first argument concatenated with 1,
|
||
rather than the eleventh argument; and will take advantage of the POSIX
|
||
wording that allows implementations to treat `${11}' as the eleventh
|
||
argument instead of literal text. Be aware that Autoconf 2.61 will not
|
||
work with this option enabled with the default regular expression; but
|
||
Autoconf 2.62 will be compatible with this option.
|
||
|
||
** Improved portability to platforms such as BSD/OS and AIX.
|
||
|
||
* Noteworthy changes in Version 1.4.8 (2006-11-20) [stable]
|
||
Released by Eric Blake, based on CVS version 1.4.7a
|
||
|
||
** The `divert' macro and `-H'/`--hashsize' command line option no longer
|
||
cause a core dump when handed extra large values. Also, `divert' now
|
||
uses memory proportional to the number of diversions in use, rather than
|
||
to the maximum diversion number encountered, so that large diversion
|
||
numbers are less likely to exhaust system memory; and is no longer
|
||
limited by the maximum number of file descriptors.
|
||
|
||
** The `--help' and `--version' command line options now consistently
|
||
override all earlier options. For example, `m4 --debugfile=trace
|
||
--help' now no longer accidentally creates an empty file `trace'.
|
||
|
||
** The `-L'/`--nesting-limit' command line option can now be set to 0
|
||
to remove the default limit of 1024. However, it is still possible that
|
||
heavily nested input can cause abrupt program termination due to stack
|
||
overflow.
|
||
|
||
** Problems encountered when writing to standard error, such as with the
|
||
`errprint' macro, now always cause a non-zero exit status.
|
||
|
||
** Warnings and errors issued during macro expansion are now consistently
|
||
reported at the line where the macro name was detected, rather than
|
||
where the close parenthesis resides. Text wrapped by `m4wrap' now
|
||
remembers the location that was in effect when m4wrap was invoked,
|
||
rather than changing to line 0 and the empty string for a file. The
|
||
macros `__line__' and `__file__' now work correctly even as the last
|
||
token in an included file.
|
||
|
||
** The `builtin' and `indir' macros now transparently handle builtin
|
||
tokens generated by `defn'.
|
||
|
||
** When diversions created by the `divert' macro collect enough text that
|
||
M4 must use temporary files, the environment variable $TMPDIR is now
|
||
consulted, and a better effort is made to clean up those files in the
|
||
event of a fatal signal.
|
||
|
||
** The `mkstemp' builtin is added with the same GNU semantics as `maketemp',
|
||
based on the recommendation of POSIX to deprecate the POSIX semantics of
|
||
`maketemp' as inherently insecure. In GNU mode (no -G supplied on the
|
||
command line), `maketemp' silently retains the secure GNU semantics, but
|
||
a future release of M4 will change this to emit a warning. In
|
||
traditional mode (m4 -G), `maketemp' now uses the POSIX-mandated
|
||
insecure semantics, and issues a warning that you should convert your
|
||
script to use `mkstemp' instead. Additionally, `mkstemp' and `maketemp'
|
||
are now well-defined even if the template argument does not end in six
|
||
`X' characters.
|
||
|
||
** The manual has been improved, including a new section on a composite
|
||
macro `foreach'.
|
||
|
||
** The `changecom' and `changequote' macros now treat an empty second
|
||
argument the same as if it were missing, rather than using the empty
|
||
string and making it impossible to end a comment or quote.
|
||
|
||
** The `translit' macro now operates in linear instead of quadratic time,
|
||
and is now eight-bit clean.
|
||
|
||
** The `-D', `-U', `-s', and `-t' command line options now take effect
|
||
after any files encountered earlier on the command line, rather than up
|
||
front, as is done in traditional implementations and required by POSIX.
|
||
|
||
* Noteworthy changes in Version 1.4.7 (2006-09-25) [stable]
|
||
Released by Eric Blake, based on CVS version 1.4.6a
|
||
|
||
** Fix regression from 1.4.5 in handling a file that ends in a macro
|
||
expansion without arguments instead of a newline.
|
||
|
||
** The define and pushdef macros now warn when the first argument is not
|
||
a string, rather than silently doing nothing.
|
||
|
||
** Standard input can now be read more than once, as in 'm4 - file -', and
|
||
is not closed until all wrapped text is handled. This makes a
|
||
difference when stdin is not a regular file, and also fixes bugs when
|
||
using the syscmd or esyscmd macros from wrapped text.
|
||
|
||
** When standard input is a seekable file, the m4exit, syscmd, and esyscmd
|
||
macros now restore the current position to the next unread byte rather
|
||
than discarding an arbitrary amount of buffered data.
|
||
|
||
** SysV command-line compatibility is no longer a goal of GNU M4; the
|
||
focus will be instead on POSIX compatibility. This release continues to
|
||
support previous usage, but adds warnings in areas which will allow a
|
||
future version of GNU M4 to use its own extensions without being tied to
|
||
the SysV command line interface.
|
||
|
||
** The no-op compatibility command line options -B, -N, -S, -T, and
|
||
--diversions may be withdrawn or assigned new meanings in future
|
||
releases, so they now issue a warning if used.
|
||
|
||
** A new command line option -i replaces the compatibility -e as the
|
||
short spelling of --interactive, for consistency with other GNU tools; a
|
||
warning is issued if the old spelling is used, and it may be assigned
|
||
new meaning in future releases.
|
||
|
||
** A new command line option --debugfile replaces the options -o and
|
||
--error-output as the preferred spelling. The old options were
|
||
misleading in their names and inconsistent with other GNU tools; they
|
||
are still silently accepted, but no longer documented in --help, and may
|
||
be assigned new meanings in future releases.
|
||
|
||
* Noteworthy changes in Version 1.4.6 (2006-08-25) [stable]
|
||
Released by Eric Blake, based on CVS version 1.4.5a
|
||
|
||
** Fix buffer overruns in regexp and patsubst macros when handed a trailing
|
||
backslash in the replacement text, or when handling \n substitutions
|
||
beyond the number of \(\) groups.
|
||
|
||
** Fix memory leak in regexp, patsubst, and changeword macros.
|
||
|
||
** The format macro now understands %F, %g, and %G.
|
||
|
||
** When loading frozen files, m4 now exits with status 63 if version
|
||
mismatch is detected.
|
||
|
||
** Fix bugs that occurred when invoked with stdout or stderr closed,
|
||
and detect write failures to stdout or to the target of the debugfile
|
||
macro. In particular, the syscmd and esyscmd macros can no longer
|
||
interfere with the debug stream or diversions.
|
||
|
||
** The m4exit macro now converts values outside the range 0-255 to 1.
|
||
|
||
** It is now an error if a command-line input file ends in the middle of a
|
||
comment, matching the behavior of mid-string and mid-argument
|
||
collection.
|
||
|
||
** The dnl macro now warns if end of file is encountered instead of a
|
||
newline.
|
||
|
||
** The error message when end of file is encountered now uses the file and
|
||
line where the dangling construct started, rather than `NONE:0:'.
|
||
|
||
** The debugmode and __file__ macros, and the -s/--synclines option, now
|
||
show what directory a file was found in when the -I/--include option or
|
||
M4PATH variable had an effect.
|
||
|
||
** The changequote and changecom macros now work with 8-bit characters, and
|
||
quotes and comments that begin with `(' are properly recognized
|
||
following a word.
|
||
|
||
** The new macro __program__ is added, which allows the input file to issue
|
||
an error message that resembles messages from m4. Warning and error
|
||
messages have been reformatted to comply with GNU Coding Standards.
|
||
|
||
** The errprint, m4wrap, and shift macros are now recognized only with
|
||
arguments.
|
||
|
||
** The index, substr, translit, regexp, and patsubst macros now produce
|
||
output when given only one argument, but still warn about a missing
|
||
second argument.
|
||
|
||
** The patsubst macro now reliably finds zero-length matches at the end
|
||
of a string.
|
||
|
||
* Noteworthy changes in Version 1.4.5 (2006-07-15) [stable]
|
||
Released by Eric Blake, based on CVS version 1.4.4c
|
||
|
||
** Fix sysval on BeOS, OS/2, and other systems that store exit status
|
||
in the low-order byte. Additionally, on Unix platforms, if syscmd was
|
||
terminated by a signal, sysval now displays the signal number shifted
|
||
left by eight bits, to match traditional m4 implementations.
|
||
|
||
** The maketemp macro is no longer subject to platform limitations (such as
|
||
26 or 32 max files from a given template).
|
||
|
||
** Frozen files now require that the first directive be V (version), to
|
||
better diagnose version mismatch. Additionally, if the F directive
|
||
(builtin function) names an unknown builtin that existed in the m4 that
|
||
froze the file but not in the current m4 (for example, changeword), the
|
||
warning is deferred until an attempt is made to actually use the
|
||
builtin. This allows downgrading from beta m4-1.4o to stable m4-1.4.5
|
||
without breaking autoconf.
|
||
|
||
** The format and indir macros are now recognized only with arguments.
|
||
|
||
** The eval macro no longer crashes on x86 architectures when dividing the
|
||
minimum integer by -1.
|
||
|
||
** On systems with ecvt and fcvt, format no longer truncates trailing
|
||
zeroes on integers printed with %.0f. On systems without these
|
||
functions, format is no longer subject to a buffer overflow that
|
||
permitted arbitrary code execution.
|
||
|
||
** On native Windows builds, the macro __windows__ is provided instead of
|
||
__unix__. Likewise, on OS/2 builds, the macro __os2__ is provided.
|
||
This allows input files to determine when syscmd might behave
|
||
differently.
|
||
|
||
** Fix bug in 1.4.3 patch to use \n line-endings that did not work for
|
||
cygwin.
|
||
|
||
** When given the empty string or 0, undivert is now documented as a no-op
|
||
rather than closing stdout, warning about a non-existent file, or trying
|
||
to read a directory as a file.
|
||
|
||
** Many documentation improvements. Also, the manual is now distributed
|
||
under FDL 1.2, rather than a stricter verbatim-only license.
|
||
|
||
** Raise the -L (--nesting-limit) command line option limit from 250 to
|
||
1024.
|
||
|
||
** The decr, incr, divert, m4exit, and substr macros treat an empty number
|
||
as 0, issue a warning, and expand as normal; rather than issuing an
|
||
error and expanding to the empty string.
|
||
|
||
** The eval macro now treats an empty radix argument as 10, handles radix 1,
|
||
and treats the width argument as number of digits excluding the sign,
|
||
for compatibility with other m4 implementations.
|
||
|
||
** The ifdef, divert, m4exit, substr, and translit macros now correctly
|
||
ignore extra arguments.
|
||
|
||
** The popdef and undefine macros now correctly accept multiple arguments.
|
||
|
||
** Although changeword is on its last leg, if enabled, it now reverts to the
|
||
default (faster) regexp when passed the empty string.
|
||
|
||
** The regexp and substr macros now warn and ignore a trailing backslash in
|
||
the replacement, and warn on \n for n larger than the number of
|
||
sub-expressions in the regexp.
|
||
|
||
* Noteworthy changes in Version 1.4.4b (2006-06-17) [beta]
|
||
Released by Eric Blake, based on CVS version 1.4.4a
|
||
|
||
** Fix a recursive push_string crashing bug, which affected changequote of
|
||
three or more characters on some compilers.
|
||
|
||
** Use automake to fix build portability issues.
|
||
|
||
** Fix a recursive m4wrap crashing bug.
|
||
|
||
** Fix a 1 in 2**32 hash crashing bug.
|
||
|
||
** Tracing a macro by name is now persistent, even if the macro is
|
||
subsequently undefined or redefined. The traceon and traceoff macros no
|
||
longer warn about undefined symbols. This solves a crash when using
|
||
indir on an undefined macro traced with the -t option, as well as an
|
||
incorrect result of ifdef. Furthermore, tracing is no longer
|
||
transferred with builtins, solving the bug of "m4 -tm4_eval" failing to
|
||
give trace output on the input
|
||
"define(`m4_eval',defn(`eval'))m4_eval(1)".
|
||
|
||
** Fix a crash when a macro is undefined while collecting its arguments, by
|
||
always using the definition that was in effect before argument
|
||
collection. This behavior matches the C pre-processor, and means that
|
||
the sequence "define(`f',`1')f(define(`f',`2'))f" is now documented to
|
||
result in "12", rather than the previously undocumented "22".
|
||
|
||
** Update the regex engine to fix several bugs.
|
||
|
||
** Fix a potential crash on machines where char is signed.
|
||
|
||
* Noteworthy changes in Version 1.4.4 (Oct 2005) [stable]
|
||
Released by Gary V. Vaughan
|
||
|
||
** ./configure --infodir=/usr/share/info now works correctly.
|
||
|
||
** When any file named on the command line is missing exit with status 1.
|
||
|
||
* Noteworthy changes in Version 1.4.3 (Mar 2005) [stable]
|
||
Released by Gary V. Vaughan
|
||
|
||
** DESTDIR installs now work correctly.
|
||
|
||
** Don't segfault with uncompilable regexps to changeword().
|
||
|
||
** Always use \n line-endings for frozen files (fixes a Windows bug).
|
||
|
||
** Portability fix for systems lacking mkstemp(3).
|
||
|
||
** Approximately 20% speed up in the common case of usage with autoconf.
|
||
|
||
** Supported on QNX 6.3.
|
||
|
||
* Noteworthy changes in Version 1.4.2 (Aug 2004) [stable]
|
||
Released by Paul Eggert
|
||
|
||
** No user visible changes; portability bug fixes only.
|
||
|
||
* Noteworthy changes in Version 1.4.1 (Jun 2004) [stable]
|
||
Released by Paul Eggert
|
||
|
||
** The 1.4.x series is intended to be stable; features added in 1.4[a-q]
|
||
were not backported to 1.4.x unless specifically mentioned above.
|
||
|
||
** maketemp now creates an empty file with the given name, instead of merely
|
||
returning the name of a nonexistent file. This closes a security hole.
|
||
|
||
|
||
* Version beta 1.4q - August 2001, by Gary V. Vaughan
|
||
|
||
** Support for the experimental `changeword' has been dropped.
|
||
|
||
** `m4 --hashsize' and `-H' are still accepted, but have no effect. M4
|
||
will grow its internal symbol table if the symbol density is having an
|
||
effect on performance.
|
||
|
||
** `configure --without-modules' will build an m4 binary with no preloaded
|
||
modules. At startup it will search for and load modules `m4' and either
|
||
`gnu' or `traditional'. This mode of operation can be used for
|
||
development and debugging of the base modules without the need to
|
||
recompile all of m4 with each modification.
|
||
|
||
** `configure --with-modules="gnu m4 traditional load"', for example,
|
||
will build an m4 binary with the named modules preloaded, ready to be
|
||
activated (even on static lib only machines) with the `-m' option or
|
||
using the `load' builtin.
|
||
|
||
** M4 has no builtins or macros in core, they are all loaded from modules
|
||
at startup. This means that modules are no longer optional, though the
|
||
standard build will statically link the modules `m4', `gnu' and
|
||
`traditional', so even on machines with no ltdl support, all of the
|
||
functionality from previous releases is available.
|
||
|
||
** New builtin `load' to dynamically load modules which can define new
|
||
builtins and user macros.
|
||
|
||
** New builtin `unload' to remove loaded modules (and the builtins and user
|
||
macros they define) from the running m4 interpreter.
|
||
|
||
** New builtins `eregexp' and `epatsubst' to use Extended Regular
|
||
Expressions syntax in lieu of Basic Regular Expressions as used by
|
||
`regexp' and `patsubst'.
|
||
|
||
** The names of all currently loaded modules are returned by the new
|
||
builtin, ``modules''.
|
||
|
||
** Loadable modules can define new builtin functions or text expansion
|
||
macros.
|
||
|
||
** The module code has been rewritten to use libltdl, the libtool dynamic
|
||
loader, which means GNU m4 can now load (and unload) modules just about
|
||
anywhere which it can be built. This includes obscure hosts such as
|
||
cygwin and BeOS, and also on hosts which do not have shared libraries,
|
||
through preloading (see libtool manual) and GNU dld.
|
||
|
||
** Modules can now be built without the m4 source being available using the
|
||
installed m4module.h header file (and some other headers that it
|
||
includes for you), and the installed libm4.la libtool library. All
|
||
symbols exported from libm4.la have a prefix of `m4_' or `M4_'. See the
|
||
modules directory for examples of usage.
|
||
|
||
** A new V2 format for frozen files that saves module and syntax information.
|
||
|
||
* Version beta 1.4o - January 2000, by Rene' Seindal
|
||
|
||
** Modules can be loaded from the command line with --load-module
|
||
|
||
** Modules now use libtool's wrapper libltdl.
|
||
|
||
** New builtin `symbols' allows dynamic queries of all currently defined
|
||
macros.
|
||
|
||
** Various Bug fixes.
|
||
|
||
* Version beta 1.4n - November 1998, by Rene' Seindal
|
||
|
||
** The module code has been reorganised yet again, and now compiles
|
||
correctly on GNU/Linux, HPUX 9 and 10, SunOS 5 and Solaris 5.
|
||
|
||
** When configured --with-gmp a new builtin `mpeval' is now defined. The
|
||
builtin `eval' retains its normal behaviour.
|
||
|
||
** m4 --version also shows which options were used for compilation, such as:
|
||
"GNU m4 1.4n (options: modules gmp changeword)"
|
||
|
||
** New option --import-environment defines all environment variables as
|
||
macros. This is done before -D and -U are handled, so the macros can be
|
||
changed through these options.
|
||
|
||
** Error messages now always print program name before input file name as
|
||
specified by GNU coding standards. Reported by Akim Demaille.
|
||
|
||
** Bug fixed: "undivert(0)" could cause m4 to read standard output. A call
|
||
of "undivert(0)" is now silently ignored.
|
||
|
||
** Bug fixed: when compiling --with-included-gettext, <libintl.h> wasn't
|
||
found in intl/ directory. Reported by Andrew Bettison.
|
||
|
||
* Version beta 1.4m - November 1998, by Rene' Seindal
|
||
|
||
** Using libtool for compiling modules and for linking main app.
|
||
|
||
** Reorganised the dynamic module code to encapsulate system dependencies
|
||
better. The code for HPUX shl_load() still needs testing and debugging.
|
||
A dld interface is also missing. Any volunteers?
|
||
|
||
** The files from the GNU m4 web-site is now in examples/WWW as a more
|
||
complete example of what GNU m4 can do.
|
||
|
||
* Version beta 1.4l - November 1998, by Rene' Seindal
|
||
|
||
** GNU m4 now has an escape syntax category. If a character is marked as
|
||
an escape, words are only recognised as macros if preceded by an escape
|
||
character. It is a bit like -P, but dynamic: it can be turned on and
|
||
off. The GNU m4 web-site on http://www.seindal.dk/rene/gnu/ is
|
||
maintained with this feature - the m4 source is available on the site.
|
||
|
||
** The module interface is improved, thanks to "Brian J. Fox",
|
||
who has contributed some code from Meta-HTML. The modules now build
|
||
automatically and installs properly, by default in
|
||
/usr/local/libexec/m4. There is a preliminary, untested support for
|
||
shl_load().
|
||
|
||
** There is now a __m4_version__ macro that expands to the current version
|
||
number.
|
||
|
||
* Version beta 1.4k - November 1998, by Erick Branderhorst and Rene' Seindal
|
||
|
||
** GNU m4 now uses gettext to support internationalization.
|
||
|
||
** GNU m4 now uses automake to control Makefile.in generation. This
|
||
should make it more consistent with the GNU standards.
|
||
|
||
** GNU m4 will use the gmp library for multiple precision integral and
|
||
rational arithmetic in `eval' if configured with `--with-gmp'. If
|
||
configured without `--with-gmp' or if gmp is not available, and the type
|
||
`long long int' is, GNU m4 will use that for `eval' arithmetic.
|
||
|
||
** GNU m4 now parses the input according to a syntax table, that can be
|
||
modified through the new builtin `changesyntax'. It is a generalisation
|
||
of the existing builtins `changecom' and `changequote'. The changes are
|
||
completely backwards compatible (except for the existence of
|
||
`changesyntax').
|
||
|
||
** Sync lines can be turned on and off with the `syncoutput' builtin. The
|
||
builtin `syncoutput' is a GNU extension.
|
||
|
||
** New experimental feature: dynamically loadable modules. New builtin
|
||
`loadmodules' loads shared libraries, that can define new builtin
|
||
macros, ie, new macros can be written in C. Depends on the dlopen()
|
||
interface, and is currently only tested on Linux. Enabled at configure
|
||
time with `--with-modules'. Documentation is in src/module.c and
|
||
module/README.
|
||
|
||
** Implement a GNU message catalog for French (Franc,ois Pinard).
|
||
|
||
** Filenames found through path searches are now correctly reflected in
|
||
error and debug messages and through the `__file__' macro.
|
||
|
||
** Bugs fixed:
|
||
|
||
*** All 8-bit characters can now be used for quotes.
|
||
|
||
* Version 1.4 - October 1994, by Franc,ois Pinard
|
||
|
||
** (No user visible changes)
|
||
|
||
* Version 1.3 - September 1994, by Franc,ois Pinard
|
||
|
||
** Diversions are created as needed. Option `-N' is still accepted, but
|
||
otherwise ignored. Users should use only negative diversion numbers,
|
||
instead of high positive numbers, for diverting to nowhere.
|
||
|
||
** Diversions should also work faster. No temporary files will be needed
|
||
at all if all diversions taken altogether do not use more than 512K.
|
||
|
||
** Frozen state files may be produced with the `--freeze-state' (-F)
|
||
option and later brought back through the `--reload-state' (-R) option.
|
||
|
||
* Version 1.2 - July 1994, by Franc,ois Pinard
|
||
|
||
** In patsubst(STRING, REGEXP, REPLACEMENT), \& in REPLACEMENT has been
|
||
changed to represent this part of STRING matched by the whole REGEXP,
|
||
instead of the whole STRING as before. \0 does the same, but emits a
|
||
diagnostic saying it will disappear in some subsequent release.
|
||
|
||
** eval(EXPR) emits a diagnostic if EXPR has suffixed crumb. The same for
|
||
other numeric conversions in incr(), decr(), divert(), etc.
|
||
|
||
** `--fatal-warnings' (-E) stops execution at first warning.
|
||
|
||
** `--nesting-limit=LEVEL' (-L LEVEL) sets a limit to macro nesting.
|
||
It is initially fixed at 250.
|
||
|
||
** `--word-regexp=REGEXP' (-W REGEXP) modifies macro name syntax, like
|
||
does the new `changeword(REGEXP)' macro. This feature is experimental,
|
||
tell me your opinions about it. You do need --enable-changeword at
|
||
configure time to get these things. Do *not* depend on them yet.
|
||
|
||
** Trace output format is scannable by GNU Emacs' next-error function.
|
||
|
||
** Stack overflow is detected and diagnosed on some capable systems.
|
||
|
||
** Various bugs have been corrected, m4 should be more portable. See the
|
||
ChangeLog for details.
|
||
|
||
* Version 1.1 - November 1993, by Franc,ois Pinard
|
||
|
||
** Changes which might affect existing GNU m4 scripts:
|
||
|
||
*** Option `-V' has been removed, use `--version' instead. `--version'
|
||
writes on standard output instead of standard error, and inhibits any
|
||
script execution.
|
||
|
||
*** `--no-gnu-extensions' has been renamed `--traditional'.
|
||
|
||
*** In `eval', `^' used to indicate exponentiation, use `**' instead.
|
||
|
||
*** The automatic undiversion which takes place at end of all input is
|
||
forced into the main output stream.
|
||
|
||
** Changes which are unlikely to affect existing scripts:
|
||
|
||
*** `--help' prints an usage summary on standard output. Script execution
|
||
is then inhibited.
|
||
|
||
*** `--prefix-builtins' (-P) prefixes all builtin macros by `m4_'.
|
||
|
||
*** Most builtin macros for which arguments are mandatory, called without
|
||
any arguments, are no more recognized as builtin macros: they are
|
||
consequently copied verbatim to the output stream.
|
||
|
||
*** `define' and `pushdef' are usable with only one argument, they give
|
||
this argument an empty definition.
|
||
|
||
*** `eval' new operators for binary representation handling: `^' for
|
||
exclusive-or, `~' for the bitwise negation, `<<' and `>>' for shifts.
|
||
|
||
*** `eval' recognizes the notation 0bDIGITS for binary numbers and the
|
||
notation 0rRADIX:DIGITS for numbers in any radix from 1 to 36.
|
||
|
||
* Version 1.0.3 - December 1992, by Franc,ois Pinard
|
||
|
||
** Changes for the user:
|
||
|
||
*** `dnl' outputs a diagnostic if immediately followed by `('. Usually,
|
||
`dnl' is followed by newline or whitespace.
|
||
|
||
*** `ifelse' accepts without complaining the common idiom of having only
|
||
one argument. This is useful for introducing long comments.
|
||
|
||
*** `eval' always expresses values as signed, whatever the radix.
|
||
|
||
*** M4OPTS environment variable is no longer obeyed.
|
||
|
||
*** `--no-warnings' option is renamed `--silent'.
|
||
|
||
*** Debug lines use a new format more compatible with GNU standards.
|
||
|
||
*** Various bugs have been corrected. See the ChangeLog for details.
|
||
|
||
** Changes for the installer:
|
||
|
||
*** GNU m4 now uses an Autoconf-generated configure script, and should be
|
||
more easily portable in many ways. (Cray is not supported yet).
|
||
|
||
*** `make check' has been made more portable, expect no errors.
|
||
|
||
** Changes for the programmer:
|
||
|
||
*** Sources have been fully reindented to comply with GNU standards, and
|
||
cleaned up in many ways.
|
||
|
||
*** Sources have been protoized. Non-ANSI compilers are automatically
|
||
detected, then sources are unprotoized on the fly before compilation.
|
||
|
||
*** GNU m4 uses newer versions of obstack, regex, getopt, etc.
|
||
|
||
* Version 1.0 - October 1991, by Rene' Seindal
|
||
|
||
** Uses GNU configure, taken from the gdb distribution.
|
||
|
||
** Uses GNU getopt(), with long option names.
|
||
|
||
** The -Q/+quiet option is added, which suppresses warnings about missing
|
||
or superflous arguments to builtin macros.
|
||
|
||
** Added default options via the M4OPTS environment variable.
|
||
|
||
** Several minor bugs have been fixed.
|
||
|
||
* Version 0.99 - July 1991, by Rene' Seindal
|
||
|
||
** The builtins `incr' and `decr' are now implemented without use of
|
||
`eval'.
|
||
|
||
** The builtin `indir' is added, to allow for indirect macro calls
|
||
(allows use of "illegal" macro names).
|
||
|
||
** The debugging and tracing facilities has been enhanced considerably.
|
||
See the manual for details.
|
||
|
||
** The -tMACRO option is added, marks MACRO for tracing as soon as it
|
||
is defined.
|
||
|
||
** Builtins are traced after renaming iff they were before.
|
||
|
||
** Named files can now be undiverted.
|
||
|
||
** The -Nnum option can be used to increase the number of divertions
|
||
available.
|
||
|
||
** Calling changecom without arguments now disables all comment handling.
|
||
|
||
** A bug in `dnl' is fixed.
|
||
|
||
** A bug in the multi-character quoting code is fixed.
|
||
|
||
** Several typos in the manual has been corrected. More probably persist.
|
||
|
||
* Version 0.75 - November 1990, by Rene' Seindal
|
||
|
||
** Implemented search path for include files (-I option and M4PATH
|
||
environment variable).
|
||
|
||
** Implemented builtin `format' for printf-like formatting.
|
||
|
||
** Implemented builtin `regexp' for searching for regular expressions.
|
||
|
||
** Implemented builtin `patsubst' for substitution with regular
|
||
expressions.
|
||
|
||
** Implemented builtin `esyscmd', which expands to a shell commands output.
|
||
|
||
** Implemented `__file__' and `__line__' for use in error messages.
|
||
|
||
** Implemented character ranges in `translit'.
|
||
|
||
** Implemented control over debugging output.
|
||
|
||
** Implemented multi-character quotes.
|
||
|
||
** Implemented multi-character comment delimiters.
|
||
|
||
** Changed predefined macro `gnu' to `__gnu__'.
|
||
|
||
** Changed predefined macro `unix' to `__unix__', when the -G option is
|
||
not used. With -G, `unix' is still defined.
|
||
|
||
** Added program name to error messages.
|
||
|
||
** Fixed two missing null bytes bugs.
|
||
|
||
* Version 0.50 - January 1990, by Rene' Seindal
|
||
|
||
* Initial beta release.
|
||
|
||
========================================================================
|
||
|
||
Local Variables:
|
||
fill-column: 75
|
||
End:
|
||
|
||
Copyright (C) 1992-1994, 2004-2011, 2013-2014, 2017 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, with no Front-Cover Texts, and with no Back-Cover
|
||
Texts. A copy of the license is included in the ``GNU Free
|
||
Documentation License'' file as part of this distribution.
|