diff options
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/cmPolicies.h | 6 | ||||
| -rw-r--r-- | Source/cmTarget.cxx | 31 |
2 files changed, 36 insertions, 1 deletions
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index 0c00ffb..1a12dab 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -326,7 +326,11 @@ class cmMakefile; 19, 0, cmPolicies::WARN) \ SELECT(POLICY, CMP0110, \ "add_test() supports arbitrary characters in test names.", 3, 19, 0, \ - cmPolicies::WARN) + cmPolicies::WARN) \ + SELECT(POLICY, CMP0111, \ + "An imported target with a missing location fails during " \ + "generation.", \ + 3, 19, 0, cmPolicies::WARN) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) #define CM_FOR_EACH_POLICY_ID(POLICY) \ diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 60416a3..bea9001 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -2039,6 +2039,37 @@ std::string cmTarget::ImportedGetFullPath( } if (result.empty()) { + auto message = [&]() -> std::string { + std::string unset; + std::string configuration; + + if (artifact == cmStateEnums::RuntimeBinaryArtifact) { + unset = "IMPORTED_LOCATION"; + } else if (artifact == cmStateEnums::ImportLibraryArtifact) { + unset = "IMPORTED_IMPLIB"; + } + + if (!config.empty()) { + configuration = cmStrCat(" configuration \"", config, "\""); + } + + return cmStrCat(unset, " not set for imported target \"", + this->GetName(), "\"", configuration, "."); + }; + + switch (this->GetPolicyStatus(cmPolicies::CMP0111)) { + case cmPolicies::WARN: + impl->Makefile->IssueMessage( + MessageType::AUTHOR_WARNING, + cmPolicies::GetPolicyWarning(cmPolicies::CMP0111) + "\n" + + message()); + CM_FALLTHROUGH; + case cmPolicies::OLD: + break; + default: + impl->Makefile->IssueMessage(MessageType::FATAL_ERROR, message()); + } + result = cmStrCat(this->GetName(), "-NOTFOUND"); } return result; |
