Chris@16: // Chris@16: // detail/config.hpp Chris@16: // ~~~~~~~~~~~~~~~~~ Chris@16: // Chris@101: // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com) Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: Chris@16: #ifndef BOOST_ASIO_DETAIL_CONFIG_HPP Chris@16: #define BOOST_ASIO_DETAIL_CONFIG_HPP Chris@16: Chris@16: #if defined(BOOST_ASIO_STANDALONE) Chris@16: # define BOOST_ASIO_DISABLE_BOOST_ARRAY 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_ASSERT 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_BIND 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_CHRONO 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_DATE_TIME 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_LIMITS 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_REGEX 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION 1 Chris@16: # define BOOST_ASIO_DISABLE_BOOST_WORKAROUND 1 Chris@16: #else // defined(BOOST_ASIO_STANDALONE) Chris@16: # include Chris@16: # include Chris@16: # define BOOST_ASIO_HAS_BOOST_CONFIG 1 Chris@16: #endif // defined(BOOST_ASIO_STANDALONE) Chris@16: Chris@16: // Default to a header-only implementation. The user must specifically request Chris@16: // separate compilation by defining either BOOST_ASIO_SEPARATE_COMPILATION or Chris@16: // BOOST_ASIO_DYN_LINK (as a DLL/shared library implies separate compilation). Chris@16: #if !defined(BOOST_ASIO_HEADER_ONLY) Chris@16: # if !defined(BOOST_ASIO_SEPARATE_COMPILATION) Chris@16: # if !defined(BOOST_ASIO_DYN_LINK) Chris@16: # define BOOST_ASIO_HEADER_ONLY 1 Chris@16: # endif // !defined(BOOST_ASIO_DYN_LINK) Chris@16: # endif // !defined(BOOST_ASIO_SEPARATE_COMPILATION) Chris@16: #endif // !defined(BOOST_ASIO_HEADER_ONLY) Chris@16: Chris@16: #if defined(BOOST_ASIO_HEADER_ONLY) Chris@16: # define BOOST_ASIO_DECL inline Chris@16: #else // defined(BOOST_ASIO_HEADER_ONLY) Chris@16: # if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__) Chris@16: // We need to import/export our code only if the user has specifically asked Chris@16: // for it by defining BOOST_ASIO_DYN_LINK. Chris@16: # if defined(BOOST_ASIO_DYN_LINK) Chris@16: // Export if this is our own source, otherwise import. Chris@16: # if defined(BOOST_ASIO_SOURCE) Chris@16: # define BOOST_ASIO_DECL __declspec(dllexport) Chris@16: # else // defined(BOOST_ASIO_SOURCE) Chris@16: # define BOOST_ASIO_DECL __declspec(dllimport) Chris@16: # endif // defined(BOOST_ASIO_SOURCE) Chris@16: # endif // defined(BOOST_ASIO_DYN_LINK) Chris@16: # endif // defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__) Chris@16: #endif // defined(BOOST_ASIO_HEADER_ONLY) Chris@16: Chris@16: // If BOOST_ASIO_DECL isn't defined yet define it now. Chris@16: #if !defined(BOOST_ASIO_DECL) Chris@16: # define BOOST_ASIO_DECL Chris@16: #endif // !defined(BOOST_ASIO_DECL) Chris@16: Chris@16: // Microsoft Visual C++ detection. Chris@16: #if !defined(BOOST_ASIO_MSVC) Chris@16: # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC) Chris@16: # define BOOST_ASIO_MSVC BOOST_MSVC Chris@16: # elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__) Chris@16: # define BOOST_ASIO_MSVC _MSC_VER Chris@16: # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC) Chris@16: #endif // defined(BOOST_ASIO_MSVC) Chris@16: Chris@16: // Clang / libc++ detection. Chris@16: #if defined(__clang__) Chris@16: # if (__cplusplus >= 201103) Chris@16: # if __has_include(<__config>) Chris@16: # include <__config> Chris@16: # if defined(_LIBCPP_VERSION) Chris@16: # define BOOST_ASIO_HAS_CLANG_LIBCXX 1 Chris@16: # endif // defined(_LIBCPP_VERSION) Chris@16: # endif // __has_include(<__config>) Chris@16: # endif // (__cplusplus >= 201103) Chris@16: #endif // defined(__clang__) Chris@16: Chris@16: // Support move construction and assignment on compilers known to allow it. Chris@16: #if !defined(BOOST_ASIO_HAS_MOVE) Chris@16: # if !defined(BOOST_ASIO_DISABLE_MOVE) Chris@16: # if defined(__clang__) Chris@16: # if __has_feature(__cxx_rvalue_references__) Chris@16: # define BOOST_ASIO_HAS_MOVE 1 Chris@16: # endif // __has_feature(__cxx_rvalue_references__) Chris@16: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_MOVE 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_MOVE 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_MOVE) Chris@16: #endif // !defined(BOOST_ASIO_HAS_MOVE) Chris@16: Chris@16: // If BOOST_ASIO_MOVE_CAST isn't defined, and move support is available, define Chris@16: // BOOST_ASIO_MOVE_ARG and BOOST_ASIO_MOVE_CAST to take advantage of rvalue Chris@16: // references and perfect forwarding. Chris@16: #if defined(BOOST_ASIO_HAS_MOVE) && !defined(BOOST_ASIO_MOVE_CAST) Chris@16: # define BOOST_ASIO_MOVE_ARG(type) type&& Chris@16: # define BOOST_ASIO_MOVE_CAST(type) static_cast Chris@16: # define BOOST_ASIO_MOVE_CAST2(type1, type2) static_cast Chris@16: #endif // defined(BOOST_ASIO_HAS_MOVE) && !defined(BOOST_ASIO_MOVE_CAST) Chris@16: Chris@16: // If BOOST_ASIO_MOVE_CAST still isn't defined, default to a C++03-compatible Chris@16: // implementation. Note that older g++ and MSVC versions don't like it when you Chris@16: // pass a non-member function through a const reference, so for most compilers Chris@16: // we'll play it safe and stick with the old approach of passing the handler by Chris@16: // value. Chris@16: #if !defined(BOOST_ASIO_MOVE_CAST) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4) Chris@16: # define BOOST_ASIO_MOVE_ARG(type) const type& Chris@16: # else // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4) Chris@16: # define BOOST_ASIO_MOVE_ARG(type) type Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4) Chris@16: # elif defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1400) Chris@16: # define BOOST_ASIO_MOVE_ARG(type) const type& Chris@16: # else // (_MSC_VER >= 1400) Chris@16: # define BOOST_ASIO_MOVE_ARG(type) type Chris@16: # endif // (_MSC_VER >= 1400) Chris@16: # else Chris@16: # define BOOST_ASIO_MOVE_ARG(type) type Chris@16: # endif Chris@16: # define BOOST_ASIO_MOVE_CAST(type) static_cast Chris@16: # define BOOST_ASIO_MOVE_CAST2(type1, type2) static_cast Chris@16: #endif // !defined(BOOST_ASIO_MOVE_CAST) Chris@16: Chris@16: // Support variadic templates on compilers known to allow it. Chris@16: #if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES) Chris@16: # if !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES) Chris@16: # if defined(__clang__) Chris@16: # if __has_feature(__cxx_variadic_templates__) Chris@16: # define BOOST_ASIO_HAS_VARIADIC_TEMPLATES 1 Chris@16: # endif // __has_feature(__cxx_variadic_templates__) Chris@16: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_VARIADIC_TEMPLATES 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES) Chris@16: #endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES) Chris@16: Chris@16: // Support constexpr on compilers known to allow it. Chris@16: #if !defined(BOOST_ASIO_HAS_CONSTEXPR) Chris@16: # if !defined(BOOST_ASIO_DISABLE_CONSTEXPR) Chris@16: # if defined(__clang__) Chris@16: # if __has_feature(__cxx_constexpr__) Chris@16: # define BOOST_ASIO_HAS_CONSTEXPR 1 Chris@16: # endif // __has_feature(__cxx_constexr__) Chris@16: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_CONSTEXPR 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_CONSTEXPR) Chris@16: #endif // !defined(BOOST_ASIO_HAS_CONSTEXPR) Chris@16: #if !defined(BOOST_ASIO_CONSTEXPR) Chris@16: # if defined(BOOST_ASIO_HAS_CONSTEXPR) Chris@16: # define BOOST_ASIO_CONSTEXPR constexpr Chris@16: # else // defined(BOOST_ASIO_HAS_CONSTEXPR) Chris@16: # define BOOST_ASIO_CONSTEXPR Chris@16: # endif // defined(BOOST_ASIO_HAS_CONSTEXPR) Chris@16: #endif // !defined(BOOST_ASIO_CONSTEXPR) Chris@16: Chris@16: // Standard library support for system errors. Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # if __has_include() Chris@101: # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1 Chris@101: # endif // __has_include() Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR) Chris@16: Chris@16: // Compliant C++11 compilers put noexcept specifiers on error_category members. Chris@16: #if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) Chris@16: # if (BOOST_VERSION >= 105300) Chris@16: # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT BOOST_NOEXCEPT Chris@16: # elif defined(__clang__) Chris@16: # if __has_feature(__cxx_noexcept__) Chris@16: # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true) Chris@16: # endif // __has_feature(__cxx_noexcept__) Chris@16: # elif defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true) Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@101: # if defined(BOOST_ASIO_MSVC) Chris@101: # if (_MSC_VER >= 1900) Chris@101: # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true) Chris@101: # endif // (_MSC_VER >= 1900) Chris@101: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) Chris@16: # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT Chris@16: # endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) Chris@16: #endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) Chris@16: Chris@16: // Standard library support for arrays. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_ARRAY) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_ARRAY) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_ARRAY 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # if __has_include() Chris@101: # define BOOST_ASIO_HAS_STD_ARRAY 1 Chris@101: # endif // __has_include() Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_ARRAY 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1600) Chris@16: # define BOOST_ASIO_HAS_STD_ARRAY 1 Chris@16: # endif // (_MSC_VER >= 1600) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_ARRAY) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_ARRAY) Chris@16: Chris@16: // Standard library support for shared_ptr and weak_ptr. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_SHARED_PTR) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_SHARED_PTR) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_SHARED_PTR 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # define BOOST_ASIO_HAS_STD_SHARED_PTR 1 Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_SHARED_PTR 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1600) Chris@16: # define BOOST_ASIO_HAS_STD_SHARED_PTR 1 Chris@16: # endif // (_MSC_VER >= 1600) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_SHARED_PTR) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_SHARED_PTR) Chris@16: Chris@16: // Standard library support for atomic operations. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_ATOMIC) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_ATOMIC) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_ATOMIC 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # if __has_include() Chris@101: # define BOOST_ASIO_HAS_STD_ATOMIC 1 Chris@101: # endif // __has_include() Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_ATOMIC 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_STD_ATOMIC 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_ATOMIC) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_ATOMIC) Chris@16: Chris@16: // Standard library support for chrono. Some standard libraries (such as the Chris@16: // libstdc++ shipped with gcc 4.6) provide monotonic_clock as per early C++0x Chris@16: // drafts, rather than the eventually standardised name of steady_clock. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_CHRONO) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_CHRONO) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_CHRONO 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # if __has_include() Chris@101: # define BOOST_ASIO_HAS_STD_CHRONO 1 Chris@101: # endif // __has_include() Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_CHRONO 1 Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) Chris@16: # define BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK 1 Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_STD_CHRONO 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_CHRONO) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_CHRONO) Chris@16: Chris@16: // Boost support for chrono. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_CHRONO) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO) Chris@16: # if (BOOST_VERSION >= 104700) Chris@16: # define BOOST_ASIO_HAS_BOOST_CHRONO 1 Chris@16: # endif // (BOOST_VERSION >= 104700) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_CHRONO) Chris@16: Chris@16: // Boost support for the DateTime library. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_DATE_TIME) Chris@16: # define BOOST_ASIO_HAS_BOOST_DATE_TIME 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_DATE_TIME) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) Chris@16: Chris@16: // Standard library support for addressof. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_ADDRESSOF) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_ADDRESSOF 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # define BOOST_ASIO_HAS_STD_ADDRESSOF 1 Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@101: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_ADDRESSOF 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@101: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_STD_ADDRESSOF 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_ADDRESSOF) Chris@16: Chris@16: // Standard library support for the function class. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_FUNCTION) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_FUNCTION) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_FUNCTION 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # define BOOST_ASIO_HAS_STD_FUNCTION 1 Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_FUNCTION 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_STD_FUNCTION 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_FUNCTION) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_FUNCTION) Chris@16: Chris@16: // Standard library support for type traits. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # if __has_include() Chris@101: # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1 Chris@101: # endif // __has_include() Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS) Chris@16: Chris@16: // Standard library support for the cstdint header. Chris@16: #if !defined(BOOST_ASIO_HAS_CSTDINT) Chris@16: # if !defined(BOOST_ASIO_DISABLE_CSTDINT) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_CSTDINT 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # define BOOST_ASIO_HAS_CSTDINT 1 Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_CSTDINT 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_CSTDINT 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_CSTDINT) Chris@16: #endif // !defined(BOOST_ASIO_HAS_CSTDINT) Chris@16: Chris@16: // Standard library support for the thread class. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_THREAD) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_THREAD) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_THREAD 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # if __has_include() Chris@101: # define BOOST_ASIO_HAS_STD_THREAD 1 Chris@101: # endif // __has_include() Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_THREAD 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_STD_THREAD 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_THREAD) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_THREAD) Chris@16: Chris@16: // Standard library support for the mutex and condition variable classes. Chris@16: #if !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR) Chris@16: # if !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR) Chris@101: # if defined(__clang__) Chris@101: # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX) Chris@101: # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1 Chris@101: # elif (__cplusplus >= 201103) Chris@101: # if __has_include() Chris@101: # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1 Chris@101: # endif // __has_include() Chris@101: # endif // (__cplusplus >= 201103) Chris@101: # endif // defined(__clang__) Chris@16: # if defined(__GNUC__) Chris@16: # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) Chris@16: # if defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1 Chris@16: # endif // defined(__GXX_EXPERIMENTAL_CXX0X__) Chris@16: # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) Chris@16: # endif // defined(__GNUC__) Chris@16: # if defined(BOOST_ASIO_MSVC) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1 Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR) Chris@16: #endif // !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR) Chris@16: Chris@16: // WinRT target. Chris@16: #if !defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: # if defined(__cplusplus_winrt) Chris@16: # include Chris@101: # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) \ Chris@101: && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) Chris@16: # define BOOST_ASIO_WINDOWS_RUNTIME 1 Chris@101: # endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) Chris@101: // && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) Chris@16: # endif // defined(__cplusplus_winrt) Chris@16: #endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: Chris@16: // Windows target. Excludes WinRT. Chris@16: #if !defined(BOOST_ASIO_WINDOWS) Chris@16: # if !defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS) Chris@16: # define BOOST_ASIO_WINDOWS 1 Chris@16: # elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) Chris@16: # define BOOST_ASIO_WINDOWS 1 Chris@16: # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS) Chris@16: # endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: #endif // !defined(BOOST_ASIO_WINDOWS) Chris@16: Chris@16: // Windows: target OS version. Chris@16: #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: # if !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS) Chris@16: # if defined(_MSC_VER) || defined(__BORLANDC__) Chris@16: # pragma message( \ Chris@16: "Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:\n"\ Chris@16: "- add -D_WIN32_WINNT=0x0501 to the compiler command line; or\n"\ Chris@16: "- add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.\n"\ Chris@16: "Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).") Chris@16: # else // defined(_MSC_VER) || defined(__BORLANDC__) Chris@16: # warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. Chris@16: # warning For example, add -D_WIN32_WINNT=0x0501 to the compiler command line. Chris@16: # warning Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target). Chris@16: # endif // defined(_MSC_VER) || defined(__BORLANDC__) Chris@16: # define _WIN32_WINNT 0x0501 Chris@16: # endif // !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS) Chris@16: # if defined(_MSC_VER) Chris@16: # if defined(_WIN32) && !defined(WIN32) Chris@16: # if !defined(_WINSOCK2API_) Chris@16: # define WIN32 // Needed for correct types in winsock2.h Chris@16: # else // !defined(_WINSOCK2API_) Chris@16: # error Please define the macro WIN32 in your compiler options Chris@16: # endif // !defined(_WINSOCK2API_) Chris@16: # endif // defined(_WIN32) && !defined(WIN32) Chris@16: # endif // defined(_MSC_VER) Chris@16: # if defined(__BORLANDC__) Chris@16: # if defined(__WIN32__) && !defined(WIN32) Chris@16: # if !defined(_WINSOCK2API_) Chris@16: # define WIN32 // Needed for correct types in winsock2.h Chris@16: # else // !defined(_WINSOCK2API_) Chris@16: # error Please define the macro WIN32 in your compiler options Chris@16: # endif // !defined(_WINSOCK2API_) Chris@16: # endif // defined(__WIN32__) && !defined(WIN32) Chris@16: # endif // defined(__BORLANDC__) Chris@16: # if defined(__CYGWIN__) Chris@16: # if !defined(__USE_W32_SOCKETS) Chris@16: # error You must add -D__USE_W32_SOCKETS to your compiler options. Chris@16: # endif // !defined(__USE_W32_SOCKETS) Chris@16: # endif // defined(__CYGWIN__) Chris@16: #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: Chris@16: // Windows: minimise header inclusion. Chris@16: #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: # if !defined(BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN) Chris@16: # if !defined(WIN32_LEAN_AND_MEAN) Chris@16: # define WIN32_LEAN_AND_MEAN Chris@16: # endif // !defined(WIN32_LEAN_AND_MEAN) Chris@16: # endif // !defined(BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN) Chris@16: #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: Chris@16: // Windows: suppress definition of "min" and "max" macros. Chris@16: #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: # if !defined(BOOST_ASIO_NO_NOMINMAX) Chris@16: # if !defined(NOMINMAX) Chris@16: # define NOMINMAX 1 Chris@16: # endif // !defined(NOMINMAX) Chris@16: # endif // !defined(BOOST_ASIO_NO_NOMINMAX) Chris@16: #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: Chris@16: // Windows: IO Completion Ports. Chris@16: #if !defined(BOOST_ASIO_HAS_IOCP) Chris@16: # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: # if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400) Chris@16: # if !defined(UNDER_CE) Chris@16: # if !defined(BOOST_ASIO_DISABLE_IOCP) Chris@16: # define BOOST_ASIO_HAS_IOCP 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_IOCP) Chris@16: # endif // !defined(UNDER_CE) Chris@16: # endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400) Chris@16: # endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: #endif // !defined(BOOST_ASIO_HAS_IOCP) Chris@16: Chris@101: // On POSIX (and POSIX-like) platforms we need to include unistd.h in order to Chris@101: // get access to the various platform feature macros, e.g. to be able to test Chris@101: // for threads support. Chris@101: #if !defined(BOOST_ASIO_HAS_UNISTD_H) Chris@101: # if !defined(BOOST_ASIO_HAS_BOOST_CONFIG) Chris@101: # if defined(unix) \ Chris@101: || defined(__unix) \ Chris@101: || defined(_XOPEN_SOURCE) \ Chris@101: || defined(_POSIX_SOURCE) \ Chris@101: || (defined(__MACH__) && defined(__APPLE__)) \ Chris@101: || defined(__FreeBSD__) \ Chris@101: || defined(__NetBSD__) \ Chris@101: || defined(__OpenBSD__) \ Chris@101: || defined(__linux__) Chris@101: # define BOOST_ASIO_HAS_UNISTD_H 1 Chris@101: # endif Chris@101: # endif // !defined(BOOST_ASIO_HAS_BOOST_CONFIG) Chris@101: #endif // !defined(BOOST_ASIO_HAS_UNISTD_H) Chris@101: #if defined(BOOST_ASIO_HAS_UNISTD_H) Chris@101: # include Chris@101: #endif // defined(BOOST_ASIO_HAS_UNISTD_H) Chris@101: Chris@16: // Linux: epoll, eventfd and timerfd. Chris@16: #if defined(__linux__) Chris@16: # include Chris@16: # if !defined(BOOST_ASIO_HAS_EPOLL) Chris@16: # if !defined(BOOST_ASIO_DISABLE_EPOLL) Chris@16: # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,45) Chris@16: # define BOOST_ASIO_HAS_EPOLL 1 Chris@16: # endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,45) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_EPOLL) Chris@16: # endif // !defined(BOOST_ASIO_HAS_EPOLL) Chris@16: # if !defined(BOOST_ASIO_HAS_EVENTFD) Chris@16: # if !defined(BOOST_ASIO_DISABLE_EVENTFD) Chris@16: # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) Chris@16: # define BOOST_ASIO_HAS_EVENTFD 1 Chris@16: # endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_EVENTFD) Chris@16: # endif // !defined(BOOST_ASIO_HAS_EVENTFD) Chris@16: # if !defined(BOOST_ASIO_HAS_TIMERFD) Chris@16: # if defined(BOOST_ASIO_HAS_EPOLL) Chris@16: # if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) Chris@16: # define BOOST_ASIO_HAS_TIMERFD 1 Chris@16: # endif // (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) Chris@16: # endif // defined(BOOST_ASIO_HAS_EPOLL) Chris@16: # endif // !defined(BOOST_ASIO_HAS_TIMERFD) Chris@16: #endif // defined(__linux__) Chris@16: Chris@16: // Mac OS X, FreeBSD, NetBSD, OpenBSD: kqueue. Chris@16: #if (defined(__MACH__) && defined(__APPLE__)) \ Chris@16: || defined(__FreeBSD__) \ Chris@16: || defined(__NetBSD__) \ Chris@16: || defined(__OpenBSD__) Chris@16: # if !defined(BOOST_ASIO_HAS_KQUEUE) Chris@16: # if !defined(BOOST_ASIO_DISABLE_KQUEUE) Chris@16: # define BOOST_ASIO_HAS_KQUEUE 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_KQUEUE) Chris@16: # endif // !defined(BOOST_ASIO_HAS_KQUEUE) Chris@16: #endif // (defined(__MACH__) && defined(__APPLE__)) Chris@16: // || defined(__FreeBSD__) Chris@16: // || defined(__NetBSD__) Chris@16: // || defined(__OpenBSD__) Chris@16: Chris@16: // Solaris: /dev/poll. Chris@16: #if defined(__sun) Chris@16: # if !defined(BOOST_ASIO_HAS_DEV_POLL) Chris@16: # if !defined(BOOST_ASIO_DISABLE_DEV_POLL) Chris@16: # define BOOST_ASIO_HAS_DEV_POLL 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_DEV_POLL) Chris@16: # endif // !defined(BOOST_ASIO_HAS_DEV_POLL) Chris@16: #endif // defined(__sun) Chris@16: Chris@16: // Serial ports. Chris@16: #if !defined(BOOST_ASIO_HAS_SERIAL_PORT) Chris@16: # if defined(BOOST_ASIO_HAS_IOCP) \ Chris@16: || !defined(BOOST_ASIO_WINDOWS) \ Chris@16: && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \ Chris@16: && !defined(__CYGWIN__) Chris@16: # if !defined(__SYMBIAN32__) Chris@16: # if !defined(BOOST_ASIO_DISABLE_SERIAL_PORT) Chris@16: # define BOOST_ASIO_HAS_SERIAL_PORT 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_SERIAL_PORT) Chris@16: # endif // !defined(__SYMBIAN32__) Chris@16: # endif // defined(BOOST_ASIO_HAS_IOCP) Chris@16: // || !defined(BOOST_ASIO_WINDOWS) Chris@16: // && !defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: // && !defined(__CYGWIN__) Chris@16: #endif // !defined(BOOST_ASIO_HAS_SERIAL_PORT) Chris@16: Chris@16: // Windows: stream handles. Chris@16: #if !defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) Chris@16: # if !defined(BOOST_ASIO_DISABLE_WINDOWS_STREAM_HANDLE) Chris@16: # if defined(BOOST_ASIO_HAS_IOCP) Chris@16: # define BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE 1 Chris@16: # endif // defined(BOOST_ASIO_HAS_IOCP) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_STREAM_HANDLE) Chris@16: #endif // !defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) Chris@16: Chris@16: // Windows: random access handles. Chris@16: #if !defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) Chris@16: # if !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE) Chris@16: # if defined(BOOST_ASIO_HAS_IOCP) Chris@16: # define BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE 1 Chris@16: # endif // defined(BOOST_ASIO_HAS_IOCP) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE) Chris@16: #endif // !defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) Chris@16: Chris@16: // Windows: object handles. Chris@16: #if !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) Chris@16: # if !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE) Chris@16: # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: # if !defined(UNDER_CE) Chris@16: # define BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE 1 Chris@16: # endif // !defined(UNDER_CE) Chris@16: # endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE) Chris@16: #endif // !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) Chris@16: Chris@16: // Windows: OVERLAPPED wrapper. Chris@16: #if !defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR) Chris@16: # if !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR) Chris@16: # if defined(BOOST_ASIO_HAS_IOCP) Chris@16: # define BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR 1 Chris@16: # endif // defined(BOOST_ASIO_HAS_IOCP) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR) Chris@16: #endif // !defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR) Chris@16: Chris@16: // POSIX: stream-oriented file descriptors. Chris@16: #if !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) Chris@16: # if !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR) Chris@16: # if !defined(BOOST_ASIO_WINDOWS) \ Chris@16: && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \ Chris@16: && !defined(__CYGWIN__) Chris@16: # define BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR 1 Chris@16: # endif // !defined(BOOST_ASIO_WINDOWS) Chris@16: // && !defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: // && !defined(__CYGWIN__) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR) Chris@16: #endif // !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) Chris@16: Chris@16: // UNIX domain sockets. Chris@16: #if !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) Chris@16: # if !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS) Chris@16: # if !defined(BOOST_ASIO_WINDOWS) \ Chris@16: && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \ Chris@16: && !defined(__CYGWIN__) Chris@16: # define BOOST_ASIO_HAS_LOCAL_SOCKETS 1 Chris@16: # endif // !defined(BOOST_ASIO_WINDOWS) Chris@16: // && !defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: // && !defined(__CYGWIN__) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS) Chris@16: #endif // !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) Chris@16: Chris@16: // Can use sigaction() instead of signal(). Chris@16: #if !defined(BOOST_ASIO_HAS_SIGACTION) Chris@16: # if !defined(BOOST_ASIO_DISABLE_SIGACTION) Chris@16: # if !defined(BOOST_ASIO_WINDOWS) \ Chris@16: && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \ Chris@16: && !defined(__CYGWIN__) Chris@16: # define BOOST_ASIO_HAS_SIGACTION 1 Chris@16: # endif // !defined(BOOST_ASIO_WINDOWS) Chris@16: // && !defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: // && !defined(__CYGWIN__) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_SIGACTION) Chris@16: #endif // !defined(BOOST_ASIO_HAS_SIGACTION) Chris@16: Chris@16: // Can use signal(). Chris@16: #if !defined(BOOST_ASIO_HAS_SIGNAL) Chris@16: # if !defined(BOOST_ASIO_DISABLE_SIGNAL) Chris@16: # if !defined(UNDER_CE) Chris@16: # define BOOST_ASIO_HAS_SIGNAL 1 Chris@16: # endif // !defined(UNDER_CE) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_SIGNAL) Chris@16: #endif // !defined(BOOST_ASIO_HAS_SIGNAL) Chris@16: Chris@101: // Can use getaddrinfo() and getnameinfo(). Chris@101: #if !defined(BOOST_ASIO_HAS_GETADDRINFO) Chris@101: # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) Chris@101: # if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501) Chris@101: # define BOOST_ASIO_HAS_GETADDRINFO 1 Chris@101: # elif defined(UNDER_CE) Chris@101: # define BOOST_ASIO_HAS_GETADDRINFO 1 Chris@101: # endif // defined(UNDER_CE) Chris@101: # elif !(defined(__MACH__) && defined(__APPLE__)) Chris@101: # define BOOST_ASIO_HAS_GETADDRINFO 1 Chris@101: # endif // !(defined(__MACH__) && defined(__APPLE__)) Chris@101: #endif // !defined(BOOST_ASIO_HAS_GETADDRINFO) Chris@101: Chris@16: // Whether standard iostreams are disabled. Chris@16: #if !defined(BOOST_ASIO_NO_IOSTREAM) Chris@16: # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_IOSTREAM) Chris@16: # define BOOST_ASIO_NO_IOSTREAM 1 Chris@16: # endif // !defined(BOOST_NO_IOSTREAM) Chris@16: #endif // !defined(BOOST_ASIO_NO_IOSTREAM) Chris@16: Chris@16: // Whether exception handling is disabled. Chris@16: #if !defined(BOOST_ASIO_NO_EXCEPTIONS) Chris@16: # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_EXCEPTIONS) Chris@16: # define BOOST_ASIO_NO_EXCEPTIONS 1 Chris@16: # endif // !defined(BOOST_NO_EXCEPTIONS) Chris@16: #endif // !defined(BOOST_ASIO_NO_EXCEPTIONS) Chris@16: Chris@16: // Whether the typeid operator is supported. Chris@16: #if !defined(BOOST_ASIO_NO_TYPEID) Chris@16: # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_TYPEID) Chris@16: # define BOOST_ASIO_NO_TYPEID 1 Chris@16: # endif // !defined(BOOST_NO_TYPEID) Chris@16: #endif // !defined(BOOST_ASIO_NO_TYPEID) Chris@16: Chris@16: // Threads. Chris@16: #if !defined(BOOST_ASIO_HAS_THREADS) Chris@16: # if !defined(BOOST_ASIO_DISABLE_THREADS) Chris@16: # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS) Chris@16: # define BOOST_ASIO_HAS_THREADS 1 Chris@16: # elif defined(_MSC_VER) && defined(_MT) Chris@16: # define BOOST_ASIO_HAS_THREADS 1 Chris@16: # elif defined(__BORLANDC__) && defined(__MT__) Chris@16: # define BOOST_ASIO_HAS_THREADS 1 Chris@16: # elif defined(_POSIX_THREADS) Chris@16: # define BOOST_ASIO_HAS_THREADS 1 Chris@16: # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_THREADS) Chris@16: #endif // !defined(BOOST_ASIO_HAS_THREADS) Chris@16: Chris@16: // POSIX threads. Chris@16: #if !defined(BOOST_ASIO_HAS_PTHREADS) Chris@16: # if defined(BOOST_ASIO_HAS_THREADS) Chris@16: # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS) Chris@16: # define BOOST_ASIO_HAS_PTHREADS 1 Chris@16: # elif defined(_POSIX_THREADS) Chris@16: # define BOOST_ASIO_HAS_PTHREADS 1 Chris@16: # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS) Chris@16: # endif // defined(BOOST_ASIO_HAS_THREADS) Chris@16: #endif // !defined(BOOST_ASIO_HAS_PTHREADS) Chris@16: Chris@16: // Helper to prevent macro expansion. Chris@16: #define BOOST_ASIO_PREVENT_MACRO_SUBSTITUTION Chris@16: Chris@16: // Helper to define in-class constants. Chris@16: #if !defined(BOOST_ASIO_STATIC_CONSTANT) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT) Chris@16: # define BOOST_ASIO_STATIC_CONSTANT(type, assignment) \ Chris@16: BOOST_STATIC_CONSTANT(type, assignment) Chris@16: # else // !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT) Chris@16: # define BOOST_ASIO_STATIC_CONSTANT(type, assignment) \ Chris@16: static const type assignment Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT) Chris@16: #endif // !defined(BOOST_ASIO_STATIC_CONSTANT) Chris@16: Chris@16: // Boost array library. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_ARRAY) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_ARRAY) Chris@16: # define BOOST_ASIO_HAS_BOOST_ARRAY 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_ARRAY) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_ARRAY) Chris@16: Chris@16: // Boost assert macro. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_ASSERT) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_ASSERT) Chris@16: # define BOOST_ASIO_HAS_BOOST_ASSERT 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_ASSERT) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_ASSERT) Chris@16: Chris@16: // Boost limits header. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_LIMITS) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_LIMITS) Chris@16: # define BOOST_ASIO_HAS_BOOST_LIMITS 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_LIMITS) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_LIMITS) Chris@16: Chris@16: // Boost throw_exception function. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION) Chris@16: # define BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION) Chris@16: Chris@16: // Boost regex library. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_REGEX) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_REGEX) Chris@16: # define BOOST_ASIO_HAS_BOOST_REGEX 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_REGEX) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_REGEX) Chris@16: Chris@16: // Boost bind function. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_BIND) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_BIND) Chris@16: # define BOOST_ASIO_HAS_BOOST_BIND 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_BIND) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_BIND) Chris@16: Chris@16: // Boost's BOOST_WORKAROUND macro. Chris@16: #if !defined(BOOST_ASIO_HAS_BOOST_WORKAROUND) Chris@16: # if !defined(BOOST_ASIO_DISABLE_BOOST_WORKAROUND) Chris@16: # define BOOST_ASIO_HAS_BOOST_WORKAROUND 1 Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_BOOST_WORKAROUND) Chris@16: #endif // !defined(BOOST_ASIO_HAS_BOOST_WORKAROUND) Chris@16: Chris@16: // Microsoft Visual C++'s secure C runtime library. Chris@16: #if !defined(BOOST_ASIO_HAS_SECURE_RTL) Chris@16: # if !defined(BOOST_ASIO_DISABLE_SECURE_RTL) Chris@16: # if defined(BOOST_ASIO_MSVC) \ Chris@16: && (BOOST_ASIO_MSVC >= 1400) \ Chris@16: && !defined(UNDER_CE) Chris@16: # define BOOST_ASIO_HAS_SECURE_RTL 1 Chris@16: # endif // defined(BOOST_ASIO_MSVC) Chris@16: // && (BOOST_ASIO_MSVC >= 1400) Chris@16: // && !defined(UNDER_CE) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_SECURE_RTL) Chris@16: #endif // !defined(BOOST_ASIO_HAS_SECURE_RTL) Chris@16: Chris@16: // Handler hooking. Disabled for ancient Borland C++ and gcc compilers. Chris@16: #if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS) Chris@16: # if !defined(BOOST_ASIO_DISABLE_HANDLER_HOOKS) Chris@16: # if defined(__GNUC__) Chris@16: # if (__GNUC__ >= 3) Chris@16: # define BOOST_ASIO_HAS_HANDLER_HOOKS 1 Chris@16: # endif // (__GNUC__ >= 3) Chris@16: # elif !defined(__BORLANDC__) Chris@16: # define BOOST_ASIO_HAS_HANDLER_HOOKS 1 Chris@16: # endif // !defined(__BORLANDC__) Chris@16: # endif // !defined(BOOST_ASIO_DISABLE_HANDLER_HOOKS) Chris@16: #endif // !defined(BOOST_ASIO_HAS_HANDLER_HOOKS) Chris@16: Chris@16: // Support for the __thread keyword extension. Chris@16: #if !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION) Chris@16: # if defined(__linux__) Chris@16: # if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) Chris@16: # if ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3) Chris@16: # if !defined(__INTEL_COMPILER) && !defined(__ICL) Chris@16: # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1 Chris@16: # define BOOST_ASIO_THREAD_KEYWORD __thread Chris@16: # elif defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100) Chris@16: # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1 Chris@16: # endif // defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100) Chris@16: # endif // ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3) Chris@16: # endif // defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) Chris@16: # endif // defined(__linux__) Chris@16: # if defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: # if (_MSC_VER >= 1700) Chris@16: # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1 Chris@16: # define BOOST_ASIO_THREAD_KEYWORD __declspec(thread) Chris@16: # endif // (_MSC_VER >= 1700) Chris@16: # endif // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME) Chris@16: #endif // !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION) Chris@16: #if !defined(BOOST_ASIO_THREAD_KEYWORD) Chris@16: # define BOOST_ASIO_THREAD_KEYWORD __thread Chris@16: #endif // !defined(BOOST_ASIO_THREAD_KEYWORD) Chris@16: Chris@16: // Support for POSIX ssize_t typedef. Chris@16: #if !defined(BOOST_ASIO_DISABLE_SSIZE_T) Chris@16: # if defined(__linux__) \ Chris@16: || (defined(__MACH__) && defined(__APPLE__)) Chris@16: # define BOOST_ASIO_HAS_SSIZE_T 1 Chris@16: # endif // defined(__linux__) Chris@16: // || (defined(__MACH__) && defined(__APPLE__)) Chris@16: #endif // !defined(BOOST_ASIO_DISABLE_SSIZE_T) Chris@16: Chris@16: #endif // BOOST_ASIO_DETAIL_CONFIG_HPP