David Abrahams said:
> "William E. Kempf" <[EMAIL PROTECTED]> writes:
>
>> John Maddock said:
>>> I think I may be the one who broke a lot of the OpenBSD regression
>>> tests by defining BOOST_HAS_PTHREADS in the OpenBSD platform
>>> configuration. IMO this is correct (OpenBSD supports pthreads
>>> right?), but it causes a problem: currently the gcc config
>>> unconditionally defines
>>> BOOST_HAS_THREADS, basically because we didn't know what else to do
>>> (gcc on *BSD doesn't define anything when you build with -pthread -
>>> basically defining -pthread affects only the linker, so we can't
>>> detect when to turn on threading support). This in turn is breaking a
>>> lot of libraries: mainly those that depend upon smart pointers, which
>>> do internal thread synchronisation, and therefore need the -pthread
>>> option in order to link correctly.
>>>
>>> What should we do about this?
>>>
>>> Option 1:
>>> ~~~~~~
>>>
>>> would putting:
>>>
>>>         flags gcc CFLAGS <threading>single : -DBOOST_DISABLE_THREADS
>>> ;
>>>
>>> fix the problem?
>>>
>>> Option 2:
>>> ~~~~~~
>>>
>>> Add
>>>
>>>         flags gcc CFLAGS <threading>multi : -pthread -D_REENTRANT ;
>>>
>>> to the toolset, and stop defining BOOST_HAS_THREADS unconditionally
>>> for gcc. This one may have all sorts of unexpected side effects on
>>> other platforms though - even though philosophically it does seem the
>>> right thing to do.
>>>
>>> Option 3:
>>> ~~~~~~
>>>
>>> Make -pthread the default build option in the gcc toolset for *BSD
>>> platforms
>>>
>>> ~~~~~~~~~~~
>>
>> Seems to me like this should be reversed.  Have the config headers
>> unconditionally NOT define BOOST_HAS_THREADS, and have the Jam
>> toolsets define it when threading is requested.
>
> I don't love that idea because it ties a very boost-specific define into
> the core of Boost.Build, which is really supposed to be a general build
> system.  How will people deal with the next such define for some other
> library?

Sorry, sent prematurely.  The response above was meant to be about option
1, and I fully agree that it's not a good solution (and said so in the
text you deleted).

To finish my thoughts on the other two options...

Option 2 sounds like the right solution to me, though I'm not sure about
the purpose for _REENTRANT.  Is it expected that users will define this on
POSIX systems, or is this a define that was expected to be defined by the
implementation?

Option 3 would cause unecessary overhead, so doesn't sound like the right
solution.

William E. Kempf
[EMAIL PROTECTED]


_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to