summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalVisualStudio14Generator.cxx
diff options
context:
space:
mode:
authorjonathan molinatto <jonathan.molinatto@gmail.com>2020-08-20 16:31:21 (GMT)
committerBrad King <brad.king@kitware.com>2020-08-25 19:27:38 (GMT)
commitba497111f6541096313af187a1f70e4594a63059 (patch)
tree7489574ac5bf8ac27ba42b15db8db1df5b902329 /Source/cmGlobalVisualStudio14Generator.cxx
parent8de3a25ec34c4b2d3cd7e519d3c3607e81de34c4 (diff)
downloadCMake-ba497111f6541096313af187a1f70e4594a63059.zip
CMake-ba497111f6541096313af187a1f70e4594a63059.tar.gz
CMake-ba497111f6541096313af187a1f70e4594a63059.tar.bz2
VS: Add option for custom Win10 SDK version maximum
Since commit 83ddc4d289 (VS: Do not select a Windows SDK too high for current VS version, 2017-08-07, v3.13.0-rc1~72^2~2) we enforce a maximum SDK version for the VS 2015 generator. The blog post linked in the original commit is no longer available, but it can be seen here: * https://web.archive.org/web/20190108032520/https://blogs.msdn.microsoft.com/chuckw/2018/10/02/windows-10-october-2018-update/ In particular, it states: > VS 2015 Users: The Windows 10 SDK (15063, 16299, 17134, 17763) > is officially only supported for VS 2017. However, in some circumstances a higher version can be used. Add a `CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM` to override the generator's default maximum SDK version. Fixes: #20633
Diffstat (limited to 'Source/cmGlobalVisualStudio14Generator.cxx')
-rw-r--r--Source/cmGlobalVisualStudio14Generator.cxx31
1 files changed, 26 insertions, 5 deletions
diff --git a/Source/cmGlobalVisualStudio14Generator.cxx b/Source/cmGlobalVisualStudio14Generator.cxx
index 451d448..aa1b7ad 100644
--- a/Source/cmGlobalVisualStudio14Generator.cxx
+++ b/Source/cmGlobalVisualStudio14Generator.cxx
@@ -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));
}