diff options
author | Brad King <brad.king@kitware.com> | 2016-01-11 18:57:43 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-01-11 18:57:43 (GMT) |
commit | 8ce5ff8d9e411d7d27176881b98bf733da90791f (patch) | |
tree | 132b7bc286d8a3a5e3f3bae31583f7fb90491971 /Source | |
parent | e1f9d3c0a01fa62eaf933142cb07308eba57acd9 (diff) | |
parent | a57caf7eecdfe61e4ac5f63b145fc9269610f3f0 (diff) | |
download | CMake-8ce5ff8d9e411d7d27176881b98bf733da90791f.zip CMake-8ce5ff8d9e411d7d27176881b98bf733da90791f.tar.gz CMake-8ce5ff8d9e411d7d27176881b98bf733da90791f.tar.bz2 |
Merge branch 'vs-win10-sdk' into release
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmGlobalVisualStudio14Generator.cxx | 42 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 8 | ||||
-rw-r--r-- | Source/cmSystemTools.h | 2 |
3 files changed, 35 insertions, 17 deletions
diff --git a/Source/cmGlobalVisualStudio14Generator.cxx b/Source/cmGlobalVisualStudio14Generator.cxx index 41825fb..83499f1 100644 --- a/Source/cmGlobalVisualStudio14Generator.cxx +++ b/Source/cmGlobalVisualStudio14Generator.cxx @@ -229,6 +229,16 @@ cmGlobalVisualStudio14Generator::IsWindowsStoreToolsetInstalled() const win10SDK, cmSystemTools::KeyWOW64_32); } +#if defined(_WIN32) && !defined(__CYGWIN__) +struct NoWindowsH +{ + bool operator()(std::string const& p) + { + return !cmSystemTools::FileExists(p + "/um/windows.h", true); + } +}; +#endif + //---------------------------------------------------------------------------- std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion() { @@ -252,6 +262,12 @@ std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion() std::string path = win10Root + "Include/*"; // Grab the paths of the different SDKs that are installed cmSystemTools::GlobDirs(path, sdks); + + // Skip SDKs that do not contain <um/windows.h> because that indicates that + // only the UCRT MSIs were installed for them. + sdks.erase(std::remove_if(sdks.begin(), sdks.end(), NoWindowsH()), + sdks.end()); + if (!sdks.empty()) { // Only use the filename, which will be the SDK version. @@ -261,29 +277,21 @@ std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion() *i = cmSystemTools::GetFilenameName(*i); } - // Sort the results to make sure we select the most recent one that - // has a version less or equal to our version of the operating system + // Sort the results to make sure we select the most recent one. std::sort(sdks.begin(), sdks.end(), cmSystemTools::VersionCompareGreater); - // Select a suitable SDK version. - if (this->SystemVersion == "10.0") - { - // Use the latest Windows 10 SDK since no build version was given. - return sdks.at(0); - } - else + // Look for a SDK exactly matching the requested target version. + for (std::vector<std::string>::iterator i = sdks.begin(); + i != sdks.end(); ++i) { - // Find the SDK less or equal to our specified version - for (std::vector<std::string>::iterator i = sdks.begin(); - i != sdks.end(); ++i) + if (cmSystemTools::VersionCompareEqual(*i, this->SystemVersion)) { - if (!cmSystemTools::VersionCompareGreater(*i, this->SystemVersion)) - { - // This is the most recent SDK that we can run safely - return *i; - } + return *i; } } + + // Use the latest Windows 10 SDK since the exact version is not available. + return sdks.at(0); } #endif // Return an empty string diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 2c5aa8a..d8b8415 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -2777,6 +2777,14 @@ bool cmSystemTools::VersionCompare(cmSystemTools::CompareOp op, } //---------------------------------------------------------------------------- +bool cmSystemTools::VersionCompareEqual(std::string const& lhs, + std::string const& rhs) +{ + return cmSystemTools::VersionCompare( + cmSystemTools::OP_EQUAL, lhs.c_str(), rhs.c_str()); +} + +//---------------------------------------------------------------------------- bool cmSystemTools::VersionCompareGreater(std::string const& lhs, std::string const& rhs) { diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index b6b0978..9cafbec 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -294,6 +294,8 @@ public: * Compare versions */ static bool VersionCompare(CompareOp op, const char* lhs, const char* rhs); + static bool VersionCompareEqual(std::string const& lhs, + std::string const& rhs); static bool VersionCompareGreater(std::string const& lhs, std::string const& rhs); |