|
|
@@ -169,7 +169,8 @@ bool cmGlobalVisualStudio14Generator::SelectWindows10SDK(cmMakefile* mf,
|
|
|
bool required)
|
|
|
{
|
|
|
// Find the default version of the Windows 10 SDK.
|
|
|
- std::string const version = this->GetWindows10SDKVersion();
|
|
|
+ std::string const version = this->GetWindows10SDKVersion(mf);
|
|
|
+
|
|
|
if (required && version.empty()) {
|
|
|
std::ostringstream e;
|
|
|
e << "Could not find an appropriate version of the Windows 10 SDK"
|
|
|
@@ -233,8 +234,25 @@ bool cmGlobalVisualStudio14Generator::IsWindowsStoreToolsetInstalled() const
|
|
|
cmSystemTools::KeyWOW64_32);
|
|
|
}
|
|
|
|
|
|
-std::string cmGlobalVisualStudio14Generator::GetWindows10SDKMaxVersion() const
|
|
|
+std::string cmGlobalVisualStudio14Generator::GetWindows10SDKMaxVersion(
|
|
|
+ cmMakefile* mf) const
|
|
|
{
|
|
|
+ // if the given value is set, it can either be OFF/FALSE or a valid SDK
|
|
|
+ // string
|
|
|
+ if (std::string const* value =
|
|
|
+ mf->GetDef("CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM")) {
|
|
|
+
|
|
|
+ // If the value is some off/false value, then there is NO maximum set.
|
|
|
+ if (cmIsOff(value)) {
|
|
|
+ return std::string();
|
|
|
+ }
|
|
|
+ // If the value is something else, trust that it is a valid SDK value.
|
|
|
+ else if (value) {
|
|
|
+ return *value;
|
|
|
+ }
|
|
|
+ // If value is an invalid pointer, leave result unchanged.
|
|
|
+ }
|
|
|
+
|
|
|
// The last Windows 10 SDK version that VS 2015 can target is 10.0.14393.0.
|
|
|
//
|
|
|
// "VS 2015 Users: The Windows 10 SDK (15063, 16299, 17134, 17763) is
|
|
|
@@ -267,7 +285,8 @@ public:
|
|
|
};
|
|
|
#endif
|
|
|
|
|
|
-std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
|
|
|
+std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion(
|
|
|
+ cmMakefile* mf)
|
|
|
{
|
|
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
|
|
std::vector<std::string> win10Roots;
|
|
|
@@ -317,8 +336,10 @@ std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
|
|
|
i = cmSystemTools::GetFilenameName(i);
|
|
|
}
|
|
|
|
|
|
- // Skip SDKs that cannot be used with our toolset.
|
|
|
- std::string maxVersion = this->GetWindows10SDKMaxVersion();
|
|
|
+ // Skip SDKs that cannot be used with our toolset, unless the user does not
|
|
|
+ // want to limit the highest supported SDK according to the Microsoft
|
|
|
+ // documentation.
|
|
|
+ std::string maxVersion = this->GetWindows10SDKMaxVersion(mf);
|
|
|
if (!maxVersion.empty()) {
|
|
|
cm::erase_if(sdks, WindowsSDKTooRecent(maxVersion));
|
|
|
}
|