2010/5/19 Jim Meyering <jim@xxxxxxxxxxxx>: > 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@xxxxxxxxxx> > 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list