Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/log/detail/config.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/log/detail/config.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,340 @@ +/* + * Copyright Andrey Semashev 2007 - 2013. + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +/*! + * \file config.hpp + * \author Andrey Semashev + * \date 08.03.2007 + * + * \brief This header is the Boost.Log library implementation, see the library documentation + * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html. In this file + * internal configuration macros are defined. + */ + +#ifndef BOOST_LOG_DETAIL_CONFIG_HPP_INCLUDED_ +#define BOOST_LOG_DETAIL_CONFIG_HPP_INCLUDED_ + +// This check must be before any system headers are included, or __MSVCRT_VERSION__ may get defined to 0x0600 +#if defined(__MINGW32__) && !defined(__MSVCRT_VERSION__) +// Target MinGW headers to at least MSVC 7.0 runtime by default. This will enable some useful functions. +#define __MSVCRT_VERSION__ 0x0700 +#endif + +#include <limits.h> // To bring in libc macros +#include <boost/config.hpp> + +#if defined(BOOST_NO_RTTI) +# error Boost.Log: RTTI is required by the library +#endif + +#if !defined(BOOST_WINDOWS) +# ifndef BOOST_LOG_WITHOUT_DEBUG_OUTPUT +# define BOOST_LOG_WITHOUT_DEBUG_OUTPUT +# endif +# ifndef BOOST_LOG_WITHOUT_EVENT_LOG +# define BOOST_LOG_WITHOUT_EVENT_LOG +# endif +#endif + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if defined(BOOST_MSVC) + // For some reason MSVC 9.0 fails to link the library if static integral constants are defined in cpp +# define BOOST_LOG_BROKEN_STATIC_CONSTANTS_LINKAGE +# if _MSC_VER <= 1310 + // MSVC 7.1 sometimes fails to match out-of-class template function definitions with + // their declarations if the return type or arguments of the functions involve typename keyword + // and depend on the template parameters. +# define BOOST_LOG_BROKEN_TEMPLATE_DEFINITION_MATCHING +# endif +# if _MSC_VER <= 1400 + // Older MSVC versions reject friend declarations for class template specializations +# define BOOST_LOG_BROKEN_FRIEND_TEMPLATE_SPECIALIZATIONS +# endif +# if _MSC_VER <= 1600 + // MSVC up to 10.0 attempts to invoke copy constructor when initializing a const reference from rvalue returned from a function. + // This fails when the returned value cannot be copied (only moved): + // + // class base {}; + // class derived : public base { BOOST_MOVABLE_BUT_NOT_COPYABLE(derived) }; + // derived foo(); + // base const& var = foo(); // attempts to call copy constructor of derived +# define BOOST_LOG_BROKEN_REFERENCE_FROM_RVALUE_INIT +# endif +# if !defined(_STLPORT_VERSION) + // MSVC 9.0 mandates packaging of STL classes, which apparently affects alignment and + // makes alignment_of< T >::value no longer be a power of 2 for types that derive from STL classes. + // This breaks type_with_alignment and everything that relies on it. + // This doesn't happen with non-native STLs, such as STLPort. Strangely, this doesn't show with + // STL classes themselves or most of the user-defined derived classes. + // Not sure if that happens with other MSVC versions. + // See: http://svn.boost.org/trac/boost/ticket/1946 +# define BOOST_LOG_BROKEN_STL_ALIGNMENT +# endif +#endif + +#if defined(BOOST_INTEL) || defined(__SUNPRO_CC) + // Intel compiler and Sun Studio 12.3 have problems with friend declarations for nested class templates +# define BOOST_LOG_NO_MEMBER_TEMPLATE_FRIENDS +#endif + +#if defined(BOOST_MSVC) && BOOST_MSVC <= 1600 + // MSVC cannot interpret constant expressions in certain contexts, such as non-type template parameters +# define BOOST_LOG_BROKEN_CONSTANT_EXPRESSIONS +#endif + +#if defined(__CYGWIN__) + // Boost.ASIO is broken on Cygwin +# define BOOST_LOG_NO_ASIO +#endif + +#if !defined(BOOST_LOG_USE_NATIVE_SYSLOG) && defined(BOOST_LOG_NO_ASIO) +# ifndef BOOST_LOG_WITHOUT_SYSLOG +# define BOOST_LOG_WITHOUT_SYSLOG +# endif +#endif + +#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 2) + // GCC 4.1 and 4.2 have buggy anonymous namespaces support, which interferes with symbol linkage +# define BOOST_LOG_ANONYMOUS_NAMESPACE namespace anonymous {} using namespace anonymous; namespace anonymous +#else +# define BOOST_LOG_ANONYMOUS_NAMESPACE namespace +#endif + +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || (defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ <= 6)) +// GCC up to 4.6 (inclusively) did not support expanding template argument packs into non-variadic template arguments +#define BOOST_LOG_NO_CXX11_ARG_PACKS_TO_NON_VARIADIC_ARGS_EXPANSION +#endif + +#if defined(_MSC_VER) +# define BOOST_LOG_NO_VTABLE __declspec(novtable) +#elif defined(__GNUC__) +# define BOOST_LOG_NO_VTABLE +#else +# define BOOST_LOG_NO_VTABLE +#endif + +// An MS-like compilers' extension that allows to optimize away the needless code +#if defined(_MSC_VER) +# define BOOST_LOG_ASSUME(expr) __assume(expr) +#else +# define BOOST_LOG_ASSUME(expr) +#endif + +// The statement marking unreachable branches of code to avoid warnings +#if defined(BOOST_CLANG) +# if __has_builtin(__builtin_unreachable) +# define BOOST_LOG_UNREACHABLE() __builtin_unreachable() +# endif +#elif defined(__GNUC__) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define BOOST_LOG_UNREACHABLE() __builtin_unreachable() +# endif +#elif defined(_MSC_VER) +# define BOOST_LOG_UNREACHABLE() __assume(0) +#endif +#if !defined(BOOST_LOG_UNREACHABLE) +# define BOOST_LOG_UNREACHABLE() +#endif + +// Some compilers support a special attribute that shows that a function won't return +#if defined(__GNUC__) || (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x590) + // GCC and Sun Studio 12 support attribute syntax +# define BOOST_LOG_NORETURN __attribute__((noreturn)) +#elif defined (_MSC_VER) + // Microsoft-compatible compilers go here +# define BOOST_LOG_NORETURN __declspec(noreturn) +#else + // The rest compilers might emit bogus warnings about missing return statements + // in functions with non-void return types when throw_exception is used. +# define BOOST_LOG_NORETURN +#endif + +// cxxabi.h availability macro +#if defined(BOOST_CLANG) +# if defined(__has_include) && __has_include(<cxxabi.h>) +# define BOOST_LOG_HAS_CXXABI_H +# endif +#elif defined(__GNUC__) && !defined(__QNX__) +# define BOOST_LOG_HAS_CXXABI_H +#endif + +#if !defined(BOOST_LOG_BUILDING_THE_LIB) + +// Detect if we're dealing with dll +# if defined(BOOST_LOG_DYN_LINK) || defined(BOOST_ALL_DYN_LINK) +# define BOOST_LOG_DLL +# endif + +# if defined(BOOST_LOG_DLL) +# if defined(BOOST_SYMBOL_IMPORT) +# define BOOST_LOG_API BOOST_SYMBOL_IMPORT +# elif defined(BOOST_HAS_DECLSPEC) +# define BOOST_LOG_API __declspec(dllimport) +# endif +# endif +# ifndef BOOST_LOG_API +# define BOOST_LOG_API +# endif +// +// Automatically link to the correct build variant where possible. +// +# if !defined(BOOST_ALL_NO_LIB) +# if !defined(BOOST_LOG_NO_LIB) +# define BOOST_LIB_NAME boost_log +# if defined(BOOST_LOG_DLL) +# define BOOST_DYN_LINK +# endif +# include <boost/config/auto_link.hpp> +# endif + // In static-library builds compilers ignore auto-link comments from Boost.Log binary to + // other Boost libraries. We explicitly add comments here for other libraries. + // In dynamic-library builds this is not needed. +# if !defined(BOOST_LOG_DLL) +# include <boost/system/config.hpp> +# include <boost/filesystem/config.hpp> +# if !defined(BOOST_DATE_TIME_NO_LIB) && !defined(BOOST_DATE_TIME_SOURCE) +# define BOOST_LIB_NAME boost_date_time +# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK) +# define BOOST_DYN_LINK +# endif +# include <boost/config/auto_link.hpp> +# endif + // Boost.Thread's config is included below, if needed +# endif +# endif // auto-linking disabled + +#else // !defined(BOOST_LOG_BUILDING_THE_LIB) + +# if defined(BOOST_LOG_DLL) +# if defined(BOOST_SYMBOL_EXPORT) +# define BOOST_LOG_API BOOST_SYMBOL_EXPORT +# elif defined(BOOST_HAS_DECLSPEC) +# define BOOST_LOG_API __declspec(dllexport) +# endif +# endif +# ifndef BOOST_LOG_API +# define BOOST_LOG_API BOOST_SYMBOL_VISIBLE +# endif + +#endif // !defined(BOOST_LOG_BUILDING_THE_LIB) + +// By default we provide support for both char and wchar_t +#if !defined(BOOST_LOG_WITHOUT_CHAR) +# define BOOST_LOG_USE_CHAR +#endif +#if !defined(BOOST_LOG_WITHOUT_WCHAR_T) +# define BOOST_LOG_USE_WCHAR_T +#endif + +#if !defined(BOOST_LOG_DOXYGEN_PASS) + // Check if multithreading is supported +# if !defined(BOOST_LOG_NO_THREADS) && !defined(BOOST_HAS_THREADS) +# define BOOST_LOG_NO_THREADS +# endif // !defined(BOOST_LOG_NO_THREADS) && !defined(BOOST_HAS_THREADS) +#endif // !defined(BOOST_LOG_DOXYGEN_PASS) + +#if !defined(BOOST_LOG_NO_THREADS) + // We need this header to (i) enable auto-linking with Boost.Thread and + // (ii) to bring in configuration macros of Boost.Thread. +# include <boost/thread/detail/config.hpp> +#endif // !defined(BOOST_LOG_NO_THREADS) + +#if !defined(BOOST_LOG_NO_THREADS) +# define BOOST_LOG_EXPR_IF_MT(expr) expr +#else +# undef BOOST_LOG_USE_COMPILER_TLS +# define BOOST_LOG_EXPR_IF_MT(expr) +#endif // !defined(BOOST_LOG_NO_THREADS) + +#if defined(BOOST_LOG_USE_COMPILER_TLS) +# if defined(__GNUC__) || defined(__SUNPRO_CC) +# define BOOST_LOG_TLS __thread +# elif defined(BOOST_MSVC) +# define BOOST_LOG_TLS __declspec(thread) +# else +# undef BOOST_LOG_USE_COMPILER_TLS +# endif +#endif // defined(BOOST_LOG_USE_COMPILER_TLS) + +namespace boost { + +// Setup namespace name +#if !defined(BOOST_LOG_DOXYGEN_PASS) +# if defined(BOOST_LOG_DLL) +# if defined(BOOST_LOG_NO_THREADS) +# define BOOST_LOG_VERSION_NAMESPACE v2_st +# else +# if defined(BOOST_THREAD_PLATFORM_PTHREAD) +# define BOOST_LOG_VERSION_NAMESPACE v2_mt_posix +# elif defined(BOOST_THREAD_PLATFORM_WIN32) +# if defined(BOOST_LOG_USE_WINNT6_API) +# define BOOST_LOG_VERSION_NAMESPACE v2_mt_nt6 +# else +# define BOOST_LOG_VERSION_NAMESPACE v2_mt_nt5 +# endif // defined(BOOST_LOG_USE_WINNT6_API) +# else +# define BOOST_LOG_VERSION_NAMESPACE v2_mt +# endif +# endif // defined(BOOST_LOG_NO_THREADS) +# else +# if defined(BOOST_LOG_NO_THREADS) +# define BOOST_LOG_VERSION_NAMESPACE v2s_st +# else +# if defined(BOOST_THREAD_PLATFORM_PTHREAD) +# define BOOST_LOG_VERSION_NAMESPACE v2s_mt_posix +# elif defined(BOOST_THREAD_PLATFORM_WIN32) +# if defined(BOOST_LOG_USE_WINNT6_API) +# define BOOST_LOG_VERSION_NAMESPACE v2s_mt_nt6 +# else +# define BOOST_LOG_VERSION_NAMESPACE v2s_mt_nt5 +# endif // defined(BOOST_LOG_USE_WINNT6_API) +# else +# define BOOST_LOG_VERSION_NAMESPACE v2s_mt +# endif +# endif // defined(BOOST_LOG_NO_THREADS) +# endif // defined(BOOST_LOG_DLL) + + +namespace log { + +# if !defined(BOOST_NO_CXX11_INLINE_NAMESPACES) + +inline namespace BOOST_LOG_VERSION_NAMESPACE {} +} + +# define BOOST_LOG_OPEN_NAMESPACE namespace log { inline namespace BOOST_LOG_VERSION_NAMESPACE { +# define BOOST_LOG_CLOSE_NAMESPACE }} + +# else + +namespace BOOST_LOG_VERSION_NAMESPACE {} + +using namespace BOOST_LOG_VERSION_NAMESPACE +# if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && !defined(__clang__) +__attribute__((__strong__)) +# endif +; + +} + +# define BOOST_LOG_OPEN_NAMESPACE namespace log { namespace BOOST_LOG_VERSION_NAMESPACE { +# define BOOST_LOG_CLOSE_NAMESPACE }} +# endif + +#else // !defined(BOOST_LOG_DOXYGEN_PASS) + +namespace log {} +# define BOOST_LOG_OPEN_NAMESPACE namespace log { +# define BOOST_LOG_CLOSE_NAMESPACE } + +#endif // !defined(BOOST_LOG_DOXYGEN_PASS) + +} // namespace boost + +#endif // BOOST_LOG_DETAIL_CONFIG_HPP_INCLUDED_