~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to system/include/libcxx/__config

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// -*- C++ -*-
 
2
//===--------------------------- __config ---------------------------------===//
 
3
//
 
4
//                     The LLVM Compiler Infrastructure
 
5
//
 
6
// This file is dual licensed under the MIT and the University of Illinois Open
 
7
// Source Licenses. See LICENSE.TXT for details.
 
8
//
 
9
//===----------------------------------------------------------------------===//
 
10
 
 
11
#ifndef _LIBCPP_CONFIG
 
12
#define _LIBCPP_CONFIG
 
13
 
 
14
#ifndef _MSC_VER // explicit macro necessary because it is only defined below in this file
 
15
#pragma GCC system_header
 
16
#endif
 
17
 
 
18
#ifdef __GNUC__
 
19
#define _GNUC_VER (__GNUC__ * 100 + __GNUC_MINOR__)
 
20
#endif
 
21
 
 
22
#define _LIBCPP_VERSION 1101
 
23
 
 
24
#define _LIBCPP_ABI_VERSION 1
 
25
 
 
26
#define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y
 
27
#define _LIBCPP_CONCAT(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y)
 
28
 
 
29
#define _LIBCPP_NAMESPACE _LIBCPP_CONCAT(__,_LIBCPP_ABI_VERSION)
 
30
 
 
31
#ifdef __LITTLE_ENDIAN__
 
32
#if __LITTLE_ENDIAN__
 
33
#define _LIBCPP_LITTLE_ENDIAN 1
 
34
#define _LIBCPP_BIG_ENDIAN    0
 
35
#endif  // __LITTLE_ENDIAN__
 
36
#endif  // __LITTLE_ENDIAN__
 
37
 
 
38
#ifdef __BIG_ENDIAN__
 
39
#if __BIG_ENDIAN__
 
40
#define _LIBCPP_LITTLE_ENDIAN 0
 
41
#define _LIBCPP_BIG_ENDIAN    1
 
42
#endif  // __BIG_ENDIAN__
 
43
#endif  // __BIG_ENDIAN__
 
44
 
 
45
#ifdef __FreeBSD__
 
46
# include <sys/endian.h>
 
47
#  if _BYTE_ORDER == _LITTLE_ENDIAN
 
48
#   define _LIBCPP_LITTLE_ENDIAN 1
 
49
#   define _LIBCPP_BIG_ENDIAN    0
 
50
# else  // _BYTE_ORDER == _LITTLE_ENDIAN
 
51
#   define _LIBCPP_LITTLE_ENDIAN 0
 
52
#   define _LIBCPP_BIG_ENDIAN    1
 
53
# endif  // _BYTE_ORDER == _LITTLE_ENDIAN
 
54
# ifndef __LONG_LONG_SUPPORTED
 
55
#  define _LIBCPP_HAS_NO_LONG_LONG
 
56
# endif  // __LONG_LONG_SUPPORTED
 
57
#endif  // __FreeBSD__
 
58
 
 
59
#ifdef _WIN32
 
60
#  define _LIBCPP_LITTLE_ENDIAN 1
 
61
#  define _LIBCPP_BIG_ENDIAN    0
 
62
// Compiler intrinsics (GCC or MSVC)
 
63
#  if (defined(_MSC_VER) && _MSC_VER >= 1400) \
 
64
   || (defined(__GNUC__) && _GNUC_VER > 403)
 
65
#    define _LIBCP_HAS_IS_BASE_OF
 
66
#  endif
 
67
#endif  // _WIN32
 
68
 
 
69
#ifdef __linux__
 
70
#  if defined(__GNUC__) && _GNUC_VER >= 403
 
71
#    define _LIBCP_HAS_IS_BASE_OF
 
72
#  endif
 
73
#endif
 
74
 
 
75
#ifdef __sun__
 
76
# include <sys/isa_defs.h>
 
77
# ifdef _LITTLE_ENDIAN
 
78
#   define _LIBCPP_LITTLE_ENDIAN 1
 
79
#   define _LIBCPP_BIG_ENDIAN    0
 
80
# else
 
