|
@@ -231,6 +231,16 @@ cmGlobalVisualStudio14Generator::IsWindowsStoreToolsetInstalled() const
|
|
|
win10SDK, cmSystemTools::KeyWOW64_32);
|
|
win10SDK, cmSystemTools::KeyWOW64_32);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+#if defined(_WIN32) && !defined(__CYGWIN__)
|
|
|
|
|
+struct NoWindowsH
|
|
|
|
|
+{
|
|
|
|
|
+ bool operator()(std::string const& p)
|
|
|
|
|
+ {
|
|
|
|
|
+ return !cmSystemTools::FileExists(p + "/um/windows.h", true);
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
//----------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------
|
|
|
std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
|
|
std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
|
|
|
{
|
|
{
|
|
@@ -254,6 +264,12 @@ std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
|
|
|
std::string path = win10Root + "Include/*";
|
|
std::string path = win10Root + "Include/*";
|
|
|
// Grab the paths of the different SDKs that are installed
|
|
// Grab the paths of the different SDKs that are installed
|
|
|
cmSystemTools::GlobDirs(path, sdks);
|
|
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.
|
|
|
|
|
+ sdks.erase(std::remove_if(sdks.begin(), sdks.end(), NoWindowsH()),
|
|
|
|
|
+ sdks.end());
|
|
|
|
|
+
|
|
|
if (!sdks.empty())
|
|
if (!sdks.empty())
|
|
|
{
|
|
{
|
|
|
// Only use the filename, which will be the SDK version.
|
|
// Only use the filename, which will be the SDK version.
|
|
@@ -263,29 +279,21 @@ std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion()
|
|
|
*i = cmSystemTools::GetFilenameName(*i);
|
|
*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);
|
|
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
|
|
#endif
|
|
|
// Return an empty string
|
|
// Return an empty string
|