Re: Subproperty valiidity

Edward Diener via Boost-build <[email protected]> Sat, 27 Jul 2019 16:13:44 -0400
Newsgroups gmane.comp.lib.boost.build
Message-ID <[email protected]>
On 7/27/2019 10:05 AM, Steven Watanabe via Boost-build wrote:
> AMDG
> 
> On 7/27/19 7:18 AM, Edward Diener via Boost-build wrote:
>> In the Boost Build manual it states in section 5.8.2:
>>
>> "Subproperty validity may be restricted so that certain values are valid
>> only in the presence of certain other subproperties. For example, it is
>> possible to specify that the <gcc-target>mingw property is only valid in
>> the presence of <gcc-version>2.95.2."
>>
>> However it does not explain how to specify, or enforce, such subproperty
>> validity. How can this be done in Boost Build ?
>>
>> As a practical example if I have:
>>
>> feature.subfeature toolset gcc : std : c03 c11 c14 c17 : optional
>> composite propagated ;
>>
> 
> If it works, which I'm somewhat doubtful about, as I was
> unaware this this was possible, the syntax would be:
> 
> feature.subfeature toolset gcc-8.3 : ... ;

I can do:

feature.subfeature toolset gcc-8.3 : ... ;

feature.compose <toolset-gcc-8.3:std>c03 : <cxxflags>-std=c++03 ;
feature.compose <toolset-gcc-8.3:std>c11 : <cxxflags>-std=c++11 ;
feature.compose <toolset-gcc-8.3:std>c14 : <cxxflags>-std=c++14 ;
feature.compose <toolset-gcc-8.3:std>c17 : <cxxflags>-std=c++1z ;

and Boost Build does not complain of any error, but when I now invoke:

b2 toolset=gcc-8.3-c17 ...

the gcc.init rule eventually gets called with 'version' equal to 
'8.3-c17' and all other values as empty, even though there is no toolset 
definition which says:

using gcc : 8.3-c17 : etc ;

Of course this happens after the gcc-init rule is called for valid gcc 
toolsets, but still handling an imaginary toolset is not what any init 
rule should have to do.

BTW your debugger is superb ! Can I suggest, while I have your 
attention, a 'break' command which just lists the breakpoints which have 
been set ?

> 
>> feature.compose <toolset-gcc:std>c03 : <cxxflags>-std=c++03 ;
>> feature.compose <toolset-gcc:std>c11 : <cxxflags>-std=c++11 ;
>> feature.compose <toolset-gcc:std>c14 : <cxxflags>-std=c++14 ;
>> feature.compose <toolset-gcc:std>c17 : <cxxflags>-std=c++1z ;
>>
>> I might want to allow:
>>
>> b2 toolset=gcc-8.3-c17
>>
>> but I might not want to allow:
>>
>> b2 toolset=gcc-4.8-c17
>>
>> Is there a way of enforcing this by some jam code in my user-configf.jam
>> file ?

_______________________________________________
Unsubscribe & other changes: https://lists.boost.org/mailman/listinfo.cgi/boost-build