[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] GNU M4 source repository branch, master, updated. cvs-readonly-126
From: |
Eric Blake |
Subject: |
[SCM] GNU M4 source repository branch, master, updated. cvs-readonly-126-gb365ac7 |
Date: |
Thu, 29 May 2008 02:20:28 +0000 |
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=b365ac707f78650ff719f3a295ac0d4c1a6521a2
The branch, master has been updated
via b365ac707f78650ff719f3a295ac0d4c1a6521a2 (commit)
from 19b3394db9c5c2f7087b5398a2319981d3f3544f (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 b365ac707f78650ff719f3a295ac0d4c1a6521a2
Author: Eric Blake <address@hidden>
Date: Wed May 28 20:16:23 2008 -0600
Improve frozen debugmode behavior.
* m4/debug.c (m4_debug_decode): Make empty debugmode additive.
* src/main.c (main): Interleave -d with files.
* tests/options.at (--debugmode): Update test.
* tests/freeze.at (reloading debugmode): New test.
* doc/m4.texinfo (Debugging options, Debugmode): Document the
change.
* NEWS: Likewise.
Signed-off-by: Eric Blake <address@hidden>
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 11 +++++++++++
NEWS | 9 +++++++--
doc/m4.texinfo | 47 ++++++++++++++++++++++++-----------------------
m4/debug.c | 2 +-
src/main.c | 28 +++++++++++++++++++++++-----
tests/freeze.at | 39 +++++++++++++++++++++++++++++++++++++++
tests/options.at | 15 ++++++++++++++-
7 files changed, 119 insertions(+), 32 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index b0f13a2..d5eec17 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2008-05-28 Eric Blake <address@hidden>
+
+ Improve frozen debugmode behavior.
+ * m4/debug.c (m4_debug_decode): Make empty debugmode additive.
+ * src/main.c (main): Interleave -d with files.
+ * tests/options.at (--debugmode): Update test.
+ * tests/freeze.at (reloading debugmode): New test.
+ * doc/m4.texinfo (Debugging options, Debugmode): Document the
+ change.
+ * NEWS: Likewise.
+
2008-05-27 Eric Blake <address@hidden>
Fix some testsuite failures on Solaris 8.
diff --git a/NEWS b/NEWS
index 1391e36..9aa47db 100644
--- a/NEWS
+++ b/NEWS
@@ -30,8 +30,13 @@ promoted to 2.0.
the include path, rather than always searching `.' first.
*** The `-d'/`--debug' command-line option now understands `-' and `+'
- modifiers, the way `debugmode' has always done. The option
- `--debugmode' is added as an alias for `-d'.
+ 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'. When given the empty
+ string, the mode is treated as `+aeq' instead of `aeq'. Also, the
+ position of `-d' with respect to files on the command line is now
+ significant.
*** New `--debuglen' command-line option matches the spelling of a new
macro, and the old spelling `--arglength' now issues a warning that it
diff --git a/doc/m4.texinfo b/doc/m4.texinfo
index 2048483..3540710 100644
--- a/doc/m4.texinfo
+++ b/doc/m4.texinfo
@@ -946,13 +946,16 @@ Set the debug-level according to the flags @var{FLAGS}.
The debug-level
controls the format and amount of information presented by the debugging
functions. @xref{Debugmode}, for more details on the format and
meaning of @var{FLAGS}. If omitted, @var{FLAGS} defaults to
address@hidden When the option is presented multiple times, if later
address@hidden When the option is presented multiple times, if later
@var{FLAGS} starts with @samp{-} or @samp{+}, they are cumulative,
-otherwise the later flags override all earlier occurrences. The
+otherwise the later flags override all earlier occurrences. Therefore,
+to disable all previously set flags, specify an explicit @var{FLAGS} of
address@hidden The
spelling @option{--debug} is recognized as an unambiguous option for
compatibility with earlier versions of @acronym{GNU} M4, but for
consistency with the builtin name, you can also use the spelling
address@hidden
address@hidden Order is significant with respect to
+file names.
@item address@hidden
@itemx -o @var{FILE}
@@ -4155,7 +4158,7 @@ the previous setting.
@comment currently enabled?
If no flags are specified with the @option{--debug} option, the default is
address@hidden Many examples in this manual show their output using
address@hidden Many examples in this manual show their output using
default flags.
@cindex @acronym{GNU} extensions
@@ -4164,10 +4167,10 @@ the debugging output format:
@deffn {Builtin (gnu)} debugmode (@ovar{flags})
The argument @var{flags} should be a subset of the letters listed above.
-If no argument is present, all debugging flags are cleared
-(as if no @option{--debug} was given), and with an empty argument the flags
-are reset to the default of @samp{aeq}. If an unknown flag is
-encountered, an error is issued.
+If no argument is present, all debugging flags are cleared (as if
address@hidden were an explicit @samp{-V}). With an empty argument, the
+most common flags are enabled (as if @var{flags} were an explicit
address@hidden). If an unknown flag is encountered, an error is issued.
The expansion of @code{debugmode} is void.
@end deffn
@@ -4179,34 +4182,32 @@ define(`foo', `FOO$1')
@result{}
traceon(`foo', `divnum')
@result{}
-debugmode()
address@hidden
+debugmode()dnl same as debugmode(`+aeq')
foo
@error{}m4trace: -1- foo -> `FOO'
@result{}FOO
debugmode(`V')debugmode(`-q')
address@hidden:stdin:5: -1- id 6: debugmode ... = <debugmode>@address@hidden
address@hidden:stdin:5: -1- id 6: debugmode(`-q') -> `'
address@hidden:stdin:5: -1- id 7: debugmode ... = <debugmode>@address@hidden
address@hidden:stdin:5: -1- id 7: debugmode(`-q') -> `'
@result{}
foo(
`BAR')
address@hidden:stdin:6: -1- id 7: foo ... = FOO$1
address@hidden:stdin:6: -1- id 7: foo(BAR) -> FOOBAR
address@hidden:stdin:6: -1- id 8: foo ... = FOO$1
address@hidden:stdin:6: -1- id 8: foo(BAR) -> FOOBAR
@result{}FOOBAR
-debugmode
address@hidden:stdin:8: -1- id 8: debugmode ... = <debugmode>@address@hidden
address@hidden:stdin:8: -1- id 8: debugmode ->@w{ }
address@hidden
+debugmode`'dnl same as debugmode(`-V')
address@hidden:stdin:8: -1- id 9: debugmode ... = <debugmode>@address@hidden
address@hidden:stdin:8: -1- id 9: debugmode ->@w{ }
foo
@error{}m4trace: -1- foo
@result{}FOO
debugmode(`+clmx')
@result{}
foo(divnum)
address@hidden:11: -1- id 11: foo ... = FOO$1
address@hidden:11: -2- id 12: divnum ... = <divnum>@address@hidden
address@hidden:11: -2- id 12: divnum
address@hidden:11: -1- id 11: foo
address@hidden:11: -1- id 13: foo ... = FOO$1
address@hidden:11: -2- id 14: divnum ... = <divnum>@address@hidden
address@hidden:11: -2- id 14: divnum
address@hidden:11: -1- id 13: foo
@result{}FOO0
debugmode(`-m')
@result{}
@@ -8409,7 +8410,7 @@ comment delimiters.
@item d @var{len} @key{NL} @var{str} @key{NL}
Sets the debug flags, using @var{str} as the argument to
@code{debugmode}. If omitted, then the debug flags start in their
-default state.
+default disabled state.
@item D @var{number} , @var{len} @key{NL} @var{str} @key{NL}
Selects diversion @var{number}, making it current, then copy @var{str}
diff --git a/m4/debug.c b/m4/debug.c
index 5b54c4a..e6c8ffb 100644
--- a/m4/debug.c
+++ b/m4/debug.c
@@ -39,7 +39,7 @@ m4_debug_decode (m4 *context, int previous, const char *opts)
char mode = '\0';
if (opts == NULL || *opts == '\0')
- level = M4_DEBUG_TRACE_DEFAULT;
+ level = M4_DEBUG_TRACE_DEFAULT | previous;
else
{
if (*opts == '-' || *opts == '+')
diff --git a/src/main.c b/src/main.c
index 7690147..104c256 100644
--- a/src/main.c
+++ b/src/main.c
@@ -427,11 +427,11 @@ main (int argc, char *const *argv, char *const *envp)
case 'p':
case 'r':
case 't':
- case '\1':
case POPDEF_OPTION:
case SYNCOUTPUT_OPTION:
case TRACEOFF_OPTION:
case UNLOAD_MODULE_OPTION:
+ defer:
/* Arguments that cannot be handled until later are accumulated. */
defn = (deferred *) xmalloc (sizeof *defn);
@@ -444,12 +444,12 @@ main (int argc, char *const *argv, char *const *envp)
else
tail->next = defn;
tail = defn;
-
- if (optchar == '\1')
- seen_file = true;
-
break;
+ case '\1':
+ seen_file = true;
+ goto defer;
+
case 'B':
/* In 1.4.x, -B<num> was a no-op option for compatibility with
Solaris m4. Warn if optarg is all numeric. FIXME -
@@ -537,6 +537,11 @@ main (int argc, char *const *argv, char *const *envp)
break;
case 'd':
+ /* Staggered handling of 'd', since -dm is useful prior to
+ first file and prior to reloading, but other -d must also
+ have effect between files. */
+ if (seen_file || frozen_file_to_read)
+ goto defer;
{
int old = m4_get_debug_level_opt (context);
m4_set_debug_level_opt (context, m4_debug_decode (context, old,
@@ -702,6 +707,19 @@ main (int argc, char *const *argv, char *const *envp)
m4_symbol_delete (M4SYMTAB, arg);
break;
+ case 'd':
+ {
+ int old = m4_get_debug_level_opt (context);
+ m4_set_debug_level_opt (context, m4_debug_decode (context, old,
+ arg));
+ }
+ if (m4_get_debug_level_opt (context) < 0)
+ {
+ error (0, 0, _("bad debug flags: `%s'"), arg);
+ m4_set_debug_level_opt (context, 0);
+ }
+ break;
+
case 'm':
/* FIXME - should loading a module result in output? */
m4_module_load (context, arg, NULL);
diff --git a/tests/freeze.at b/tests/freeze.at
index fd1981b..44de59d 100644
--- a/tests/freeze.at
+++ b/tests/freeze.at
@@ -338,6 +338,45 @@ define{`a.b', `hello $1'}dnl
]])
## --------- ##
+## debugmode ##
+## --------- ##
+
+# Check that debugmode can be preserved, and how it interacts with -d
+AT_SETUP([reloading debugmode])
+AT_KEYWORDS([frozen])
+
+AT_DATA([frozen.m4],
+[[debugmode(`fl')dnl
+]])
+AT_DATA([unfrozen.m4],
+[[traceon(`len')len(`a')
+]])
+
+AT_CHECK_M4([-F frozen.m4f -d-V frozen.m4], [0])
+
+dnl With no -d option, use the frozen file
+AT_CHECK_M4([-R frozen.m4f unfrozen.m4], [0], [[1
+]], [[m4trace:unfrozen.m4:1: -1- len
+]], [], [ ])
+
+dnl With plain -d before -R, use the frozen file
+AT_CHECK_M4([-R frozen.m4f unfrozen.m4], [0], [[1
+]], [[m4trace:unfrozen.m4:1: -1- len
+]])
+
+dnl With plain -d after -R, add +aeq to the frozen file
+AT_CHECK_M4([-R frozen.m4f -d unfrozen.m4], [0], [[1
+]], [[m4trace:unfrozen.m4:1: -1- len(`a') -> `1'
+]], [], [ ])
+
+dnl With explicit -d option, override frozen file
+AT_CHECK_M4([-R frozen.m4f -de unfrozen.m4], [0], [[1
+]], [[m4trace: -1- len -> 1
+]])
+
+AT_CLEANUP
+
+## --------- ##
## nul bytes ##
## --------- ##
diff --git a/tests/options.at b/tests/options.at
index 19b8874..5484f14 100644
--- a/tests/options.at
+++ b/tests/options.at
@@ -371,12 +371,25 @@ AT_DATA([[nested]],
')dnl
]])
-dnl AT_CHECK_M4 starts life with -d. Make sure it looks like -daeq.
+dnl AT_CHECK_M4 starts life with -d. Make sure it looks like -d+aeq.
AT_CHECK_M4([-tlen in], [0], [[3
0
]], [[m4trace: -1- len(`abc') -> `3'
]])
+AT_CHECK_M4([-tlen -dfl -d in], [0], [[3
+0
+]], [[m4trace:in:2: -1- len(`abc') -> `3'
+]])
+
+dnl -d after file is deferred (but this is still useful for some flags).
+AT_CHECK_M4([-tlen in -dfli], [0], [[3
+0
+]], [[m4trace: -1- len(`abc') -> `3'
+m4debug: input from m4wrap recursion level 1
+m4debug: input from m4wrap exhausted
+]])
+
dnl Test all flags.
AT_CHECK_M4([-dV in], [0], [[3
0
hooks/post-receive
--
GNU M4 source repository
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] GNU M4 source repository branch, master, updated. cvs-readonly-126-gb365ac7,
Eric Blake <=