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.

AlexanderChuranov/BoostPortingProject/1.34-to-1.37 (last edited 2021-03-28T08:48:46+0000 by KubilayKocak)