Boost logo

Boost-Build :

Subject: Re: [Boost-build] Boost Build configure checks improvement. [config/predef]
From: Tom Kent (lists_at_[hidden])
Date: 2017-06-13 02:20:21


On Mon, Jun 12, 2017 at 9:29 AM, Rene Rivera via Boost-build <
boost-build_at_[hidden]> wrote:

> There's been a long standing "issue" with how the b2 configure checks
> work. Or rather how some times they don't work. In particular the issue is
> that the set of properties considered relevant for the configuration checks
> was fixed. As of last night that is now resolved <
> https://github.com/boostorg/build/commit/450c25c3b52f5ddcb3
> 23140f8423adf3b85b6b1a>.
>
> As the commit mentions the set is no longer fixed and is configurable by
> users. The changes now mean that:
>
> 1. Any subfeatures of the top level relevant feature set are also
> considered as part of the set. This means that one can a configuration like
> below to support multiple invocations of the same toolset with different
> options. In particular the STD options:
>
> === user-config.jam ===
> import feature ;
> using clang ;
> feature.subfeature toolset clang : std : cxx03 cxx11 cxx14 cxx17 :
> optional composite propagated ;
> feature.compose <toolset-clang:std>cxx03 : <cxxflags>-std=c++03 ;
> feature.compose <toolset-clang:std>cxx11 : <cxxflags>-std=c++11 ;
> feature.compose <toolset-clang:std>cxx14 : <cxxflags>-std=c++14 ;
> ===
>
> And one can then invoke "b2 toolset=clang-cxx14,clang-cxx11" and get
> non-colliding configuration checks.
>

This sounds very cool. I'd like to start using it, but hoping for some more
details. Specifically how does it work with version numbers? With the above
user-config.jam could I invoke "b2 toolset=clang-3.8-cxx11,clang-3.9-cxx14"?
Does this work on the msvc side as well...the version number detection
seems a bit more rough there?

Or do I need to do something version specific for each version in my
user-config.jam?
=== user-config.jam ===
import feature ;
using clang : 3.8 ;
feature.subfeature toolset clang-3.8 : std : cxx03 cxx11 : optional
composite propagated ;
feature.compose <toolset-clang-3.8:std>cxx03 : <cxxflags>-std=c++03 ;
feature.compose <toolset-clang-3.8:std>cxx11 : <cxxflags>-std=c++11 ;

using clang : 3.9 ;
feature.subfeature toolset clang-3.9 : std : cxx14 cxx1z : optional
composite propagated ;
feature.compose <toolset-clang-3.9:std>cxx14 : <cxxflags>-std=c++14 ;
feature.compose <toolset-clang-3.9:std>cxx1z : <cxxflags>-std=c++1z ;
===

>
> 2. The set of relevant features is now soft wired as the set of
> subfeatures of the "<composite>" feature. Which means ones can add to the
> default set <https://github.com/boostorg/build/blob/develop/src/build/co
> nfigure.jam#L26>. For example to add threading choice to the relevant
> features:
>
> === user-config.jam ===
> import feature ;
> import configure ;
> feature.compose <configure> : <threading> ;
> ===
>

I'm not entirely clear on what this means, could you give an example of
what this implies?

Thanks,
Tom



Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk