Import patch-bsd-defines from FreeBSD ports [1]
				
					
				
			As noted in the patch description: * Add DragonFly and GNU/kFreeBSD support. * Implement GetThreadCount() for BSDs. 1. https://svnweb.freebsd.org/ports/head/devel/googletest/files/patch-bsd-defines?revision=488934 Signed-off-by: Enji Cooper <yaneurabeya@gmail.com>
This commit is contained in:
		@@ -71,10 +71,14 @@
 | 
			
		||||
# if TARGET_OS_IPHONE
 | 
			
		||||
#  define GTEST_OS_IOS 1
 | 
			
		||||
# endif
 | 
			
		||||
#elif defined __DragonFly__
 | 
			
		||||
# define GTEST_OS_DRAGONFLY 1
 | 
			
		||||
#elif defined __FreeBSD__
 | 
			
		||||
# define GTEST_OS_FREEBSD 1
 | 
			
		||||
#elif defined __Fuchsia__
 | 
			
		||||
# define GTEST_OS_FUCHSIA 1
 | 
			
		||||
#elif defined(__GLIBC__) && defined(__FreeBSD_kernel__)
 | 
			
		||||
# define GTEST_OS_GNU_KFREEBSD 1
 | 
			
		||||
#elif defined __linux__
 | 
			
		||||
# define GTEST_OS_LINUX 1
 | 
			
		||||
# if defined __ANDROID__
 | 
			
		||||
 
 | 
			
		||||
@@ -117,8 +117,10 @@
 | 
			
		||||
//
 | 
			
		||||
//   GTEST_OS_AIX      - IBM AIX
 | 
			
		||||
//   GTEST_OS_CYGWIN   - Cygwin
 | 
			
		||||
//   GTEST_OS_DRAGONFLY - DragonFlyBSD
 | 
			
		||||
//   GTEST_OS_FREEBSD  - FreeBSD
 | 
			
		||||
//   GTEST_OS_FUCHSIA  - Fuchsia
 | 
			
		||||
//   GTEST_OS_GNU_KFREEBSD - GNU/kFreeBSD
 | 
			
		||||
//   GTEST_OS_HPUX     - HP-UX
 | 
			
		||||
//   GTEST_OS_LINUX    - Linux
 | 
			
		||||
//     GTEST_OS_LINUX_ANDROID - Google Android
 | 
			
		||||
@@ -545,7 +547,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
 | 
			
		||||
// to your compiler flags.
 | 
			
		||||
#define GTEST_HAS_PTHREAD                                             \
 | 
			
		||||
  (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \
 | 
			
		||||
   GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA)
 | 
			
		||||
   GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \
 | 
			
		||||
   GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_OPENBSD)
 | 
			
		||||
#endif  // GTEST_HAS_PTHREAD
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_PTHREAD
 | 
			
		||||
@@ -604,7 +607,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
 | 
			
		||||
     (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER) ||                  \
 | 
			
		||||
     GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \
 | 
			
		||||
     GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD || \
 | 
			
		||||
     GTEST_OS_NETBSD || GTEST_OS_FUCHSIA)
 | 
			
		||||
     GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || GTEST_OS_DRAGONFLY || \
 | 
			
		||||
     GTEST_OS_GNU_KFREEBSD)
 | 
			
		||||
# define GTEST_HAS_DEATH_TEST 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -623,7 +627,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
 | 
			
		||||
  (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_AIX || GTEST_OS_OS2)
 | 
			
		||||
 | 
			
		||||
// Determines whether test results can be streamed to a socket.
 | 
			
		||||
#if GTEST_OS_LINUX
 | 
			
		||||
#if GTEST_OS_LINUX || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || \
 | 
			
		||||
    GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD
 | 
			
		||||
# define GTEST_CAN_STREAM_RESULTS_ 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +55,14 @@
 | 
			
		||||
# include <mach/vm_map.h>
 | 
			
		||||
#endif  // GTEST_OS_MAC
 | 
			
		||||
 | 
			
		||||
#if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \
 | 
			
		||||
    GTEST_OS_NETBSD || GTEST_OS_OPENBSD
 | 
			
		||||
# include <sys/sysctl.h>
 | 
			
		||||
# if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD
 | 
			
		||||
#  include <sys/user.h>
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if GTEST_OS_QNX
 | 
			
		||||
# include <devctl.h>
 | 
			
		||||
# include <fcntl.h>
 | 
			
		||||
