diff --git a/CMakeLists.txt b/CMakeLists.txt index 11700a75f..db1f03ed8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,6 +140,9 @@ endif() message(STATUS "Git Revision ${GIT_REVISION}") +# MSVC compatibility with system headers +add_definitions(-DNONAMELESSUNION) + # Make the detected version available as default version for all subprojects set(FREERDP_DEFAULT_PROJECT_VERSION ${FREERDP_VERSION} CACHE STRING INTERNAL) diff --git a/winpr/CMakeLists.txt b/winpr/CMakeLists.txt index 1d80f8396..c74d74c1c 100644 --- a/winpr/CMakeLists.txt +++ b/winpr/CMakeLists.txt @@ -61,6 +61,9 @@ if(NOT FREERDP_UNIFIED_BUILD) else() set(DEFAULT_DEBUG_OPTION "OFF" CACHE INTERNAL "debug default") endif() + + # MSVC compatibility with system headers + add_definitions(-DNONAMELESSUNION) endif() if(WIN32 AND NOT UWP) diff --git a/winpr/include/winpr/spec.h b/winpr/include/winpr/spec.h index 7017a610f..b37f2c948 100644 --- a/winpr/include/winpr/spec.h +++ b/winpr/include/winpr/spec.h @@ -35,6 +35,7 @@ WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER #else +#if defined(NONAMELESSUNION) #define DUMMYUNIONNAME u #define DUMMYUNIONNAME1 u1 #define DUMMYUNIONNAME2 u2 @@ -51,6 +52,24 @@ WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER #define DUMMYSTRUCTNAME3 s3 #define DUMMYSTRUCTNAME4 s4 #define DUMMYSTRUCTNAME5 s5 +#else +#define DUMMYUNIONNAME +#define DUMMYUNIONNAME1 +#define DUMMYUNIONNAME2 +#define DUMMYUNIONNAME3 +#define DUMMYUNIONNAME4 +#define DUMMYUNIONNAME5 +#define DUMMYUNIONNAME6 +#define DUMMYUNIONNAME7 +#define DUMMYUNIONNAME8 + +#define DUMMYSTRUCTNAME +#define DUMMYSTRUCTNAME1 +#define DUMMYSTRUCTNAME2 +#define DUMMYSTRUCTNAME3 +#define DUMMYSTRUCTNAME4 +#define DUMMYSTRUCTNAME5 +#endif #if (defined(_M_AMD64) || defined(_M_ARM)) && !defined(_WIN32) #define _UNALIGNED __unaligned diff --git a/winpr/libwinpr/sysinfo/test/TestGetNativeSystemInfo.c b/winpr/libwinpr/sysinfo/test/TestGetNativeSystemInfo.c index a82178170..91440fe16 100644 --- a/winpr/libwinpr/sysinfo/test/TestGetNativeSystemInfo.c +++ b/winpr/libwinpr/sysinfo/test/TestGetNativeSystemInfo.c @@ -11,15 +11,10 @@ int TestGetNativeSystemInfo(int argc, char* argv[]) GetNativeSystemInfo(&sysinfo); -#if defined(DUMMYUNIONNAME) && defined(DUMMYSTRUCTNAME) -#define DUMMYXPTR(x) x.DUMMYUNIONNAME.DUMMYSTRUCTNAME -#else -#define DUMMYXPTR(x) x -#endif - printf("SystemInfo:\n"); - printf("\twProcessorArchitecture: %" PRIu16 "\n", DUMMYXPTR(sysinfo).wProcessorArchitecture); - printf("\twReserved: %" PRIu16 "\n", DUMMYXPTR(sysinfo).wReserved); + printf("\twProcessorArchitecture: %" PRIu16 "\n", + sysinfo.DUMMYUNIONNAME.DUMMYSTRUCTNAME.wProcessorArchitecture); + printf("\twReserved: %" PRIu16 "\n", sysinfo.DUMMYUNIONNAME.DUMMYSTRUCTNAME.wReserved); printf("\tdwPageSize: 0x%08" PRIX32 "\n", sysinfo.dwPageSize); printf("\tlpMinimumApplicationAddress: %p\n", sysinfo.lpMinimumApplicationAddress); printf("\tlpMaximumApplicationAddress: %p\n", sysinfo.lpMaximumApplicationAddress);