summaryrefslogtreecommitdiffstats
path: root/googletest/include/gtest/internal/custom/gtest-port.h
blob: 0973a1056153304e8d35da6a4649e0656817a1f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
// Copyright 2015, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Injection point for custom user configurations. See README for details
//
// ** Custom implementation starts here **

#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_
#include "gtest/internal/gtest-port-arch.h"

#include <string>

//   NOTE:
//   GUNIT_NO_GOOGLE3         - Only used when compiled on Linux.  Define it
//                              to remove dependency on google3 - some features
//                              are unavailable in this mode.

#define GTEST_FOR_GOOGLE_ 1  // Defined to 1 iff compiled inside Google.

// We define these even in non-google3 mode.

#define GTEST_FLAG(name) FLAGS_gunit_##name

#define GTEST_DEV_EMAIL_ "opensource-gtest@@google.com"
#define GTEST_FLAG_PREFIX_ "gunit_"
#define GTEST_FLAG_PREFIX_DASH_ "gunit-"
#define GTEST_FLAG_PREFIX_UPPER_ "GUNIT_"
#define GTEST_NAME_ "Google Test"
#define GTEST_PROJECT_URL_ "http://go/gunit/"
#define GTEST_DEFAULT_DEATH_TEST_STYLE "threadsafe"

// OS_MACOSX is defined by Blaze, when cross-compiling (on Linux) to
// Mac OS X.
// See also testing/base/public/BUILD for notes about GTEST_INTERNAL_PG3_MODE.
#if !defined(GUNIT_NO_GOOGLE3) && (GTEST_OS_CYGWIN || GTEST_OS_LINUX || \
                                   defined(OS_MACOSX))
# define GTEST_GOOGLE3_MODE_ 1
#endif

#if GTEST_GOOGLE3_MODE_

#define GTEST_HAS_ABSL 1

#define GTEST_INIT_GOOGLE_TEST_NAME_ "InitGoogle"

// Tell Google Test that hash_map/hash_set are available.
// Only used for testing.
#define GTEST_HAS_HASH_MAP_ 1
#define GTEST_HAS_HASH_SET_ 1

// base/commandlineoptions.h has its own --flagfile flag.
# define GTEST_USE_OWN_FLAGFILE_FLAG_ 0

// base/commandlineflags.h provides its own GetArgvs()
# define GTEST_CUSTOM_GET_ARGVS_() ::GetArgvs()

#include "base/callback.h"
#include "base/logging_extensions.h"
#include "base/synchronization.h"
#include "thread/thread.h"

// Provide the PCRE regex library.
#include "util/regexp/re2/re2.h"
# define GTEST_USES_PCRE 1
namespace testing {
namespace internal {
// This is almost 'using RE = ::RE2', except that it disambiguates
// RE::RE(std::string). It cannot be merged into the RE implementation below,
// since this version will support embedded NUL characters.
class RE {
 public:
  RE(absl::string_view regex) : regex_(new RE2(regex)) {}         // NOLINT
  RE(const char* regex) : RE(absl::string_view(regex)) {}         // NOLINT
  RE(const std::string& regex) : RE(absl::string_view(regex)) {}  // NOLINT
  RE(const RE& other) : RE(other.pattern()) {}

  // Returns the string representation of the regex.
  const std::string& pattern() const { return regex_->pattern(); }

  static bool FullMatch(absl::string_view str, const RE& re) {
    return RE2::FullMatch(str, *re.regex_);
  }
  static bool PartialMatch(absl::string_view str, const RE& re) {
    return RE2::PartialMatch(str, *re.regex_);
  }

 private:
  std::unique_ptr<RE2> regex_;
};

}  // namespace internal
}  // namespace testing

// For flags.
# include "base/commandlineflags.h"

#define GTEST_FLAG_SAVER_ absl::FlagSaver

// Macros for declaring flags.
# define GTEST_DECLARE_bool_(name)   DECLARE_bool(gunit_##name)
# define GTEST_DECLARE_int32_(name)  DECLARE_int32(gunit_##name)
# define GTEST_DECLARE_string_(name) DECLARE_string(gunit_##name)

// Macros for defining flags.
# define GTEST_DEFINE_bool_(name, default_val, doc) \
    DEFINE_bool(gunit_##name, default_val, doc)
# define GTEST_DEFINE_int32_(name, default_val, doc) \
    DEFINE_int32(gunit_##name, default_val, doc)
# define GTEST_DEFINE_string_(name, default_val, doc) \
    DEFINE_string(gunit_##name, default_val, doc)

# define GTEST_GET_BOOL_FROM_ENV_(flag, default_val) \
  ::BoolFromEnv(FlagToEnvVar(flag).c_str(), default_val)
# define GTEST_GET_INT32_FROM_ENV_(flag, default_val) \
  ::Int32FromEnv(FlagToEnvVar(flag).c_str(), default_val)
# define GTEST_GET_STRING_FROM_ENV_(flag, default_val) \
  ::StringFromEnv(FlagToEnvVar(flag).c_str(), default_val)

// For logging.
# include "third_party/absl/base/log_severity.h"
# include "base/logging.h"
# define GTEST_LOG_(severity) LOG(severity)
namespace testing {
namespace internal {
using ::LogToStderr;
inline void FlushInfoLog() { FlushLogFiles(base_logging::INFO); }
}  // namespace internal
}  // namespace testing

# define GTEST_CHECK_(condition) CHECK(condition)

// For CheckedDowncastToActualType
# include "base/casts.h"
# define GTEST_HAS_DOWNCAST_ 1

# define GTEST_HAS_NOTIFICATION_ 1
#include "absl/synchronization/notification.h"
namespace testing {
namespace internal {
using ::absl::Notification;
}  // namespace internal
}  // namespace testing

# define GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ 1
# include "base/mutex.h"
# include "thread/threadlocal.h"
namespace testing {
namespace internal {
using absl::Mutex;
using absl::MutexLock;
using ::ThreadLocal;

// Forward-declares a static mutex.
# define GTEST_DECLARE_STATIC_MUTEX_(mutex) extern absl::Mutex mutex

// Defines and statically initializes a static mutex.
# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
  absl::Mutex mutex(absl::kConstInit)
}  // namespace internal
}  // namespace testing

// For thread annotations.
# include "third_party/absl/base/thread_annotations.h"
# define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) \
   ABSL_EXCLUSIVE_LOCKS_REQUIRED(locks)
# define GTEST_LOCK_EXCLUDED_(locks) ABSL_LOCKS_EXCLUDED(locks)

#endif  // GTEST_GOOGLE3_MODE_

// Pre-r11 Android NDK releases for x86 and x86_64 do not have abi libraries.
# if GTEST_OS_LINUX_ANDROID && (defined(__i386__) || defined(__x86_64__))
#  define GTEST_HAS_CXXABI_H_ 0
# endif

#endif  // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_