On Sat, Aug 04, 2007 at 01:59:23AM +0200, Domenico Andreoli wrote: > Hi, > > Suppose two systems, a Fedora based on gcc 4.1 and a Debian based > on gcc 4.2, both sporting Boost 1.35.0 built with --layout=system, > for simplicity. > > Now Joe User writes his app on the Fedora system and links Boost.DateTime > using the familiar -lboost_date_time switch. He builds the app and > tries it on both his Fedora system and the friend's Debian one. What is > going to happen?
[I like answering rhetorical questions] If you mean he copies the BINARY from Fedora to Debian, I expect all hell to break loose. I expect that regardless of whether he uses boost or not: there's likely to be version skew in dozens of other libraries, e.g. libc. If you mean he copies the source and rebuilds, I expect things to work fine. Why wouldn't it? > BTW, the user is a free software developer and his app is going to be > ported also to other Microsoft, UNIX and popular embedded operating > systems, where Boost has been built mixing --layout=system and > --layout=versioned. Now he faces the problem of linking to the Boost > library of interest. How he is supposed to solve the problem? I don't really know. I vaguely thought that using JAM and Boost.Build would carry the day. Wouldn't it? > This is a new summary of the binary and source portability problems > that current build system is inflicting on the Boost libraries. > > My proposal is: > > 1) dump the --layout= thing, versioned/decorated sonames are always used > > 2) provide symlinks like the following, when appropriate: > > /usr/lib/libboost_date_time-gcc42-1_34_1.so -> > libboost_date_time-gcc42-1_34_1.so.1.34.1 > /usr/lib/libboost_date_time-gcc42-d-1_34_1.so -> > libboost_date_time-gcc42-d-1_34_1.so.1.34.1 > /usr/lib/libboost_date_time-gcc42-mt-1_34_1.so -> > libboost_date_time-gcc42-mt-1_34_1.so.1.34.1 > /usr/lib/libboost_date_time-gcc42-mt-d-1_34_1.so -> > libboost_date_time-gcc42-mt-d-1_34_1.so.1.34.1 > > 3) provide also these symlinks, if desired: > /usr/lib/libboost_date_time.so -> libboost_date_time-gcc42-1_34_1.so > /usr/lib/libboost_date_time-d.so -> libboost_date_time-gcc42-d-1_34_1.so > /usr/lib/libboost_date_time-mt.so -> libboost_date_time-gcc42-mt-1_34_1.so > /usr/lib/libboost_date_time-mt-d.so -> > libboost_date_time-gcc42-mt-d-1_34_1.so I'm with you so far. I believe this is what you implemented in the experimental 1.34.1 upload, right? I would go further and argue that --layout=system should do exactly what you propose and also use the full boost version in the SONAME of the libraries (which Debian has been doing all along but --layout=system does not do currently). Thoughts? -Steve
signature.asc
Description: Digital signature