annotate DEPENDENCIES/generic/include/boost/asio/detail/config.hpp @ 16:2665513ce2d3

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