]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // |
2 | // detail/config.hpp | |
3 | // ~~~~~~~~~~~~~~~~~ | |
4 | // | |
5 | // Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) | |
6 | // | |
7 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
8 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
9 | // | |
10 | ||
11 | #ifndef BOOST_ASIO_DETAIL_CONFIG_HPP | |
12 | #define BOOST_ASIO_DETAIL_CONFIG_HPP | |
13 | ||
14 | #if defined(BOOST_ASIO_STANDALONE) | |
15 | # define BOOST_ASIO_DISABLE_BOOST_ARRAY 1 | |
16 | # define BOOST_ASIO_DISABLE_BOOST_ASSERT 1 | |
17 | # define BOOST_ASIO_DISABLE_BOOST_BIND 1 | |
18 | # define BOOST_ASIO_DISABLE_BOOST_CHRONO 1 | |
19 | # define BOOST_ASIO_DISABLE_BOOST_DATE_TIME 1 | |
20 | # define BOOST_ASIO_DISABLE_BOOST_LIMITS 1 | |
21 | # define BOOST_ASIO_DISABLE_BOOST_REGEX 1 | |
22 | # define BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT 1 | |
23 | # define BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION 1 | |
24 | # define BOOST_ASIO_DISABLE_BOOST_WORKAROUND 1 | |
25 | #else // defined(BOOST_ASIO_STANDALONE) | |
26 | # include <boost/config.hpp> | |
27 | # include <boost/version.hpp> | |
28 | # define BOOST_ASIO_HAS_BOOST_CONFIG 1 | |
29 | #endif // defined(BOOST_ASIO_STANDALONE) | |
30 | ||
31 | // Default to a header-only implementation. The user must specifically request | |
32 | // separate compilation by defining either BOOST_ASIO_SEPARATE_COMPILATION or | |
33 | // BOOST_ASIO_DYN_LINK (as a DLL/shared library implies separate compilation). | |
34 | #if !defined(BOOST_ASIO_HEADER_ONLY) | |
35 | # if !defined(BOOST_ASIO_SEPARATE_COMPILATION) | |
36 | # if !defined(BOOST_ASIO_DYN_LINK) | |
37 | # define BOOST_ASIO_HEADER_ONLY 1 | |
38 | # endif // !defined(BOOST_ASIO_DYN_LINK) | |
39 | # endif // !defined(BOOST_ASIO_SEPARATE_COMPILATION) | |
40 | #endif // !defined(BOOST_ASIO_HEADER_ONLY) | |
41 | ||
42 | #if defined(BOOST_ASIO_HEADER_ONLY) | |
43 | # define BOOST_ASIO_DECL inline | |
44 | #else // defined(BOOST_ASIO_HEADER_ONLY) | |
45 | # if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__) | |
46 | // We need to import/export our code only if the user has specifically asked | |
47 | // for it by defining BOOST_ASIO_DYN_LINK. | |
48 | # if defined(BOOST_ASIO_DYN_LINK) | |
49 | // Export if this is our own source, otherwise import. | |
50 | # if defined(BOOST_ASIO_SOURCE) | |
51 | # define BOOST_ASIO_DECL __declspec(dllexport) | |
52 | # else // defined(BOOST_ASIO_SOURCE) | |
53 | # define BOOST_ASIO_DECL __declspec(dllimport) | |
54 | # endif // defined(BOOST_ASIO_SOURCE) | |
55 | # endif // defined(BOOST_ASIO_DYN_LINK) | |
56 | # endif // defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__) | |
57 | #endif // defined(BOOST_ASIO_HEADER_ONLY) | |
58 | ||
59 | // If BOOST_ASIO_DECL isn't defined yet define it now. | |
60 | #if !defined(BOOST_ASIO_DECL) | |
61 | # define BOOST_ASIO_DECL | |
62 | #endif // !defined(BOOST_ASIO_DECL) | |
63 | ||
64 | // Microsoft Visual C++ detection. | |
65 | #if !defined(BOOST_ASIO_MSVC) | |
66 | # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC) | |
67 | # define BOOST_ASIO_MSVC BOOST_MSVC | |
68 | # elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__) | |
69 | # define BOOST_ASIO_MSVC _MSC_VER | |
70 | # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC) | |
71 | #endif // defined(BOOST_ASIO_MSVC) | |
72 | ||
73 | // Clang / libc++ detection. | |
74 | #if defined(__clang__) | |
75 | # if (__cplusplus >= 201103) | |
76 | # if __has_include(<__config>) | |
77 | # include <__config> | |
78 | # if defined(_LIBCPP_VERSION) | |
79 | # define BOOST_ASIO_HAS_CLANG_LIBCXX 1 | |
80 | # endif // defined(_LIBCPP_VERSION) | |
81 | # endif // __has_include(<__config>) | |
82 | # endif // (__cplusplus >= 201103) | |
83 | #endif // defined(__clang__) | |
84 | ||
85 | // Support move construction and assignment on compilers known to allow it. | |
86 | #if !defined(BOOST_ASIO_HAS_MOVE) | |
87 | # if !defined(BOOST_ASIO_DISABLE_MOVE) | |
88 | # if defined(__clang__) | |
89 | # if __has_feature(__cxx_rvalue_references__) | |
90 | # define BOOST_ASIO_HAS_MOVE 1 | |
91 | # endif // __has_feature(__cxx_rvalue_references__) | |
92 | # endif // defined(__clang__) | |
93 | # if defined(__GNUC__) | |
94 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
95 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
96 | # define BOOST_ASIO_HAS_MOVE 1 | |
97 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
98 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
99 | # endif // defined(__GNUC__) | |
100 | # if defined(BOOST_ASIO_MSVC) | |
101 | # if (_MSC_VER >= 1700) | |
102 | # define BOOST_ASIO_HAS_MOVE 1 | |
103 | # endif // (_MSC_VER >= 1700) | |
104 | # endif // defined(BOOST_ASIO_MSVC) | |
105 | # endif // !defined(BOOST_ASIO_DISABLE_MOVE) | |
106 | #endif // !defined(BOOST_ASIO_HAS_MOVE) | |
107 | ||
108 | // If BOOST_ASIO_MOVE_CAST isn't defined, and move support is available, define | |
109 | // BOOST_ASIO_MOVE_ARG and BOOST_ASIO_MOVE_CAST to take advantage of rvalue | |
110 | // references and perfect forwarding. | |
111 | #if defined(BOOST_ASIO_HAS_MOVE) && !defined(BOOST_ASIO_MOVE_CAST) | |
112 | # define BOOST_ASIO_MOVE_ARG(type) type&& | |
113 | # define BOOST_ASIO_MOVE_CAST(type) static_cast<type&&> | |
114 | # define BOOST_ASIO_MOVE_CAST2(type1, type2) static_cast<type1, type2&&> | |
115 | #endif // defined(BOOST_ASIO_HAS_MOVE) && !defined(BOOST_ASIO_MOVE_CAST) | |
116 | ||
117 | // If BOOST_ASIO_MOVE_CAST still isn't defined, default to a C++03-compatible | |
118 | // implementation. Note that older g++ and MSVC versions don't like it when you | |
119 | // pass a non-member function through a const reference, so for most compilers | |
120 | // we'll play it safe and stick with the old approach of passing the handler by | |
121 | // value. | |
122 | #if !defined(BOOST_ASIO_MOVE_CAST) | |
123 | # if defined(__GNUC__) | |
124 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4) | |
125 | # define BOOST_ASIO_MOVE_ARG(type) const type& | |
126 | # else // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4) | |
127 | # define BOOST_ASIO_MOVE_ARG(type) type | |
128 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4) | |
129 | # elif defined(BOOST_ASIO_MSVC) | |
130 | # if (_MSC_VER >= 1400) | |
131 | # define BOOST_ASIO_MOVE_ARG(type) const type& | |
132 | # else // (_MSC_VER >= 1400) | |
133 | # define BOOST_ASIO_MOVE_ARG(type) type | |
134 | # endif // (_MSC_VER >= 1400) | |
135 | # else | |
136 | # define BOOST_ASIO_MOVE_ARG(type) type | |
137 | # endif | |
138 | # define BOOST_ASIO_MOVE_CAST(type) static_cast<const type&> | |
139 | # define BOOST_ASIO_MOVE_CAST2(type1, type2) static_cast<const type1, type2&> | |
140 | #endif // !defined(BOOST_ASIO_MOVE_CAST) | |
141 | ||
142 | // Support variadic templates on compilers known to allow it. | |
143 | #if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES) | |
144 | # if !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES) | |
145 | # if defined(__clang__) | |
146 | # if __has_feature(__cxx_variadic_templates__) | |
147 | # define BOOST_ASIO_HAS_VARIADIC_TEMPLATES 1 | |
148 | # endif // __has_feature(__cxx_variadic_templates__) | |
149 | # endif // defined(__clang__) | |
150 | # if defined(__GNUC__) | |
151 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) | |
152 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
153 | # define BOOST_ASIO_HAS_VARIADIC_TEMPLATES 1 | |
154 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
155 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) | |
156 | # endif // defined(__GNUC__) | |
157 | # endif // !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES) | |
158 | #endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES) | |
159 | ||
160 | // Support constexpr on compilers known to allow it. | |
161 | #if !defined(BOOST_ASIO_HAS_CONSTEXPR) | |
162 | # if !defined(BOOST_ASIO_DISABLE_CONSTEXPR) | |
163 | # if defined(__clang__) | |
164 | # if __has_feature(__cxx_constexpr__) | |
165 | # define BOOST_ASIO_HAS_CONSTEXPR 1 | |
166 | # endif // __has_feature(__cxx_constexr__) | |
167 | # endif // defined(__clang__) | |
168 | # if defined(__GNUC__) | |
169 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) | |
170 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
171 | # define BOOST_ASIO_HAS_CONSTEXPR 1 | |
172 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
173 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) | |
174 | # endif // defined(__GNUC__) | |
175 | # endif // !defined(BOOST_ASIO_DISABLE_CONSTEXPR) | |
176 | #endif // !defined(BOOST_ASIO_HAS_CONSTEXPR) | |
177 | #if !defined(BOOST_ASIO_CONSTEXPR) | |
178 | # if defined(BOOST_ASIO_HAS_CONSTEXPR) | |
179 | # define BOOST_ASIO_CONSTEXPR constexpr | |
180 | # else // defined(BOOST_ASIO_HAS_CONSTEXPR) | |
181 | # define BOOST_ASIO_CONSTEXPR | |
182 | # endif // defined(BOOST_ASIO_HAS_CONSTEXPR) | |
183 | #endif // !defined(BOOST_ASIO_CONSTEXPR) | |
184 | ||
185 | // Standard library support for system errors. | |
186 | # if !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR) | |
187 | # if defined(__clang__) | |
188 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
189 | # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1 | |
190 | # elif (__cplusplus >= 201103) | |
191 | # if __has_include(<system_error>) | |
192 | # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1 | |
193 | # endif // __has_include(<system_error>) | |
194 | # endif // (__cplusplus >= 201103) | |
195 | # endif // defined(__clang__) | |
196 | # if defined(__GNUC__) | |
197 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) | |
198 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
199 | # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1 | |
200 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
201 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) | |
202 | # endif // defined(__GNUC__) | |
203 | # if defined(BOOST_ASIO_MSVC) | |
204 | # if (_MSC_VER >= 1700) | |
205 | # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1 | |
206 | # endif // (_MSC_VER >= 1700) | |
207 | # endif // defined(BOOST_ASIO_MSVC) | |
208 | # endif // !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR) | |
209 | ||
210 | // Compliant C++11 compilers put noexcept specifiers on error_category members. | |
211 | #if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) | |
212 | # if (BOOST_VERSION >= 105300) | |
213 | # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT BOOST_NOEXCEPT | |
214 | # elif defined(__clang__) | |
215 | # if __has_feature(__cxx_noexcept__) | |
216 | # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true) | |
217 | # endif // __has_feature(__cxx_noexcept__) | |
218 | # elif defined(__GNUC__) | |
219 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) | |
220 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
221 | # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true) | |
222 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
223 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) | |
224 | # elif defined(BOOST_ASIO_MSVC) | |
225 | # if (_MSC_VER >= 1900) | |
226 | # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true) | |
227 | # endif // (_MSC_VER >= 1900) | |
228 | # endif // defined(BOOST_ASIO_MSVC) | |
229 | # if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) | |
230 | # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT | |
231 | # endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) | |
232 | #endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) | |
233 | ||
234 | // Standard library support for arrays. | |
235 | #if !defined(BOOST_ASIO_HAS_STD_ARRAY) | |
236 | # if !defined(BOOST_ASIO_DISABLE_STD_ARRAY) | |
237 | # if defined(__clang__) | |
238 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
239 | # define BOOST_ASIO_HAS_STD_ARRAY 1 | |
240 | # elif (__cplusplus >= 201103) | |
241 | # if __has_include(<array>) | |
242 | # define BOOST_ASIO_HAS_STD_ARRAY 1 | |
243 | # endif // __has_include(<array>) | |
244 | # endif // (__cplusplus >= 201103) | |
245 | # endif // defined(__clang__) | |
246 | # if defined(__GNUC__) | |
247 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) | |
248 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
249 | # define BOOST_ASIO_HAS_STD_ARRAY 1 | |
250 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
251 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) | |
252 | # endif // defined(__GNUC__) | |
253 | # if defined(BOOST_ASIO_MSVC) | |
254 | # if (_MSC_VER >= 1600) | |
255 | # define BOOST_ASIO_HAS_STD_ARRAY 1 | |
256 | # endif // (_MSC_VER >= 1600) | |
257 | # endif // defined(BOOST_ASIO_MSVC) | |
258 | # endif // !defined(BOOST_ASIO_DISABLE_STD_ARRAY) | |
259 | #endif // !defined(BOOST_ASIO_HAS_STD_ARRAY) | |
260 | ||
261 | // Standard library support for shared_ptr and weak_ptr. | |
262 | #if !defined(BOOST_ASIO_HAS_STD_SHARED_PTR) | |
263 | # if !defined(BOOST_ASIO_DISABLE_STD_SHARED_PTR) | |
264 | # if defined(__clang__) | |
265 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
266 | # define BOOST_ASIO_HAS_STD_SHARED_PTR 1 | |
267 | # elif (__cplusplus >= 201103) | |
268 | # define BOOST_ASIO_HAS_STD_SHARED_PTR 1 | |
269 | # endif // (__cplusplus >= 201103) | |
270 | # endif // defined(__clang__) | |
271 | # if defined(__GNUC__) | |
272 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) | |
273 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
274 | # define BOOST_ASIO_HAS_STD_SHARED_PTR 1 | |
275 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
276 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) | |
277 | # endif // defined(__GNUC__) | |
278 | # if defined(BOOST_ASIO_MSVC) | |
279 | # if (_MSC_VER >= 1600) | |
280 | # define BOOST_ASIO_HAS_STD_SHARED_PTR 1 | |
281 | # endif // (_MSC_VER >= 1600) | |
282 | # endif // defined(BOOST_ASIO_MSVC) | |
283 | # endif // !defined(BOOST_ASIO_DISABLE_STD_SHARED_PTR) | |
284 | #endif // !defined(BOOST_ASIO_HAS_STD_SHARED_PTR) | |
285 | ||
286 | // Standard library support for atomic operations. | |
287 | #if !defined(BOOST_ASIO_HAS_STD_ATOMIC) | |
288 | # if !defined(BOOST_ASIO_DISABLE_STD_ATOMIC) | |
289 | # if defined(__clang__) | |
290 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
291 | # define BOOST_ASIO_HAS_STD_ATOMIC 1 | |
292 | # elif (__cplusplus >= 201103) | |
293 | # if __has_include(<atomic>) | |
294 | # define BOOST_ASIO_HAS_STD_ATOMIC 1 | |
295 | # endif // __has_include(<atomic>) | |
296 | # endif // (__cplusplus >= 201103) | |
297 | # endif // defined(__clang__) | |
298 | # if defined(__GNUC__) | |
299 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
300 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
301 | # define BOOST_ASIO_HAS_STD_ATOMIC 1 | |
302 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
303 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
304 | # endif // defined(__GNUC__) | |
305 | # if defined(BOOST_ASIO_MSVC) | |
306 | # if (_MSC_VER >= 1700) | |
307 | # define BOOST_ASIO_HAS_STD_ATOMIC 1 | |
308 | # endif // (_MSC_VER >= 1700) | |
309 | # endif // defined(BOOST_ASIO_MSVC) | |
310 | # endif // !defined(BOOST_ASIO_DISABLE_STD_ATOMIC) | |
311 | #endif // !defined(BOOST_ASIO_HAS_STD_ATOMIC) | |
312 | ||
313 | // Standard library support for chrono. Some standard libraries (such as the | |
314 | // libstdc++ shipped with gcc 4.6) provide monotonic_clock as per early C++0x | |
315 | // drafts, rather than the eventually standardised name of steady_clock. | |
316 | #if !defined(BOOST_ASIO_HAS_STD_CHRONO) | |
317 | # if !defined(BOOST_ASIO_DISABLE_STD_CHRONO) | |
318 | # if defined(__clang__) | |
319 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
320 | # define BOOST_ASIO_HAS_STD_CHRONO 1 | |
321 | # elif (__cplusplus >= 201103) | |
322 | # if __has_include(<chrono>) | |
323 | # define BOOST_ASIO_HAS_STD_CHRONO 1 | |
324 | # endif // __has_include(<chrono>) | |
325 | # endif // (__cplusplus >= 201103) | |
326 | # endif // defined(__clang__) | |
327 | # if defined(__GNUC__) | |
328 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) | |
329 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
330 | # define BOOST_ASIO_HAS_STD_CHRONO 1 | |
331 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) | |
332 | # define BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK 1 | |
333 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) | |
334 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
335 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) | |
336 | # endif // defined(__GNUC__) | |
337 | # if defined(BOOST_ASIO_MSVC) | |
338 | # if (_MSC_VER >= 1700) | |
339 | # define BOOST_ASIO_HAS_STD_CHRONO 1 | |
340 | # endif // (_MSC_VER >= 1700) | |
341 | # endif // defined(BOOST_ASIO_MSVC) | |
342 | # endif // !defined(BOOST_ASIO_DISABLE_STD_CHRONO) | |
343 | #endif // !defined(BOOST_ASIO_HAS_STD_CHRONO) | |
344 | ||
345 | // Boost support for chrono. | |
346 | #if !defined(BOOST_ASIO_HAS_BOOST_CHRONO) | |
347 | # if !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO) | |
348 | # if (BOOST_VERSION >= 104700) | |
349 | # define BOOST_ASIO_HAS_BOOST_CHRONO 1 | |
350 | # endif // (BOOST_VERSION >= 104700) | |
351 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO) | |
352 | #endif // !defined(BOOST_ASIO_HAS_BOOST_CHRONO) | |
353 | ||
354 | // Boost support for the DateTime library. | |
355 | #if !defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) | |
356 | # if !defined(BOOST_ASIO_DISABLE_BOOST_DATE_TIME) | |
357 | # define BOOST_ASIO_HAS_BOOST_DATE_TIME 1 | |
358 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_DATE_TIME) | |
359 | #endif // !defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) | |
360 | ||
361 | // Standard library support for addressof. | |
362 | #if !defined(BOOST_ASIO_HAS_STD_ADDRESSOF) | |
363 | # if !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF) | |
364 | # if defined(__clang__) | |
365 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
366 | # define BOOST_ASIO_HAS_STD_ADDRESSOF 1 | |
367 | # elif (__cplusplus >= 201103) | |
368 | # define BOOST_ASIO_HAS_STD_ADDRESSOF 1 | |
369 | # endif // (__cplusplus >= 201103) | |
370 | # endif // defined(__clang__) | |
371 | # if defined(__GNUC__) | |
372 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) | |
373 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
374 | # define BOOST_ASIO_HAS_STD_ADDRESSOF 1 | |
375 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
376 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) | |
377 | # endif // defined(__GNUC__) | |
378 | # if defined(BOOST_ASIO_MSVC) | |
379 | # if (_MSC_VER >= 1700) | |
380 | # define BOOST_ASIO_HAS_STD_ADDRESSOF 1 | |
381 | # endif // (_MSC_VER >= 1700) | |
382 | # endif // defined(BOOST_ASIO_MSVC) | |
383 | # endif // !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF) | |
384 | #endif // !defined(BOOST_ASIO_HAS_STD_ADDRESSOF) | |
385 | ||
386 | // Standard library support for the function class. | |
387 | #if !defined(BOOST_ASIO_HAS_STD_FUNCTION) | |
388 | # if !defined(BOOST_ASIO_DISABLE_STD_FUNCTION) | |
389 | # if defined(__clang__) | |
390 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
391 | # define BOOST_ASIO_HAS_STD_FUNCTION 1 | |
392 | # elif (__cplusplus >= 201103) | |
393 | # define BOOST_ASIO_HAS_STD_FUNCTION 1 | |
394 | # endif // (__cplusplus >= 201103) | |
395 | # endif // defined(__clang__) | |
396 | # if defined(__GNUC__) | |
397 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
398 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
399 | # define BOOST_ASIO_HAS_STD_FUNCTION 1 | |
400 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
401 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
402 | # endif // defined(__GNUC__) | |
403 | # if defined(BOOST_ASIO_MSVC) | |
404 | # if (_MSC_VER >= 1700) | |
405 | # define BOOST_ASIO_HAS_STD_FUNCTION 1 | |
406 | # endif // (_MSC_VER >= 1700) | |
407 | # endif // defined(BOOST_ASIO_MSVC) | |
408 | # endif // !defined(BOOST_ASIO_DISABLE_STD_FUNCTION) | |
409 | #endif // !defined(BOOST_ASIO_HAS_STD_FUNCTION) | |
410 | ||
411 | // Standard library support for type traits. | |
412 | #if !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS) | |
413 | # if !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS) | |
414 | # if defined(__clang__) | |
415 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
416 | # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1 | |
417 | # elif (__cplusplus >= 201103) | |
418 | # if __has_include(<type_traits>) | |
419 | # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1 | |
420 | # endif // __has_include(<type_traits>) | |
421 | # endif // (__cplusplus >= 201103) | |
422 | # endif // defined(__clang__) | |
423 | # if defined(__GNUC__) | |
424 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
425 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
426 | # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1 | |
427 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
428 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
429 | # endif // defined(__GNUC__) | |
430 | # if defined(BOOST_ASIO_MSVC) | |
431 | # if (_MSC_VER >= 1700) | |
432 | # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1 | |
433 | # endif // (_MSC_VER >= 1700) | |
434 | # endif // defined(BOOST_ASIO_MSVC) | |
435 | # endif // !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS) | |
436 | #endif // !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS) | |
437 | ||
438 | // Standard library support for the cstdint header. | |
439 | #if !defined(BOOST_ASIO_HAS_CSTDINT) | |
440 | # if !defined(BOOST_ASIO_DISABLE_CSTDINT) | |
441 | # if defined(__clang__) | |
442 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
443 | # define BOOST_ASIO_HAS_CSTDINT 1 | |
444 | # elif (__cplusplus >= 201103) | |
445 | # define BOOST_ASIO_HAS_CSTDINT 1 | |
446 | # endif // (__cplusplus >= 201103) | |
447 | # endif // defined(__clang__) | |
448 | # if defined(__GNUC__) | |
449 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
450 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
451 | # define BOOST_ASIO_HAS_CSTDINT 1 | |
452 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
453 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) | |
454 | # endif // defined(__GNUC__) | |
455 | # if defined(BOOST_ASIO_MSVC) | |
456 | # if (_MSC_VER >= 1700) | |
457 | # define BOOST_ASIO_HAS_CSTDINT 1 | |
458 | # endif // (_MSC_VER >= 1700) | |
459 | # endif // defined(BOOST_ASIO_MSVC) | |
460 | # endif // !defined(BOOST_ASIO_DISABLE_CSTDINT) | |
461 | #endif // !defined(BOOST_ASIO_HAS_CSTDINT) | |
462 | ||
463 | // Standard library support for the thread class. | |
464 | #if !defined(BOOST_ASIO_HAS_STD_THREAD) | |
465 | # if !defined(BOOST_ASIO_DISABLE_STD_THREAD) | |
466 | # if defined(__clang__) | |
467 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
468 | # define BOOST_ASIO_HAS_STD_THREAD 1 | |
469 | # elif (__cplusplus >= 201103) | |
470 | # if __has_include(<thread>) | |
471 | # define BOOST_ASIO_HAS_STD_THREAD 1 | |
472 | # endif // __has_include(<thread>) | |
473 | # endif // (__cplusplus >= 201103) | |
474 | # endif // defined(__clang__) | |
475 | # if defined(__GNUC__) | |
476 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) | |
477 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
478 | # define BOOST_ASIO_HAS_STD_THREAD 1 | |
479 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
480 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) | |
481 | # endif // defined(__GNUC__) | |
482 | # if defined(BOOST_ASIO_MSVC) | |
483 | # if (_MSC_VER >= 1700) | |
484 | # define BOOST_ASIO_HAS_STD_THREAD 1 | |
485 | # endif // (_MSC_VER >= 1700) | |
486 | # endif // defined(BOOST_ASIO_MSVC) | |
487 | # endif // !defined(BOOST_ASIO_DISABLE_STD_THREAD) | |
488 | #endif // !defined(BOOST_ASIO_HAS_STD_THREAD) | |
489 | ||
490 | // Standard library support for the mutex and condition variable classes. | |
491 | #if !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR) | |
492 | # if !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR) | |
493 | # if defined(__clang__) | |
494 | # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) | |
495 | # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1 | |
496 | # elif (__cplusplus >= 201103) | |
497 | # if __has_include(<mutex>) | |
498 | # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1 | |
499 | # endif // __has_include(<mutex>) | |
500 | # endif // (__cplusplus >= 201103) | |
501 | # endif // defined(__clang__) | |
502 | # if defined(__GNUC__) | |
503 | # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) | |
504 | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
505 | # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1 | |
506 | # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) | |
507 | # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) | |
508 | # endif // defined(__GNUC__) | |
509 | # if defined(BOOST_ASIO_MSVC) | |
510 | # if (_MSC_VER >= 1700) | |
511 | # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1 | |
512 | # endif // (_MSC_VER >= 1700) | |
513 | # endif // defined(BOOST_ASIO_MSVC) | |
514 | # endif // !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR) | |
515 | #endif // !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR) | |
516 | ||
517 | // Windows App target. Windows but with a limited API. | |
518 | #if !defined(BOOST_ASIO_WINDOWS_APP) | |
519 | # if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0603) | |
520 | # include <winapifamily.h> | |
521 | # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) \ | |
522 | && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) | |
523 | # define BOOST_ASIO_WINDOWS_APP 1 | |
524 | # endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) | |
525 | // && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) | |
526 | # endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0603) | |
527 | #endif // !defined(BOOST_ASIO_WINDOWS_APP) | |
528 | ||
529 | // Legacy WinRT target. Windows App is preferred. | |
530 | #if !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
531 | # if !defined(BOOST_ASIO_WINDOWS_APP) | |
532 | # if defined(__cplusplus_winrt) | |
533 | # include <winapifamily.h> | |
534 | # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) \ | |
535 | && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) | |
536 | # define BOOST_ASIO_WINDOWS_RUNTIME 1 | |
537 | # endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) | |
538 | // && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) | |
539 | # endif // defined(__cplusplus_winrt) | |
540 | # endif // !defined(BOOST_ASIO_WINDOWS_APP) | |
541 | #endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
542 | ||
543 | // Windows target. Excludes WinRT but includes Windows App targets. | |
544 | #if !defined(BOOST_ASIO_WINDOWS) | |
545 | # if !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
546 | # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS) | |
547 | # define BOOST_ASIO_WINDOWS 1 | |
548 | # elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) | |
549 | # define BOOST_ASIO_WINDOWS 1 | |
550 | # elif defined(BOOST_ASIO_WINDOWS_APP) | |
551 | # define BOOST_ASIO_WINDOWS 1 | |
552 | # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS) | |
553 | # endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
554 | #endif // !defined(BOOST_ASIO_WINDOWS) | |
555 | ||
556 | // Windows: target OS version. | |
557 | #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
558 | # if !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS) | |
559 | # if defined(_MSC_VER) || defined(__BORLANDC__) | |
560 | # pragma message( \ | |
561 | "Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:\n"\ | |
562 | "- add -D_WIN32_WINNT=0x0501 to the compiler command line; or\n"\ | |
563 | "- add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.\n"\ | |
564 | "Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).") | |
565 | # else // defined(_MSC_VER) || defined(__BORLANDC__) | |
566 | # warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. | |
567 | # warning For example, add -D_WIN32_WINNT=0x0501 to the compiler command line. | |
568 | # warning Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target). | |
569 | # endif // defined(_MSC_VER) || defined(__BORLANDC__) | |
570 | # define _WIN32_WINNT 0x0501 | |
571 | # endif // !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS) | |
572 | # if defined(_MSC_VER) | |
573 | # if defined(_WIN32) && !defined(WIN32) | |
574 | # if !defined(_WINSOCK2API_) | |
575 | # define WIN32 // Needed for correct types in winsock2.h | |
576 | # else // !defined(_WINSOCK2API_) | |
577 | # error Please define the macro WIN32 in your compiler options | |
578 | # endif // !defined(_WINSOCK2API_) | |
579 | # endif // defined(_WIN32) && !defined(WIN32) | |
580 | # endif // defined(_MSC_VER) | |
581 | # if defined(__BORLANDC__) | |
582 | # if defined(__WIN32__) && !defined(WIN32) | |
583 | # if !defined(_WINSOCK2API_) | |
584 | # define WIN32 // Needed for correct types in winsock2.h | |
585 | # else // !defined(_WINSOCK2API_) | |
586 | # error Please define the macro WIN32 in your compiler options | |
587 | # endif // !defined(_WINSOCK2API_) | |
588 | # endif // defined(__WIN32__) && !defined(WIN32) | |
589 | # endif // defined(__BORLANDC__) | |
590 | # if defined(__CYGWIN__) | |
591 | # if !defined(__USE_W32_SOCKETS) | |
592 | # error You must add -D__USE_W32_SOCKETS to your compiler options. | |
593 | # endif // !defined(__USE_W32_SOCKETS) | |
594 | # endif // defined(__CYGWIN__) | |
595 | #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
596 | ||
597 | // Windows: minimise header inclusion. | |
598 | #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
599 | # if !defined(BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN) | |
600 | # if !defined(WIN32_LEAN_AND_MEAN) | |
601 | # define WIN32_LEAN_AND_MEAN | |
602 | # endif // !defined(WIN32_LEAN_AND_MEAN) | |
603 | # endif // !defined(BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN) | |
604 | #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
605 | ||
606 | // Windows: suppress definition of "min" and "max" macros. | |
607 | #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
608 | # if !defined(BOOST_ASIO_NO_NOMINMAX) | |
609 | # if !defined(NOMINMAX) | |
610 | # define NOMINMAX 1 | |
611 | # endif // !defined(NOMINMAX) | |
612 | # endif // !defined(BOOST_ASIO_NO_NOMINMAX) | |
613 | #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
614 | ||
615 | // Windows: IO Completion Ports. | |
616 | #if !defined(BOOST_ASIO_HAS_IOCP) | |
617 | # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
618 | # if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400) | |
619 | # if !defined(UNDER_CE) && !defined(BOOST_ASIO_WINDOWS_APP) | |
620 | # if !defined(BOOST_ASIO_DISABLE_IOCP) | |
621 | # define BOOST_ASIO_HAS_IOCP 1 | |
622 | # endif // !defined(BOOST_ASIO_DISABLE_IOCP) | |
623 | # endif // !defined(UNDER_CE) && !defined(BOOST_ASIO_WINDOWS_APP) | |
624 | # endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400) | |
625 | # endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
626 | #endif // !defined(BOOST_ASIO_HAS_IOCP) | |
627 | ||
628 | // On POSIX (and POSIX-like) platforms we need to include unistd.h in order to | |
629 | // get access to the various platform feature macros, e.g. to be able to test | |
630 | // for threads support. | |
631 | #if !defined(BOOST_ASIO_HAS_UNISTD_H) | |
632 | # if !defined(BOOST_ASIO_HAS_BOOST_CONFIG) | |
633 | # if defined(unix) \ | |
634 | || defined(__unix) \ | |
635 | || defined(_XOPEN_SOURCE) \ | |
636 | || defined(_POSIX_SOURCE) \ | |
637 | || (defined(__MACH__) && defined(__APPLE__)) \ | |
638 | || defined(__FreeBSD__) \ | |
639 | || defined(__NetBSD__) \ | |
640 | || defined(__OpenBSD__) \ | |
641 | || defined(__linux__) | |
642 | # define BOOST_ASIO_HAS_UNISTD_H 1 | |
643 | # endif | |
644 | # endif // !defined(BOOST_ASIO_HAS_BOOST_CONFIG) | |
645 | #endif // !defined(BOOST_ASIO_HAS_UNISTD_H) | |
646 | #if defined(BOOST_ASIO_HAS_UNISTD_H) | |
647 | # include <unistd.h> | |
648 | #endif // defined(BOOST_ASIO_HAS_UNISTD_H) | |
649 | ||
650 | // Linux: epoll, eventfd and timerfd. | |
651 | #if defined(__linux__) | |
652 | # include <linux/version.h> | |
653 | # if !defined(BOOST_ASIO_HAS_EPOLL) | |
654 | # if !defined(BOOST_ASIO_DISABLE_EPOLL) | |
655 | # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,45) | |
656 | # define BOOST_ASIO_HAS_EPOLL 1 | |
657 | # endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,45) | |
658 | # endif // !defined(BOOST_ASIO_DISABLE_EPOLL) | |
659 | # endif // !defined(BOOST_ASIO_HAS_EPOLL) | |
660 | # if !defined(BOOST_ASIO_HAS_EVENTFD) | |
661 | # if !defined(BOOST_ASIO_DISABLE_EVENTFD) | |
662 | # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) | |
663 | # define BOOST_ASIO_HAS_EVENTFD 1 | |
664 | # endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) | |
665 | # endif // !defined(BOOST_ASIO_DISABLE_EVENTFD) | |
666 | # endif // !defined(BOOST_ASIO_HAS_EVENTFD) | |
667 | # if !defined(BOOST_ASIO_HAS_TIMERFD) | |
668 | # if defined(BOOST_ASIO_HAS_EPOLL) | |
669 | # if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) | |
670 | # define BOOST_ASIO_HAS_TIMERFD 1 | |
671 | # endif // (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) | |
672 | # endif // defined(BOOST_ASIO_HAS_EPOLL) | |
673 | # endif // !defined(BOOST_ASIO_HAS_TIMERFD) | |
674 | #endif // defined(__linux__) | |
675 | ||
676 | // Mac OS X, FreeBSD, NetBSD, OpenBSD: kqueue. | |
677 | #if (defined(__MACH__) && defined(__APPLE__)) \ | |
678 | || defined(__FreeBSD__) \ | |
679 | || defined(__NetBSD__) \ | |
680 | || defined(__OpenBSD__) | |
681 | # if !defined(BOOST_ASIO_HAS_KQUEUE) | |
682 | # if !defined(BOOST_ASIO_DISABLE_KQUEUE) | |
683 | # define BOOST_ASIO_HAS_KQUEUE 1 | |
684 | # endif // !defined(BOOST_ASIO_DISABLE_KQUEUE) | |
685 | # endif // !defined(BOOST_ASIO_HAS_KQUEUE) | |
686 | #endif // (defined(__MACH__) && defined(__APPLE__)) | |
687 | // || defined(__FreeBSD__) | |
688 | // || defined(__NetBSD__) | |
689 | // || defined(__OpenBSD__) | |
690 | ||
691 | // Solaris: /dev/poll. | |
692 | #if defined(__sun) | |
693 | # if !defined(BOOST_ASIO_HAS_DEV_POLL) | |
694 | # if !defined(BOOST_ASIO_DISABLE_DEV_POLL) | |
695 | # define BOOST_ASIO_HAS_DEV_POLL 1 | |
696 | # endif // !defined(BOOST_ASIO_DISABLE_DEV_POLL) | |
697 | # endif // !defined(BOOST_ASIO_HAS_DEV_POLL) | |
698 | #endif // defined(__sun) | |
699 | ||
700 | // Serial ports. | |
701 | #if !defined(BOOST_ASIO_HAS_SERIAL_PORT) | |
702 | # if defined(BOOST_ASIO_HAS_IOCP) \ | |
703 | || !defined(BOOST_ASIO_WINDOWS) \ | |
704 | && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \ | |
705 | && !defined(__CYGWIN__) | |
706 | # if !defined(__SYMBIAN32__) | |
707 | # if !defined(BOOST_ASIO_DISABLE_SERIAL_PORT) | |
708 | # define BOOST_ASIO_HAS_SERIAL_PORT 1 | |
709 | # endif // !defined(BOOST_ASIO_DISABLE_SERIAL_PORT) | |
710 | # endif // !defined(__SYMBIAN32__) | |
711 | # endif // defined(BOOST_ASIO_HAS_IOCP) | |
712 | // || !defined(BOOST_ASIO_WINDOWS) | |
713 | // && !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
714 | // && !defined(__CYGWIN__) | |
715 | #endif // !defined(BOOST_ASIO_HAS_SERIAL_PORT) | |
716 | ||
717 | // Windows: stream handles. | |
718 | #if !defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) | |
719 | # if !defined(BOOST_ASIO_DISABLE_WINDOWS_STREAM_HANDLE) | |
720 | # if defined(BOOST_ASIO_HAS_IOCP) | |
721 | # define BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE 1 | |
722 | # endif // defined(BOOST_ASIO_HAS_IOCP) | |
723 | # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_STREAM_HANDLE) | |
724 | #endif // !defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) | |
725 | ||
726 | // Windows: random access handles. | |
727 | #if !defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) | |
728 | # if !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE) | |
729 | # if defined(BOOST_ASIO_HAS_IOCP) | |
730 | # define BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE 1 | |
731 | # endif // defined(BOOST_ASIO_HAS_IOCP) | |
732 | # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE) | |
733 | #endif // !defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) | |
734 | ||
735 | // Windows: object handles. | |
736 | #if !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) | |
737 | # if !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE) | |
738 | # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
739 | # if !defined(UNDER_CE) && !defined(BOOST_ASIO_WINDOWS_APP) | |
740 | # define BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE 1 | |
741 | # endif // !defined(UNDER_CE) && !defined(BOOST_ASIO_WINDOWS_APP) | |
742 | # endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
743 | # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE) | |
744 | #endif // !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) | |
745 | ||
746 | // Windows: OVERLAPPED wrapper. | |
747 | #if !defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR) | |
748 | # if !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR) | |
749 | # if defined(BOOST_ASIO_HAS_IOCP) | |
750 | # define BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR 1 | |
751 | # endif // defined(BOOST_ASIO_HAS_IOCP) | |
752 | # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR) | |
753 | #endif // !defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR) | |
754 | ||
755 | // POSIX: stream-oriented file descriptors. | |
756 | #if !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) | |
757 | # if !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR) | |
758 | # if !defined(BOOST_ASIO_WINDOWS) \ | |
759 | && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \ | |
760 | && !defined(__CYGWIN__) | |
761 | # define BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR 1 | |
762 | # endif // !defined(BOOST_ASIO_WINDOWS) | |
763 | // && !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
764 | // && !defined(__CYGWIN__) | |
765 | # endif // !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR) | |
766 | #endif // !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) | |
767 | ||
768 | // UNIX domain sockets. | |
769 | #if !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) | |
770 | # if !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS) | |
771 | # if !defined(BOOST_ASIO_WINDOWS) \ | |
772 | && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \ | |
773 | && !defined(__CYGWIN__) | |
774 | # define BOOST_ASIO_HAS_LOCAL_SOCKETS 1 | |
775 | # endif // !defined(BOOST_ASIO_WINDOWS) | |
776 | // && !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
777 | // && !defined(__CYGWIN__) | |
778 | # endif // !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS) | |
779 | #endif // !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) | |
780 | ||
781 | // Can use sigaction() instead of signal(). | |
782 | #if !defined(BOOST_ASIO_HAS_SIGACTION) | |
783 | # if !defined(BOOST_ASIO_DISABLE_SIGACTION) | |
784 | # if !defined(BOOST_ASIO_WINDOWS) \ | |
785 | && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \ | |
786 | && !defined(__CYGWIN__) | |
787 | # define BOOST_ASIO_HAS_SIGACTION 1 | |
788 | # endif // !defined(BOOST_ASIO_WINDOWS) | |
789 | // && !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
790 | // && !defined(__CYGWIN__) | |
791 | # endif // !defined(BOOST_ASIO_DISABLE_SIGACTION) | |
792 | #endif // !defined(BOOST_ASIO_HAS_SIGACTION) | |
793 | ||
794 | // Can use signal(). | |
795 | #if !defined(BOOST_ASIO_HAS_SIGNAL) | |
796 | # if !defined(BOOST_ASIO_DISABLE_SIGNAL) | |
797 | # if !defined(UNDER_CE) | |
798 | # define BOOST_ASIO_HAS_SIGNAL 1 | |
799 | # endif // !defined(UNDER_CE) | |
800 | # endif // !defined(BOOST_ASIO_DISABLE_SIGNAL) | |
801 | #endif // !defined(BOOST_ASIO_HAS_SIGNAL) | |
802 | ||
803 | // Can use getaddrinfo() and getnameinfo(). | |
804 | #if !defined(BOOST_ASIO_HAS_GETADDRINFO) | |
805 | # if !defined(BOOST_ASIO_DISABLE_GETADDRINFO) | |
806 | # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) | |
807 | # if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501) | |
808 | # define BOOST_ASIO_HAS_GETADDRINFO 1 | |
809 | # elif defined(UNDER_CE) | |
810 | # define BOOST_ASIO_HAS_GETADDRINFO 1 | |
811 | # endif // defined(UNDER_CE) | |
812 | # elif defined(__MACH__) && defined(__APPLE__) | |
813 | # if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) | |
814 | # if (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1050) | |
815 | # define BOOST_ASIO_HAS_GETADDRINFO 1 | |
816 | # endif // (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1050) | |
817 | # else // defined(__MAC_OS_X_VERSION_MIN_REQUIRED) | |
818 | # define BOOST_ASIO_HAS_GETADDRINFO 1 | |
819 | # endif // defined(__MAC_OS_X_VERSION_MIN_REQUIRED) | |
820 | # else // defined(__MACH__) && defined(__APPLE__) | |
821 | # define BOOST_ASIO_HAS_GETADDRINFO 1 | |
822 | # endif // defined(__MACH__) && defined(__APPLE__) | |
823 | # endif // !defined(BOOST_ASIO_DISABLE_GETADDRINFO) | |
824 | #endif // !defined(BOOST_ASIO_HAS_GETADDRINFO) | |
825 | ||
826 | // Whether standard iostreams are disabled. | |
827 | #if !defined(BOOST_ASIO_NO_IOSTREAM) | |
828 | # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_IOSTREAM) | |
829 | # define BOOST_ASIO_NO_IOSTREAM 1 | |
830 | # endif // !defined(BOOST_NO_IOSTREAM) | |
831 | #endif // !defined(BOOST_ASIO_NO_IOSTREAM) | |
832 | ||
833 | // Whether exception handling is disabled. | |
834 | #if !defined(BOOST_ASIO_NO_EXCEPTIONS) | |
835 | # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_EXCEPTIONS) | |
836 | # define BOOST_ASIO_NO_EXCEPTIONS 1 | |
837 | # endif // !defined(BOOST_NO_EXCEPTIONS) | |
838 | #endif // !defined(BOOST_ASIO_NO_EXCEPTIONS) | |
839 | ||
840 | // Whether the typeid operator is supported. | |
841 | #if !defined(BOOST_ASIO_NO_TYPEID) | |
842 | # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_TYPEID) | |
843 | # define BOOST_ASIO_NO_TYPEID 1 | |
844 | # endif // !defined(BOOST_NO_TYPEID) | |
845 | #endif // !defined(BOOST_ASIO_NO_TYPEID) | |
846 | ||
847 | // Threads. | |
848 | #if !defined(BOOST_ASIO_HAS_THREADS) | |
849 | # if !defined(BOOST_ASIO_DISABLE_THREADS) | |
850 | # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS) | |
851 | # define BOOST_ASIO_HAS_THREADS 1 | |
852 | # elif defined(_MSC_VER) && defined(_MT) | |
853 | # define BOOST_ASIO_HAS_THREADS 1 | |
854 | # elif defined(__BORLANDC__) && defined(__MT__) | |
855 | # define BOOST_ASIO_HAS_THREADS 1 | |
856 | # elif defined(_POSIX_THREADS) | |
857 | # define BOOST_ASIO_HAS_THREADS 1 | |
858 | # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS) | |
859 | # endif // !defined(BOOST_ASIO_DISABLE_THREADS) | |
860 | #endif // !defined(BOOST_ASIO_HAS_THREADS) | |
861 | ||
862 | // POSIX threads. | |
863 | #if !defined(BOOST_ASIO_HAS_PTHREADS) | |
864 | # if defined(BOOST_ASIO_HAS_THREADS) | |
865 | # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS) | |
866 | # define BOOST_ASIO_HAS_PTHREADS 1 | |
867 | # elif defined(_POSIX_THREADS) | |
868 | # define BOOST_ASIO_HAS_PTHREADS 1 | |
869 | # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS) | |
870 | # endif // defined(BOOST_ASIO_HAS_THREADS) | |
871 | #endif // !defined(BOOST_ASIO_HAS_PTHREADS) | |
872 | ||
873 | // Helper to prevent macro expansion. | |
874 | #define BOOST_ASIO_PREVENT_MACRO_SUBSTITUTION | |
875 | ||
876 | // Helper to define in-class constants. | |
877 | #if !defined(BOOST_ASIO_STATIC_CONSTANT) | |
878 | # if !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT) | |
879 | # define BOOST_ASIO_STATIC_CONSTANT(type, assignment) \ | |
880 | BOOST_STATIC_CONSTANT(type, assignment) | |
881 | # else // !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT) | |
882 | # define BOOST_ASIO_STATIC_CONSTANT(type, assignment) \ | |
883 | static const type assignment | |
884 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT) | |
885 | #endif // !defined(BOOST_ASIO_STATIC_CONSTANT) | |
886 | ||
887 | // Boost array library. | |
888 | #if !defined(BOOST_ASIO_HAS_BOOST_ARRAY) | |
889 | # if !defined(BOOST_ASIO_DISABLE_BOOST_ARRAY) | |
890 | # define BOOST_ASIO_HAS_BOOST_ARRAY 1 | |
891 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_ARRAY) | |
892 | #endif // !defined(BOOST_ASIO_HAS_BOOST_ARRAY) | |
893 | ||
894 | // Boost assert macro. | |
895 | #if !defined(BOOST_ASIO_HAS_BOOST_ASSERT) | |
896 | # if !defined(BOOST_ASIO_DISABLE_BOOST_ASSERT) | |
897 | # define BOOST_ASIO_HAS_BOOST_ASSERT 1 | |
898 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_ASSERT) | |
899 | #endif // !defined(BOOST_ASIO_HAS_BOOST_ASSERT) | |
900 | ||
901 | // Boost limits header. | |
902 | #if !defined(BOOST_ASIO_HAS_BOOST_LIMITS) | |
903 | # if !defined(BOOST_ASIO_DISABLE_BOOST_LIMITS) | |
904 | # define BOOST_ASIO_HAS_BOOST_LIMITS 1 | |
905 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_LIMITS) | |
906 | #endif // !defined(BOOST_ASIO_HAS_BOOST_LIMITS) | |
907 | ||
908 | // Boost throw_exception function. | |
909 | #if !defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION) | |
910 | # if !defined(BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION) | |
911 | # define BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION 1 | |
912 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION) | |
913 | #endif // !defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION) | |
914 | ||
915 | // Boost regex library. | |
916 | #if !defined(BOOST_ASIO_HAS_BOOST_REGEX) | |
917 | # if !defined(BOOST_ASIO_DISABLE_BOOST_REGEX) | |
918 | # define BOOST_ASIO_HAS_BOOST_REGEX 1 | |
919 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_REGEX) | |
920 | #endif // !defined(BOOST_ASIO_HAS_BOOST_REGEX) | |
921 | ||
922 | // Boost bind function. | |
923 | #if !defined(BOOST_ASIO_HAS_BOOST_BIND) | |
924 | # if !defined(BOOST_ASIO_DISABLE_BOOST_BIND) | |
925 | # define BOOST_ASIO_HAS_BOOST_BIND 1 | |
926 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_BIND) | |
927 | #endif // !defined(BOOST_ASIO_HAS_BOOST_BIND) | |
928 | ||
929 | // Boost's BOOST_WORKAROUND macro. | |
930 | #if !defined(BOOST_ASIO_HAS_BOOST_WORKAROUND) | |
931 | # if !defined(BOOST_ASIO_DISABLE_BOOST_WORKAROUND) | |
932 | # define BOOST_ASIO_HAS_BOOST_WORKAROUND 1 | |
933 | # endif // !defined(BOOST_ASIO_DISABLE_BOOST_WORKAROUND) | |
934 | #endif // !defined(BOOST_ASIO_HAS_BOOST_WORKAROUND) | |
935 | ||
936 | // Microsoft Visual C++'s secure C runtime library. | |
937 | #if !defined(BOOST_ASIO_HAS_SECURE_RTL) | |
938 | # if !defined(BOOST_ASIO_DISABLE_SECURE_RTL) | |
939 | # if defined(BOOST_ASIO_MSVC) \ | |
940 | && (BOOST_ASIO_MSVC >= 1400) \ | |
941 | && !defined(UNDER_CE) | |
942 | # define BOOST_ASIO_HAS_SECURE_RTL 1 | |
943 | # endif // defined(BOOST_ASIO_MSVC) | |
944 | // && (BOOST_ASIO_MSVC >= 1400) | |
945 | // && !defined(UNDER_CE) | |
946 | # endif // !defined(BOOST_ASIO_DISABLE_SECURE_RTL) | |
947 | #endif // !defined(BOOST_ASIO_HAS_SECURE_RTL) | |
948 | ||
949 | // Handler hooking. Disabled for ancient Borland C++ and gcc compilers. | |
950 | #if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS) | |
951 | # if !defined(BOOST_ASIO_DISABLE_HANDLER_HOOKS) | |
952 | # if defined(__GNUC__) | |
953 | # if (__GNUC__ >= 3) | |
954 | # define BOOST_ASIO_HAS_HANDLER_HOOKS 1 | |
955 | # endif // (__GNUC__ >= 3) | |
956 | # elif !defined(__BORLANDC__) | |
957 | # define BOOST_ASIO_HAS_HANDLER_HOOKS 1 | |
958 | # endif // !defined(__BORLANDC__) | |
959 | # endif // !defined(BOOST_ASIO_DISABLE_HANDLER_HOOKS) | |
960 | #endif // !defined(BOOST_ASIO_HAS_HANDLER_HOOKS) | |
961 | ||
962 | // Support for the __thread keyword extension. | |
963 | #if !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION) | |
964 | # if defined(__linux__) | |
965 | # if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) | |
966 | # if ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3) | |
967 | # if !defined(__INTEL_COMPILER) && !defined(__ICL) | |
968 | # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1 | |
969 | # define BOOST_ASIO_THREAD_KEYWORD __thread | |
970 | # elif defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100) | |
971 | # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1 | |
972 | # endif // defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100) | |
973 | # endif // ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3) | |
974 | # endif // defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) | |
975 | # endif // defined(__linux__) | |
976 | # if defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
977 | # if (_MSC_VER >= 1700) | |
978 | # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1 | |
979 | # define BOOST_ASIO_THREAD_KEYWORD __declspec(thread) | |
980 | # endif // (_MSC_VER >= 1700) | |
981 | # endif // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
982 | #endif // !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION) | |
983 | #if !defined(BOOST_ASIO_THREAD_KEYWORD) | |
984 | # define BOOST_ASIO_THREAD_KEYWORD __thread | |
985 | #endif // !defined(BOOST_ASIO_THREAD_KEYWORD) | |
986 | ||
987 | // Support for POSIX ssize_t typedef. | |
988 | #if !defined(BOOST_ASIO_DISABLE_SSIZE_T) | |
989 | # if defined(__linux__) \ | |
990 | || (defined(__MACH__) && defined(__APPLE__)) | |
991 | # define BOOST_ASIO_HAS_SSIZE_T 1 | |
992 | # endif // defined(__linux__) | |
993 | // || (defined(__MACH__) && defined(__APPLE__)) | |
994 | #endif // !defined(BOOST_ASIO_DISABLE_SSIZE_T) | |
995 | ||
996 | #endif // BOOST_ASIO_DETAIL_CONFIG_HPP |