diff options
author | Alex Neundorf <neundorf@kde.org> | 2010-08-28 14:06:45 (GMT) |
---|---|---|
committer | Alex Neundorf <neundorf@kde.org> | 2010-08-28 14:06:45 (GMT) |
commit | 6acc71c09df80e9530ff643fb4e37ebe145b46ad (patch) | |
tree | 2b198dce156f2755fa01bc2e476f2ca7672dafb4 /Source/cmTargetLinkLibrariesCommand.cxx | |
parent | da033b10d26c3b25c44547dec6b398cabe864510 (diff) | |
download | CMake-6acc71c09df80e9530ff643fb4e37ebe145b46ad.zip CMake-6acc71c09df80e9530ff643fb4e37ebe145b46ad.tar.gz CMake-6acc71c09df80e9530ff643fb4e37ebe145b46ad.tar.bz2 |
New CMP0016 for deciding whether an unknown target in TLL() is an error.
When set to OLD, target_link_libraries() silently accepts if it is called
with only one argument and this one argument is not a target.
When set to NEW, this is an error. By default it is a warning now.
Alex
Diffstat (limited to 'Source/cmTargetLinkLibrariesCommand.cxx')
-rw-r--r-- | Source/cmTargetLinkLibrariesCommand.cxx | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx index e92a8fa..805959d 100644 --- a/Source/cmTargetLinkLibrariesCommand.cxx +++ b/Source/cmTargetLinkLibrariesCommand.cxx @@ -35,20 +35,51 @@ bool cmTargetLinkLibrariesCommand ->GetGlobalGenerator()->FindTarget(0, args[0].c_str()); if(!this->Target) { + cmake::MessageType t = cmake::FATAL_ERROR; // fail by default cmOStringStream e; e << "Cannot specify link libraries for target \"" << args[0] << "\" " << "which is not built by this project."; - // The bad target is the only argument, just warn, don't fail, because - // there is probably some code out there which would stop building - // otherwise: + // The bad target is the only argument. Check how policy CMP0016 is set, + // and accept, warn or fail respectively: if (args.size() < 2) { - this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, e.str()); + switch (this->Makefile->GetPolicyStatus(cmPolicies::CMP0016)) + { + case cmPolicies::WARN: + t = cmake::AUTHOR_WARNING; + // Print the warning. + e << "\n" + << "CMake does not support this but it used to work accidentally " + << "and is being allowed for compatibility." + << "\n" << this->Makefile->GetPolicies()-> + GetPolicyWarning(cmPolicies::CMP0016); + break; + case cmPolicies::OLD: // OLD behavior does not warn. + t = cmake::MESSAGE; + break; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + e << "\n" << this->Makefile->GetPolicies()-> + GetRequiredPolicyError(cmPolicies::CMP0016); + break; + case cmPolicies::NEW: // NEW behavior prints the error. + default: + break; + } } - else + + // now actually print the message + switch(t) { - this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); - cmSystemTools::SetFatalErrorOccured(); + case cmake::AUTHOR_WARNING: + this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, e.str()); + break; + case cmake::FATAL_ERROR: + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + cmSystemTools::SetFatalErrorOccured(); + break; + default: + break; } return true; } |