devel/boost: what's proper shared library version?

Dmitry Marakasov amdmi3 at amdmi3.ru
Wed May 20 16:17:37 UTC 2009


* Alexander Churanov (alexanderchuranov at gmail.com) wrote:

> Could somebody officially and explicitly tell me, how to assign shared
> library versions for new boost ports?
> 
> I see following possibilities:
> 
> 1) Use boost release version as shared library version.
>     This is safe and recommended by boost.

Not official, but couple of thoughts, unfortunately I forgot to anser
your previous message regarding .so versioning.

As I understand, we now assume ABI breakage on every boost update,
correct? In this case .so versioning scheme doesn't really matter, the
important thing is to ensure SONAME recorded in .so files has version
component.

Currently, 
% objdump -x libboost_regex.so | grep SONAME
  SONAME      libboost_regex.so

Thus (example boost-dependent port qtiplot):
% ldd /usr/local/bin/qtiplot | grep boost
        libboost_date_time.so => /usr/local/lib/libboost_date_time.so (0x287be000)

If boost is updated, that'll point to NEW libboost_date_time.so, which
may have ABI broken. However, if SONAME contains version, it will be
like that:

% objdump -x libboost_regex.so | grep SONAME
  SONAME      libboost_regex.so.1.39

% ldd /usr/local/bin/qtiplot | grep boost
        libboost_date_time.so.1.39 => /usr/local/lib/libboost_date_time.so.1.39 (0x287be000)

and when boost is upgraded, this will become

% ldd /usr/local/bin/qtiplot | grep boost
        libboost_date_time.so.1.39 => /usr/local/lib/compat/pkg/libboost_date_time.so.1.39 (0x287be000)

Thus, we ensure that the application does not pick up boost libraries of
different version than it was build with.

Aside for that, versioning scheme doesn't really matter.

As I understand, that's .so.1.39 vs .so.139 vs .so.5

The difference is that with former you can't specify version in
LIB_DEPENDS, i.e. LIB_DEPENDS=boost_date_time.139:${PORTSDIR}/devel/boost,
which will make users update boost before building any dependent
ports and theoretically catch cases where some port requires new boost
version and breaks with the old one. However, that'll be catched in a
most ugly way where new boost is built and this fails on installation
because old boost is still installed. Also one will need to update
version in boost-dependent ports along with portrevision bump.

Currently, there are 30 vs 53 ports with unversioned/versioned depend.

-- 
Dmitry Marakasov   .   55B5 0596 FF1E 8D84 5F56  9510 D35A 80DD F9D2 F77D
amdmi3 at amdmi3.ru  ..:  jabber: amdmi3 at jabber.ru    http://www.amdmi3.ru


More information about the freebsd-ports mailing list