Opened 14 months ago

Last modified 8 days ago

#50671 new update

boost: Update to 1.64.0

Reported by: eborisch (Eric A. Borisch) Owned by: ryandesign (Ryan Schmidt)
Priority: Normal Milestone:
Component: ports Version: 2.3.4
Keywords: haspatch Cc: michaelld (Michael Dickens), g.korovkin@…, wuyongwei@…, andreas@…, maehne (Torsten Maehne), akimd (Akim Demaille), l2dy (Zero King), mkuron (Michael Kuron)
Port: boost

Description

Portfile patch attached. Some of the patchfiles can go away, too.

Attachments (4)

boost.patch (1.4 KB) - added by eborisch (Eric A. Borisch) 14 months ago.
boost_1.60.0.diff (9.6 KB) - added by michaelld (Michael Dickens) 14 months ago.
boost_1.61.0.diff (16.6 KB) - added by wuyongwei@… 8 months ago.
boost_update_to_1.63.0.diff (21.7 KB) - added by michaelld (Michael Dickens) 4 months ago.

Download all attachments as: .zip

Change History (38)

Changed 14 months ago by eborisch (Eric A. Borisch)

comment:1 Changed 14 months ago by ryandesign (Ryan Schmidt)

  • Cc ryandesign@… removed
  • Owner changed from macports-tickets@… to ryandesign@…

Duplicate of #50572.

Changed 14 months ago by michaelld (Michael Dickens)

comment:2 Changed 14 months ago by michaelld (Michael Dickens)

I just attached a full diff for the Portfile and patch files between 1.59.0 and proposed 1.60.0.

All of my dependent ports will have to be rebuilt because the Boost ABI has been changed enough to be incompatible.

Other please review and test.

comment:3 Changed 14 months ago by mamoll (Mark Moll)

Ports that depend on Boost.Python may not compile. I tried ompl (a port I maintain) with Boost 1.60 and it definitely doesn't compile. See, e.g., https://bitbucket.org/ompl/ompl/issues/210/compilation-failure-with-boost-1600 and https://github.com/hhatto/pgmagick/issues/4

comment:4 Changed 14 months ago by mouse07410 (Mouse)

This should be reported to the Boost bug tracker, IMHO.

comment:5 Changed 14 months ago by michaelld (Michael Dickens)

Initial testing the GNU Radio ports shows compatibility with a rev-bump. I didn't test them all, but the all of the primary related ports and some of the dependent ports build just fine using Boost 1.60.0 out of the box. They all require a rev-bump rebuild due to updated boost ABI.

comment:6 Changed 10 months ago by g.korovkin@…

  • Cc g.korovkin@… added

Cc Me!

comment:7 Changed 8 months ago by wuyongwei@…

I can confirm that it basically works, but I have to rebuild mkvtoolnix to make it work again, probably due to a regex ABI change. Is there a away to trigger the rebuild of other ports?

comment:8 Changed 8 months ago by ryandesign (Ryan Schmidt)

A developer must manually identify all ports that use boost, manually increase their revisions, verify they all build and if necessary fix any bugs, and commit everything together. This involved process is why I haven't done it.

Changed 8 months ago by wuyongwei@…

comment:9 Changed 8 months ago by wuyongwei@…

  • Cc wuyongwei@… added

Cc Me!

comment:10 Changed 8 months ago by wuyongwei@…

The patch is updated (against ports SVN). It seems to work well for me, though I have to rebuild mkvtoolnix again, which is a pain. However, I am happy I have finally a working Boost 1.61.0 port on my local drive now. ;-)

comment:11 Changed 8 months ago by michaelld (Michael Dickens)

Thanks for posting the patch.

Ditto what Ryan wrote about not updating. Boost is used by a ton of ports. Finding and rev-bumping all of those will take a LOT of time. I just don't have that sort of time right now. I have a conference coming up in mid-September at which I should have time. So, if nobody has been able to address this ticket by then, I'll give it a go.

comment:12 Changed 8 months ago by wuyongwei@…

If the ABI change happens frequently and we do not have a versioning mechanism for the boost dylibs, does it make sense that we make all the dependent ports link with the static libs? It will be a big change, but will likely reduce future breakages.

comment:13 follow-up: Changed 8 months ago by ryandesign (Ryan Schmidt)

ABI changes happen with most new versions of boost. It's not really our responsibility to develop a versioning mechanism; it's up to the developers of boost to do that, and they do not appear to have any interest in doing so.

We do not want to link with static libraries, unless a particular build system makes it impossible to do otherwise.

Using static libraries would not solve the problem, it would just hide the problem until later. We don't want to do that either.

comment:14 in reply to: ↑ 13 ; follow-up: Changed 8 months ago by wuyongwei@…

Replying to ryandesign@…:

Using static libraries would not solve the problem, it would just hide the problem until later. We don't want to do that either.

There are two problems with new boost versions:

  1. A port may fail to compile with the new boost.
  2. A port may compile fine, but the binary compiled with the old boost version does not work with the new dylib.

Static linking does not solve the first problem, but it will solve the second. Probably we still need to test other ports when there is a new boost version, but I do not think we need to bump the version of all other dependent ports and make new releases then.

comment:15 in reply to: ↑ 14 Changed 8 months ago by larryv (Lawrence Velázquez)

