mirror of
https://github.com/google/googletest.git
synced 2024-12-27 18:31:21 +08:00
Merge pull request #721 from ilmagico/fix-mingw-threads
Fix compilation of googletest with MinGW using Win32 threads
This commit is contained in:
commit
ed9d1e1ff9
@ -46,7 +46,9 @@ endmacro()
|
|||||||
# Google Mock. You can tweak these definitions to suit your need. A
|
# Google Mock. You can tweak these definitions to suit your need. A
|
||||||
# variable's value is empty before it's explicitly assigned to.
|
# variable's value is empty before it's explicitly assigned to.
|
||||||
macro(config_compiler_and_linker)
|
macro(config_compiler_and_linker)
|
||||||
if (NOT gtest_disable_pthreads)
|
# Note: pthreads on MinGW is not supported, even if available
|
||||||
|
# instead, we use windows threading primitives
|
||||||
|
if (NOT gtest_disable_pthreads AND NOT MINGW)
|
||||||
# Defines CMAKE_USE_PTHREADS_INIT and CMAKE_THREAD_LIBS_INIT.
|
# Defines CMAKE_USE_PTHREADS_INIT and CMAKE_THREAD_LIBS_INIT.
|
||||||
find_package(Threads)
|
find_package(Threads)
|
||||||
endif()
|
endif()
|
||||||
|
@ -396,10 +396,16 @@
|
|||||||
# include <io.h>
|
# include <io.h>
|
||||||
# endif
|
# endif
|
||||||
// In order to avoid having to include <windows.h>, use forward declaration
|
// In order to avoid having to include <windows.h>, use forward declaration
|
||||||
// assuming CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION.
|
#if GTEST_OS_WINDOWS_MINGW
|
||||||
|
// MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two
|
||||||
|
// separate (equivalent) structs, instead of using typedef
|
||||||
|
typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
|
||||||
|
#else
|
||||||
|
// Assume CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION.
|
||||||
// This assumption is verified by
|
// This assumption is verified by
|
||||||
// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.
|
// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.
|
||||||
struct _RTL_CRITICAL_SECTION;
|
typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
// This assumes that non-Windows OSes provide unistd.h. For OSes where this
|
// This assumes that non-Windows OSes provide unistd.h. For OSes where this
|
||||||
// is not the case, we need to include headers that provide the functions
|
// is not the case, we need to include headers that provide the functions
|
||||||
@ -1693,7 +1699,7 @@ class GTEST_API_ Mutex {
|
|||||||
// by the linker.
|
// by the linker.
|
||||||
MutexType type_;
|
MutexType type_;
|
||||||
long critical_section_init_phase_; // NOLINT
|
long critical_section_init_phase_; // NOLINT
|
||||||
_RTL_CRITICAL_SECTION* critical_section_;
|
GTEST_CRITICAL_SECTION* critical_section_;
|
||||||
|
|
||||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex);
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex);
|
||||||
};
|
};
|
||||||
|
@ -1295,9 +1295,16 @@ TEST(WindowsTypesTest, HANDLEIsVoidStar) {
|
|||||||
StaticAssertTypeEq<HANDLE, void*>();
|
StaticAssertTypeEq<HANDLE, void*>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if GTEST_OS_WINDOWS_MINGW
|
||||||
|
TEST(WindowsTypesTest, _CRITICAL_SECTIONIs_CRITICAL_SECTION) {
|
||||||
|
StaticAssertTypeEq<CRITICAL_SECTION, _CRITICAL_SECTION>();
|
||||||
|
}
|
||||||
|
#else
|
||||||
TEST(WindowsTypesTest, CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION) {
|
TEST(WindowsTypesTest, CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION) {
|
||||||
StaticAssertTypeEq<CRITICAL_SECTION, _RTL_CRITICAL_SECTION>();
|
StaticAssertTypeEq<CRITICAL_SECTION, _RTL_CRITICAL_SECTION>();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // GTEST_OS_WINDOWS
|
#endif // GTEST_OS_WINDOWS
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
@ -442,7 +442,7 @@ class FormatEpochTimeInMillisAsIso8601Test : public Test {
|
|||||||
// tzset() distinguishes between the TZ variable being present and empty
|
// tzset() distinguishes between the TZ variable being present and empty
|
||||||
// and not being present, so we have to consider the case of time_zone
|
// and not being present, so we have to consider the case of time_zone
|
||||||
// being NULL.
|
// being NULL.
|
||||||
#if _MSC_VER
|
#if _MSC_VER || GTEST_OS_WINDOWS_MINGW
|
||||||
// ...Unless it's MSVC, whose standard library's _putenv doesn't
|
// ...Unless it's MSVC, whose standard library's _putenv doesn't
|
||||||
// distinguish between an empty and a missing variable.
|
// distinguish between an empty and a missing variable.
|
||||||
const std::string env_var =
|
const std::string env_var =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user