81
#   define _LIBCPP_LITTLE_ENDIAN 0
 
82
#   define _LIBCPP_BIG_ENDIAN    1
 
83
# endif
 
84
#endif // __sun__
 
85
 
 
86
#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
 
87
# include <endian.h>
 
88
# if __BYTE_ORDER == __LITTLE_ENDIAN
 
89
#  define _LIBCPP_LITTLE_ENDIAN 1
 
90
#  define _LIBCPP_BIG_ENDIAN    0
 
91
# elif __BYTE_ORDER == __BIG_ENDIAN
 
92
#  define _LIBCPP_LITTLE_ENDIAN 0
 
93
#  define _LIBCPP_BIG_ENDIAN    1
 
94
# else  // __BYTE_ORDER == __BIG_ENDIAN
 
95
#  error unable to determine endian
 
96
# endif
 
97
#endif  // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
 
98
 
 
99
#ifdef _WIN32
 
100
 
 
101
// only really useful for a DLL
 
102
#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally...
 
103
# ifdef cxx_EXPORTS
 
104
#  define _LIBCPP_HIDDEN
 
105
#  define _LIBCPP_FUNC_VIS __declspec(dllexport)
 
106
#  define _LIBCPP_TYPE_VIS __declspec(dllexport)
 
107
# else
 
108
#  define _LIBCPP_HIDDEN
 
109
#  define _LIBCPP_FUNC_VIS __declspec(dllimport)
 
110
#  define _LIBCPP_TYPE_VIS __declspec(dllimport)
 
111
# endif
 
112
#else
 
113
# define _LIBCPP_HIDDEN
 
114
# define _LIBCPP_FUNC_VIS
 
115
# define _LIBCPP_TYPE_VIS
 
116
#endif
 
117
 
 
118
#ifndef _LIBCPP_INLINE_VISIBILITY
 
119
# ifdef _MSC_VER
 
120
#  define _LIBCPP_INLINE_VISIBILITY __forceinline
 
121
# else // MinGW GCC and Clang
 
122
#  define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__))
 
123
# endif
 
124
#endif
 
125
 
 
126
#ifndef _LIBCPP_EXCEPTION_ABI
 
127
#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS
 
128
#endif
 
129
 
 
130
#ifndef _LIBCPP_ALWAYS_INLINE
 
131
# ifdef _MSC_VER
 
132
#  define _LIBCPP_ALWAYS_INLINE __forceinline
 
133
# endif
 
134
#endif
 
135
 
 
136
#endif // _WIN32
 
137
 
 
138
#ifndef _LIBCPP_HIDDEN
 
139
#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden")))
 
140
#endif
 
141
 
 
142
#ifndef _LIBCPP_FUNC_VIS
 
143
#define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default")))
 
144
#endif
 
145
 
 
146
#ifndef _LIBCPP_TYPE_VIS
 
147
#  if __has_attribute(type_visibility)
 
148
#    define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("default")))
 
149
#  else
 
150
#    define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default")))
 
151
#  endif
 
152
#endif
 
153
 
 
154
#ifndef _LIBCPP_INLINE_VISIBILITY
 
155
#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__))
 
156
#endif
 
157
 
 
158
#ifndef _LIBCPP_EXCEPTION_ABI
 
159
#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS
 
160
#endif
 
161
 
 
162
#ifndef _LIBCPP_CANTTHROW
 
163
#define _LIBCPP_CANTTHROW __attribute__ ((__nothrow__))
 
164
#endif
 
165
 
 
166
#ifndef _LIBCPP_ALWAYS_INLINE
 
167
#define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__visibility__("hidden"), __always_inline__))
 
168
#endif
 
169
 
 
170
#if defined(__clang__)
 
171
 
 
172
#if __has_feature(cxx_alignas)
 
173
#  define _ALIGNAS_TYPE(x) alignas(x)
 
174
#  define _ALIGNAS(x) alignas(x)
 
175
#else
 
176
#  define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
 
177
#  define _ALIGNAS(x) __attribute__((__aligned__(x)))
 
178
#endif
 
179
 
 
180
#if !__has_feature(cxx_alias_templates)
 