No, using static libraries without immediate revbumping is not an option. The builds of such dependents would not be reproducible. A foo @1.2_3 built before a boost upgrade would not be the same as a foo @1.2_3 built immediately after, but we would not be able to distinguish them without technically invasive measures.

comment:16 Changed 7 months ago by andreas@…

  • Cc andreas@… added

Cc Me!

comment:17 Changed 7 months ago by maehne (Torsten Maehne)

  • Cc Torsten.Maehne@… added

Cc Me!

comment:18 Changed 7 months ago by michaelld (Michael Dickens)

  • Summary changed from boost: Update to 1.60.0 to boost: Update to 1.62.0

clearly I didn't have time at the conference. no idea when I will have time. boost has been updated to 1.62.

comment:19 follow-up: Changed 6 months ago by michaelld (Michael Dickens)

I just pushed the branch https://github.com/macports/macports-ports/tree/boost_update where work on this ticket can happen. I've updated both boost and the ports that I have installed that depend on boost ("port dependents boost"). I'm quite sure there are more ports that depend on boost than those I updated. I have had no issues thus far with the update; everything including boost build cleanly (or, at least as cleanly as the prior boost provided). Let's get updates to this branch in place, verified and tested, then we can merge the whole shebang at once into the master -- and, keep this branch around for future boost updates, since knowing which ports to rev-bump is part of the issue.

comment:20 in reply to: ↑ 19 Changed 6 months ago by larryv (Lawrence Velázquez)

Replying to michaelld:

and, keep this branch around for future boost updates, since knowing which ports to rev-bump is part of the issue.

There’s nothing wrong with using a topic branch for this, but I would rather you rebase it onto master when you’re done, delete it, and recreate it when the next boost update happens. We want the keep the master history as linear as possible (which means no merge commits) and don’t want to encourage long-lived branches like we had in the old repository.

Last edited 6 months ago by larryv (Lawrence Velázquez) (previous) (diff)

comment:21 Changed 6 months ago by michaelld (Michael Dickens)

Agreed. I'll keep a branch in my personal fork that holds the info we need to do updates, to make future boost updates faster & easier.

comment:22 Changed 6 months ago by akimd (Akim Demaille)

  • Cc akimd added

comment:23 Changed 6 months ago by akimd (Akim Demaille)

So what should end users, like me, do to get a recent Boost?

comment:24 Changed 4 months ago by michaelld (Michael Dickens)

Boost 1.63.0 has been released. I'll be updating this branch & testing with my boost ports shortly. I'll also attach a patch to this ticket for folks interested in trying out this new boost version.

comment:25 Changed 4 months ago by michaelld (Michael Dickens)

  • Summary changed from boost: Update to 1.62.0 to boost: Update to 1.63.0

comment:26 Changed 4 months ago by michaelld (Michael Dickens)

Update is in place in the same branch (https://github.com/macports/macports-ports/tree/boost_update), which is refreshed to the current MP GIT master.

I'll attach a patch as well, which folks can test using something like (assuming "~/Downloads/boost_update_to_1.63.0.diff" is where the patch is downloaded to):

cd $(port dir boost)
sudo chmod -R a+rw .
patch -p1 < ~/Downloads/boost_update_to_1.63.0.diff
sudo port selfupdate

and, then the new boost should be built and installed.

For my Boost using ports, this update works after rebuilding them; these libraries are not drop-in ABI replacements for either 1.59.0 or 1.62.0.

Please submit feedback on this ticket.

Last edited 4 months ago by michaelld (Michael Dickens) (previous) (diff)

Changed 4 months ago by michaelld (Michael Dickens)

comment:27 Changed 4 months ago by michaelld (Michael Dickens)

Here's the command I use (approximately) to update boost dependent ports:

sudo -s
for tf in ${port dependents boost | awk '{ print $1 }'}; do \
port -n upgrade --force ${tf} \
done

comment:28 Changed 4 months ago by akimd (Akim Demaille)

Thanks for this. But I'm quite puzzled by the number of local patches that you still have to apply. Upstream does not want to apply them all? I can see that some have been, or became useless, but not all.

comment:29 Changed 4 months ago by michaelld (Michael Dickens)

I know little about why Boost patches are in place. I can see from the Portfile comments that at last some portion of the patches were integrated into Boost a while back, but clearly not all of them. In my belief, if the patches can still be applied then they should continue to be used, that there's a reason they are there in the first place & are highly likely to continue to be needed.

That said, if folks want to do testing by commenting out any specific patch then I'd welcome feedback as to if/how that worked. I don't have time to do this just right now.

comment:30 Changed 8 weeks ago by l2dy (Zero King)

  • Cc l2dy added

comment:31 Changed 8 days ago by michaelld (Michael Dickens)

  • Summary changed from boost: Update to 1.63.0 to boost: Update to 1.64.0

comment:32 Changed 8 days ago by michaelld (Michael Dickens)

Boost 1.64.0 is out. In my initial testing, the only required changes from 1.63.0 are the version & checksums; there are a few patch tweaks to get them clean, but they do work.

comment:33 Changed 8 days ago by michaelld (Michael Dickens)

Minor / easy fix required to <boost/serialization/array.hpp>: add in

#include <boost/serialization/array_wrapper.hpp>

after

#include <array>

After that, my ports that use Boost are building thus far (at least with respect to boost issues). source-highlight and assimp built without this change.

comment:34 Changed 8 days ago by mkuron (Michael Kuron)

  • Cc mkuron added
Note: See TracTickets for help on using tickets.