config.hpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  1. // Copyright (C) 2001-2003
  2. // William E. Kempf
  3. // Copyright (C) 2011-2013 Vicente J. Botet Escriba
  4. //
  5. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  6. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. #ifndef BOOST_THREAD_CONFIG_WEK01032003_HPP
  8. #define BOOST_THREAD_CONFIG_WEK01032003_HPP
  9. #include <boost/config.hpp>
  10. #include <boost/detail/workaround.hpp>
  11. #include <boost/thread/detail/platform.hpp>
  12. //#define BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
  13. // ATTRIBUTE_MAY_ALIAS
  14. //#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
  15. #if !defined(BOOST_NO_MAY_ALIAS)
  16. // GCC since 3.3 and some other compilers have may_alias attribute that helps
  17. // to alleviate optimizer issues with regard to violation of the strict aliasing rules.
  18. #define BOOST_THREAD_DETAIL_USE_ATTRIBUTE_MAY_ALIAS
  19. #endif
  20. #if defined(BOOST_MAY_ALIAS)
  21. #define BOOST_THREAD_ATTRIBUTE_MAY_ALIAS BOOST_MAY_ALIAS
  22. #else
  23. #define BOOST_THREAD_ATTRIBUTE_MAY_ALIAS
  24. #endif
  25. #if defined(BOOST_THREAD_CHRONO_WINDOWS_API)
  26. # warning Boost.Thread will use the Windows API for time
  27. #elif defined(BOOST_THREAD_CHRONO_MAC_API)
  28. # warning Boost.Thread will use the Mac API for time
  29. #elif defined(BOOST_THREAD_CHRONO_POSIX_API)
  30. # warning Boost.Thread will use the POSIX API for time
  31. #endif
  32. # if defined( BOOST_THREAD_CHRONO_WINDOWS_API ) && defined( BOOST_THREAD_CHRONO_POSIX_API )
  33. # error both BOOST_THREAD_CHRONO_WINDOWS_API and BOOST_THREAD_CHRONO_POSIX_API are defined
  34. # elif defined( BOOST_THREAD_CHRONO_WINDOWS_API ) && defined( BOOST_THREAD_CHRONO_MAC_API )
  35. # error both BOOST_THREAD_CHRONO_WINDOWS_API and BOOST_THREAD_CHRONO_MAC_API are defined
  36. # elif defined( BOOST_THREAD_CHRONO_MAC_API ) && defined( BOOST_THREAD_CHRONO_POSIX_API )
  37. # error both BOOST_THREAD_CHRONO_MAC_API and BOOST_THREAD_CHRONO_POSIX_API are defined
  38. # elif !defined( BOOST_THREAD_CHRONO_WINDOWS_API ) && !defined( BOOST_THREAD_CHRONO_MAC_API ) && !defined( BOOST_THREAD_CHRONO_POSIX_API )
  39. # if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32))
  40. # define BOOST_THREAD_CHRONO_WINDOWS_API
  41. # elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
  42. # define BOOST_THREAD_CHRONO_MAC_API
  43. # else
  44. # define BOOST_THREAD_CHRONO_POSIX_API
  45. # endif
  46. # endif
  47. #if !defined(BOOST_THREAD_POLL_INTERVAL_MILLISECONDS)
  48. #define BOOST_THREAD_POLL_INTERVAL_MILLISECONDS 100
  49. #endif
  50. #if defined BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED
  51. #define BOOST_THREAD_ASSERT_PRECONDITION(EXPR, EX) \
  52. if (EXPR) {} else boost::throw_exception(EX)
  53. #define BOOST_THREAD_VERIFY_PRECONDITION(EXPR, EX) \
  54. if (EXPR) {} else boost::throw_exception(EX)
  55. #define BOOST_THREAD_THROW_ELSE_RETURN(EX, RET) \
  56. boost::throw_exception(EX)
  57. #else
  58. #define BOOST_THREAD_ASSERT_PRECONDITION(EXPR, EX)
  59. #define BOOST_THREAD_VERIFY_PRECONDITION(EXPR, EX) \
  60. (void)(EXPR)
  61. #define BOOST_THREAD_THROW_ELSE_RETURN(EX, RET) \
  62. return (RET)
  63. #endif
  64. // This compiler doesn't support Boost.Chrono
  65. #if defined __IBMCPP__ && (__IBMCPP__ < 1100) \
  66. && ! defined BOOST_THREAD_DONT_USE_CHRONO
  67. #define BOOST_THREAD_DONT_USE_CHRONO
  68. #if ! defined BOOST_THREAD_USES_DATETIME
  69. #define BOOST_THREAD_USES_DATETIME
  70. #endif
  71. #endif
  72. // This compiler doesn't support Boost.Move
  73. #if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) \
  74. && ! defined BOOST_THREAD_DONT_USE_MOVE
  75. #define BOOST_THREAD_DONT_USE_MOVE
  76. #endif
  77. // This compiler doesn't support Boost.Container Allocators files
  78. #if defined __SUNPRO_CC \
  79. && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
  80. #define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
  81. #endif
  82. #if defined _WIN32_WCE && _WIN32_WCE==0x501 \
  83. && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
  84. #define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
  85. #endif
  86. #if defined BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX || defined BOOST_NO_CXX11_HDR_INITIALIZER_LIST
  87. #define BOOST_THREAD_NO_CXX11_HDR_INITIALIZER_LIST
  88. #define BOOST_THREAD_NO_MAKE_LOCK_GUARD
  89. #define BOOST_THREAD_NO_MAKE_STRICT_LOCK
  90. #define BOOST_THREAD_NO_MAKE_NESTED_STRICT_LOCK
  91. #endif
  92. #if defined(BOOST_NO_CXX11_HDR_TUPLE) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
  93. #define BOOST_THREAD_NO_MAKE_UNIQUE_LOCKS
  94. #define BOOST_THREAD_NO_SYNCHRONIZE
  95. #elif defined _MSC_VER && _MSC_VER <= 1600
  96. // C++ features supported by VC++ 10 (aka 2010)
  97. #define BOOST_THREAD_NO_MAKE_UNIQUE_LOCKS
  98. #define BOOST_THREAD_NO_SYNCHRONIZE
  99. #endif
  100. /// BASIC_THREAD_ID
  101. #if ! defined BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID \
  102. && ! defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
  103. #define BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
  104. #endif
  105. /// RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
  106. //#if defined BOOST_NO_CXX11_RVALUE_REFERENCES || defined BOOST_MSVC
  107. #define BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNCTION_PTR
  108. //#endif
  109. // Default version
  110. #if !defined BOOST_THREAD_VERSION
  111. #define BOOST_THREAD_VERSION 2
  112. #else
  113. #if BOOST_THREAD_VERSION!=2 && BOOST_THREAD_VERSION!=3 && BOOST_THREAD_VERSION!=4 && BOOST_THREAD_VERSION!=5
  114. #error "BOOST_THREAD_VERSION must be 2, 3, 4 or 5"
  115. #endif
  116. #endif
  117. // CHRONO
  118. // Uses Boost.Chrono by default if not stated the opposite defining BOOST_THREAD_DONT_USE_CHRONO
  119. #if ! defined BOOST_THREAD_DONT_USE_CHRONO \
  120. && ! defined BOOST_THREAD_USES_CHRONO
  121. #define BOOST_THREAD_USES_CHRONO
  122. #endif
  123. #if ! defined BOOST_THREAD_DONT_USE_ATOMIC \
  124. && ! defined BOOST_THREAD_USES_ATOMIC
  125. #define BOOST_THREAD_USES_ATOMIC
  126. //#define BOOST_THREAD_DONT_USE_ATOMIC
  127. #endif
  128. #if defined BOOST_THREAD_USES_ATOMIC
  129. // Andrey Semashev
  130. #define BOOST_THREAD_ONCE_ATOMIC
  131. #else
  132. //#elif ! defined BOOST_NO_CXX11_THREAD_LOCAL && ! defined BOOST_NO_THREAD_LOCAL && ! defined BOOST_THREAD_NO_UINT32_PSEUDO_ATOMIC
  133. // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2444.html#Appendix
  134. #define BOOST_THREAD_ONCE_FAST_EPOCH
  135. #endif
  136. #if BOOST_THREAD_VERSION==2
  137. // PROVIDE_PROMISE_LAZY
  138. #if ! defined BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY \
  139. && ! defined BOOST_THREAD_PROVIDES_PROMISE_LAZY
  140. #define BOOST_THREAD_PROVIDES_PROMISE_LAZY
  141. #endif
  142. // PROVIDE_THREAD_EQ
  143. #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_EQ \
  144. && ! defined BOOST_THREAD_PROVIDES_THREAD_EQ
  145. #define BOOST_THREAD_PROVIDES_THREAD_EQ
  146. #endif
  147. #endif
  148. #if BOOST_THREAD_VERSION>=3
  149. // ONCE_CXX11
  150. // fixme BOOST_THREAD_PROVIDES_ONCE_CXX11 doesn't works when thread.cpp is compiled BOOST_THREAD_VERSION 3
  151. #if ! defined BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11 \
  152. && ! defined BOOST_THREAD_PROVIDES_ONCE_CXX11
  153. #define BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11
  154. #endif
  155. // THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
  156. #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE \
  157. && ! defined BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
  158. #define BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
  159. #endif
  160. // THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
  161. #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE \
  162. && ! defined BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
  163. #define BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
  164. #endif
  165. // PROVIDE_FUTURE
  166. #if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE \
  167. && ! defined BOOST_THREAD_PROVIDES_FUTURE
  168. #define BOOST_THREAD_PROVIDES_FUTURE
  169. #endif
  170. // FUTURE_CTOR_ALLOCATORS
  171. #if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS \
  172. && ! defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
  173. #define BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
  174. #endif
  175. // SHARED_MUTEX_UPWARDS_CONVERSIONS
  176. #if ! defined BOOST_THREAD_DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSIONS \
  177. && ! defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS
  178. #define BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS
  179. #endif
  180. // PROVIDE_EXPLICIT_LOCK_CONVERSION
  181. #if ! defined BOOST_THREAD_DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION \
  182. && ! defined BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION
  183. #define BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION
  184. #endif
  185. // GENERIC_SHARED_MUTEX_ON_WIN
  186. #if ! defined BOOST_THREAD_DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN \
  187. && ! defined BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
  188. #define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
  189. #endif
  190. // USE_MOVE
  191. #if ! defined BOOST_THREAD_DONT_USE_MOVE \
  192. && ! defined BOOST_THREAD_USES_MOVE
  193. #define BOOST_THREAD_USES_MOVE
  194. #endif
  195. #endif
  196. // deprecated since version 4
  197. #if BOOST_THREAD_VERSION < 4
  198. // NESTED_LOCKS
  199. #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS \
  200. && ! defined BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS
  201. #define BOOST_THREAD_PROVIDES_NESTED_LOCKS
  202. #endif
  203. // CONDITION
  204. #if ! defined BOOST_THREAD_PROVIDES_CONDITION \
  205. && ! defined BOOST_THREAD_DONT_PROVIDE_CONDITION
  206. #define BOOST_THREAD_PROVIDES_CONDITION
  207. #endif
  208. // USE_DATETIME
  209. #if ! defined BOOST_THREAD_DONT_USE_DATETIME \
  210. && ! defined BOOST_THREAD_USES_DATETIME
  211. #define BOOST_THREAD_USES_DATETIME
  212. #endif
  213. #endif
  214. #if BOOST_THREAD_VERSION>=4
  215. // SIGNATURE_PACKAGED_TASK
  216. #if ! defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK \
  217. && ! defined BOOST_THREAD_DONT_PROVIDE_SIGNATURE_PACKAGED_TASK
  218. #define BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
  219. #endif
  220. // VARIADIC_THREAD
  221. #if ! defined BOOST_THREAD_PROVIDES_VARIADIC_THREAD \
  222. && ! defined BOOST_THREAD_DONT_PROVIDE_VARIADIC_THREAD
  223. #if ! defined(BOOST_NO_SFINAE_EXPR) && \
  224. ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
  225. ! defined(BOOST_NO_CXX11_DECLTYPE) && \
  226. ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) && \
  227. ! defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES) && \
  228. ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
  229. ! defined(BOOST_NO_CXX11_HDR_TUPLE)
  230. #define BOOST_THREAD_PROVIDES_VARIADIC_THREAD
  231. #endif
  232. #endif
  233. #if ! defined BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY \
  234. && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_WHEN_ALL_WHEN_ANY
  235. #if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
  236. ! defined(BOOST_NO_CXX11_HDR_TUPLE)
  237. #define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY
  238. #endif
  239. #endif
  240. // ! defined(BOOST_NO_SFINAE_EXPR) &&
  241. // ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) &&
  242. // ! defined(BOOST_NO_CXX11_AUTO) &&
  243. // ! defined(BOOST_NO_CXX11_DECLTYPE) &&
  244. // ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) &&
  245. // MAKE_READY_AT_THREAD_EXIT
  246. #if ! defined BOOST_THREAD_PROVIDES_MAKE_READY_AT_THREAD_EXIT \
  247. && ! defined BOOST_THREAD_DONT_PROVIDE_MAKE_READY_AT_THREAD_EXIT
  248. //#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
  249. #define BOOST_THREAD_PROVIDES_MAKE_READY_AT_THREAD_EXIT
  250. //#endif
  251. #endif
  252. // FUTURE_CONTINUATION
  253. #if ! defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION \
  254. && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CONTINUATION
  255. #define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
  256. #endif
  257. #if ! defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP \
  258. && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_UNWRAP
  259. #define BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
  260. #endif
  261. // FUTURE_INVALID_AFTER_GET
  262. #if ! defined BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET \
  263. && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET
  264. #define BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
  265. #endif
  266. // NESTED_LOCKS
  267. #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS \
  268. && ! defined BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS
  269. #define BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS
  270. #endif
  271. // CONDITION
  272. #if ! defined BOOST_THREAD_PROVIDES_CONDITION \
  273. && ! defined BOOST_THREAD_DONT_PROVIDE_CONDITION
  274. #define BOOST_THREAD_DONT_PROVIDE_CONDITION
  275. #endif
  276. #endif // BOOST_THREAD_VERSION>=4
  277. #if BOOST_THREAD_VERSION>=5
  278. //#define BOOST_THREAD_FUTURE_BLOCKING
  279. #else
  280. //#define BOOST_THREAD_FUTURE_BLOCKING
  281. #define BOOST_THREAD_ASYNC_FUTURE_WAITS
  282. #endif
  283. // INTERRUPTIONS
  284. #if ! defined BOOST_THREAD_PROVIDES_INTERRUPTIONS \
  285. && ! defined BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
  286. #define BOOST_THREAD_PROVIDES_INTERRUPTIONS
  287. #endif
  288. // CORRELATIONS
  289. // EXPLICIT_LOCK_CONVERSION.
  290. #if defined BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION
  291. #define BOOST_THREAD_EXPLICIT_LOCK_CONVERSION explicit
  292. #else
  293. #define BOOST_THREAD_EXPLICIT_LOCK_CONVERSION
  294. #endif
  295. // BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN is defined if BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS
  296. #if defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS \
  297. && ! defined BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
  298. #define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
  299. #endif
  300. // For C++11 call_once interface the compiler MUST support constexpr.
  301. // Otherwise once_flag would be initialized during dynamic initialization stage, which is not thread-safe.
  302. #if defined(BOOST_THREAD_PROVIDES_ONCE_CXX11)
  303. #if defined(BOOST_NO_CXX11_CONSTEXPR)
  304. #undef BOOST_THREAD_PROVIDES_ONCE_CXX11
  305. #endif
  306. #endif
  307. #if defined(BOOST_THREAD_PLATFORM_WIN32) && defined BOOST_THREAD_DONT_USE_DATETIME
  308. #undef BOOST_THREAD_DONT_USE_DATETIME
  309. #define BOOST_THREAD_USES_DATETIME
  310. #endif
  311. #if defined(BOOST_THREAD_PLATFORM_WIN32) && defined BOOST_THREAD_DONT_USE_CHRONO
  312. #undef BOOST_THREAD_DONT_USE_CHRONO
  313. #define BOOST_THREAD_USES_CHRONO
  314. #endif
  315. // BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 defined by default up to Boost 1.55
  316. // BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0 defined by default up to Boost 1.55
  317. #if defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0
  318. #if ! defined BOOST_THREAD_PROVIDES_THREAD_EQ
  319. #define BOOST_THREAD_PROVIDES_THREAD_EQ
  320. #endif
  321. #endif
  322. //#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES || defined BOOST_THREAD_USES_MOVE
  323. #if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
  324. #define BOOST_THREAD_FUTURE_USES_OPTIONAL
  325. #endif
  326. #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
  327. # pragma warn -8008 // Condition always true/false
  328. # pragma warn -8080 // Identifier declared but never used
  329. # pragma warn -8057 // Parameter never used
  330. # pragma warn -8066 // Unreachable code
  331. #endif
  332. #include <boost/thread/detail/platform.hpp>
  333. #if defined(BOOST_THREAD_PLATFORM_WIN32)
  334. #else
  335. # if defined(BOOST_HAS_PTHREAD_DELAY_NP) || defined(BOOST_HAS_NANOSLEEP)
  336. # define BOOST_THREAD_SLEEP_FOR_IS_STEADY
  337. # endif
  338. #endif
  339. #if defined(BOOST_THREAD_CHRONO_WINDOWS_API)
  340. #define BOOST_THREAD_HAS_MONO_CLOCK
  341. #define BOOST_THREAD_INTERNAL_CLOCK_IS_MONO
  342. #elif defined(BOOST_THREAD_CHRONO_MAC_API)
  343. #define BOOST_THREAD_HAS_MONO_CLOCK
  344. #elif defined(__ANDROID__)
  345. #define BOOST_THREAD_HAS_MONO_CLOCK
  346. #if defined(__ANDROID_API__) && __ANDROID_API__ >= 21
  347. #define BOOST_THREAD_INTERNAL_CLOCK_IS_MONO
  348. #endif
  349. #else
  350. #include <time.h> // check for CLOCK_MONOTONIC
  351. #if defined(CLOCK_MONOTONIC)
  352. #define BOOST_THREAD_HAS_MONO_CLOCK
  353. #define BOOST_THREAD_INTERNAL_CLOCK_IS_MONO
  354. #endif
  355. #endif
  356. #if defined(BOOST_THREAD_PLATFORM_WIN32)
  357. #elif ! defined BOOST_THREAD_INTERNAL_CLOCK_IS_MONO
  358. #if defined BOOST_PTHREAD_HAS_TIMEDLOCK
  359. #define BOOST_THREAD_USES_PTHREAD_TIMEDLOCK
  360. #elif (defined(_POSIX_TIMEOUTS) && (_POSIX_TIMEOUTS-0)>=200112L) \
  361. || (defined(__ANDROID__) && defined(__ANDROID_API__) && __ANDROID_API__ >= 21)
  362. #define BOOST_THREAD_USES_PTHREAD_TIMEDLOCK
  363. #endif
  364. #endif
  365. // provided for backwards compatibility, since this
  366. // macro was used for several releases by mistake.
  367. #if defined(BOOST_THREAD_DYN_DLL) && ! defined(BOOST_THREAD_DYN_LINK)
  368. # define BOOST_THREAD_DYN_LINK
  369. #endif
  370. // compatibility with the rest of Boost's auto-linking code:
  371. #if defined(BOOST_THREAD_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
  372. # undef BOOST_THREAD_USE_LIB
  373. # if !defined(BOOST_THREAD_USE_DLL)
  374. # define BOOST_THREAD_USE_DLL
  375. # endif
  376. #endif
  377. #if defined(BOOST_THREAD_BUILD_DLL) //Build dll
  378. #elif defined(BOOST_THREAD_BUILD_LIB) //Build lib
  379. #elif defined(BOOST_THREAD_USE_DLL) //Use dll
  380. #elif defined(BOOST_THREAD_USE_LIB) //Use lib
  381. #else //Use default
  382. # if defined(BOOST_THREAD_PLATFORM_WIN32)
  383. # if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN) \
  384. || defined(__MINGW32__) || defined(MINGW32) || defined(BOOST_MINGW32)
  385. //For compilers supporting auto-tss cleanup
  386. //with Boost.Threads lib, use Boost.Threads lib
  387. # define BOOST_THREAD_USE_LIB
  388. # else
  389. //For compilers not yet supporting auto-tss cleanup
  390. //with Boost.Threads lib, use Boost.Threads dll
  391. # define BOOST_THREAD_USE_DLL
  392. # endif
  393. # else
  394. # define BOOST_THREAD_USE_LIB
  395. # endif
  396. #endif
  397. #if defined(BOOST_HAS_DECLSPEC)
  398. # if defined(BOOST_THREAD_BUILD_DLL) //Build dll
  399. # define BOOST_THREAD_DECL BOOST_SYMBOL_EXPORT
  400. //# define BOOST_THREAD_DECL __declspec(dllexport)
  401. # elif defined(BOOST_THREAD_USE_DLL) //Use dll
  402. # define BOOST_THREAD_DECL BOOST_SYMBOL_IMPORT
  403. //# define BOOST_THREAD_DECL __declspec(dllimport)
  404. # else
  405. # define BOOST_THREAD_DECL
  406. # endif
  407. #elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
  408. # define BOOST_THREAD_DECL BOOST_SYMBOL_VISIBLE
  409. #else
  410. # define BOOST_THREAD_DECL
  411. #endif // BOOST_HAS_DECLSPEC
  412. //
  413. // Automatically link to the correct build variant where possible.
  414. //
  415. #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_THREAD_NO_LIB) && !defined(BOOST_THREAD_BUILD_DLL) && !defined(BOOST_THREAD_BUILD_LIB)
  416. //
  417. // Tell the autolink to link dynamically, this will get undef'ed by auto_link.hpp
  418. // once it's done with it:
  419. //
  420. #if defined(BOOST_THREAD_USE_DLL) & ! defined(BOOST_DYN_LINK)
  421. # define BOOST_DYN_LINK
  422. #endif
  423. //
  424. // Set the name of our library, this will get undef'ed by auto_link.hpp
  425. // once it's done with it:
  426. //
  427. #if defined(BOOST_THREAD_LIB_NAME)
  428. # define BOOST_LIB_NAME BOOST_THREAD_LIB_NAME
  429. #else
  430. # define BOOST_LIB_NAME boost_thread
  431. #endif
  432. //
  433. // If we're importing code from a dll, then tell auto_link.hpp about it:
  434. //
  435. // And include the header that does the work:
  436. //
  437. #include <boost/config/auto_link.hpp>
  438. #endif // auto-linking disabled
  439. #endif // BOOST_THREAD_CONFIG_WEK1032003_HPP
  440. // Change Log:
  441. // 22 Jan 05 Roland Schwarz (speedsnail)
  442. // Usage of BOOST_HAS_DECLSPEC macro.
  443. // Default again is static lib usage.
  444. // BOOST_DYN_LINK only defined when autolink included.