Version 1.4.8 - 20 November 2006, by Eric Blake (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.
Version 1.4.5 - 15 July 2006, by Eric Blake (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.
Version 1.4.4b - 17 June 2006, by Eric Blake (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.
Summary of changes:
- removal of USE_GTEXINFO
- addition of mk/texinfo.mk
- inclusion of this file in package Makefiles requiring it
- `install-info' substituted by `${INSTALL_INFO}' in PLISTs
- tuning of mk/bsd.pkg.mk:
removal of USE_GTEXINFO
INSTALL_INFO added to PLIST_SUBST
`${INSTALL_INFO}' replace `install-info' in target rules
print-PLIST target now generate `${INSTALL_INFO}' instead of `install-info'
- a couple of new patch files added for a handful of packages
- setting of the TEXINFO_OVERRIDE "switch" in packages Makefiles requiring it
- devel/cssc marked requiring texinfo 4.0
- a couple of packages Makefiles were tuned with respect of INFO_FILES and
makeinfo command usage
See -newly added by this commit- section 10.24 of Packages.txt for
further information.