Table of Contents

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

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

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@ Ports/132891
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

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.