Boost logo

Boost-Build :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2008-04-23 00:58:42


On Tuesday 22 April 2008 12:02:40 Steve M. Robbins wrote:
> On Tue, Apr 22, 2008 at 10:59:20AM +0400, Vladimir Prus wrote:
> > On Tuesday 22 April 2008 06:12:39 Steve M. Robbins wrote:
>
> > > No, it's not true in general. I was speaking in the context of Boost
> > > where -- because there is no ABI compatibility -- the SONAME has all
> > > three version components.
> >
> > Yes, so either we:
> >
> > 1. Drop version from the name, leave the version in suffix only and have SONAME
> > equal to file name, or
> > 2. Do as above, but decide and micro-versions are ABI compatible, and strip micro-
> > version from soname.
> >
> > Sounds right?
>
> Either option is fine if you think you will never need two versions of
> Boost simultaneously, which is Debian's practice. I had been arguing
> for option #1 for that reason.
>
> However, at the urging of my co-packager Domenico [1], I've changed my
> mind. I now believe that there is utility in having multiple versions
> of Boost co-installable. Mainly, this is because there is no ABI
> compatibility and not even API compatibility. The latter means source
> modifications each time Boost changes, which is quite painful for a
> distribution of Debian's size.
>
> If you want two versions co-installable, it is convenient to have the
> version number in the link library name. So the current convention
> of Boost is actually a good thing.
>
> [1] http://lists.debian.org/debian-devel/2008/04/msg00581.html

Hmm. Probably boost is indeed unique in that it breaks ABI at a whim ;-)

Is it technically possible to have two different versions of Boost package
install

        libfoo.so.1.35.0

and

        libfoo.so.1.36.0

and have some way to select either of those during compilation. Maybe, having

        libfoo-1.35.so

and

        libfoo-1.34.so

as symlinks? I'm basically looking into some way to still make upgrade
from 1.35.0 to 1.35.1 to not require rebuilding applications

> > > Can you build a single variant that is suitable for both
> > > single-threaded and multi-threaded applications? If so, why has Boost
> > > been generating foo.a and foo-mt.a all these years? Ditto for the
> > > -d variants.
> >
> > The -d, I think, is simple. They are generated just in case you need to debug
> > boost. Not that users are know to routinely do that. I don't think adding debug
> > options changed ABI. If it does, it's a bug because it means you cannot replace
> > release library with debug should you need to find a bug, which makes debug
> > library half useless.
>
> Similarly, adding "-d" makes the debug library half useless as you have to
> re-link the application to debug it. (Or play tricks with symlinks and
> LD_LIBRARY_PATH)

Yes, that's right.

>
> > ST/MT variants have the potential to change ABI, and I think some libraries in
> > Debian have separate -mt package. I think in this age, and given that shared_ptr
> > has non-locking implementation for popular processors, Boost should be always
> > built in MT mode, and clients be required to build with -pthread.
>
> OK. As soon as Boost stops providing two variants based on threading,
> we'll stop building them for Debian. ;-)

Boost builds a single variant by default right now. It's Debian that forces
several variants to be created ;-)

- Volodya


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk