summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-01-11 18:57:43 (GMT)
committerBrad King <brad.king@kitware.com>2016-01-11 18:57:43 (GMT)
commit8ce5ff8d9e411d7d27176881b98bf733da90791f (patch)
tree132b7bc286d8a3a5e3f3bae31583f7fb90491971
parente1f9d3c0a01fa62eaf933142cb07308eba57acd9 (diff)
parenta57caf7eecdfe61e4ac5f63b145fc9269610f3f0 (diff)
downloadCMake-8ce5ff8d9e411d7d27176881b98bf733da90791f.zip
CMake-8ce5ff8d9e411d7d27176881b98bf733da90791f.tar.gz
CMake-8ce5ff8d9e411d7d27176881b98bf733da90791f.tar.bz2
Merge branch 'vs-win10-sdk' into release
-rw-r--r--Source/cmGlobalVisualStudio14Generator.cxx42
-rw-r--r--Source/cmSystemTools.cxx8
-rw-r--r--Source/cmSystemTools.h2
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);