|
@@ -142,7 +142,31 @@ bool cmGlobalVisualStudio14Generator::InitializePlatformWindows(cmMakefile* mf)
|
|
|
if (cmHasLiteralPrefix(this->SystemVersion, "10.0")) {
|
|
|
return this->SelectWindows10SDK(mf);
|
|
|
}
|
|
|
- return true;
|
|
|
+ return this->VerifyNoGeneratorPlatformVersion(mf);
|
|
|
+}
|
|
|
+
|
|
|
+bool cmGlobalVisualStudio14Generator::VerifyNoGeneratorPlatformVersion(
|
|
|
+ cmMakefile* mf, cm::optional<std::string> reason) const
|
|
|
+{
|
|
|
+ if (!this->GeneratorPlatformVersion) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ std::ostringstream e;
|
|
|
+ /* clang-format off */
|
|
|
+ e <<
|
|
|
+ "Generator\n"
|
|
|
+ " " << this->GetName() << "\n"
|
|
|
+ "given platform specification containing a\n"
|
|
|
+ " version=" << *this->GeneratorPlatformVersion << "\n"
|
|
|
+ "field. The version field is not supported when targeting\n"
|
|
|
+ " " << this->SystemName << " " << this->SystemVersion << "\n"
|
|
|
+ ;
|
|
|
+ /* clang-format on */
|
|
|
+ if (reason) {
|
|
|
+ e << *reason << ".";
|
|
|
+ }
|
|
|
+ mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
bool cmGlobalVisualStudio14Generator::InitializeWindowsStore(cmMakefile* mf)
|
|
@@ -170,12 +194,42 @@ bool cmGlobalVisualStudio14Generator::InitializeAndroid(cmMakefile*)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+bool cmGlobalVisualStudio14Generator::ProcessGeneratorPlatformField(
|
|
|
+ std::string const& key, std::string const& value)
|
|
|
+{
|
|
|
+ if (key == "version") {
|
|
|
+ this->GeneratorPlatformVersion = value;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
bool cmGlobalVisualStudio14Generator::SelectWindows10SDK(cmMakefile* mf)
|
|
|
{
|
|
|
+ if (this->GeneratorPlatformVersion &&
|
|
|
+ this->GeneratorPlatformVersion->empty()) {
|
|
|
+ mf->IssueMessage(
|
|
|
+ MessageType::FATAL_ERROR,
|
|
|
+ cmStrCat("Generator\n ", this->GetName(),
|
|
|
+ "\ngiven platform specification with empty\n version=\n"
|
|
|
+ "field."));
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
// Find the default version of the Windows 10 SDK.
|
|
|
std::string const version = this->GetWindows10SDKVersion(mf);
|
|
|
|
|
|
if (version.empty()) {
|
|
|
+ if (this->GeneratorPlatformVersion) {
|
|
|
+ mf->IssueMessage(
|
|
|
+ MessageType::FATAL_ERROR,
|
|
|
+ cmStrCat("Generator\n ", this->GetName(),
|
|
|
+ "\ngiven platform specification with\n version=",
|
|
|
+ *this->GeneratorPlatformVersion,
|
|
|
+ "\nfield, but no Windows SDK with that version was found."));
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
if (this->SystemName == "WindowsStore") {
|
|
|
mf->IssueMessage(
|
|
|
MessageType::FATAL_ERROR,
|
|
@@ -359,7 +413,20 @@ std::string cmGlobalVisualStudio14Generator::GetWindows10SDKVersion(
|
|
|
// Sort the results to make sure we select the most recent one.
|
|
|
std::sort(sdks.begin(), sdks.end(), cmSystemTools::VersionCompareGreater);
|
|
|
|
|
|
- // Look for a SDK exactly matching the requested target version.
|
|
|
+ // Look for a SDK exactly matching the requested version, if any.
|
|
|
+ if (this->GeneratorPlatformVersion) {
|
|
|
+ for (std::string const& i : sdks) {
|
|
|
+ if (cmSystemTools::VersionCompareEqual(
|
|
|
+ i, *this->GeneratorPlatformVersion)) {
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // An exact version was requested but not found.
|
|
|
+ // Our caller will issue the error message.
|
|
|
+ return std::string();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Look for a SDK exactly matching the target Windows version.
|
|
|
for (std::string const& i : sdks) {
|
|
|
if (cmSystemTools::VersionCompareEqual(i, this->SystemVersion)) {
|
|
|
return i;
|