This page describes details of updating boost libraries from version 1.34 to 1.37.
This page is mostly of historical interest, although it also offers insight into the QA process that goes into update the ports tree.
On Apr 7, 2009 port "devel/boost" was successfully updated to 1.37. Thanks to all FreeBSD folks who tested and patched applications. Without their efforts it was not possible for me (the maintainer) to handle even a part of this huge work.
Issues
- devel/boost was outdated
- there was big number (~50) of ports depending on outdated devel/boost
Suggested Schedule
Deadline |
Description |
April, 1 2009 |
All actions necessary to be performed by maintainers of ports depending on boost are identified. |
May, 1 2009 |
If issues with ports depending on boost-1.34 are not resolved, create a separate port for folks who really need recent stable boost. Use boost-1.39 for a new port. |
Progress with updating
The patch for updating devel/boost from 1.34 to 1.37 is ready.
The issue for updating to 1.37 is filed (ports/129226).
- Alexander Churanov asked for taking maintainership of devel/boost.
- All ports that directly depend on boost are identified.
The ports will break if devel/boost is updated to 1.37 are found. Here's the list (please keep it up to date):
Port |
Maintainer |
Comments |
Status |
games/allacrost |
amdmi3@ |
depends on devel/luabind which fails with new boost |
Fixed |
graphics/aqsis |
gahr@ |
upstream has 1.4.2 |
Fixed by Ports/132833 |
net-p2p/deluge05 |
ports@ |
maybe remove? |
Fixed by Ports/132916 |
net-p2p/deluge |
ports@ |
upstream has 1.1.2 |
Ports/132900 (need to be re-committed after updating to 1.37) |
x11-toolkits/gigi |
ports@ |
|
Ports/133008 (to be committed with boost update) |
audio/gx2osd |
alexbl@ |
|
|
print/lyx |
mi at aldan dot algebra dot com |
Upstream has 1.6.2 |
Ports/133044 (to be committed with boost update) |
print/lyx15 |
ports@ |
Upstream has 1.6.2 |
Ports/133040 (to be committed with boost update) |
games/mkhexgrid |
ports@ |
|
Fixed |
editors/openoffice.org-2 |
openoffice@ |
note: all openoffice.org series are failed |
Bug is in boost itself, patch (obtained from boost svn head) needs to be added to boost/files; fix confirmed |
editors/pdfedit |
alepulver@ |
upstream has 0.4.2 |
Fixed by Ports/132186 |
dns/powerdns-recursor |
sten at blinkenlights dot nl |
|
Fixed by Ports/132831 |
net-p2p/rblibtorrent |
johan at stromnet dot se |
upstream has 0.14.1 |
Fixed by Ports/132915 |
net-p2p/rblibtorrent-devel |
ports@ |
|
Fixed by Ports/132917 Broken again after update Ports/133041 (to be committed with boost update) |
sysutils/fusefs-encfs |
leeym@ |
upstream has 1.5.0 |
Ports/132901 (to be committed with boost update) |
devel/luabind |
amdmi3@ |
upstream has 0.8, port update is ready, but games/allacrost segfaults with it |
Fixed |
audio/py-tagpy |
nivit@ |
Can be fixed with USE_GCC=4.3+ |
|
multimedia/miro |
ports@ |
Can be fixed with USE_GCC=4.3+ |
|
Decisions
- Remove detailed reporting on SIGBUS, SIGCHLD, SIGSEGV and SIGILL in Boost.Test. Since detailed information is not available on FreeBSD 6x. For example, only the fact SIGILL was caught will be reported, without any details.
- Remove support for long double from Boost.Math, because it only presents in FreeBSD-CURRENT.
Common port failures
1. Most common and easiest one
somefile.cc:1234: error: reference to 'exception' is ambiguous /usr/include/c++/4.2/exception:57: error: candidates are: class std::exception /usr/local/include/boost/exception/exception.hpp:177: error: class boost::exception
Resolution (std::exception is most likely to be used of those two):
- catch(exception &e) + catch(std::exception &e)
2. Actually, only related to rblibtorrent, but affects at least 3 ports (net-p2p/rblibtorrent, net-p2p/rblibtorrent-devel, net-p2p/deluge05 (which uses bundled rblibtorrent; net-p2p/deluge does too, but it already has this fix))
somefile.cc:1234: error: 'condition' in namespace 'boost' does not name a type
In newer boost, `condition' is not a class, but a typedef alias to condition_variable_any. It resides in the same include as before (boost/thread/condition.hpp), but it's no more included from other boost includes, so it's to be included explicitly:
+#include <boost/thread/condition.hpp>
3. An example of tougher one. The cause is change in boost class layout.
somefile.cc:1234: error: 'lookup_errno' is not a member of 'fs' somefile.cc:1234: error: 'filesystem_path_error' was not declared in this scope
The fix may be available in newer release of software in question or in it's VCS. The changes in boost are not (at least for what I've seen up to now) severe enough to require significant changes in program logic, but you'll have to browse through boost includes to know what has been changed to what. For example, this error is from print/lyx05 (fs is a namespace-alias to boost::filesystem here). Also http://codesearch.google.com is really helpful for finding related code snippets.
boost::throw_exception( - filesystem_path_error( + basic_filesystem_error<path>( "boost::filesystem::copy_file", source, target, - fs::lookup_errno(errno))); + boost::system::error_code(errno, boost::system::get_system_category())));
4.
In file included from /usr/local/include/boost/function/detail/maybe_include.hpp:18, from /usr/local/include/boost/function/detail/function_iterate.hpp:14, from /usr/local/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:52, from /usr/local/include/boost/function.hpp:64, ... /usr/local/include/boost/function/function_template.hpp:965: error: declaration of `class R' /usr/local/include/boost/function/function_template.hpp:654: error: shadows template parm `class R' ... somefile.cc:1234: error: expected `}' at end of input
That's the bug in boost/function/function_template.hpp, affcted boost versions <= 1.38.0. The patch (obtained from boost SVN):
--- boost/function/function_template.hpp.orig 2008-10-16 17:21:50.000000000 +0400 +++ boost/function/function_template.hpp 2009-03-25 04:12:15.000000000 +0300 @@ -950,10 +950,10 @@ f.vtable->manager(f.functor, this->functor, boost::detail::function::move_functor_tag); f.vtable = 0; -#if !defined(BOOST_NO_EXCEPTIONS) } else { clear(); } +#if !defined(BOOST_NO_EXCEPTIONS) } catch (...) { vtable = 0; throw;
5. Just as a note: many programs have boost (or some part of it) bundled - may just use it if the fix seem complex enough.