From ee047a68f27d9636d681d05252257da636b616a2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 22 Jul 2022 15:34:14 -0400 Subject: cmSystemTools: Factor out method to get Windows OS version Factor the implementation out of `cmGlobalGenerator`. --- Source/cmGlobalGenerator.cxx | 37 ++++++------------------------------- Source/cmSystemTools.cxx | 38 ++++++++++++++++++++++++++++++++++++++ Source/cmSystemTools.h | 8 ++++++++ 3 files changed, 52 insertions(+), 31 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 5113a46..ebb12f8 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -49,6 +49,7 @@ #include "cmState.h" #include "cmStateDirectory.h" #include "cmStateTypes.h" +#include "cmSystemTools.h" #include "cmValue.h" #include "cmVersion.h" #include "cmWorkingDirectory.h" @@ -62,10 +63,6 @@ # include "cmQtAutoGenGlobalInitializer.h" #endif -#if defined(_MSC_VER) && _MSC_VER >= 1800 -# define KWSYS_WINDOWS_DEPRECATED_GetVersionEx -#endif - const std::string kCMAKE_PLATFORM_INFO_INITIALIZED = "CMAKE_PLATFORM_INFO_INITIALIZED"; @@ -616,34 +613,12 @@ void cmGlobalGenerator::EnableLanguage( // what platform we are running on if (!mf->GetDefinition("CMAKE_SYSTEM")) { #if defined(_WIN32) && !defined(__CYGWIN__) - /* Windows version number data. */ - OSVERSIONINFOEXW osviex; - ZeroMemory(&osviex, sizeof(osviex)); - osviex.dwOSVersionInfoSize = sizeof(osviex); - -# ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx -# pragma warning(push) -# ifdef __INTEL_COMPILER -# pragma warning(disable : 1478) -# elif defined __clang__ -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# else -# pragma warning(disable : 4996) -# endif -# endif - GetVersionExW((OSVERSIONINFOW*)&osviex); -# ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx -# ifdef __clang__ -# pragma clang diagnostic pop -# else -# pragma warning(pop) -# endif -# endif + cmSystemTools::WindowsVersion windowsVersion = + cmSystemTools::GetWindowsVersion(); std::ostringstream windowsVersionString; - windowsVersionString << osviex.dwMajorVersion << "." - << osviex.dwMinorVersion << "." - << osviex.dwBuildNumber; + windowsVersionString << windowsVersion.dwMajorVersion << "." + << windowsVersion.dwMinorVersion << "." + << windowsVersion.dwBuildNumber; mf->AddDefinition("CMAKE_HOST_SYSTEM_VERSION", windowsVersionString.str()); #endif // Read the DetermineSystem file diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 351386a..78d3ad9 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -107,6 +107,10 @@ # include #endif +#if defined(_MSC_VER) && _MSC_VER >= 1800 +# define CM_WINDOWS_DEPRECATED_GetVersionEx +#endif + namespace { cmSystemTools::InterruptCallback s_InterruptCallback; @@ -904,6 +908,40 @@ cmSystemTools::WindowsFileRetry cmSystemTools::GetWindowsDirectoryRetry() InitWindowsDirectoryRetry().Retry; return retry; } + +cmSystemTools::WindowsVersion cmSystemTools::GetWindowsVersion() +{ + /* Windows version number data. */ + OSVERSIONINFOEXW osviex; + ZeroMemory(&osviex, sizeof(osviex)); + osviex.dwOSVersionInfoSize = sizeof(osviex); + +# ifdef CM_WINDOWS_DEPRECATED_GetVersionEx +# pragma warning(push) +# ifdef __INTEL_COMPILER +# pragma warning(disable : 1478) +# elif defined __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# else +# pragma warning(disable : 4996) +# endif +# endif + GetVersionExW((OSVERSIONINFOW*)&osviex); +# ifdef CM_WINDOWS_DEPRECATED_GetVersionEx +# ifdef __clang__ +# pragma clang diagnostic pop +# else +# pragma warning(pop) +# endif +# endif + + WindowsVersion result; + result.dwMajorVersion = osviex.dwMajorVersion; + result.dwMinorVersion = osviex.dwMinorVersion; + result.dwBuildNumber = osviex.dwBuildNumber; + return result; +} #endif std::string cmSystemTools::GetRealPathResolvingWindowsSubst( diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 5f7a5ec..ec650f7 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -509,6 +509,14 @@ public: }; static WindowsFileRetry GetWindowsFileRetry(); static WindowsFileRetry GetWindowsDirectoryRetry(); + + struct WindowsVersion + { + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; + unsigned int dwBuildNumber; + }; + static WindowsVersion GetWindowsVersion(); #endif /** Get the real path for a given path, removing all symlinks. -- cgit v0.12