summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-04-12 14:38:05 (GMT)
committerBrad King <brad.king@kitware.com>2017-04-12 14:38:49 (GMT)
commitb80c6d120c4f780d579071545ddc7e642b6e6276 (patch)
tree8379e85f6c2a5e89a8ec61dd6ff2b2713658e69c
parentfddd559406558a2037733e5b760e9dd04e9edfd1 (diff)
downloadCMake-b80c6d120c4f780d579071545ddc7e642b6e6276.zip
CMake-b80c6d120c4f780d579071545ddc7e642b6e6276.tar.gz
CMake-b80c6d120c4f780d579071545ddc7e642b6e6276.tar.bz2
VS: Refactor Win 10 Kits root detection to support multiple roots
-rw-r--r--Source/cmGlobalVisualStudio14Generator.cxx38
1 files changed, 25 insertions, 13 deletions
diff --git a/Source/cmGlobalVisualStudio14Generator.cxx b/Source/cmGlobalVisualStudio14Generator.cxx
index d2ac36b..4602d93 100644
--- a/Source/cmGlobalVisualStudio14Generator.cxx
+++ b/Source/cmGlobalVisualStudio14Generator.cxx
@@ -217,24 +217,36 @@ struct NoWindowsH
std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
{
#if defined(_WIN32) && !defined(__CYGWIN__)
- // This logic is taken from the vcvarsqueryregistry.bat file from VS2015
- // Try HKLM and then HKCU.
- std::string win10Root;
- if (!cmSystemTools::ReadRegistryValue(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
- "Windows Kits\\Installed Roots;KitsRoot10",
- win10Root, cmSystemTools::KeyWOW64_32) &&
- !cmSystemTools::ReadRegistryValue(
- "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\"
- "Windows Kits\\Installed Roots;KitsRoot10",
- win10Root, cmSystemTools::KeyWOW64_32)) {
+ std::vector<std::string> win10Roots;
+
+ {
+ // This logic is taken from the vcvarsqueryregistry.bat file from VS2015
+ // Try HKLM and then HKCU.
+ std::string win10Root;
+ if (cmSystemTools::ReadRegistryValue(
+ "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\"
+ "Windows Kits\\Installed Roots;KitsRoot10",
+ win10Root, cmSystemTools::KeyWOW64_32) ||
+ cmSystemTools::ReadRegistryValue(
+ "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\"
+ "Windows Kits\\Installed Roots;KitsRoot10",
+ win10Root, cmSystemTools::KeyWOW64_32)) {
+ cmSystemTools::ConvertToUnixSlashes(win10Root);
+ win10Roots.push_back(win10Root);
+ }
+ }
+
+ if (win10Roots.empty()) {
return std::string();
}
std::vector<std::string> sdks;
- std::string path = win10Root + "Include/*";
// Grab the paths of the different SDKs that are installed
- cmSystemTools::GlobDirs(path, sdks);
+ for (std::vector<std::string>::iterator i = win10Roots.begin();
+ i != win10Roots.end(); ++i) {
+ std::string path = *i + "/Include/*";
+ cmSystemTools::GlobDirs(path, sdks);
+ }
// Skip SDKs that do not contain <um/windows.h> because that indicates that
// only the UCRT MSIs were installed for them.