Makes Google Test compile on Solaris and z/OS. By Rainer Klaffenboeck.

This commit is contained in:
shiqian
2008-11-10 18:27:46 +00:00
parent cea25099b5
commit d2849f5730
5 changed files with 64 additions and 28 deletions

View File

@@ -70,8 +70,11 @@
// GTEST_OS_CYGWIN - defined iff compiled on Cygwin.
// GTEST_OS_LINUX - defined iff compiled on Linux.
// GTEST_OS_MAC - defined iff compiled on Mac OS X.
// GTEST_OS_SOLARIS - defined iff compiled on Sun Solaris.
// GTEST_OS_SYMBIAN - defined iff compiled for Symbian.
// GTEST_OS_WINDOWS - defined iff compiled on Windows.
// GTEST_OS_ZOS - defined iff compiled on IBM z/OS.
//
// Note that it is possible that none of the GTEST_OS_ macros are defined.
//
// Macros indicating available Google Test features:
@@ -95,7 +98,7 @@
// and Google Test is thread-safe; or 0 otherwise.
//
// Template meta programming:
// is_pointer - as in TR1; needed on Symbian only.
// is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only.
//
// Smart pointers:
// scoped_ptr - as in TR2.
@@ -162,6 +165,10 @@
#define GTEST_OS_MAC
#elif defined __linux__
#define GTEST_OS_LINUX
#elif defined __MVS__
#define GTEST_OS_ZOS
#elif defined(__sun) && defined(__SVR4)
#define GTEST_OS_SOLARIS
#endif // _MSC_VER
// Determines whether ::std::string and ::string are available.
@@ -202,12 +209,13 @@
// TODO(wan@google.com): uses autoconf to detect whether ::std::wstring
// is available.
#ifdef GTEST_OS_CYGWIN
// At least some versions of cygwin doesn't support ::std::wstring.
#if defined(GTEST_OS_CYGWIN) || defined(GTEST_OS_SOLARIS)
// At least some versions of cygwin don't support ::std::wstring.
// Solaris' libc++ doesn't support it either.
#define GTEST_HAS_STD_WSTRING 0
#else
#define GTEST_HAS_STD_WSTRING GTEST_HAS_STD_STRING
#endif // GTEST_OS_CYGWIN
#endif // defined(GTEST_OS_CYGWIN) || defined(GTEST_OS_SOLARIS)
#endif // GTEST_HAS_STD_WSTRING
@@ -544,13 +552,22 @@ inline size_t GetThreadCount() { return 0; }
// Therefore Google Test is not thread-safe.
#define GTEST_IS_THREADSAFE 0
// Defines tr1::is_pointer (only needed for Symbian).
#if defined(__SYMBIAN32__) || defined(__IBMCPP__)
#ifdef __SYMBIAN32__
// Passing non-POD classes through ellipsis (...) crashes the ARM
// compiler. The Nokia Symbian and the IBM XL C/C++ compiler try to
// instantiate a copy constructor for objects passed through ellipsis
// (...), failing for uncopyable objects. We define this to indicate
// the fact.
#define GTEST_ELLIPSIS_NEEDS_COPY_ 1
// Symbian does not have tr1::type_traits, so we define our own is_pointer
// These are needed as the Nokia Symbian Compiler cannot decide between
// const T& and const T* in a function template.
// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between
// const T& and const T* in a function template. These compilers
// _can_ decide between class template specializations for T and T*,
// so a tr1::type_traits-like is_pointer works.
#define GTEST_NEEDS_IS_POINTER_ 1
#endif // defined(__SYMBIAN32__) || defined(__IBMCPP__)
template <bool bool_value>
struct bool_constant {
@@ -568,8 +585,6 @@ struct is_pointer : public false_type {};
template <typename T>
struct is_pointer<T*> : public true_type {};
#endif // __SYMBIAN32__
// Defines BiggestInt as the biggest signed integer type the compiler
// supports.