[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] Problems with pdwtags on Ubuntu 10.04



2010/5/19 Jim Meyering <jim 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 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]