Fw: Re: JACK upgrade is ABI/API-incompatible

Michael Schwendt mschwendt at gmail.com
Thu Feb 14 10:22:16 UTC 2008


Thought the examples in this message might be of general interest
to other Fedora packagers, too...

[...]

Begin forwarded message:

From: Michael Schwendt
Subject: Re: JACK upgrade is ABI/API-incompatible

> > No need to use rawhide. "yum install rpmdevtools" with older Fedora
> > works, too. Tools like rpmsodiff work on RPM package files. 
>
> Do I understand correctly the process? I need to do:
> - build on any Fedora (f.e. fc 7) new jack library
> - install tools from above 
> - run tools on binary rpm

Yes. You build the upgrade rpms for your dist of choice, then compare the
previous rpms with the new rpms.

Examples:

$ rpmsoname jack-audio-connection-kit-0.103.0-5.fc9.i386.rpm 
/usr/lib/libjack.so.0.0.23      libjack.so.0

$ rpmsoname jack-audio-connection-kit-0.109.0-1.fc9.i386.rpm 
/usr/lib/libjack.so.0.0.28      libjack.so.0

Library SONAME hasn't changed, but in this case that is misleading,
because:

$ rpmsodiff jack-audio-connection-kit-0.103.0-5.fc9.i386.rpm jack-audio-connection-kit-0.109.0-1.fc9.i386.rpm
[...]
        2 symbols removed
T jack_port_lock
T jack_port_unlock
[...]
        11 symbols added
[...]

The two removed symbols break dependencies at run-time and at build-time.
Both the ABI and the API of the library have changed.

For the alternative abicheck tool you would install the built upgrade rpms,
then check binaries that are linked against the library:

$ rpm -q jack-audio-connection-kit
jack-audio-connection-kit-0.103.0-4.fc8
$ rpm -U jack-audio-connection-kit-0.109.0-1.fc8.i386.rpm 

$ abicheck /usr/bin/audacity 
[...]
/usr/bin/audacity: UNBOUND_SYMBOLS: 2 (run ldd -r on binary for more info)

$ ldd -r /usr/bin/audacity|grep undef
undefined symbol: jack_port_lock        (/usr/bin/audacity)
undefined symbol: jack_port_unlock      (/usr/bin/audacity)

$ abicheck /usr/lib/libportaudio.so.2
[...]
/usr/lib/libportaudio.so.2: UNBOUND_SYMBOLS: 2 (run ldd -r on binary for more info)

$ ldd -r /usr/lib/libportaudio.so.2|grep undef
undefined symbol: jack_port_lock        (/usr/lib/libportaudio.so.2)
undefined symbol: jack_port_unlock      (/usr/lib/libportaudio.so.2)

-- 
Michael Schwendt <mschwendt at fedoraproject.org>
Fedora release 8 (Werewolf) - Linux 2.6.23.15-137.fc8
loadavg: 1.06 1.23 1.25




More information about the devel mailing list