summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-01-11 18:44:11 (GMT)
committerBrad King <brad.king@kitware.com>2016-01-11 18:44:11 (GMT)
commita57caf7eecdfe61e4ac5f63b145fc9269610f3f0 (patch)
tree21fa4585ab0bc896d4638359616b77125e9c8657
parentad594de8cc9c4063830df58453b0679c209ff4d8 (diff)
downloadCMake-a57caf7eecdfe61e4ac5f63b145fc9269610f3f0.zip
CMake-a57caf7eecdfe61e4ac5f63b145fc9269610f3f0.tar.gz
CMake-a57caf7eecdfe61e4ac5f63b145fc9269610f3f0.tar.bz2
VS: Fix Windows 10 SDK version selection (#15831)
In commit v3.4.0-rc1~5^2~1 (VS: Add support for selecting the Windows 10 SDK, 2015-09-30) we added Windows 10 SDK selection choosing the most recent SDK that is not newer than the target version. This is backward because it should be up to the application code to not use APIs newer than the target version. It is up to the build system to provide a SDK that has at least the APIs expected to be available for the target version. Furthermore, since the default target version is the host version of Windows, the old approach breaks when the only SDK available is for a newer version of Windows. Fix this by always selecting a Windows 10 SDK if one exists. Use the SDK for the exact version if is available. Otherwise use the latest version of the SDK available because that will have at least the APIs expected for the target version.
-rw-r--r--Source/cmGlobalVisualStudio14Generator.cxx26
1 files changed, 9 insertions, 17 deletions
diff --git a/Source/cmGlobalVisualStudio14Generator.cxx b/Source/cmGlobalVisualStudio14Generator.cxx
index 803b500..83499f1 100644
--- a/Source/cmGlobalVisualStudio14Generator.cxx
+++ b/Source/cmGlobalVisualStudio14Generator.cxx
@@ -277,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