[Fedora-packaging] Conditional comparision doesn't work

Michael Schwendt mschwendt at gmail.com
Sat Apr 9 17:48:47 UTC 2011


On Sat, 09 Apr 2011 19:34:48 +0200, Christoph wrote:

> > On Sat, 09 Apr 2011 19:01:20 +0200, Christoph wrote:
> > 
> > > I have a spec with
> > > 
> > >         %global panelversion 4.8.3
> > > or 
> > >         %global panelversion %(rpm -q --qf='%{VERSION}' xfce4-panel)
> > > 
> > > As expected this returns "4.8.3" and
> > > 
> > >         Requires: xfce4-panel >= %{panelversion}
> > > 
> > > works fine. However 
> > > 
> > >         %if 0%{?panelversion} >= 4.7
> > >         %patch3 -p1
> > >         %endif
> > > 
> > > does not but returns:
> > > 
> > > Error: xfce4-cellmodem-plugin.spec:54: parseExpressionBoolean returns -1
> > > 
> > > Do I miss something obvious?
> > 
> > Neither 04.8.3 nor 4.7 can be converted into an integer as expected by
> > the >= comparison. For values like that, you would need to use string
> > comparison.
> 
> What would that look like in a spec?

String comparison in general? It uses double-quotes as in shell scripts:

  %if "blubb" >= "blah"
  %echo blubb >= blah
  %endif

  %if "4.8.3" >= "4.7"
  %echo 4.8.3 >= 4.7
  %endif

You can use RPM macros in there, too, of course.

But with regard to what you try to do, it will be severely limited,
because it is not a substitute for full RPM Version Comparison. Example:
"4.8.10" is less than "4.8.3", but in RPM space, that isn't true:

$ rpmdev-vercmp 4.8.10 4.8.3
0:4.8.10-None is newer


More information about the packaging mailing list