[Boost-bugs] [Boost C++ Libraries] #10942: Boost.Thread fails to build on Cygwin

Subject: [Boost-bugs] [Boost C++ Libraries] #10942: Boost.Thread fails to build on Cygwin
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2015-01-18 19:11:18

#10942: Boost.Thread fails to build on Cygwin
 Reporter: pdimov | Owner: anthonyw
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: thread
  Version: Boost 1.57.0 | Severity: Problem
 Keywords: |
 By default on Cygwin, the Boost.Thread headers choose the POSIX API. This
 decision is made in `boost/thread/detail/platform.hpp`:

 #if defined(BOOST_THREAD_POSIX)
 # if defined(BOOST_THREAD_WIN32)
 # elif defined(BOOST_HAS_PTHREADS)
 # else
 # error "Sorry, no boost threads are available for this platform."
 # endif

 In the Cygwin case, neither `BOOST_THREAD_POSIX` nor `BOOST_THREAD_WIN32`
 appear to be defined, but `BOOST_THREAD_CYGWIN`, so the logic above

 This is actually correct, in my opinion; Cygwin is a POSIX platform.

 However, the Jamfile by default chooses Win32 on Cygwin:

 local rule default_threadapi ( )
     local api = pthread ;
     if [ os.name ] = "NT" { api = win32 ; }
     return $(api) ;

 which later results in a bunch of errors when `win32/thread.cpp` is
 compiled against `pthread/thread_data.hpp` et al.

 So, either the default in `platform.hpp` should be changed to Win32 under
 Cygwin, or (better) the default `threadapi` in the Jamfile should be
 changed to `pthread` under Cygwin.

 Manually specifying `threadapi=pthread` is not a particularly good option,
 because Boost.Thread is a dependency of some tests, and when

 b2 toolset=gcc,gcc-cxx11,clang,clang-

 (for example) is invoked to test a library, `threadapi=pthread` is not

Ticket URL: <https://svn.boost.org/trac/boost/ticket/10942>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:17 UTC