How to make .spec Requires for libXXX.so.VER

Jan Kratochvil jan.kratochvil at redhat.com
Mon Sep 28 07:11:47 UTC 2015


On Sat, 01 Aug 2015 21:48:24 +0200, Igor Gnatenko wrote:
> On Sat, Aug 1, 2015 at 10:25 PM, Jan Kratochvil
> <jan.kratochvil at redhat.com> wrote:
> > (1) How to make a dependency on librpm.so.7?
> >
> > librpm.so.7 is in rpm-libs-4.12.90-3.fc24.x86_64 which --provides:
> >         librpm.so.7()(64bit)
> >         librpmio.so.7()(64bit)
> >         rpm-libs = 4.12.90-3.fc24
> >         rpm-libs(x86-64) = 4.12.90-3.fc24
> > So there is no easy way to Requires: rpm-libs = NVRA
> > I do not see which V introduced / deprecates .so library version 7.
> >
> > So I would like to: Requires: librpm.so.7
> > But that does not work as I need there the '()(64bit)' suffix.
> >
> > %{?_isa} suffix does not work, that is '(x86-64)' and not '()(64bit)'.
> >
> > I could %ifarch explicitly all 64-bit Fedora archs to append '()(64bit)' for
> > them but isn't there some better way how to generate the '()(64bit)' suffix?
> >
> > (2) The other possibility does work:
> >
> >         BuildRequires: %{_libdir}/librpm.so.7
> >
> > But
> >         https://fedoraproject.org/wiki/Packaging:Guidelines#File_Dependencies
> > says
> >         Whenever possible you should avoid file dependencies as they slow down
> >         dependency resolution and require the package manager to download file
> >         lists in addition to to regular dependency information.
> 
> I'd propose to add something like:
> %if %{__isa_bits} = 64
> Requires: libFOO.so.X()(64bit)
> %else
> Requires: libFOO.so.X
> %endif

This works for Requires (or Recommends) but not for BuildRequires:

I have found now by
	https://github.com/msimacek/koschei/issues/54
there exists
	https://fedoraproject.org/wiki/Packaging:Guidelines#BuildRequires_and_.25.7B_isa.7D
	(I find this as a workaround of broken rpm/yum(/dnf?), this is why
	I was adding %{?_isa} to BuildRequires, but that is offtopic for this
	mail thread.)

which talks only about forbidden %{?_isa} in BuildRequires but apparently it
IMO applies also to ()(64bit) suffixes in BuildRequires.

But using
	BuildRequires: libFOO.so.X
without the ()(64bit) suffix does not work on 64-bit archs:
	error: Failed build dependencies:
		librpm.so.7 is needed by gdb-7.10-28.fc24.x86_64

So I can only remove such BuildRequires completely but then it may quietly
build a package (gdb) which has wrong librpm version dependency built in.
I will have to add a manual %build-time shell check instead.


Jan


More information about the devel mailing list