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 | ||||
| # variable's value is empty before it's explicitly assigned to. | ||||
| 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. | ||||
|     find_package(Threads) | ||||
|   endif() | ||||
|  | ||||
| @ -396,10 +396,16 @@ | ||||
| #  include <io.h> | ||||
| # endif | ||||
| // 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
 | ||||
| // WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.
 | ||||
| struct _RTL_CRITICAL_SECTION; | ||||
| typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; | ||||
| #endif | ||||
| #else | ||||
| // 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
 | ||||
| @ -1693,7 +1699,7 @@ class GTEST_API_ Mutex { | ||||
|   // by the linker.
 | ||||
|   MutexType type_; | ||||
|   long critical_section_init_phase_;  // NOLINT
 | ||||
|   _RTL_CRITICAL_SECTION* critical_section_; | ||||
|   GTEST_CRITICAL_SECTION* critical_section_; | ||||
| 
 | ||||
|   GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); | ||||
| }; | ||||
|  | ||||
| @ -1295,9 +1295,16 @@ TEST(WindowsTypesTest, HANDLEIsVoidStar) { | ||||
|   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) { | ||||
|   StaticAssertTypeEq<CRITICAL_SECTION, _RTL_CRITICAL_SECTION>(); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #endif  // GTEST_OS_WINDOWS
 | ||||
| 
 | ||||
| }  // namespace internal
 | ||||
|  | ||||
| @ -442,7 +442,7 @@ class FormatEpochTimeInMillisAsIso8601Test : public Test { | ||||
|     // tzset() distinguishes between the TZ variable being present and empty
 | ||||
|     // and not being present, so we have to consider the case of time_zone
 | ||||
|     // being NULL.
 | ||||
| #if _MSC_VER | ||||
| #if _MSC_VER || GTEST_OS_WINDOWS_MINGW | ||||
|     // ...Unless it's MSVC, whose standard library's _putenv doesn't
 | ||||
|     // distinguish between an empty and a missing variable.
 | ||||
|     const std::string env_var = | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user