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