Index: include/v8config.h |
diff --git a/include/v8config.h b/include/v8config.h |
index 2bf3b9d44349b106104c9e814189302269a8bc63..b2e659a471ba4e9a566eba90ba6e34484916c80c 100644 |
--- a/include/v8config.h |
+++ b/include/v8config.h |
@@ -28,6 +28,52 @@ |
#ifndef V8CONFIG_H_ |
#define V8CONFIG_H_ |
+// Platform headers for feature detection below. |
+#if defined(__ANDROID__) |
+# include <sys/cdefs.h> |
+#elif defined(__APPLE__) |
+# include <TargetConditions.h> |
+#elif defined(__linux__) |
+# include <features.h> |
+#endif |
+ |
+ |
+// This macro allows to test for the version of the GNU C library (or |
+// a compatible C library that masquerades as glibc). It evaluates to |
+// 0 if libc is not GNU libc or compatible. |
+// Use like: |
+// #if V8_GLIBC_PREREQ(2, 3) |
+// ... |
+// #endif |
+#if defined(__GLIBC__) && defined(__GLIBC_MINOR__) |
+# define V8_GLIBC_PREREQ(major, minor) \ |
+ ((__GLIBC__ * 100 + __GLIBC_MINOR__) >= ((major) * 100 + (minor))) |
+#else |
+# define V8_GLIBC_PREREQ(major, minor) 0 |
+#endif |
+ |
+ |
+// This macro allows to test for the version of the GNU C++ compiler. |
+// Note that this also applies to compilers that masquerade as GCC, |
+// for example clang and the Intel C++ compiler for Linux. |
+// Use like: |
+// #if V8_GNUC_PREREQ(4, 3, 1) |
+// ... |
+// #endif |
+#if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) |
+# define V8_GNUC_PREREQ(major, minor, patchlevel) \ |
+ ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= \ |
+ ((major) * 10000 + (minor) * 100 + (patchlevel))) |
+#elif defined(__GNUC__) && defined(__GNUC_MINOR__) |
+# define V8_GNUC_PREREQ(major, minor, patchlevel) \ |
+ ((__GNUC__ * 10000 + __GNUC_MINOR__) >= \ |
+ ((major) * 10000 + (minor) * 100 + (patchlevel))) |
+#else |
+# define V8_GNUC_PREREQ(major, minor, patchlevel) 0 |
+#endif |
+ |
+ |
+ |
// ----------------------------------------------------------------------------- |
// Operating system detection |
// |
@@ -87,6 +133,32 @@ |
// ----------------------------------------------------------------------------- |
+// C library detection |
+// |
+// V8_LIBC_BIONIC - Bionic libc |
+// V8_LIBC_BSD - BSD libc derivate |
+// V8_LIBC_GLIBC - GNU C library |
+// V8_LIBC_UCLIBC - uClibc |
+// |
+// Note that testing for libc must be done using #if not #ifdef. For example, |
+// to test for the GNU C library, use: |
+// #if V8_LIBC_GLIBC |
+// ... |
+// #endif |
+ |
+#if defined(__BIONIC__) |
+# define V8_LIBC_BIONIC 1 |
+# define V8_LIBC_BSD 1 |
+#elif defined(__UCLIBC__) |
+# define V8_LIBC_UCLIBC 1 |
+#elif defined(__GLIBC__) || defined(__GNU_LIBRARY__) |
+# define V8_LIBC_GLIBC 1 |
+#else |
+# define V8_LIBC_BSD V8_OS_BSD |
+#endif |
+ |
+ |
+// ----------------------------------------------------------------------------- |
// Compiler detection |
// |
// V8_CC_CLANG - Clang |
@@ -134,9 +206,6 @@ |
#if defined(__clang__) |
-// Don't treat clang as GCC. |
-# define V8_GNUC_PREREQ(major, minor, patchlevel) 0 |
- |
# define V8_CC_CLANG 1 |
// Clang defines __alignof__ as alias for __alignof |
@@ -161,10 +230,6 @@ |
#elif defined(__GNUC__) |
-# define V8_GNUC_PREREQ(major, minor, patchlevel) \ |
- ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= \ |
- ((major) * 10000 + (minor) * 100 + (patchlevel))) |
- |
# define V8_CC_GNU 1 |
// Intel C++ also masquerades as GCC 3.2.0 |
# define V8_CC_INTEL (defined(__INTEL_COMPILER)) |
@@ -207,8 +272,6 @@ |
#elif defined(_MSC_VER) |
-# define V8_GNUC_PREREQ(major, minor, patchlevel) 0 |
- |
# define V8_CC_MSVC 1 |
# define V8_HAS___ALIGNOF 1 |