181
#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
 
182
#endif
 
183
 
 
184
#ifndef __GXX_EXPERIMENTAL_CXX0X__
 
185
#ifdef __linux__
 
186
#define _LIBCPP_HAS_NO_UNICODE_CHARS
 
187
#else
 
188
typedef __char16_t char16_t;
 
189
typedef __char32_t char32_t;
 
190
#endif
 
191
#endif
 
192
 
 
193
#if !(__has_feature(cxx_exceptions))
 
194
#define _LIBCPP_NO_EXCEPTIONS
 
195
#endif
 
196
 
 
197
#if !(__has_feature(cxx_rtti))
 
198
#define _LIBCPP_NO_RTTI
 
199
#endif
 
200
 
 
201
#if !(__has_feature(cxx_strong_enums))
 
202
#define _LIBCPP_HAS_NO_STRONG_ENUMS
 
203
#endif
 
204
 
 
205
#if !(__has_feature(cxx_decltype))
 
206
#define _LIBCPP_HAS_NO_DECLTYPE
 
207
#endif
 
208
 
 
209
#if __has_feature(cxx_attributes)
 
210
#  define _LIBCPP_NORETURN [[noreturn]]
 
211
#else
 
212
#  define _LIBCPP_NORETURN __attribute__ ((noreturn))
 
213
#endif
 
214
 
 
215
#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
 
216
 
 
217
#if !(__has_feature(cxx_deleted_functions))
 
218
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
 
219
#endif  // !(__has_feature(cxx_deleted_functions))
 
220
 
 
221
#if !(__has_feature(cxx_lambdas))
 
222
#define _LIBCPP_HAS_NO_LAMBDAS
 
223
#endif
 
224
 
 
225
#if !(__has_feature(cxx_nullptr))
 
226
#define _LIBCPP_HAS_NO_NULLPTR
 
227
#endif
 
228
 
 
229
#if !(__has_feature(cxx_rvalue_references))
 
230
#define _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
231
#endif
 
232
 
 
233
#if !(__has_feature(cxx_static_assert))
 
234
#define _LIBCPP_HAS_NO_STATIC_ASSERT
 
235
#endif
 
236
 
 
237
#if !(__has_feature(cxx_auto_type))
 
238
#define _LIBCPP_HAS_NO_AUTO_TYPE
 
239
#endif
 
240
 
 
241
#if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return)
 
242
#define _LIBCPP_HAS_NO_ADVANCED_SFINAE
 
243
#endif
 
244
 
 
245
#if !(__has_feature(cxx_variadic_templates))
 
246
#define _LIBCPP_HAS_NO_VARIADICS
 
247
#endif
 
248
 
 
249
#if !(__has_feature(cxx_trailing_return))
 
250
#define _LIBCPP_HAS_NO_TRAILING_RETURN
 
251
#endif
 
252
 
 
253
#if !(__has_feature(cxx_generalized_initializers))
 
254
#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
 
255
#endif
 
256
 
 
257
#if __has_feature(is_base_of)
 
258
#  define _LIBCP_HAS_IS_BASE_OF
 
259
#endif
 
260
 
 
261
// Objective-C++ features (opt-in)
 
262
#if __has_feature(objc_arc)
 
263
#define _LIBCPP_HAS_OBJC_ARC
 
264
#endif
 
265
 
 
266
#if __has_feature(objc_arc_weak)
 
267
#define _LIBCPP_HAS_OBJC_ARC_WEAK
 
268
#define _LIBCPP_HAS_NO_STRONG_ENUMS
 
269
#endif
 
270
 
 
271
#if !(__has_feature(cxx_constexpr))
 
272
#define _LIBCPP_HAS_NO_CONSTEXPR
 
273
#endif
 
274
 
 
275
#if defined(__FreeBSD__) && (__ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L)
 
276
#define _LIBCPP_HAS_QUICK_EXIT
 
277
#define _LIBCPP_HAS_C11_FEATURES
 
278
#endif
 
279
 
 
280
#if (__has_feature(cxx_noexcept))
 
281
#  define _NOEXCEPT noexcept
 
