[libvirt] [PATCH] build: Fix prohibit_int_ijk (and iijjkk) on RHEL 5
Claudio Bley
cbley at av-test.de
Wed Oct 23 08:33:21 UTC 2013
At Tue, 22 Oct 2013 23:09:20 +0100,
Martin Kletzander wrote:
>
> On Tue, Oct 22, 2013 at 09:52:30PM +0100, Eric Blake wrote:
> > On 10/22/2013 05:19 PM, Martin Kletzander wrote:
> > > On RHEL 5, make syntax-check was failing because even strings like
> > > 'int isTempChain' matched the 'int i' rule. To be honest, I haven't
> > > found the root cause, but the change added makes it work as expected
> > > and keeps the proper behavior on newer systems as well.
> > >
> > > Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> > > ---
> > >
> > > Notes:
> > > I'm not pushing this one as a build breaker since I haven't found the
> > > root cause, so feel free to object and fix it differently.
> > >
> > > cfg.mk | 4 ++--
> > > 1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/cfg.mk b/cfg.mk
> > > index 56821e2..e9da282 100644
> > > --- a/cfg.mk
> > > +++ b/cfg.mk
> > > @@ -555,12 +555,12 @@ sc_avoid_attribute_unused_in_header:
> > > $(_sc_search_regexp)
> > >
> > > sc_prohibit_int_ijk:
> > > - @prohibit='\<(int|unsigned) ([^(]* )*(i|j|k)(\s|,|;)' \
> > > + @prohibit='\<(int|unsigned) ([^(]* )*(i|j|k)\>(\s|,|;)' \
> >
> > What version of grep on RHEL 5? (I'm without access to my normal RHEL 5
> > VM at the moment.) I'm not seeing an obvious entry in grep's NEWS file,
> > but suspect it may be a bug in that old of a grep rather than in our
> > regex. At any rate, I agree with the fix:
> >
>
> The thing is that when I tried reproducing it using only grep, the
> regexp and the file, there was no match.
>
> Here are the version-related things:
>
> # grep -V
> grep (GNU grep) 2.5.1
> # rpm -qf $(which grep)
> grep-2.5.1-55.el5
>
> // Feel free to stop by tomorrow since we're both on KVM Forum, I
> // can't express how much interested I am in finding the root cause
> // of the regexp failure.
Seems \s is buggy in this grep version with a non UTF-8 locale
setting. Observe:
$ LANG=en_US.UTF-8 grep -nE '\<(int|unsigned) ([^(]* )*(i|j|k)(\s|,|;)' src/conf/interface_conf.h
$ LANG=C grep -nE '\<(int|unsigned) ([^(]* )*(i|j|k)(\s|,|;)' src/conf/interface_conf.h
135: int autoconf; /* only useful if family is ipv6 */
167: unsigned int active:1; /* 1 if interface is active (up) */
Alas, grep does not colorize anything in the output line in that case
(even with --color=always), just as if it does not match anything.
According to grep's info pages \s should be equivalent to [[:space:]],
but it is not, as the latter works alright:
$ LANG=C grep -nE '\<(int|unsigned) ([^(]*)*(i|j|k)([[:space:]]|,|;)' src/conf/interface_conf.h
So, I think the right fix would be to avoid \s altogether and use
[[:space:]] instead.
Claudio
--
AV-Test GmbH, Henricistraße 20, 04155 Leipzig, Germany
Phone: +49 341 265 310 19
Web:<http://www.av-test.org>
Eingetragen am / Registered at: Amtsgericht Stendal (HRB 114076)
Geschaeftsfuehrer (CEO): Andreas Marx, Guido Habicht, Maik Morgenstern
More information about the libvir-list
mailing list