Makes Google Test compile on Solaris and z/OS. By Rainer Klaffenboeck.
This commit is contained in:
parent
cea25099b5
commit
d2849f5730
|
@ -20,6 +20,7 @@ Patrick Hanna <phanna@google.com>
|
|||
Patrick Riley <pfr@google.com>
|
||||
Peter Kaminski <piotrk@google.com>
|
||||
Preston Jackson <preston.jackson@gmail.com>
|
||||
Rainer Klaffenboeck <rainer.klaffenboeck@dynatrace.com>
|
||||
Russ Cox <rsc@google.com>
|
||||
Russ Rufer <russ@pentad.com>
|
||||
Sean Mcafee <eefacm@gmail.com>
|
||||
|
|
|
@ -150,16 +150,17 @@ char (&IsNullLiteralHelper(...))[2]; // NOLINT
|
|||
// A compile-time bool constant that is true if and only if x is a
|
||||
// null pointer literal (i.e. NULL or any 0-valued compile-time
|
||||
// integral constant).
|
||||
#ifdef __SYMBIAN32__ // Symbian
|
||||
// Passing non-POD classes through ellipsis (...) crashes the ARM compiler.
|
||||
// The Nokia Symbian compiler tries to instantiate a copy constructor for
|
||||
// objects passed through ellipsis (...), failing for uncopyable objects.
|
||||
// Hence we define this to false (and lose support for NULL detection).
|
||||
#ifdef GTEST_ELLIPSIS_NEEDS_COPY_
|
||||
// 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. Hence we define this to
|
||||
// false (and lose support for NULL detection).
|
||||
#define GTEST_IS_NULL_LITERAL_(x) false
|
||||
#else // ! GTEST_OS_SYMBIAN
|
||||
#else
|
||||
#define GTEST_IS_NULL_LITERAL_(x) \
|
||||
(sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1)
|
||||
#endif // GTEST_OS_SYMBIAN
|
||||
#endif // GTEST_ELLIPSIS_NEEDS_COPY_
|
||||
|
||||
// Appends the user-supplied message to the Google-Test-generated message.
|
||||
String AppendUserMessage(const String& gtest_msg,
|
||||
|
@ -196,12 +197,13 @@ String StreamableToString(const T& streamable);
|
|||
|
||||
// Formats a value to be used in a failure message.
|
||||
|
||||
#ifdef GTEST_OS_SYMBIAN
|
||||
#ifdef GTEST_NEEDS_IS_POINTER_
|
||||
|
||||
// These are needed as the Nokia Symbian Compiler cannot decide between
|
||||
// const T& and const T* in a function template. The Nokia compiler _can_
|
||||
// decide between class template specializations for T and T*, so a
|
||||
// tr1::type_traits-like is_pointer works, and we can overload on that.
|
||||
// These are needed as 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, and we
|
||||
// can overload on that.
|
||||
|
||||
// This overload makes sure that all pointers (including
|
||||
// those to char or wchar_t) are printed as raw pointers.
|
||||
|
@ -225,6 +227,10 @@ inline String FormatForFailureMessage(const T& value) {
|
|||
|
||||
#else
|
||||
|
||||
// These are needed as the above solution using is_pointer has the
|
||||
// limitation that T cannot be a type without external linkage, when
|
||||
// compiled using MSVC.
|
||||
|
||||
template <typename T>
|
||||
inline String FormatForFailureMessage(const T& value) {
|
||||
return StreamableToString(value);
|
||||
|
@ -237,7 +243,7 @@ inline String FormatForFailureMessage(T* pointer) {
|
|||
return StreamableToString(static_cast<const void*>(pointer));
|
||||
}
|
||||
|
||||
#endif // GTEST_OS_SYMBIAN
|
||||
#endif // GTEST_NEEDS_IS_POINTER_
|
||||
|
||||
// These overloaded versions handle narrow and wide characters.
|
||||
String FormatForFailureMessage(char ch);
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -48,7 +48,17 @@
|
|||
#include <limits.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#endif // _WIN32_WCE or _WIN32
|
||||
#endif // _WIN32_WCE or _WIN32
|
||||
|
||||
#ifdef GTEST_OS_WINDOWS
|
||||
#define GTEST_PATH_MAX_ _MAX_PATH
|
||||
#elif defined(PATH_MAX)
|
||||
#define GTEST_PATH_MAX_ PATH_MAX
|
||||
#elif defined(_XOPEN_PATH_MAX)
|
||||
#define GTEST_PATH_MAX_ _XOPEN_PATH_MAX
|
||||
#else
|
||||
#define GTEST_PATH_MAX_ _POSIX_PATH_MAX
|
||||
#endif // GTEST_OS_WINDOWS
|
||||
|
||||
#include <gtest/internal/gtest-string.h>
|
||||
|
||||
|
@ -81,10 +91,10 @@ FilePath FilePath::GetCurrentDir() {
|
|||
// something reasonable.
|
||||
return FilePath(kCurrentDirectoryString);
|
||||
#elif defined(GTEST_OS_WINDOWS)
|
||||
char cwd[_MAX_PATH + 1] = {};
|
||||
char cwd[GTEST_PATH_MAX_ + 1] = {};
|
||||
return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd);
|
||||
#else
|
||||
char cwd[PATH_MAX + 1] = {};
|
||||
char cwd[GTEST_PATH_MAX_ + 1] = {};
|
||||
return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -65,6 +65,10 @@
|
|||
#define GTEST_HAS_GETTIMEOFDAY
|
||||
#include <sys/time.h> // NOLINT
|
||||
|
||||
#elif defined(GTEST_OS_ZOS)
|
||||
// On z/OS we additionally need strings.h for strcasecmp.
|
||||
#include <strings.h>
|
||||
|
||||
#elif defined(_WIN32_WCE) // We are on Windows CE.
|
||||
|
||||
#include <windows.h> // NOLINT
|
||||
|
@ -2445,7 +2449,7 @@ void ColoredPrintf(GTestColor color, const char* fmt, ...) {
|
|||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
#if defined(_WIN32_WCE) || defined(GTEST_OS_SYMBIAN)
|
||||
#if defined(_WIN32_WCE) || defined(GTEST_OS_SYMBIAN) || defined(GTEST_OS_ZOS)
|
||||
static const bool use_color = false;
|
||||
#else
|
||||
static const bool use_color = ShouldUseColor(isatty(fileno(stdout)) != 0);
|
||||
|
|
Loading…
Reference in New Issue
Block a user