282
#  define _NOEXCEPT_(x) noexcept(x)
 
283
#else
 
284
#  define _NOEXCEPT throw()
 
285
#  define _NOEXCEPT_(x)
 
286
#endif
 
287
 
 
288
#if __has_feature(underlying_type)
 
289
#  define _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T)
 
290
#endif
 
291
 
 
292
// Inline namespaces are available in Clang regardless of C++ dialect.
 
293
#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
 
294
#define _LIBCPP_END_NAMESPACE_STD  } }
 
295
#define _VSTD std::_LIBCPP_NAMESPACE
 
296
 
 
297
namespace std {
 
298
  inline namespace _LIBCPP_NAMESPACE {
 
299
  }
 
300
}
 
301
 
 
302
#elif defined(__GNUC__)
 
303
 
 
304
#define _ALIGNAS(x) __attribute__((__aligned__(x)))
 
305
#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
 
306
 
 
307
#define _LIBCPP_NORETURN __attribute__((noreturn))
 
308
 
 
309
#if !__EXCEPTIONS
 
310
#define _LIBCPP_NO_EXCEPTIONS
 
311
#endif
 
312
 
 
313
#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
 
314
#define _LIBCPP_HAS_NO_CONSTEXPR
 
315
 
 
316
#define _NOEXCEPT throw()
 
317
#define _NOEXCEPT_(x)
 
318
 
 
319
#ifndef __GXX_EXPERIMENTAL_CXX0X__
 
320
 
 
321
#define _LIBCPP_HAS_NO_ADVANCED_SFINAE
 
322
#define _LIBCPP_HAS_NO_DECLTYPE
 
323
#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
 
324
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
 
325
#define _LIBCPP_HAS_NO_NULLPTR
 
326
#define _LIBCPP_HAS_NO_STATIC_ASSERT
 
327
#define _LIBCPP_HAS_NO_UNICODE_CHARS
 
328
#define _LIBCPP_HAS_NO_VARIADICS
 
329
#define _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
330
#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
 
331
 
 
332
#else  // __GXX_EXPERIMENTAL_CXX0X__
 
333
 
 
334
#define _LIBCPP_HAS_NO_TRAILING_RETURN
 
335
#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
 
336
 
 
337
#if _GNUC_VER < 403
 
338
#define _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
339
#endif
 
340
 
 
341
#if _GNUC_VER < 403
 
342
#define _LIBCPP_HAS_NO_STATIC_ASSERT
 
343
#endif
 
344
 
 
345
#if _GNUC_VER < 404
 
346
#define _LIBCPP_HAS_NO_ADVANCED_SFINAE
 
347
#define _LIBCPP_HAS_NO_DECLTYPE
 
348
#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
 
349
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
 
350
#define _LIBCPP_HAS_NO_UNICODE_CHARS
 
351
#define _LIBCPP_HAS_NO_VARIADICS
 
352
#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
 
353
#endif  // _GNUC_VER < 404
 
354
 
 
355
#if _GNUC_VER < 406
 
356
#define _LIBCPP_HAS_NO_NULLPTR
 
357
#endif
 
358
 
 
359
#endif  // __GXX_EXPERIMENTAL_CXX0X__
 
360
 
 
361
#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE {
 
362
#define _LIBCPP_END_NAMESPACE_STD  } }
 
363
#define _VSTD std::_LIBCPP_NAMESPACE
 
364
 
 
365
namespace std {
 
366
namespace _LIBCPP_NAMESPACE {
 
367
}
 
368
using namespace _LIBCPP_NAMESPACE __attribute__((__strong__));
 
369
}
 
370
 
 
371
#elif defined(_MSC_VER)
 
372
 
 
373
#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
 
374
#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
 
375
#define _LIBCPP_HAS_NO_CONSTEXPR
 
376
#define _LIBCPP_HAS_NO_UNICODE_CHARS
 
377
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
 
378
#define __alignof__ __alignof
 
379
#define _LIBCPP_NORETURN __declspec(noreturn)
 
380
#define _ALIGNAS(x) __declspec(align(x))
 
