What drives RPM Provides for shared libraries?

Matt McCutchen matt at mattmccutchen.net
Wed Dec 22 03:42:22 UTC 2010


On Tue, 2010-12-21 at 22:10 -0500, Tom Lane wrote:
> I'm fooling around with trying to update mysql from 5.1.x to 5.5.x.
> One of the things that's happened in that transition is that they've
> dropped the separate "libmysqlclient_r.so" library --- presumably
> everything in regular "libmysqlclient.so" is now thread-safe.
> Upstream's idea of maintaining ABI compatibility is to provide
> symlinks, libmysqlclient_r.so.16.0.0 -> libmysqlclient.so.16.0.0
> etc.  I find that that only sort of works --- RPM fails to generate
> the --provides entries that it used to.  So for example I have
> this with the old RPMs:
> 
> $ rpm -qp mysql-libs-5.1.52-1.fc13.x86_64.rpm --provides
> config(mysql-libs) = 5.1.52-1.fc13
> libmysqlclient.so.16()(64bit)  
> libmysqlclient.so.16(libmysqlclient_16)(64bit)  
> libmysqlclient_r.so.16()(64bit)  
> libmysqlclient_r.so.16(libmysqlclient_16)(64bit)  
> mysql-libs = 5.1.52-1.fc13
> mysql-libs(x86-64) = 5.1.52-1.fc13
> 
> but the closest I've been able to get with the new ones is
> 
> $ rpm -qp mysql-libs-5.5.8-1.fc13.x86_64.rpm --provides
> config(mysql-libs) = 5.5.8-1.fc13
> libmysqlclient.so.16()(64bit)  
> libmysqlclient.so.16(libmysqlclient_16)(64bit)  
> mysql-libs = 5.5.8-1.fc13
> mysql-libs(x86-64) = 5.5.8-1.fc13
> 
> I thought for a bit that RPM was ignoring symlinks for this purpose, but
> even copying instead of symlinking the library didn't get me a second
> set of provides items.  What drives those decisions?

I guess RPM is using the SONAME embedded in the library, which you can
see with "readelf -d".  Assuming that ld.so is happy to satisfy a NEEDED
entry for libmysqlclient_r.so.16 by opening a file with that name and
getting a library with SONAME libmysqlclient.so.16, it seems that rpm
should add the Provides based on the file name.

-- 
Matt



More information about the devel mailing list