Boost logo

Boost :

Subject: Re: [boost] [predef] Using predef-check on 'develop' problem
From: Edward Diener (eldiener_at_[hidden])
Date: 2015-06-05 22:42:19


On 6/1/2015 5:43 PM, Rene Rivera wrote:
> On Mon, Jun 1, 2015 at 4:35 PM, Edward Diener <eldiener_at_[hidden]>
> wrote:
>
>> On 6/1/2015 2:41 PM, Rene Rivera wrote:
>>
>>> On Mon, May 25, 2015 at 8:34 PM, Rene Rivera <grafikrobot_at_[hidden]>
>>> wrote:
>>>
>>>
>>>>
>>>> On Mon, May 25, 2015 at 8:25 PM, Edward Diener <eldiener_at_[hidden]>
>>>> wrote:
>>>>
>>>>
>>>>>
>>>>> If you look at the predef info_as_cpp tests, such as at
>>>>
>>>>>
>>>>>
>>>>> http://www.boost.org/development/tests/develop/developer/output/NA-QNX650-SP1-ARM-boost-bin-v2-libs-predef-test-info_as_cpp-test-qcc-4-4-2_arm-debug-debug-symbols-off.html
>>>>> ,
>>>>> you will see that no compiler is being detected.
>>>>>
>>>>>
>>>> Ah.. I see: BOOST_COMP_GNUC = 40400002 (4,4,2) | Gnu GCC C/C++
>>>>
>>>> Maybe you meant this link: <
>>>>
>>>> http://www.boost.org/development/tests/develop/developer/output/oracle-intel-S2-stlport4-boost-bin-v2-libs-predef-test-info_as_cpp-test-sun-stlport4-release-threading-multi.html
>>>>
>>>>>
>>>>> ??
>>>>
>>>>
>>>> Yet if you look at my VMD test, called test_variadic_macro, at
>>>>>
>>>>> http://www.boost.org/development/tests/develop/developer/output/oracle-intel-S2-stlport4-boost-bin-v2-libs-vmd-test-test_variadic_macro-test-sun-stlport4-release-threading-multi.html
>>>>> ,
>>>>> you can see that I am picking up that '__SUNPRO_CC' is defined.
>>>>>
>>>>> Yet if '__SUNPRO_CC' is defined then predef should be picking that up
>>>>> and
>>>>> setting BOOST_COMP_SUNPRO to the compiler being detected.
>>>>>
>>>>>
>>>> Right.
>>>>
>>>> Along with that problem is that in my VMD tests, aside from the
>>>>
>>>>> test_variadic_macro test, I have the predef-check as specified in my OP
>>>>> above. Yet this is being triggered for the SunOS operating system tests
>>>>> when clearly the compiler is not BOOST_COMP_GNUC, and '-std=c++0x' is
>>>>> erroneously being added for the VMD tests which causes them all to fail
>>>>> because the tests are being run with '-compat=5 -library=stlport4'. So
>>>>> here
>>>>> again, with SunOS and Oracle ( aka Sun ) C++, predef does not appear to
>>>>> be
>>>>> working correctly.
>>>>>
>>>>
>>>>
>>>> Well, let me fix the first problem. Perhaps it's a side effect of the Sun
>>>> compiler not being detected.
>>>>
>>>>
>>> OK, this seems to be fixed now. Took a while for the testers to get to
>>> testing it. Can you verify that the Predef check issues are also taken
>>> care
>>> of?
>>>
>>
>> Your June 1 predef changes have not been picked up by the latest VMD tests
>> for Android and Oracle C++ yet. Should previous changes have fixed the
>> problem I was seeing in those tests ? If not I still have to wait until the
>> Android and Oracle C++ tests with your June 1 changes cycle. The VMD tests
>> on QNX are now working correctly even though your June 1 changes were not
>> picked up there yet.
>
>
> It wasn't the June 1st changes that I refer to that makes this <
> http://www.boost.org/development/tests/develop/developer/output/oracle-intel-S2-stlport4-boost-bin-v2-libs-predef-test-info_as_cpp-test-sun-stlport4-release-threading-multi.html>
> work correctly for SUNPRO. It was actually this change <
> https://github.com/boostorg/predef/commit/58c23226b1ebed2579d0f3296faaff958f5c424d

I think I know what is wrong in the predef-check functionality. In my
VMD jamfile the use of predef-check, for any given compile or run rule,
looks like:

[ predef-check "BOOST_COMP_GNUC >= 4.3" "BOOST_OS_QNX == 0" : :
<cxxflags>-std=c++0x ]

What I am seeing is that except on QNX, where "BOOST_OS_QNX != 0", the
'-std=c++0x' is always being added as a C++ compiler flag to the command
line.

This initially suggests to me that you are treating more than one quoted
predef definition as an OR gate rather than an AND gate. But note that
on QNX, where where "BOOST_OS_QNX != 0" and "BOOST_COMP_GNUC >= 4.3" is
true, the '-std=c++0x' is not being added. So your logic seems to be
that as you go through multiple predef definitions once you hit a 'true'
condition you choose the 'true' path as long as no 'false' conditions
follow it, else you choose the 'false' path.

Please see if you can fix this given this clue about how predef-check is
working for the VMD regression tests on various platforms/compilers.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk