1 | GNU M4 NEWS - User visible changes.
|
---|
2 | Copyright (C) 1992, 1993, 1994, 2004, 2005, 2006 Free Software
|
---|
3 | Foundation, Inc.
|
---|
4 |
|
---|
5 | Version 1.4.8 - 20 November 2006, by Eric Blake (CVS version 1.4.7a)
|
---|
6 |
|
---|
7 | * The `divert' macro and `-H'/`--hashsize' command line option no longer
|
---|
8 | cause a core dump when handed extra large values. Also, `divert' now
|
---|
9 | uses memory proportional to the number of diversions in use, rather than
|
---|
10 | to the maximum diversion number encountered, so that large diversion
|
---|
11 | numbers are less likely to exhaust system memory; and is no longer
|
---|
12 | limited by the maximum number of file descriptors.
|
---|
13 | * The `--help' and `--version' command line options now consistently
|
---|
14 | override all earlier options. For example, `m4 --debugfile=trace
|
---|
15 | --help' now no longer accidentally creates an empty file `trace'.
|
---|
16 | * The `-L'/`--nesting-limit' command line option can now be set to 0
|
---|
17 | to remove the default limit of 1024. However, it is still possible that
|
---|
18 | heavily nested input can cause abrupt program termination due to stack
|
---|
19 | overflow.
|
---|
20 | * Problems encountered when writing to standard error, such as with the
|
---|
21 | `errprint' macro, now always cause a non-zero exit status.
|
---|
22 | * Warnings and errors issued during macro expansion are now consistently
|
---|
23 | reported at the line where the macro name was detected, rather than
|
---|
24 | where the close parenthesis resides. Text wrapped by `m4wrap' now
|
---|
25 | remembers the location that was in effect when m4wrap was invoked,
|
---|
26 | rather than changing to line 0 and the empty string for a file. The
|
---|
27 | macros `__line__' and `__file__' now work correctly even as the last
|
---|
28 | token in an included file.
|
---|
29 | * The `builtin' and `indir' macros now transparently handle builtin
|
---|
30 | tokens generated by `defn'.
|
---|
31 | * When diversions created by the `divert' macro collect enough text that
|
---|
32 | M4 must use temporary files, the environment variable $TMPDIR is now
|
---|
33 | consulted, and a better effort is made to clean up those files in the
|
---|
34 | event of a fatal signal.
|
---|
35 | * The `mkstemp' builtin is added with the same GNU semantics as `maketemp',
|
---|
36 | based on the recommendation of POSIX to deprecate the POSIX semantics of
|
---|
37 | `maketemp' as inherently insecure. In GNU mode (no -G supplied on the
|
---|
38 | command line), `maketemp' silently retains the secure GNU semantics, but
|
---|
39 | a future release of M4 will change this to emit a warning. In
|
---|
40 | traditional mode (m4 -G), `maketemp' now uses the POSIX-mandated insecure
|
---|
41 | semantics, and issues a warning that you should convert your script to
|
---|
42 | use `mkstemp' instead. Additionally, `mkstemp' and `maketemp' are now
|
---|
43 | well-defined even if the template argument does not end in six `X'
|
---|
44 | characters.
|
---|
45 | * The manual has been improved, including a new section on a composite
|
---|
46 | macro `foreach'.
|
---|
47 | * The `changecom' and `changequote' macros now treat an empty second
|
---|
48 | argument the same as if it were missing, rather than using the empty
|
---|
49 | string and making it impossible to end a comment or quote.
|
---|
50 | * The `translit' macro now operates in linear instead of quadratic time,
|
---|
51 | and is now eight-bit clean.
|
---|
52 | * The `-D', `-U', `-s', and `-t' command line options now take effect
|
---|
53 | after any files encountered earlier on the command line, rather than up
|
---|
54 | front, as is done in traditional implementations and required by POSIX.
|
---|
55 |
|
---|
56 | Version 1.4.7 - 25 September 2006, by Eric Blake (CVS version 1.4.6a)
|
---|
57 |
|
---|
58 | * Fix regression from 1.4.5 in handling a file that ends in a macro
|
---|
59 | expansion without arguments instead of a newline.
|
---|
60 | * The define and pushdef macros now warn when the first argument is not
|
---|
61 | a string, rather than silently doing nothing.
|
---|
62 | * Standard input can now be read more than once, as in 'm4 - file -', and
|
---|
63 | is not closed until all wrapped text is handled. This makes a
|
---|
64 | difference when stdin is not a regular file, and also fixes bugs when
|
---|
65 | using the syscmd or esyscmd macros from wrapped text.
|
---|
66 | * When standard input is a seekable file, the m4exit, syscmd, and esyscmd
|
---|
67 | macros now restore the current position to the next unread byte rather
|
---|
68 | than discarding an arbitrary amount of buffered data.
|
---|
69 | * SysV command-line compatibility is no longer a goal of GNU M4; the
|
---|
70 | focus will be instead on POSIX compatibility. This release continues to
|
---|
71 | support previous usage, but adds warnings in areas which will allow a
|
---|
72 | future version of GNU M4 to use its own extensions without being tied to
|
---|
73 | the SysV command line interface.
|
---|
74 | * The no-op compatibility command line options -B, -N, -S, -T, and
|
---|
75 | --diversions may be withdrawn or assigned new meanings in future
|
---|
76 | releases, so they now issue a warning if used.
|
---|
77 | * A new command line option -i replaces the compatibility -e as the
|
---|
78 | short spelling of --interactive, for consistency with other GNU tools; a
|
---|
79 | warning is issued if the old spelling is used, and it may be assigned new
|
---|
80 | meaning in future releases.
|
---|
81 | * A new command line option --debugfile replaces the options -o and
|
---|
82 | --error-output as the preferred spelling. The old options were
|
---|
83 | misleading in their names and inconsistent with other GNU tools; they are
|
---|
84 | still silently accepted, but no longer documented in --help, and may be
|
---|
85 | assigned new meanings in future releases.
|
---|
86 |
|
---|
87 | Version 1.4.6 - 25 August 2006, by Eric Blake (CVS version 1.4.5a)
|
---|
88 |
|
---|
89 | * Fix buffer overruns in regexp and patsubst macros when handed a trailing
|
---|
90 | backslash in the replacement text, or when handling \n substitutions
|
---|
91 | beyond the number of \(\) groups.
|
---|
92 | * Fix memory leak in regexp, patsubst, and changeword macros.
|
---|
93 | * The format macro now understands %F, %g, and %G.
|
---|
94 | * When loading frozen files, m4 now exits with status 63 if version
|
---|
95 | mismatch is detected.
|
---|
96 | * Fix bugs that occurred when invoked with stdout or stderr closed,
|
---|
97 | and detect write failures to stdout or to the target of the
|
---|
98 | debugfile macro. In particular, the syscmd and esyscmd macros can
|
---|
99 | no longer interfere with the debug stream or diversions.
|
---|
100 | * The m4exit macro now converts values outside the range 0-255 to 1.
|
---|
101 | * It is now an error if a command-line input file ends in the middle of a
|
---|
102 | comment, matching the behavior of mid-string and mid-argument
|
---|
103 | collection.
|
---|
104 | * The dnl macro now warns if end of file is encountered instead of a
|
---|
105 | newline.
|
---|
106 | * The error message when end of file is encountered now uses the file and
|
---|
107 | line where the dangling construct started, rather than `NONE:0:'.
|
---|
108 | * The debugmode and __file__ macros, and the -s/--synclines option, now
|
---|
109 | show what directory a file was found in when the -I/--include option or
|
---|
110 | M4PATH variable had an effect.
|
---|
111 | * The changequote and changecom macros now work with 8-bit characters, and
|
---|
112 | quotes and comments that begin with `(' are properly recognized
|
---|
113 | following a word.
|
---|
114 | * The new macro __program__ is added, which allows the input file to issue
|
---|
115 | an error message that resembles messages from m4. Warning and error
|
---|
116 | messages have been reformatted to comply with GNU Coding Standards.
|
---|
117 | * The errprint, m4wrap, and shift macros are now recognized only with
|
---|
118 | arguments.
|
---|
119 | * The index, substr, translit, regexp, and patsubst macros now produce
|
---|
120 | output when given only one argument, but still warn about a missing
|
---|
121 | second argument.
|
---|
122 | * The patsubst macro now reliably finds zero-length matches at the end
|
---|
123 | of a string.
|
---|
124 |
|
---|
125 | Version 1.4.5 - 15 July 2006, by Eric Blake (CVS version 1.4.4c)
|
---|
126 |
|
---|
127 | * Fix sysval on BeOS, OS/2, and other systems that store exit status
|
---|
128 | in the low-order byte. Additionally, on Unix platforms, if syscmd was
|
---|
129 | terminated by a signal, sysval now displays the signal number shifted
|
---|
130 | left by eight bits, to match traditional m4 implementations.
|
---|
131 | * The maketemp macro is no longer subject to platform limitations (such as
|
---|
132 | 26 or 32 max files from a given template).
|
---|
133 | * Frozen files now require that the first directive be V (version), to
|
---|
134 | better diagnose version mismatch. Additionally, if the F directive
|
---|
135 | (builtin function) names an unknown builtin that existed in the m4 that
|
---|
136 | froze the file but not in the current m4 (for example, changeword), the
|
---|
137 | warning is deferred until an attempt is made to actually use the
|
---|
138 | builtin. This allows downgrading from beta m4-1.4o to stable m4-1.4.5
|
---|
139 | without breaking autoconf.
|
---|
140 | * The format and indir macros are now recognized only with arguments.
|
---|
141 | * The eval macro no longer crashes on x86 architectures when dividing the
|
---|
142 | minimum integer by -1.
|
---|
143 | * On systems with ecvt and fcvt, format no longer truncates trailing
|
---|
144 | zeroes on integers printed with %.0f. On systems without these
|
---|
145 | functions, format is no longer subject to a buffer overflow that
|
---|
146 | permitted arbitrary code execution.
|
---|
147 | * On native Windows builds, the macro __windows__ is provided instead of
|
---|
148 | __unix__. Likewise, on OS/2 builds, the macro __os2__ is provided. This
|
---|
149 | allows input files to determine when syscmd might behave differently.
|
---|
150 | * Fix bug in 1.4.3 patch to use \n line-endings that did not work for
|
---|
151 | cygwin.
|
---|
152 | * When given the empty string or 0, undivert is now documented as a no-op
|
---|
153 | rather than closing stdout, warning about a non-existent file, or trying
|
---|
154 | to read a directory as a file.
|
---|
155 | * Many documentation improvements. Also, the manual is now distributed
|
---|
156 | under FDL 1.2, rather than a stricter verbatim-only license.
|
---|
157 | * Raise the -L (--nesting-limit) command line option limit from 250 to
|
---|
158 | 1024.
|
---|
159 | * The decr, incr, divert, m4exit, and substr macros treat an empty number
|
---|
160 | as 0, issue a warning, and expand as normal; rather than issuing an error
|
---|
161 | and expanding to the empty string.
|
---|
162 | * The eval macro now treats an empty radix argument as 10, handles radix 1,
|
---|
163 | and treats the width argument as number of digits excluding the sign,
|
---|
164 | for compatibility with other m4 implementations.
|
---|
165 | * The ifdef, divert, m4exit, substr, and translit macros now correctly
|
---|
166 | ignore extra arguments.
|
---|
167 | * The popdef and undefine macros now correctly accept multiple arguments.
|
---|
168 | * Although changeword is on its last leg, if enabled, it now reverts to the
|
---|
169 | default (faster) regexp when passed the empty string.
|
---|
170 | * The regexp and substr macros now warn and ignore a trailing backslash in
|
---|
171 | the replacement, and warn on \n for n larger than the number of
|
---|
172 | sub-expressions in the regexp.
|
---|
173 |
|
---|
174 | Version 1.4.4b - 17 June 2006, by Eric Blake (CVS version 1.4.4a)
|
---|
175 |
|
---|
176 | * Fix a recursive push_string crashing bug, which affected changequote of
|
---|
177 | three or more characters on some compilers.
|
---|
178 | * Use automake to fix build portability issues.
|
---|
179 | * Fix a recursive m4wrap crashing bug.
|
---|
180 | * Fix a 1 in 2**32 hash crashing bug.
|
---|
181 | * Tracing a macro by name is now persistent, even if the macro is
|
---|
182 | subsequently undefined or redefined. The traceon and traceoff macros no
|
---|
183 | longer warn about undefined symbols. This solves a crash when using
|
---|
184 | indir on an undefined macro traced with the -t option, as well as an
|
---|
185 | incorrect result of ifdef. Furthermore, tracing is no longer transferred
|
---|
186 | with builtins, solving the bug of "m4 -tm4_eval" failing to give trace
|
---|
187 | output on the input "define(`m4_eval',defn(`eval'))m4_eval(1)".
|
---|
188 | * Fix a crash when a macro is undefined while collecting its arguments, by
|
---|
189 | always using the definition that was in effect before argument
|
---|
190 | collection. This behavior matches the C pre-processor, and means that
|
---|
191 | the sequence "define(`f',`1')f(define(`f',`2'))f" is now documented to
|
---|
192 | result in "12", rather than the previously undocumented "22".
|
---|
193 | * Update the regex engine to fix several bugs.
|
---|
194 | * Fix a potential crash on machines where char is signed.
|
---|
195 |
|
---|
196 | Version 1.4.4 - October 2005, by Gary V. Vaughan
|
---|
197 |
|
---|
198 | * ./configure --infodir=/usr/share/info now works correctly.
|
---|
199 | * When any file named on the command line is missing exit with status 1.
|
---|
200 |
|
---|
201 | Version 1.4.3 - March 2005, by Gary V. Vaughan
|
---|
202 |
|
---|
203 | * DESTDIR installs now work correctly.
|
---|
204 | * Don't segfault with uncompilable regexps to changeword().
|
---|
205 | * Always use \n line-endings for frozen files (fixes a Windows bug).
|
---|
206 | * Portability fix for systems lacking mkstemp(3).
|
---|
207 | * Approximately 20% speed up in the common case of usage with autoconf.
|
---|
208 | * Supported on QNX 6.3.
|
---|
209 |
|
---|
210 | Version 1.4.2 - August 2004, by Paul Eggert
|
---|
211 |
|
---|
212 | * No user visible changes; portability bug fixes only.
|
---|
213 |
|
---|
214 | Version 1.4.1 - June 2004, by Paul Eggert
|
---|
215 |
|
---|
216 | * maketemp now creates an empty file with the given name, instead of merely
|
---|
217 | returning the name of a nonexistent file. This closes a security hole.
|
---|
218 |
|
---|
219 | Version 1.4 - October 1994, by Franc,ois Pinard
|
---|
220 |
|
---|
221 | (No user visible changes)
|
---|
222 | |
---|
223 |
|
---|
224 | Version 1.3 - September 1994, by Franc,ois Pinard
|
---|
225 |
|
---|
226 | * Diversions are created as needed. Option `-N' is still accepted, but
|
---|
227 | otherwise ignored. Users should use only negative diversion numbers,
|
---|
228 | instead of high positive numbers, for diverting to nowhere.
|
---|
229 |
|
---|
230 | * Diversions should also work faster. No temporary files will be needed
|
---|
231 | at all if all diversions taken altogether do not use more than 512K.
|
---|
232 |
|
---|
233 | * Frozen state files may be produced with the `--freeze-state' (-F)
|
---|
234 | option and later brought back through the `--reload-state' (-R) option.
|
---|
235 | |
---|
236 |
|
---|
237 | Version 1.2 - July 1994, by Franc,ois Pinard
|
---|
238 |
|
---|
239 | * In patsubst(STRING, REGEXP, REPLACEMENT), \& in REPLACEMENT has been
|
---|
240 | changed to represent this part of STRING matched by the whole REGEXP,
|
---|
241 | instead of the whole STRING as before. \0 does the same, but emits a
|
---|
242 | diagnostic saying it will disappear in some subsequent release.
|
---|
243 |
|
---|
244 | * eval(EXPR) emits a diagnostic if EXPR has suffixed crumb. The same for
|
---|
245 | other numeric conversions in incr(), decr(), divert(), etc.
|
---|
246 |
|
---|
247 | * `--fatal-warnings' (-E) stops execution at first warning.
|
---|
248 |
|
---|
249 | * `--nesting-limit=LEVEL' (-L LEVEL) sets a limit to macro nesting.
|
---|
250 | It is initially fixed at 250.
|
---|
251 |
|
---|
252 | * `--word-regexp=REGEXP' (-W REGEXP) modifies macro name syntax, like
|
---|
253 | does the new `changeword(REGEXP)' macro. This feature is experimental,
|
---|
254 | tell me your opinions about it. You do need --enable-changeword at
|
---|
255 | configure time to get these things. Do *not* depend on them yet.
|
---|
256 |
|
---|
257 | * Trace output format is scannable by GNU Emacs' next-error function.
|
---|
258 |
|
---|
259 | * Stack overflow is detected and diagnosed on some capable systems.
|
---|
260 |
|
---|
261 | * Various bugs have been corrected, m4 should be more portable. See the
|
---|
262 | ChangeLog for details.
|
---|
263 | |
---|
264 |
|
---|
265 | Version 1.1 - November 1993, by Franc,ois Pinard
|
---|
266 |
|
---|
267 | Changes which might affect existing GNU m4 scripts:
|
---|
268 |
|
---|
269 | * Option `-V' has been removed, use `--version' instead. `--version'
|
---|
270 | writes on standard output instead of standard error, and inhibits any
|
---|
271 | script execution.
|
---|
272 |
|
---|
273 | * `--no-gnu-extensions' has been renamed `--traditional'.
|
---|
274 |
|
---|
275 | * In `eval', `^' used to indicate exponentiation, use `**' instead.
|
---|
276 |
|
---|
277 | * The automatic undiversion which takes place at end of all input is
|
---|
278 | forced into the main output stream.
|
---|
279 |
|
---|
280 | Changes which are unlikely to affect existing scripts:
|
---|
281 |
|
---|
282 | * `--help' prints an usage summary on standard output. Script execution
|
---|
283 | is then inhibited.
|
---|
284 |
|
---|
285 | * `--prefix-builtins' (-P) prefixes all builtin macros by `m4_'.
|
---|
286 |
|
---|
287 | * Most builtin macros for which arguments are mandatory, called without
|
---|
288 | any arguments, are no more recognized as builtin macros: they are
|
---|
289 | consequently copied verbatim to the output stream.
|
---|
290 |
|
---|
291 | * `define' and `pushdef' are usable with only one argument, they give
|
---|
292 | this argument an empty definition.
|
---|
293 |
|
---|
294 | * `eval' new operators for binary representation handling: `^' for
|
---|
295 | exclusive-or, `~' for the bitwise negation, `<<' and `>>' for shifts.
|
---|
296 |
|
---|
297 | * `eval' recognizes the notation 0bDIGITS for binary numbers and the
|
---|
298 | notation 0rRADIX:DIGITS for numbers in any radix from 1 to 36.
|
---|
299 | |
---|
300 |
|
---|
301 | Version 1.0.3 - December 1992, by Franc,ois Pinard
|
---|
302 |
|
---|
303 | Changes for the user:
|
---|
304 |
|
---|
305 | * `dnl' outputs a diagnostic if immediately followed by `('. Usually,
|
---|
306 | `dnl' is followed by newline or whitespace.
|
---|
307 |
|
---|
308 | * `ifelse' accepts without complaining the common idiom of having only
|
---|
309 | one argument. This is useful for introducing long comments.
|
---|
310 |
|
---|
311 | * `eval' always expresses values as signed, whatever the radix.
|
---|
312 |
|
---|
313 | * M4OPTS environment variable is no longer obeyed.
|
---|
314 |
|
---|
315 | * `--no-warnings' option is renamed `--silent'.
|
---|
316 |
|
---|
317 | * Debug lines use a new format more compatible with GNU standards.
|
---|
318 |
|
---|
319 | * Various bugs have been corrected. See the ChangeLog for details.
|
---|
320 |
|
---|
321 | Changes for the installer:
|
---|
322 |
|
---|
323 | * GNU m4 now uses an Autoconf-generated configure script, and should be
|
---|
324 | more easily portable in many ways. (Cray is not supported yet).
|
---|
325 |
|
---|
326 | * `make check' has been made more portable, expect no errors.
|
---|
327 |
|
---|
328 | Changes for the programmer:
|
---|
329 |
|
---|
330 | * Sources have been fully reindented to comply with GNU standards, and
|
---|
331 | cleaned up in many ways.
|
---|
332 |
|
---|
333 | * Sources have been protoized. Non-ANSI compilers are automatically
|
---|
334 | detected, then sources are unprotoized on the fly before compilation.
|
---|
335 |
|
---|
336 | * GNU m4 uses newer versions of obstack, regex, getopt, etc.
|
---|
337 | |
---|
338 |
|
---|
339 | Version 1.0 - October 1991, by Rene' Seindal
|
---|
340 |
|
---|
341 | * Uses GNU configure, taken from the gdb distribution.
|
---|
342 |
|
---|
343 | * Uses GNU getopt(), with long option names.
|
---|
344 |
|
---|
345 | * The -Q/+quiet option is added, which suppresses warnings about missing
|
---|
346 | or superflous arguments to built-in macros.
|
---|
347 |
|
---|
348 | * Added default options via the M4OPTS environment variable.
|
---|
349 |
|
---|
350 | * Several minor bugs have been fixed.
|
---|
351 | |
---|
352 |
|
---|
353 | Version 0.99 - July 1991, by Rene' Seindal
|
---|
354 |
|
---|
355 | * The builtins `incr' and `decr' are now implemented without use of
|
---|
356 | `eval'.
|
---|
357 |
|
---|
358 | * The builtin `indir' is added, to allow for indirect macro calls
|
---|
359 | (allows use of "illegal" macro names).
|
---|
360 |
|
---|
361 | * The debugging and tracing facilities has been enhanced considerably.
|
---|
362 | See the manual for details.
|
---|
363 |
|
---|
364 | * The -tMACRO option is added, marks MACRO for tracing as soon as it
|
---|
365 | is defined.
|
---|
366 |
|
---|
367 | * Builtins are traced after renaming iff they were before.
|
---|
368 |
|
---|
369 | * Named files can now be undiverted.
|
---|
370 |
|
---|
371 | * The -Nnum option can be used to increase the number of divertions
|
---|
372 | available.
|
---|
373 |
|
---|
374 | * Calling changecom without arguments now disables all comment handling.
|
---|
375 |
|
---|
376 | * A bug in `dnl' is fixed.
|
---|
377 |
|
---|
378 | * A bug in the multi-character quoting code is fixed.
|
---|
379 |
|
---|
380 | * Several typos in the manual has been corrected. More probably persist.
|
---|
381 | |
---|
382 |
|
---|
383 | Version 0.75 - November 1990, by Rene' Seindal
|
---|
384 |
|
---|
385 | * Implemented search path for include files (-I option and M4PATH
|
---|
386 | environment variable).
|
---|
387 |
|
---|
388 | * Implemented builtin `format' for printf-like formatting.
|
---|
389 |
|
---|
390 | * Implemented builtin `regexp' for searching for regular expressions.
|
---|
391 |
|
---|
392 | * Implemented builtin `patsubst' for substitution with regular
|
---|
393 | expressions.
|
---|
394 |
|
---|
395 | * Implemented builtin `esyscmd', which expands to a shell commands output.
|
---|
396 |
|
---|
397 | * Implemented `__file__' and `__line__' for use in error messages.
|
---|
398 |
|
---|
399 | * Implemented character ranges in `translit'.
|
---|
400 |
|
---|
401 | * Implemented control over debugging output.
|
---|
402 |
|
---|
403 | * Implemented multi-character quotes.
|
---|
404 |
|
---|
405 | * Implemented multi-character comment delimiters.
|
---|
406 |
|
---|
407 | * Changed predefined macro `gnu' to `__gnu__'.
|
---|
408 |
|
---|
409 | * Changed predefined macro `unix' to `__unix__', when the -G option is
|
---|
410 | not used. With -G, `unix' is still defined.
|
---|
411 |
|
---|
412 | * Added program name to error messages.
|
---|
413 |
|
---|
414 | * Fixed two missing null bytes bugs.
|
---|
415 | |
---|
416 |
|
---|
417 | Version 0.50 - January 1990, by Rene' Seindal
|
---|
418 |
|
---|
419 | * Initial beta release.
|
---|
420 | |
---|
421 |
|
---|
422 | Local Variables:
|
---|
423 | mode: outline
|
---|
424 | fill-column: 75
|
---|
425 | End:
|
---|