This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "GNU M4 source repository".
http://git.sv.gnu.org/gitweb/?p=m4.git;a=commitdiff;h=d77ce2bf23c81091d9844c7052f50ba80005e6f6 The branch, master has been updated via d77ce2bf23c81091d9844c7052f50ba80005e6f6 (commit) from 0b8410450c789102f46f2ee21aaeb304737e828b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d77ce2bf23c81091d9844c7052f50ba80005e6f6 Author: Eric Blake <[EMAIL PROTECTED]> Date: Wed Apr 9 16:51:52 2008 -0600 Mention 1.4.11 release. * doc/m4.texinfo (History, Defn, Ifdef, Ifelse, M4wrap) (Extensions, Improved foreach): Distinguish 1.4.11 and 1.6. (Format): Add test of C99 hex-float parsing. * NEWS: Mention 1.4.11 release. * tests/builtins.at (divert): Add additional test. Signed-off-by: Eric Blake <[EMAIL PROTECTED]> ----------------------------------------------------------------------- Summary of changes: ChangeLog | 9 ++++++ NEWS | 74 ++++++++++++++++++++++++++++++++++++++++------------- doc/m4.texinfo | 24 ++++++++++------- tests/builtins.at | 4 +++ 4 files changed, 83 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 32593ea..1ecc606 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-04-09 Eric Blake <[EMAIL PROTECTED]> + + Mention 1.4.11 release. + * doc/m4.texinfo (History, Defn, Ifdef, Ifelse, M4wrap) + (Extensions, Improved foreach): Distinguish 1.4.11 and 1.6. + (Format): Add test of C99 hex-float parsing. + * NEWS: Mention 1.4.11 release. + * tests/builtins.at (divert): Add additional test. + 2008-04-08 Eric Blake <[EMAIL PROTECTED]> Overhaul inter-version releases to work with git. diff --git a/NEWS b/NEWS index eea5287..205c651 100644 --- a/NEWS +++ b/NEWS @@ -205,18 +205,36 @@ promoted to 2.0. - 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 stable series have been incorporated. +*** Improvements made in the 1.4.x and 1.6 stable series have been + incorporated. -* Noteworthy changes in Version 1.4.11 (????-??-??) [stable] +* Noteworthy changes in Version 1.6 (????-??-??) [stable] Released by ????, based on git version 1.4.10b.x-* -** Fix regression introduced in 1.4.10b where using `builtin' or `indir' - to perform nested `shift' calls triggered an assertion failure. +** Fix regression introduced in 1.4.10b (but not present in 1.4.11) where + using `builtin' or `indir' to perform nested `shift' calls triggered an + assertion failure. ** 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. + 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 ** Enhance the `ifdef', `ifelse', and `shift' builtins, as well as all user macros, to transparently handle builtin tokens generated by `defn'. @@ -226,16 +244,40 @@ promoted to 2.0. context of a macro name, rather than acting on the empty string. This was already done for `define', `pushdef', `builtin', and `indir'. +** 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.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 - where fopen(name,"a+") seeks to the end of the file. + 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 @@ -249,19 +291,15 @@ promoted to 2.0. now issued if this is attempted, although a future version of M4 may lift this restriction to match other implementations. -** Enhance the `index' builtin to guarantee linear behavior and often - achieve sublinear results, in spite of the surprisingly large number of - systems with a brain-dead quadratic strstr(3). +** 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 `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. +** 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. diff --git a/doc/m4.texinfo b/doc/m4.texinfo index 6e836f6..9198a09 100644 --- a/doc/m4.texinfo +++ b/doc/m4.texinfo @@ -413,9 +413,11 @@ addressed some long standing bugs in the venerable 1.4 release. Then in released 1.4.3 and 1.4.4. And in 2006, Eric Blake joined the team and prepared patches for the release of 1.4.5, 1.4.6, 1.4.7, and 1.4.8. More bug fixes were incorporated in 2007, with the releases of 1.4.9 and -1.4.10. In 2008, Eric additionally rewrote the scanning engine to -reduce recursive evaluation from quadratic to linear complexity for -1.4.11. The 1.4.x branch remains open for bug fixes. +1.4.10, closing the series with 1.4.11 in 2008. + +Additionally, in 2008, Eric rewrote the scanning engine to reduce +recursive evaluation from quadratic to linear complexity, released as M4 +1.6. The 1.x branch series remains open for bug fixes. Meanwhile, development was underway for new features for @code{m4}, such as dynamic module loading and additional builtins, practically @@ -2281,7 +2283,7 @@ defn([l], [r]) Using @code{defn} to generate special tokens for builtin macros will generate a warning in contexts where a macro name is expected. But in contexts that operate on text, the builtin token is just silently -converted to an empty string. As of M4 1.4.11, expansion of user macros +converted to an empty string. As of M4 1.6, expansion of user macros will also preserve builtin tokens. However, any use of builtin tokens outside of the second argument to @code{define} and @code{pushdef} is generally not portable, since earlier @acronym{GNU} M4 versions, as well @@ -2899,7 +2901,7 @@ ifdef(`no_such_macro', `yes', `no', `extra argument') @result{}no @end example -As of M4 1.4.11, @code{ifdef} transparently handles builtin tokens +As of M4 1.6, @code{ifdef} transparently handles builtin tokens generated by @code{defn} (@pxref{Defn}) that occur in either @var{string}, although a warning is issued for invalid macro names. @@ -3015,7 +3017,7 @@ ifelse(`foo', `bar', `3', `gnu', `gnats', `6', `7', `8') @result{}7 @end example -As of M4 1.4.11, @code{ifelse} transparently handles builtin tokens +As of M4 1.6, @code{ifelse} transparently handles builtin tokens generated by @code{defn} (@pxref{Defn}). Because of this, it is always safe to compare two macro definitions, without worrying whether the macro might be a builtin. @@ -5235,7 +5237,7 @@ not if @code{m4exit} is used to exit @code{m4}. It is safe to call @code{m4wrap} from wrapped text, where all the recursively wrapped text is deferred until the current wrapped text is -exhausted. As of M4 1.4.11, when @code{m4wrap} is not used recursively, +exhausted. As of M4 1.6, when @code{m4wrap} is not used recursively, the saved pieces of text are reread in the same order in which they were saved (FIFO---first in, first out), as required by @acronym{POSIX}. @@ -6677,6 +6679,8 @@ ifelse(format(`%.1A', `1.999'), `0X1.0P+1', `success', format(`%.1A', `1.999'), `0X2.0P+0', `success', format(`%.1A', `1.999')) @result{}success +format(`%g', `0xa.P+1') [EMAIL PROTECTED] @end example Using the @code{forloop} macro defined earlier (@pxref{Forloop}), this @@ -8308,7 +8312,7 @@ of @samp{-} on the command line. @item @acronym{POSIX} requires @code{m4wrap} (@pxref{M4wrap}) to act in FIFO (first-in, first-out) order, and most other implementations obey this. -However, versions of @acronym{GNU} @code{m4} earlier than 1.4.11 used +However, versions of @acronym{GNU} @code{m4} earlier than 1.6 used LIFO order. Furthermore, @acronym{POSIX} states that only the first argument to @code{m4wrap} is saved for later evaluation, but @acronym{GNU} @code{m4} saves and processes all arguments, with output @@ -8774,14 +8778,14 @@ foreachq(`x', ``1', `2', `3', `4'', `x @result{}4 @end example -Prior to M4 1.4.11, every instance of @samp{$@@} was rescanned as it was +Prior to M4 1.6, every instance of @samp{$@@} was rescanned as it was encountered. Thus, the @file{foreachq3.m4} alternative used much less memory than @file{foreachq2.m4}, and executed as much as 10% faster, since each iteration encountered fewer @samp{$@@}. However, the implementation of rescanning every byte in @samp{$@@} was quadratic in the number of bytes scanned (for example, making the broken version in @file{foreachq.m4} cubic, rather than quadratic, in behavior). Once the -underlying M4 implementation was improved in 1.4.11 to reuse results of +underlying M4 implementation was improved in 1.6 to reuse results of previous scans, both styles of @code{foreachq} become linear in the number of bytes scanned, and the difference in timing is no longer noticeable; in fact, after the change, the @file{foreachq2.m4} version diff --git a/tests/builtins.at b/tests/builtins.at index 34143a1..14be12d 100644 --- a/tests/builtins.at +++ b/tests/builtins.at @@ -287,6 +287,10 @@ hello world ]]) dnl Test large diversions, which were broken in m4 1.4.8-1.4.10. +AT_CHECK([echo 'divert(1)hi +format(%1000000d, 1)' | m4 | sed 1q], [0], [[hi +]]) + AT_DATA([in.m4], [M4_ONE_MEG_DEFN[divert(`2')f`'dnl divert(`1')hello divert(`3')goodbye hooks/post-receive -- GNU M4 source repository
