F8T3 portaudio-19-3.fc8 dependency bug?

Michael Schwendt mschwendt.tmp0701.nospam at arcor.de
Sat Oct 13 21:34:31 UTC 2007


On Sat, 13 Oct 2007 13:50:39 -0600, Jerry Williams wrote:

> I think the answers are going in the wrong direction.

No.

> And maybe this isn't about portaudio at all, but more of a dependency
> problem.

No. :)
 
> I have a binary crrcsim-0.9.8-1.fc6.i386.rpm that was built on Fedora Core
> 6.

Are PortAudio v18 and v19 compatible?

On Fedora 6 and 7 we have the old v18 with no SONAME, i.e. a
libportaudio.so with _no_ soname.

On Fedora 8 devel we have the newer v19 with a SONAME:
libportaudio.so.2

The change in the library soname -- think of it as an identifier
inside the library headers -- makes the two library releases
incompatible already, even if creating a link for the old name might
work (when the two libraries are ABI-compatible except for their
sonames).

> It installs just fine on Fedora 7, but that could be because when I enter
> the command rpm -q portaudio returns portaudio-18.1-8.fc6.
> 
> When I try and install it on Fedora 8 Test 3 it complains:
> error: Failed dependencies:
> 	libportaudio.so is needed by crrcsim-0.9.8-1.fc6.i386
> and it won't install.

The application is linked against the old PortAudio v18 and hence
requires the old library soname. That old soname is only provided
by RPM packages which contain the old PortAudio v18 library.

> And I think that is a bug of some kind because there is a
> /usr/lib/libportaudio.so or at least a file that is a link.

That symlink is only to be used during building of software, not
at run-time. At run-time the versioned libportaudio.so.2* are
to be used, since applications are linked against them.

> And it does work if I install crrcsim with the --nodeps option.
> 
> So am I just lucky that it works?

Either that, or PortAudio has stayed ABI- and API-compatible between
v18 and v19. Its API is from 2004 or so.

> Should something be changed so that it satisfies the libportaudio.so

No.

> and so
> it should let crrcsim install without having to use the --nodeps option?

crrcsim ought to be rebuilt to link against the proper library, i.e
the v19 PortAudio.

> And I guess I don't understand the stuff below about sonames and such.
> Why does it matter if I list the whole path or not?

In addition to the list of files (incl. absolute paths) in a package,
shared-library packages contain information in the RPM data about what
library "name" they make available to the system. Only if you know
that "rpm -q --whatprovides libfoo.so.2" is a query about a library
soname, you know that it is not equivalent to "rpm -q --whatprovides
/usr/lib/libfoo.so.4" which is a query about a file. So, even if you
have a file/link called /usr/lib/libfoo.so, it might only point to
a library with a versioned soname like "libfoo.so.4".

> So is it the fact that on Fedora 8 I have version 2 of libportaudio.so and
> on Fedora 7 I have version 1 or none and that the link in the devel package
> is there so that things that require libportaudio.so will compile against
> version 2, but the rpm wants to keep thing that where compiled against
> version 1 to fail install because they might not work?

RPM simply wants a package that offers the needed library soname, and
in PortAudio v19 that name has changed to contain a version, "2".




More information about the test mailing list