__config revision 227825
1227825Stheraven// -*- C++ -*- 2227825Stheraven//===--------------------------- __config ---------------------------------===// 3227825Stheraven// 4227825Stheraven// The LLVM Compiler Infrastructure 5227825Stheraven// 6227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open 7227825Stheraven// Source Licenses. See LICENSE.TXT for details. 8227825Stheraven// 9227825Stheraven//===----------------------------------------------------------------------===// 10227825Stheraven 11227825Stheraven#ifndef _LIBCPP_CONFIG 12227825Stheraven#define _LIBCPP_CONFIG 13227825Stheraven 14227825Stheraven#if !_MSC_VER // explicit macro necessary because it is only defined below in this file 15227825Stheraven#pragma GCC system_header 16227825Stheraven#endif 17227825Stheraven 18227825Stheraven#define _LIBCPP_VERSION 1001 19227825Stheraven 20227825Stheraven#define _LIBCPP_ABI_VERSION 1 21227825Stheraven 22227825Stheraven#define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y 23227825Stheraven#define _LIBCPP_CONCAT(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) 24227825Stheraven 25227825Stheraven#define _LIBCPP_NAMESPACE _LIBCPP_CONCAT(__,_LIBCPP_ABI_VERSION) 26227825Stheraven 27227825Stheraven#ifdef __LITTLE_ENDIAN__ 28227825Stheraven#if __LITTLE_ENDIAN__ 29227825Stheraven#define _LIBCPP_LITTLE_ENDIAN 1 30227825Stheraven#define _LIBCPP_BIG_ENDIAN 0 31227825Stheraven#endif // __LITTLE_ENDIAN__ 32227825Stheraven#endif // __LITTLE_ENDIAN__ 33227825Stheraven 34227825Stheraven#ifdef __BIG_ENDIAN__ 35227825Stheraven#if __BIG_ENDIAN__ 36227825Stheraven#define _LIBCPP_LITTLE_ENDIAN 0 37227825Stheraven#define _LIBCPP_BIG_ENDIAN 1 38227825Stheraven#endif // __BIG_ENDIAN__ 39227825Stheraven#endif // __BIG_ENDIAN__ 40227825Stheraven 41227825Stheraven#ifdef __FreeBSD__ 42227825Stheraven# include <sys/endian.h> 43227825Stheraven# if _BYTE_ORDER == _LITTLE_ENDIAN 44227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 45227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 46227825Stheraven# else // _BYTE_ORDER == _LITTLE_ENDIAN 47227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 48227825Stheraven# define _LIBCPP_BIG_ENDIAN 1 49227825Stheraven# endif // _BYTE_ORDER == _LITTLE_ENDIAN 50227825Stheraven#endif // __FreeBSD__ 51227825Stheraven 52227825Stheraven#ifdef _WIN32 53227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 54227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 55227825Stheraven// Compiler intrinsics (GCC or MSVC) 56227825Stheraven# if (defined(_MSC_VER) && _MSC_VER >= 1400) || (__GNUC__ >= 4 && __GNUC_MINOR__ > 3) 57227825Stheraven# define _LIBCP_HAS_IS_BASE_OF 58227825Stheraven# endif 59227825Stheraven#endif // _WIN32 60227825Stheraven 61227825Stheraven#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 62227825Stheraven# include <endian.h> 63227825Stheraven# if __BYTE_ORDER == __LITTLE_ENDIAN 64227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 65227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 66227825Stheraven# elif __BYTE_ORDER == __BIG_ENDIAN 67227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 68227825Stheraven# define _LIBCPP_BIG_ENDIAN 1 69227825Stheraven# else // __BYTE_ORDER == __BIG_ENDIAN 70227825Stheraven# error unable to determine endian 71227825Stheraven# endif 72227825Stheraven#endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 73227825Stheraven 74227825Stheraven#if _WIN32 75227825Stheraven 76227825Stheraven// only really useful for a DLL 77227825Stheraven#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally... 78227825Stheraven# ifdef cxx_EXPORTS 79227825Stheraven# define _LIBCPP_HIDDEN 80227825Stheraven# define _LIBCPP_VISIBLE __declspec(dllexport) 81227825Stheraven# else 82227825Stheraven# define _LIBCPP_HIDDEN 83227825Stheraven# define _LIBCPP_VISIBLE __declspec(dllimport) 84227825Stheraven# endif 85227825Stheraven#else 86227825Stheraven# define _LIBCPP_HIDDEN 87227825Stheraven# define _LIBCPP_VISIBLE 88227825Stheraven#endif 89227825Stheraven 90227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 91227825Stheraven# if _MSC_VER 92227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __forceinline 93227825Stheraven# else // MinGW GCC and Clang 94227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__)) 95227825Stheraven# endif 96227825Stheraven#endif 97227825Stheraven 98227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 99227825Stheraven#define _LIBCPP_EXCEPTION_ABI _LIBCPP_VISIBLE 100227825Stheraven#endif 101227825Stheraven 102227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 103227825Stheraven# if _MSC_VER 104227825Stheraven# define _LIBCPP_ALWAYS_INLINE __forceinline 105227825Stheraven# endif 106227825Stheraven#endif 107227825Stheraven 108227825Stheraven#endif // _WIN32 109227825Stheraven 110227825Stheraven#ifndef _LIBCPP_HIDDEN 111227825Stheraven#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden"))) 112227825Stheraven#endif 113227825Stheraven 114227825Stheraven#ifndef _LIBCPP_VISIBLE 115227825Stheraven#define _LIBCPP_VISIBLE __attribute__ ((__visibility__("default"))) 116227825Stheraven#endif 117227825Stheraven 118227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 119227825Stheraven#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__)) 120227825Stheraven#endif 121227825Stheraven 122227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 123227825Stheraven#define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default"))) 124227825Stheraven#endif 125227825Stheraven 126227825Stheraven#ifndef _LIBCPP_CANTTHROW 127227825Stheraven#define _LIBCPP_CANTTHROW __attribute__ ((__nothrow__)) 128227825Stheraven#endif 129227825Stheraven 130227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 131227825Stheraven#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) 132227825Stheraven#endif 133227825Stheraven 134227825Stheraven#if defined(__clang__) 135227825Stheraven 136227825Stheraven#if __has_feature(cxx_alignas) 137227825Stheraven# define _ALIGNAS(x) alignas(x) 138227825Stheraven#else 139227825Stheraven# define _ALIGNAS(x) __attribute__((__aligned__(x))) 140227825Stheraven#endif 141227825Stheraven 142227825Stheraven#if !__has_feature(cxx_alias_templates) 143227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 144227825Stheraven#endif 145227825Stheraven 146227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 147227825Stheraven#ifdef __linux__ 148227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 149227825Stheraven#else 150227825Stheraventypedef __char16_t char16_t; 151227825Stheraventypedef __char32_t char32_t; 152227825Stheraven#endif 153227825Stheraven#endif 154227825Stheraven 155227825Stheraven#if !(__has_feature(cxx_exceptions)) 156227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 157227825Stheraven#endif 158227825Stheraven 159227825Stheraven#if !(__has_feature(cxx_rtti)) 160227825Stheraven#define _LIBCPP_NO_RTTI 161227825Stheraven#endif 162227825Stheraven 163227825Stheraven#if !(__has_feature(cxx_decltype)) 164227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 165227825Stheraven#endif 166227825Stheraven 167227825Stheraven#if __has_feature(cxx_attributes) 168227825Stheraven# define _ATTRIBUTE(x) [[x]] 169227825Stheraven#else 170227825Stheraven# define _ATTRIBUTE(x) __attribute__ ((x)) 171227825Stheraven#endif 172227825Stheraven 173227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 174227825Stheraven 175227825Stheraven#if !(__has_feature(cxx_deleted_functions)) 176227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 177227825Stheraven#endif // !(__has_feature(cxx_deleted_functions)) 178227825Stheraven 179227825Stheraven#if !(__has_feature(cxx_lambdas)) 180227825Stheraven#define _LIBCPP_HAS_NO_LAMBDAS 181227825Stheraven#endif 182227825Stheraven 183227825Stheraven#if !(__has_feature(cxx_nullptr)) 184227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 185227825Stheraven#endif 186227825Stheraven 187227825Stheraven#if !(__has_feature(cxx_rvalue_references)) 188227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 189227825Stheraven#endif 190227825Stheraven 191227825Stheraven#if !(__has_feature(cxx_static_assert)) 192227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 193227825Stheraven#endif 194227825Stheraven 195227825Stheraven#if !(__has_feature(cxx_auto_type)) 196227825Stheraven#define _LIBCPP_HAS_NO_AUTO_TYPE 197227825Stheraven#endif 198227825Stheraven 199227825Stheraven#if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return) 200227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 201227825Stheraven#endif 202227825Stheraven 203227825Stheraven#if !(__has_feature(cxx_variadic_templates)) 204227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 205227825Stheraven#endif 206227825Stheraven 207227825Stheraven#if !(__has_feature(cxx_trailing_return)) 208227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 209227825Stheraven#endif 210227825Stheraven 211227825Stheraven#if !(__has_feature(cxx_generalized_initializers)) 212227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 213227825Stheraven#endif 214227825Stheraven 215227825Stheraven#if __has_feature(is_base_of) 216227825Stheraven# define _LIBCP_HAS_IS_BASE_OF 217227825Stheraven#endif 218227825Stheraven 219227825Stheraven// Objective-C++ features (opt-in) 220227825Stheraven#if __has_feature(objc_arc) 221227825Stheraven#define _LIBCPP_HAS_OBJC_ARC 222227825Stheraven#endif 223227825Stheraven 224227825Stheraven#if __has_feature(objc_arc_weak) 225227825Stheraven#define _LIBCPP_HAS_OBJC_ARC_WEAK 226227825Stheraven#endif 227227825Stheraven 228227825Stheraven#if !(__has_feature(cxx_constexpr)) 229227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 230227825Stheraven#endif 231227825Stheraven 232227825Stheraven#if (__has_feature(cxx_noexcept)) 233227825Stheraven# define _NOEXCEPT noexcept 234227825Stheraven# define _NOEXCEPT_(x) noexcept(x) 235227825Stheraven#else 236227825Stheraven# define _NOEXCEPT throw() 237227825Stheraven# define _NOEXCEPT_(x) 238227825Stheraven#endif 239227825Stheraven 240227825Stheraven#if __has_feature(underlying_type) 241227825Stheraven# define _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T) 242227825Stheraven#endif 243227825Stheraven 244227825Stheraven// Inline namespaces are available in Clang regardless of C++ dialect. 245227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 246227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 247227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 248227825Stheraven 249227825Stheravennamespace std { 250227825Stheraven inline namespace _LIBCPP_NAMESPACE { 251227825Stheraven } 252227825Stheraven} 253227825Stheraven 254227825Stheraven#elif defined(__GNUC__) 255227825Stheraven 256227825Stheraven#define _ALIGNAS(x) __attribute__((__aligned__(x))) 257227825Stheraven 258227825Stheraven#define _ATTRIBUTE(x) __attribute__((x)) 259227825Stheraven 260227825Stheraven#if !__EXCEPTIONS 261227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 262227825Stheraven#endif 263227825Stheraven 264227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 265227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 266227825Stheraven 267227825Stheraven#define _NOEXCEPT throw() 268227825Stheraven#define _NOEXCEPT_(x) 269227825Stheraven 270227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 271227825Stheraven 272227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 273227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 274227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 275227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 276227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 277227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 278227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 279227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 280227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 281227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 282227825Stheraven 283227825Stheraven#else // __GXX_EXPERIMENTAL_CXX0X__ 284227825Stheraven 285227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 286227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 287227825Stheraven 288227825Stheraven#if !(__GNUC__ >= 4 && __GNUC_MINOR__ >= 3) 289227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 290227825Stheraven#endif 291227825Stheraven 292227825Stheraven#if !(__GNUC__ >= 4 && __GNUC_MINOR__ >= 3) 293227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 294227825Stheraven#endif 295227825Stheraven 296227825Stheraven#if !(__GNUC__ >= 4 && __GNUC_MINOR__ >= 4) 297227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 298227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 299227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 300227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 301227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 302227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 303227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 304227825Stheraven#endif // !(__GNUC__ >= 4 && __GNUC_MINOR__ >= 4) 305227825Stheraven 306227825Stheraven#if !(__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 307227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 308227825Stheraven#endif 309227825Stheraven 310227825Stheraven#endif // __GXX_EXPERIMENTAL_CXX0X__ 311227825Stheraven 312227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE { 313227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 314227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 315227825Stheraven 316227825Stheravennamespace std { 317227825Stheravennamespace _LIBCPP_NAMESPACE { 318227825Stheraven} 319227825Stheravenusing namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); 320227825Stheraven} 321227825Stheraven 322227825Stheraven#elif defined(_MSC_VER) 323227825Stheraven 324227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 325227825Stheraven#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 326227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 327227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 328227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 329227825Stheraven#define __alignof__ __alignof 330227825Stheraven#define _ATTRIBUTE __declspec 331227825Stheraven#define _ALIGNAS(x) __declspec(align(x)) 332227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 333227825Stheraven 334227825Stheraven#define _NOEXCEPT throw() 335227825Stheraven#define _NOEXCEPT_(x) 336227825Stheraven 337227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { 338227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } 339227825Stheraven#define _VSTD std 340227825Stheraven 341227825Stheravennamespace std { 342227825Stheraven} 343227825Stheraven 344227825Stheraven#endif // __clang__ || __GNUC___ || _MSC_VER 345227825Stheraven 346227825Stheraven#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS 347227825Stheraventypedef unsigned short char16_t; 348227825Stheraventypedef unsigned int char32_t; 349227825Stheraven#endif // _LIBCPP_HAS_NO_UNICODE_CHARS 350227825Stheraven 351227825Stheraven#ifdef _LIBCPP_HAS_NO_STATIC_ASSERT 352227825Stheraven 353227825Stheraventemplate <bool> struct __static_assert_test; 354227825Stheraventemplate <> struct __static_assert_test<true> {}; 355227825Stheraventemplate <unsigned> struct __static_assert_check {}; 356227825Stheraven#define static_assert(__b, __m) \ 357227825Stheraven typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \ 358227825Stheraven _LIBCPP_CONCAT(__t, __LINE__) 359227825Stheraven 360227825Stheraven#endif // _LIBCPP_HAS_NO_STATIC_ASSERT 361227825Stheraven 362227825Stheraven#ifdef _LIBCPP_HAS_NO_DECLTYPE 363227825Stheraven#define decltype(x) __typeof__(x) 364227825Stheraven#endif 365227825Stheraven 366227825Stheraven#ifdef _LIBCPP_HAS_NO_CONSTEXPR 367227825Stheraven#define constexpr const 368227825Stheraven#endif 369227825Stheraven 370227825Stheraven#ifndef __has_feature 371227825Stheraven#define __has_feature(__x) 0 372227825Stheraven#endif 373227825Stheraven 374227825Stheraven#if __APPLE__ || __FreeBSD__ || _WIN32 375227825Stheraven#define _LIBCPP_LOCALE__L_EXTENSIONS 1 376227825Stheraven#endif 377227825Stheraven#if __FreeBSD__ 378227825Stheraven#define _DECLARE_C99_LDBL_MATH 1 379227825Stheraven#endif 380227825Stheraven 381227825Stheraven#if __APPLE__ || __FreeBSD__ 382227825Stheraven#define _LIBCPP_HAS_DEFAULTRUNELOCALE 383227825Stheraven#endif 384227825Stheraven 385227825Stheraven#if __APPLE__ || __FreeBSD__ 386227825Stheraven#define _LIBCPP_WCTYPE_IS_MASK 387227825Stheraven#endif 388227825Stheraven 389227825Stheraven#ifdef _LIBCPP_DEBUG2 390227825Stheraven# if _LIBCPP_DEBUG2 == 0 391227825Stheraven# define _LIBCPP_DEBUG_LEVEL 1 392227825Stheraven# elif _LIBCPP_DEBUG2 == 1 393227825Stheraven# define _LIBCPP_DEBUG_LEVEL 2 394227825Stheraven# else 395227825Stheraven# error Supported values for _LIBCPP_DEBUG2 are 0 and 1 396227825Stheraven# endif 397227825Stheraven#endif 398227825Stheraven 399227825Stheraven#ifdef _LIBCPP_DEBUG2 400227825Stheraven# include <__debug> 401227825Stheraven#else 402227825Stheraven# define _LIBCPP_ASSERT(x, m) ((void)0) 403227825Stheraven#endif 404227825Stheraven 405227825Stheraven#endif // _LIBCPP_CONFIG 406