Line 0
Link Here
|
|
|
1 |
Index: include/gtest/internal/gtest-port.h |
2 |
=================================================================== |
3 |
--- include/gtest/internal/gtest-port.h (revision 692) |
4 |
+++ include/gtest/internal/gtest-port.h (working copy) |
5 |
@@ -128,6 +128,10 @@ |
6 |
// GTEST_OS_IOS - iOS |
7 |
// GTEST_OS_IOS_SIMULATOR - iOS simulator |
8 |
// GTEST_OS_NACL - Google Native Client (NaCl) |
9 |
+// GTEST_OS_GNU_KFREEBSD - GNU/kFreeBSD |
10 |
+// GTEST_OS_DRAGONFLY - DragonFly |
11 |
+// GTEST_OS_FREEBSD - FreeBSD |
12 |
+// GTEST_OS_NETBSD - NetBSD |
13 |
// GTEST_OS_OPENBSD - OpenBSD |
14 |
// GTEST_OS_QNX - QNX |
15 |
// GTEST_OS_SOLARIS - Sun Solaris |
16 |
@@ -341,6 +345,14 @@ |
17 |
# define GTEST_OS_HPUX 1 |
18 |
#elif defined __native_client__ |
19 |
# define GTEST_OS_NACL 1 |
20 |
+#elif defined(__GLIBC__) && defined(__FreeBSD_kernel__) |
21 |
+# define GTEST_OS_GNU_KFREEBSD 1 |
22 |
+#elif defined __DragonFly__ |
23 |
+# define GTEST_OS_DRAGONFLY 1 |
24 |
+#elif defined __FreeBSD__ |
25 |
+# define GTEST_OS_FREEBSD 1 |
26 |
+#elif defined __NetBSD__ |
27 |
+# define GTEST_OS_NETBSD 1 |
28 |
#elif defined __OpenBSD__ |
29 |
# define GTEST_OS_OPENBSD 1 |
30 |
#elif defined __QNX__ |
31 |
@@ -611,6 +623,8 @@ struct _RTL_CRITICAL_SECTION; |
32 |
// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 |
33 |
// to your compiler flags. |
34 |
# define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \ |
35 |
+ || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD \ |
36 |
+ || GTEST_OS_NETBSD || GTEST_OS_OPENBSD \ |
37 |
|| GTEST_OS_QNX) |
38 |
#endif // GTEST_HAS_PTHREAD |
39 |
|
40 |
@@ -791,7 +805,8 @@ using ::std::tuple_size; |
41 |
(GTEST_OS_MAC && !GTEST_OS_IOS) || GTEST_OS_IOS_SIMULATOR || \ |
42 |
(GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ |
43 |
GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ |
44 |
- GTEST_OS_OPENBSD || GTEST_OS_QNX) |
45 |
+ GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || \ |
46 |
+ GTEST_OS_NETBSD || GTEST_OS_OPENBSD || GTEST_OS_QNX) |
47 |
# define GTEST_HAS_DEATH_TEST 1 |
48 |
# include <vector> // NOLINT |
49 |
#endif |
50 |
@@ -824,7 +839,8 @@ using ::std::tuple_size; |
51 |
(GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) |
52 |
|
53 |
// Determines whether test results can be streamed to a socket. |
54 |
-#if GTEST_OS_LINUX |
55 |
+#if GTEST_OS_LINUX || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || \ |
56 |
+ GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD |
57 |
# define GTEST_CAN_STREAM_RESULTS_ 1 |
58 |
#endif |
59 |
|
60 |
Index: src/gtest-port.cc |
61 |
=================================================================== |
62 |
--- src/gtest-port.cc (revision 692) |
63 |
+++ src/gtest-port.cc (working copy) |
64 |
@@ -51,6 +51,14 @@ |
65 |
# include <mach/vm_map.h> |
66 |
#endif // GTEST_OS_MAC |
67 |
|
68 |
+#if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \ |
69 |
+ GTEST_OS_NETBSD || GTEST_OS_OPENBSD |
70 |
+# include <sys/sysctl.h> |
71 |
+# if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD |
72 |
+# include <sys/user.h> |
73 |
+# endif |
74 |
+#endif |
75 |
+ |
76 |
#if GTEST_OS_QNX |
77 |
# include <devctl.h> |
78 |
# include <fcntl.h> |
79 |
@@ -104,6 +112,80 @@ size_t GetThreadCount() { |
80 |
} |
81 |
} |
82 |
|
83 |
+#elif GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \ |
84 |
+ GTEST_OS_NETBSD |
85 |
+ |
86 |
+#if GTEST_OS_NETBSD |
87 |
+#undef KERN_PROC |
88 |
+#define KERN_PROC KERN_PROC2 |
89 |
+#define kinfo_proc kinfo_proc2 |
90 |
+#endif |
91 |
+ |
92 |
+#if GTEST_OS_DRAGONFLY |
93 |
+#define KP_NLWP(kp) (kp.kp_nthreads) |
94 |
+#elif GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD |
95 |
+#define KP_NLWP(kp) (kp.ki_numthreads) |
96 |
+#elif GTEST_OS_NETBSD |
97 |
+#define KP_NLWP(kp) (kp.p_nlwps) |
98 |
+#endif |
99 |
+ |
100 |
+// Returns the number of threads running in the process, or 0 to indicate that |
101 |
+// we cannot detect it. |
102 |
+size_t GetThreadCount() { |
103 |
+ int mib[] = { |
104 |
+ CTL_KERN, |
105 |
+ KERN_PROC, |
106 |
+ KERN_PROC_PID, |
107 |
+ getpid(), |
108 |
+#if GTEST_OS_NETBSD |
109 |
+ sizeof(struct kinfo_proc), |
110 |
+ 1, |
111 |
+#endif |
112 |
+ }; |
113 |
+ u_int miblen = sizeof(mib) / sizeof(mib[0]); |
114 |
+ struct kinfo_proc info; |
115 |
+ size_t size = sizeof(info); |
116 |
+ if (sysctl(mib, miblen, &info, &size, NULL, 0)) { |
117 |
+ return 0; |
118 |
+ } |
119 |
+ return KP_NLWP(info); |
120 |
+} |
121 |
+#elif GTEST_OS_OPENBSD |
122 |
+ |
123 |
+// Returns the number of threads running in the process, or 0 to indicate that |
124 |
+// we cannot detect it. |
125 |
+size_t GetThreadCount() { |
126 |
+ int mib[] = { |
127 |
+ CTL_KERN, |
128 |
+ KERN_PROC, |
129 |
+ KERN_PROC_PID | KERN_PROC_SHOW_THREADS, |
130 |
+ getpid(), |
131 |
+ sizeof(struct kinfo_proc), |
132 |
+ 0, |
133 |
+ }; |
134 |
+ u_int miblen = sizeof(mib) / sizeof(mib[0]); |
135 |
+ |
136 |
+ // get number of structs |
137 |
+ size_t size; |
138 |
+ if (sysctl(mib, miblen, NULL, &size, NULL, 0)) { |
139 |
+ return 0; |
140 |
+ } |
141 |
+ mib[5] = size / mib[4]; |
142 |
+ |
143 |
+ // populate array of structs |
144 |
+ struct kinfo_proc info[mib[5]]; |
145 |
+ if (sysctl(mib, miblen, &info, &size, NULL, 0)) { |
146 |
+ return 0; |
147 |
+ } |
148 |
+ |
149 |
+ // exclude empty members |
150 |
+ int nthreads = 0; |
151 |
+ for (int i = 0; i < size / mib[4]; i++) { |
152 |
+ if (info[i].p_tid != -1) |
153 |
+ nthreads++; |
154 |
+ } |
155 |
+ return nthreads; |
156 |
+} |
157 |
#elif GTEST_OS_QNX |
158 |
|
159 |
// Returns the number of threads running in the process, or 0 to indicate that |
160 |
Index: src/gtest.cc |
161 |
=================================================================== |
162 |
--- src/gtest.cc (revision 692) |
163 |
+++ src/gtest.cc (working copy) |
164 |
@@ -126,7 +126,7 @@ |
165 |
#endif |
166 |
|
167 |
#if GTEST_CAN_STREAM_RESULTS_ |
168 |
-# include <arpa/inet.h> // NOLINT |
169 |
+# include <sys/socket.h> |
170 |
# include <netdb.h> // NOLINT |
171 |
#endif |
172 |
|
173 |
Index: test/gtest-port_test.cc |
174 |
=================================================================== |
175 |
--- test/gtest-port_test.cc (revision 692) |
176 |
+++ test/gtest-port_test.cc (working copy) |
177 |
@@ -304,7 +304,8 @@ TEST(FormatCompilerIndependentFileLocationTest, Fo |
178 |
EXPECT_EQ("unknown file", FormatCompilerIndependentFileLocation(NULL, -1)); |
179 |
} |
180 |
|
181 |
-#if GTEST_OS_MAC || GTEST_OS_QNX |
182 |
+#if GTEST_OS_MAC || GTEST_OS_QNX || GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || \ |
183 |
+ GTEST_OS_GNU_KFREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD |
184 |
void* ThreadFunc(void* data) { |
185 |
pthread_mutex_t* mutex = static_cast<pthread_mutex_t*>(data); |
186 |
pthread_mutex_lock(mutex); |
187 |
@@ -355,7 +356,7 @@ TEST(GetThreadCountTest, ReturnsCorrectValue) { |
188 |
TEST(GetThreadCountTest, ReturnsZeroWhenUnableToCountThreads) { |
189 |
EXPECT_EQ(0U, GetThreadCount()); |
190 |
} |
191 |
-#endif // GTEST_OS_MAC || GTEST_OS_QNX |
192 |
+#endif // GTEST_OS_MAC || GTEST_OS_QNX || GTEST_OS_*BSD |
193 |
|
194 |
TEST(GtestCheckDeathTest, DiesWithCorrectOutputOnFailure) { |
195 |
const bool a_false_condition = false; |
196 |
Index: test/gtest_unittest.cc |
197 |
=================================================================== |
198 |
--- test/gtest_unittest.cc (revision 692) |
199 |
+++ test/gtest_unittest.cc (working copy) |
200 |
@@ -117,6 +117,7 @@ TEST_F(StreamingListenerTest, OnTestIterationEnd) |
201 |
EXPECT_EQ("event=TestIterationEnd&passed=1&elapsed_time=0ms\n", *output()); |
202 |
} |
203 |
|
204 |
+#if GTEST_LANG_CXX11 // workaround breakage with GCC 4.2 |
205 |
TEST_F(StreamingListenerTest, OnTestCaseStart) { |
206 |
*output() = ""; |
207 |
streamer_.OnTestCaseStart(TestCase("FooTest", "Bar", NULL, NULL)); |
208 |
@@ -128,6 +129,7 @@ TEST_F(StreamingListenerTest, OnTestCaseEnd) { |
209 |
streamer_.OnTestCaseEnd(TestCase("FooTest", "Bar", NULL, NULL)); |
210 |
EXPECT_EQ("event=TestCaseEnd&passed=1&elapsed_time=0ms\n", *output()); |
211 |
} |
212 |
+#endif |
213 |
|
214 |
TEST_F(StreamingListenerTest, OnTestStart) { |
215 |
*output() = ""; |