1 // (C) Copyright John Maddock 2001.
\r
2 // (C) Copyright Jens Maurer 2001.
\r
3 // Use, modification and distribution are subject to the
\r
4 // Boost Software License, Version 1.0. (See accompanying file
\r
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
\r
7 // See http://www.boost.org for most recent version.
\r
9 // config for libstdc++ v3
\r
10 // not much to go in here:
\r
13 #define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCXX__)
\r
15 #define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCPP__)
\r
18 #if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T)
\r
19 # define BOOST_NO_CWCHAR
\r
20 # define BOOST_NO_CWCTYPE
\r
21 # define BOOST_NO_STD_WSTRING
\r
22 # define BOOST_NO_STD_WSTREAMBUF
\r
25 #if defined(__osf__) && !defined(_REENTRANT) \
\r
26 && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) )
\r
27 // GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header
\r
28 // file is included, therefore for consistency we define it here as well.
\r
32 #ifdef __GLIBCXX__ // gcc 3.4 and greater:
\r
33 # if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
\r
34 || defined(_GLIBCXX__PTHREADS)
\r
36 // If the std lib has thread support turned on, then turn it on in Boost
\r
37 // as well. We do this because some gcc-3.4 std lib headers define _REENTANT
\r
38 // while others do not...
\r
40 # define BOOST_HAS_THREADS
\r
42 # define BOOST_DISABLE_THREADS
\r
44 #elif defined(__GLIBCPP__) \
\r
45 && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \
\r
46 && !defined(_GLIBCPP__PTHREADS)
\r
47 // disable thread support if the std lib was built single threaded:
\r
48 # define BOOST_DISABLE_THREADS
\r
51 #if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT)
\r
52 // linux on arm apparently doesn't define _REENTRANT
\r
53 // so just turn on threading support whenever the std lib is thread safe:
\r
54 # define BOOST_HAS_THREADS
\r
58 #if !defined(_GLIBCPP_USE_LONG_LONG) \
\r
59 && !defined(_GLIBCXX_USE_LONG_LONG)\
\r
60 && defined(BOOST_HAS_LONG_LONG)
\r
61 // May have been set by compiler/*.hpp, but "long long" without library
\r
62 // support is useless.
\r
63 # undef BOOST_HAS_LONG_LONG
\r
66 #if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0
\r
67 # define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx
\r
68 # define BOOST_HAS_SLIST
\r
69 # define BOOST_HAS_HASH
\r
70 # define BOOST_SLIST_HEADER <ext/slist>
\r
71 # if !defined(__GNUC__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)
\r
72 # define BOOST_HASH_SET_HEADER <ext/hash_set>
\r
73 # define BOOST_HASH_MAP_HEADER <ext/hash_map>
\r
75 # define BOOST_HASH_SET_HEADER <backward/hash_set>
\r
76 # define BOOST_HASH_MAP_HEADER <backward/hash_map>
\r
80 // stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly
\r
81 // __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the stdlibc++
\r
82 // developers. He also commented:
\r
84 // "I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in
\r
85 // GCC 4.2.4 it is set to 20080519 but in GCC 4.3.0 it is set to 20080305.
\r
86 // Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support
\r
87 // than any release in the 4.2 series."
\r
89 // Another resource for understanding stdlibc++ features is:
\r
90 // http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x
\r
92 // C++0x headers in GCC 4.3.0 and later
\r
94 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
\r
95 # define BOOST_NO_0X_HDR_ARRAY
\r
96 # define BOOST_NO_0X_HDR_RANDOM
\r
97 # define BOOST_NO_0X_HDR_REGEX
\r
98 # define BOOST_NO_0X_HDR_TUPLE
\r
99 # define BOOST_NO_0X_HDR_TYPE_TRAITS
\r
100 # define BOOST_NO_STD_UNORDERED // deprecated; see following
\r
101 # define BOOST_NO_0X_HDR_UNORDERED_MAP
\r
102 # define BOOST_NO_0X_HDR_UNORDERED_SET
\r
105 // C++0x headers in GCC 4.4.0 and later
\r
107 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
\r
108 # define BOOST_NO_0X_HDR_CHRONO
\r
109 # define BOOST_NO_0X_HDR_CONDITION_VARIABLE
\r
110 # define BOOST_NO_0X_HDR_FORWARD_LIST
\r
111 # define BOOST_NO_0X_HDR_INITIALIZER_LIST
\r
112 # define BOOST_NO_0X_HDR_MUTEX
\r
113 # define BOOST_NO_0X_HDR_RATIO
\r
114 # define BOOST_NO_0X_HDR_SYSTEM_ERROR
\r
115 # define BOOST_NO_0X_HDR_THREAD
\r
118 // C++0x headers not yet implemented
\r
120 # define BOOST_NO_0X_HDR_CODECVT
\r
121 # define BOOST_NO_0X_HDR_CONCEPTS
\r
122 # define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS
\r
123 # define BOOST_NO_0X_HDR_FUTURE
\r
124 # define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS
\r
125 # define BOOST_NO_0X_HDR_MEMORY_CONCEPTS
\r