381
#define _LIBCPP_HAS_NO_VARIADICS
 
382
 
 
383
#define _NOEXCEPT throw()
 
384
#define _NOEXCEPT_(x)
 
385
 
 
386
#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {
 
387
#define _LIBCPP_END_NAMESPACE_STD  }
 
388
#define _VSTD std
 
389
 
 
390
namespace std {
 
391
}
 
392
 
 
393
#endif // __clang__ || __GNUC___ || _MSC_VER
 
394
 
 
395
#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS
 
396
typedef unsigned short char16_t;
 
397
typedef unsigned int   char32_t;
 
398
#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
 
399
 
 
400
#ifdef _LIBCPP_HAS_NO_STATIC_ASSERT
 
401
 
 
402
template <bool> struct __static_assert_test;
 
403
template <> struct __static_assert_test<true> {};
 
404
template <unsigned> struct __static_assert_check {};
 
405
#define static_assert(__b, __m) \
 
406
    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
 
407
    _LIBCPP_CONCAT(__t, __LINE__)
 
408
 
 
409
#endif  // _LIBCPP_HAS_NO_STATIC_ASSERT
 
410
 
 
411
#ifdef _LIBCPP_HAS_NO_DECLTYPE
 
412
#define decltype(x) __typeof__(x)
 
413
#endif
 
414
 
 
415
#ifdef _LIBCPP_HAS_NO_CONSTEXPR
 
416
#define _LIBCPP_CONSTEXPR
 
417
#else
 
418
#define _LIBCPP_CONSTEXPR constexpr
 
419
#endif
 
420
 
 
421
#ifdef __GNUC__
 
422
#define _NOALIAS __attribute__((malloc))
 
423
#else
 
424
#define _NOALIAS
 
425
#endif
 
426
 
 
427
#ifndef __has_feature
 
428
#define __has_feature(__x) 0
 
429
#endif
 
430
 
 
431
#if __has_feature(cxx_explicit_conversions)
 
432
#   define _LIBCPP_EXPLICIT explicit
 
433
#else
 
434
#   define _LIBCPP_EXPLICIT
 
435
#endif
 
436
 
 
437
#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS
 
438
#define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx
 
439
#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \
 
440
    __lx __v_; \
 
441
    _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \
 
442
    _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \
 
443
    _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \
 
444
    };
 
445
#else  // _LIBCPP_HAS_NO_STRONG_ENUMS
 
446
#define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS x
 
447
#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x)
 
448
#endif  // _LIBCPP_HAS_NO_STRONG_ENUMS
 
449
 
 
450
#ifndef _LIBCPP_EXTERN_TEMPLATE
 
451
#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
 
452
#endif
 
453
 
 
454
#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || defined(__sun__)
 
455
#define _LIBCPP_LOCALE__L_EXTENSIONS 1
 
456
#endif
 
457
#ifdef __FreeBSD__
 
458
#define _DECLARE_C99_LDBL_MATH 1
 
459
#endif
 
460
 
 
461
#if defined(__APPLE__) || defined(__FreeBSD__)
 
462
#define _LIBCPP_HAS_DEFAULTRUNELOCALE
 
463
#endif
 
464
 
 
465
#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__)
 
466
#define _LIBCPP_WCTYPE_IS_MASK
 
467
#endif
 
468
 
 
469
#ifdef _LIBCPP_DEBUG2
 
470
#   if _LIBCPP_DEBUG2 == 0
 
471
#       define _LIBCPP_DEBUG_LEVEL 1
 
472
#   elif _LIBCPP_DEBUG2 == 1
 
473
#       define _LIBCPP_DEBUG_LEVEL 2
 
474
#   else
 
475
#       error Supported values for _LIBCPP_DEBUG2 are 0 and 1
 
476
#   endif
 
477
#endif
 
478
 
 
479
#ifdef _LIBCPP_DEBUG2
 
480
#   include <__debug>
 
481
#else
 
482
#   define _LIBCPP_ASSERT(x, m) ((void)0)
 
483
#endif
 
484
 
 
485
#endif  // _LIBCPP_CONFIG