2 // Copyright (c) 2012 Artyom Beilis (Tonkikh)
3 // Copyright (c) 2020 Alexander Grund
5 // Distributed under the Boost Software License, Version 1.0. (See
6 // accompanying file LICENSE or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
9 #ifndef NOWIDE_CONFIG_HPP_INCLUDED
10 #define NOWIDE_CONFIG_HPP_INCLUDED
12 #include <boost/nowide/replacement.hpp>
14 // MinGW32 requires a __MSVCRT_VERSION__ defined to make some functions available, e.g. _stat64
15 // Hence define this here to target MSVC 7.0 which has the required functions and do it as early as possible
16 // as including a system header might default this to 0x0600 which is to low
17 #if defined(__MINGW32__) && !defined(__MSVCRT_VERSION__)
18 #define __MSVCRT_VERSION__ 0x0700
21 #if(defined(__WIN32) || defined(_WIN32) || defined(WIN32)) && !defined(__CYGWIN__)
22 #define NOWIDE_WINDOWS
26 #define NOWIDE_MSVC _MSC_VER
30 #define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
33 #ifndef BOOST_SYMBOL_VISIBLE
34 #define BOOST_SYMBOL_VISIBLE
38 #define BOOST_SYMBOL_EXPORT __declspec(dllexport)
39 #define BOOST_SYMBOL_IMPORT __declspec(dllimport)
41 #define BOOST_SYMBOL_EXPORT BOOST_SYMBOL_VISIBLE
42 #define BOOST_SYMBOL_IMPORT
45 #if defined(BOOST_NOWIDE_DYN_LINK)
46 #ifdef BOOST_NOWIDE_SOURCE
47 #define BOOST_NOWIDE_DECL BOOST_SYMBOL_EXPORT
49 #define BOOST_NOWIDE_DECL BOOST_SYMBOL_IMPORT
50 #endif // BOOST_NOWIDE_SOURCE
52 #define BOOST_NOWIDE_DECL
53 #endif // BOOST_NOWIDE_DYN_LINK
59 #if defined(NOWIDE_WINDOWS)
60 #ifdef BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT
61 #undef BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT
63 #define BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT 1
64 #elif !defined(BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT)
65 #define BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT 0
68 #if defined(__GNUC__) && __GNUC__ >= 7
69 #define BOOST_NOWIDE_FALLTHROUGH __attribute__((fallthrough))
71 #define BOOST_NOWIDE_FALLTHROUGH
75 #define BOOST_LIKELY(x) __builtin_expect(x, 1)
76 #define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
78 #if !defined(BOOST_LIKELY)
79 #define BOOST_LIKELY(x) x
81 #if !defined(BOOST_UNLIKELY)
82 #define BOOST_UNLIKELY(x) x