2010/5/19 Jim Meyering <jim(a)meyering.net>:
Matthias Bolte wrote:
> The "help avoid accidental remote_protocol.x changes" commit 180d4b2b
> added a make check rule that tried using pdwtags from the dwarves
> package to protect against accidental remote_protocol.x changes.
>
> I installed dwarves package on Ubuntu 10.04 and make check fails for me now.
>
> The temporary file remote_protocol-structs-t is empty for me. It seems
> that pdwtags doesn't output the expected format for the embedded perl
> script. pdwtags output doesn't contain /* DD */ comments between the
> structs. A snippet from the pdwtags output looks like this:
Thanks for the report.
At first I thought it might be worthwhile to
adjust the splitting code to accommodate 1.3 with --verbose:
-e 'foreach my $$p (split m!\n\n/\* (?:\d+|<\S+> \S+) \*/\n!) {'\
That works with pdwtags --verbose when it's 1.3,
but with 1.8.x, as Eric noted, we get yet another variant:
/* 93 */
/* <0> (null):0 */
which is not matched by the above.
I could match only the lines with the "<hex-digit> ...:\d+" comments,
but prefer to use a tighter regexp (albeit more involved) so that I can
continue to require a blank line (the "\n\n") just before the separator.
Matthias,
Would you please verify that this solves the problem
when using your older pdwtags program?
Yes, this patch solves the problem.
From a8d8ff6ba4791972483093215291eef5fa87cf5d Mon Sep 17 00:00:00
2001
From: Jim Meyering <meyering(a)redhat.com>
Date: Wed, 19 May 2010 15:36:27 +0200
Subject: [PATCH] tests: the remote_protocol check also accommodates older pdwtags
This test was failing on systems using pdwtags from dwarves-1.3.
Reported by Matthias Bolte.
Two-pronged fix:
- use --verbose to work also with dwarves-1.3; adapt regular
expressions to handle now-varying separators
- require a minimum number of post-split clauses, in order to
skip upon any future format change.
Currently there are 318; if there are 300 or fewer,
give a warning similar to when pdwtags is missing.
* src/Makefile.am (remote_protocol-structs): Use pdwtags' --verbose
option to make 1.3 emit member sizes and offsets.
Consistently output WARNING messages to stderr.
---
src/Makefile.am | 40 +++++++++++++++++++++++++++++++---------
1 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 889de8e..7ddf6aa 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -167,22 +167,44 @@ EXTRA_DIST += remote/remote_protocol.x remote/rpcgen_fix.pl
# * remove comments and preceding TAB throughout
# * remove empty lines throughout
# * remove white space at end of buffer
+
+# With pdwtags 1.8, --verbose output includes separators like these:
+# /* 93 */
+# /* <0> (null):0 */
+# whereas with pdwtags 1.3, they look like this:
+# /* <2d2> /usr/include/libio.h:180 */
+# The concatenation of the following regexps matches both cases.
+r1 = (?:/\* \d+ \*/\n)?
+r2 = /\* <[[:xdigit:]]+> \S+:\d+ \*/
+
.PHONY: remote_protocol-structs
remote_protocol-structs:
$(AM_V_GEN)if (pdwtags --help) > /dev/null 2>&1; then \
- pdwtags libvirt_driver_remote_la-remote_protocol.$(OBJEXT) \
+ pdwtags --verbose libvirt_driver_remote_la-remote_protocol.$(OBJEXT) \
| perl -0777 -n \
- -e 'foreach my $$p (split m!\n\n/\* \d+ \*/\n!)' \
- -e ' { if ($$p =~ /^struct remote_/) {' \
- -e ' $$p =~ s!\t*/\*.*?\*/!!sg;' \
- -e ' $$p =~ s!\s+\n!\n!sg;' \
- -e ' $$p =~ s!\s+$$!!;' \
- -e ' print "$$p\n" } }'
\
+ -e 'foreach my $$p (split m!\n\n$(r1)$(r2)\n!) {' \
+ -e ' if ($$p =~ /^struct remote_/) {' \
+ -e ' $$p =~ s!\t*/\*.*?\*/!!sg;' \
+ -e ' $$p =~ s!\s+\n!\n!sg;' \
+ -e ' $$p =~ s!\s+$$!!;' \
+ -e ' print "$$p\n";'
\
+ -e ' $$n++;' \
+ -e ' }' \
+ -e '}' \
+ -e 'END {' \
+ -e ' if ($$n < 300) {' \
+ -e ' warn "WARNING: your pdwtags program is too
old\n";' \
+ -e ' warn "WARNING: skipping the $@ test\n";'
\
+ -e ' warn "WARNING: install dwarves-1.8 or
newer\n";' \
Maybe the warning should suggest dwarves-1.3 as minimum version,
because this patch makes it work with dwarves-1.3.
+ -e ' exit 8;'
\
+ -e ' }' \
+ -e '}' \
> $@-t; \
+ case $$? in 8) exit 0;; 0) ;; *) exit 1;; esac; \
diff -u $@-t $(srcdir)/$@; st=$$?; rm -f $@-t; exit $$st; \
else \
- echo 'WARNING: you lack pdwtags; skipping the $@ test'; \
- echo 'WARNING: install the dwarves package to get pdwtags'; \
+ echo 'WARNING: you lack pdwtags; skipping the $@ test' >&2; \
+ echo 'WARNING: install the dwarves package to get pdwtags' >&2;
\
fi
EXTRA_DIST += remote_protocol-structs
check-local: remote_protocol-structs
--
1.7.1.259.g3aef8
ACK.
Matthias