aboutsummaryrefslogtreecommitdiff
path: root/butl/config
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-12-13 16:39:58 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-12-13 16:39:58 +0200
commita4199b808fd678f74935d540490eae9dc78a9ffe (patch)
tree16d1f0e583c926838b92722e000fae2c1ac4aa9e /butl/config
parentb05e24a7f512c1f005dbcb67b3fce8b3d16e110e (diff)
Fix thread safety issue
Diffstat (limited to 'butl/config')
-rw-r--r--butl/config47
1 files changed, 47 insertions, 0 deletions
diff --git a/butl/config b/butl/config
new file mode 100644
index 0000000..71ebd23
--- /dev/null
+++ b/butl/config
@@ -0,0 +1,47 @@
+// file : butl/config -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#ifndef BUTL_CONFIG
+#define BUTL_CONFIG
+
+#include <cstddef> // _LIBCPP_VERSION, __GLIBCXX__
+
+// thread_local
+//
+// If this macro is undefined then we assume one can use __thread but only
+// for values that do not require dynamic (runtime) initialization.
+//
+// Apparently Apple's Clang "temporarily disabled" C++11 thread_local
+// until they can implement a "fast" version, which reportedly happened in
+// XCode 8. So for now we will continue using __thread for this target.
+//
+#ifdef __apple_build_version__
+# if __apple_build_version__ >= 8000000
+# define BUTL_CXX11_THREAD_LOCAL
+# endif
+#else
+# define BUTL_CXX11_THREAD_LOCAL
+#endif
+
+// std::uncaught_exceptions()
+//
+// VC has it since 1900 which is the lowest version we support.
+//
+#if defined(_MSC_VER)
+# define BUTL_CXX17_UNCAUGHT_EXCEPTIONS
+//
+// Clang's libc++ seems to have it for a while so we assume it's there (it
+// doesn't define a feature test macros).
+//
+#elif defined(_LIBCPP_VERSION)
+# define BUTL_CXX17_UNCAUGHT_EXCEPTIONS
+//
+// GCC libstdc++ has it since GCC 6 and it defines the feature test macro.
+// We will also use this for any other runtime.
+//
+#elif defined(__cpp_lib_uncaught_exceptions)
+# define BUTL_CXX17_UNCAUGHT_EXCEPTIONS
+#endif
+
+#endif // BUTL_CONFIG