|
|
@@ -212,6 +212,12 @@ bool cmGlobalVisualStudio14Generator::IsWindowsStoreToolsetInstalled() const
|
|
|
cmSystemTools::KeyWOW64_32);
|
|
|
}
|
|
|
|
|
|
+std::string cmGlobalVisualStudio14Generator::GetWindows10SDKMaxVersion() const
|
|
|
+{
|
|
|
+ // The last Windows 10 SDK version that VS 2015 can target is 10.0.14393.0.
|
|
|
+ return "10.0.14393.0";
|
|
|
+}
|
|
|
+
|
|
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
|
|
struct NoWindowsH
|
|
|
{
|
|
|
@@ -220,6 +226,20 @@ struct NoWindowsH
|
|
|
return !cmSystemTools::FileExists(p + "/um/windows.h", true);
|
|
|
}
|
|
|
};
|
|
|
+class WindowsSDKTooRecent
|
|
|
+{
|
|
|
+ std::string const& MaxVersion;
|
|
|
+
|
|
|
+public:
|
|
|
+ WindowsSDKTooRecent(std::string const& maxVersion)
|
|
|
+ : MaxVersion(maxVersion)
|
|
|
+ {
|
|
|
+ }
|
|
|
+ bool operator()(std::string const& v)
|
|
|
+ {
|
|
|
+ return cmSystemTools::VersionCompareGreater(v, MaxVersion);
|
|
|
+ }
|
|
|
+};
|
|
|
#endif
|
|
|
|
|
|
std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
|
|
|
@@ -276,6 +296,12 @@ std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
|
|
|
// Sort the results to make sure we select the most recent one.
|
|
|
std::sort(sdks.begin(), sdks.end(), cmSystemTools::VersionCompareGreater);
|
|
|
|
|
|
+ // Skip SDKs that cannot be used with our toolset.
|
|
|
+ std::string maxVersion = this->GetWindows10SDKMaxVersion();
|
|
|
+ if (!maxVersion.empty()) {
|
|
|
+ cmEraseIf(sdks, WindowsSDKTooRecent(maxVersion));
|
|
|
+ }
|
|
|
+
|
|
|
// Look for a SDK exactly matching the requested target version.
|
|
|
for (std::string const& i : sdks) {
|
|
|
if (cmSystemTools::VersionCompareEqual(i, this->SystemVersion)) {
|