@@ -131,6 +139,81 @@ size_t GetThreadCount() {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \
 | 
			
		||||
      GTEST_OS_NETBSD
 | 
			
		||||
 | 
			
		||||
#if GTEST_OS_NETBSD
 | 
			
		||||
#undef KERN_PROC
 | 
			
		||||
#define KERN_PROC KERN_PROC2
 | 
			
		||||
#define kinfo_proc kinfo_proc2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if GTEST_OS_DRAGONFLY
 | 
			
		||||
#define KP_NLWP(kp) (kp.kp_nthreads)
 | 
			
		||||
#elif GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD
 | 
			
		||||
#define KP_NLWP(kp) (kp.ki_numthreads)
 | 
			
		||||
#elif GTEST_OS_NETBSD
 | 
			
		||||
#define KP_NLWP(kp) (kp.p_nlwps)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Returns the number of threads running in the process, or 0 to indicate that
 | 
			
		||||
// we cannot detect it.
 | 
			
		||||
size_t GetThreadCount() {
 | 
			
		||||
  int mib[] = {
 | 
			
		||||
    CTL_KERN,
 | 
			
		||||
    KERN_PROC,
 | 
			
		||||
    KERN_PROC_PID,
 | 
			
		||||
    getpid(),
 | 
			
		||||
#if GTEST_OS_NETBSD
 | 
			
		||||
    sizeof(struct kinfo_proc),
 | 
			
		||||
    1,
 | 
			
		||||
#endif
 | 
			
		||||
  };
 | 
			
		||||
  u_int miblen = sizeof(mib) / sizeof(mib[0]);
 | 
			
		||||
  struct kinfo_proc info;
 | 
			
		||||
  size_t size = sizeof(info);
 | 
			
		||||
  if (sysctl(mib, miblen, &info, &size, NULL, 0)) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
  return KP_NLWP(info);
 | 
			
		||||
}
 | 
			
		||||
#elif GTEST_OS_OPENBSD
 | 
			
		||||
 | 
			
		||||
// Returns the number of threads running in the process, or 0 to indicate that
 | 
			
		||||
// we cannot detect it.
 | 
			
		||||
size_t GetThreadCount() {
 | 
			
		||||
  int mib[] = {
 | 
			
		||||
    CTL_KERN,
 | 
			
		||||
    KERN_PROC,
 | 
			
		||||
    KERN_PROC_PID | KERN_PROC_SHOW_THREADS,
 | 
			
		||||
    getpid(),
 | 
			
		||||
    sizeof(struct kinfo_proc),
 | 
			
		||||
    0,
 | 
			
		||||
  };
 | 
			
		||||
  u_int miblen = sizeof(mib) / sizeof(mib[0]);
 | 
			
		||||
 | 
			
		||||
  // get number of structs
 | 
			
		||||
  size_t size;
 | 
			
		||||
  if (sysctl(mib, miblen, NULL, &size, NULL, 0)) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
  mib[5] = size / mib[4];
 | 
			
		||||
 | 
			
		||||
  // populate array of structs
 | 
			
		||||
  struct kinfo_proc info[mib[5]];
 | 
			
		||||
  if (sysctl(mib, miblen, &info, &size, NULL, 0)) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // exclude empty members
 | 
			
		||||
  int nthreads = 0;
 | 
			
		||||
  for (int i = 0; i < size / mib[4]; i++) {
 | 
			
		||||
    if (info[i].p_tid != -1)
 | 
			
		||||
      nthreads++;
 | 
			
		||||
  }
 | 
			
		||||
  return nthreads;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif GTEST_OS_QNX
 | 
			
		||||
 | 
			
		||||
// Returns the number of threads running in the process, or 0 to indicate that
 | 
			
		||||
 
 | 
			
		||||
@@ -286,7 +286,9 @@ TEST(FormatCompilerIndependentFileLocationTest, FormatsUknownFileAndLine) {
 | 
			
		||||
  EXPECT_EQ("unknown file", FormatCompilerIndependentFileLocation(nullptr, -1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_QNX || GTEST_OS_FUCHSIA
 | 
			
		||||
#if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_QNX || GTEST_OS_FUCHSIA || \
 | 
			
		||||
    GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \
 | 
			
		||||
    GTEST_OS_NETBSD || GTEST_OS_OPENBSD
 | 
			
		||||
void* ThreadFunc(void* data) {
 | 
			
		||||
  internal::Mutex* mutex = static_cast<internal::Mutex*>(data);
 | 
			
		||||
  mutex->Lock();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user