[libvirt] Problems with pdwtags on Ubuntu 10.04

Jim Meyering jim at meyering.net
Wed May 19 14:28:26 UTC 2010


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?

>From a8d8ff6ba4791972483093215291eef5fa87cf5d Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at 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";' \
+		-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




More information about the libvir-list mailing list