From d7e863c1c1f4962f589e53b42a87a66cf5ab00b7 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 21 Jan 2016 11:44:17 -0500 Subject: [PATCH] VS: Do not fail on Windows 10 with VS 2015 if no SDK is available (#15929) Since commit v3.4.0-rc1~5^2~1 (VS: Add support for selecting the Windows 10 SDK, 2015-09-30) the VS 2015 generator requires a Windows 10 SDK to be available when CMAKE_SYSTEM_VERSION specifies Windows 10 (e.g. when building on a Windows 10 host). Howewver, it is possible to install VS 2015 without any Windows 10 SDK. Instead of failing with an error message about the lack of a Windows 10 SDK, simply tolerate this case and use the default Windows 8.1 SDK. Since building for Windows Store still requires the SDK, retain the diagnostic in that case. --- .../CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst | 3 ++- Source/cmGlobalVisualStudio14Generator.cxx | 9 +++++---- Source/cmGlobalVisualStudio14Generator.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst b/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst index 639284963..e0be3a43e 100644 --- a/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst +++ b/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst @@ -8,4 +8,5 @@ specification of a target Windows version to select a corresponding SDK. The :variable:`CMAKE_SYSTEM_VERSION` variable may be set to specify a version. Otherwise CMake computes a default version based on the Windows SDK versions available. The chosen Windows target version number is provided -in ``CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION``. +in ``CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION``. If no Windows 10 SDK +is available this value will be empty. diff --git a/Source/cmGlobalVisualStudio14Generator.cxx b/Source/cmGlobalVisualStudio14Generator.cxx index 83499f1a6..2f266cd84 100644 --- a/Source/cmGlobalVisualStudio14Generator.cxx +++ b/Source/cmGlobalVisualStudio14Generator.cxx @@ -115,7 +115,7 @@ bool cmGlobalVisualStudio14Generator::InitializeWindows(cmMakefile* mf) { if (cmHasLiteralPrefix(this->SystemVersion, "10.0")) { - return this->SelectWindows10SDK(mf); + return this->SelectWindows10SDK(mf, false); } return true; } @@ -143,17 +143,18 @@ bool cmGlobalVisualStudio14Generator::InitializeWindowsStore(cmMakefile* mf) } if (cmHasLiteralPrefix(this->SystemVersion, "10.0")) { - return this->SelectWindows10SDK(mf); + return this->SelectWindows10SDK(mf, true); } return true; } //---------------------------------------------------------------------------- -bool cmGlobalVisualStudio14Generator::SelectWindows10SDK(cmMakefile* mf) +bool cmGlobalVisualStudio14Generator::SelectWindows10SDK(cmMakefile* mf, + bool required) { // Find the default version of the Windows 10 SDK. this->WindowsTargetPlatformVersion = this->GetWindows10SDKVersion(); - if (this->WindowsTargetPlatformVersion.empty()) + if (required && this->WindowsTargetPlatformVersion.empty()) { std::ostringstream e; e << "Could not find an appropriate version of the Windows 10 SDK" diff --git a/Source/cmGlobalVisualStudio14Generator.h b/Source/cmGlobalVisualStudio14Generator.h index 76c15d99c..57e628418 100644 --- a/Source/cmGlobalVisualStudio14Generator.h +++ b/Source/cmGlobalVisualStudio14Generator.h @@ -39,7 +39,7 @@ protected: bool IsWindowsStoreToolsetInstalled() const; virtual const char* GetIDEVersion() { return "14.0"; } - virtual bool SelectWindows10SDK(cmMakefile* mf); + virtual bool SelectWindows10SDK(cmMakefile* mf, bool required); // Used to verify that the Desktop toolset for the current generator is // installed on the machine.