TLL: Don't populate old link interface if CMP0022 is NEW.

Always populate the INTERFACE_LINK_LIBRARIES for interface
entries. Don't populate the old interface properties
matching (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?
if CMP0022 is NEW.

Because the INTERFACE_LINK_LIBRARIES property is now populated by
the target_link_libraries when operating on a static library,
make an equivalent change which populates the property with
the same value when the old link_libraries() command is used. This
silences the policy warning in that case.
This commit is contained in:
Stephen Kelly
2013-06-04 16:21:33 +02:00
parent 574fec97fd
commit 3e30d9ed67
20 changed files with 152 additions and 10 deletions
+25 -1
View File
@@ -224,12 +224,17 @@ bool cmTargetLinkLibrariesCommand
cmSystemTools::SetFatalErrorOccured();
}
const cmPolicies::PolicyStatus policy22Status
= this->Target->GetPolicyStatusCMP0022();
// If any of the LINK_ options were given, make sure the
// LINK_INTERFACE_LIBRARIES target property exists.
// Use of any of the new keywords implies awareness of
// this property. And if no libraries are named, it should
// result in an empty link interface.
if(this->CurrentProcessingState != ProcessingLinkLibraries &&
if((policy22Status == cmPolicies::OLD ||
policy22Status == cmPolicies::WARN) &&
this->CurrentProcessingState != ProcessingLinkLibraries &&
!this->Target->GetProperty("LINK_INTERFACE_LIBRARIES"))
{
this->Target->SetProperty("LINK_INTERFACE_LIBRARIES", "");
@@ -263,11 +268,30 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const char* lib,
->AddLinkLibraryForTarget(this->Target->GetName(), lib, llt);
if (this->CurrentProcessingState != ProcessingPublicInterface)
{
if (this->Target->GetType() == cmTarget::STATIC_LIBRARY)
{
this->Target->AppendProperty("INTERFACE_LINK_LIBRARIES",
("$<LINK_ONLY:" +
this->Target->GetDebugGeneratorExpressions(lib, llt) +
">").c_str());
}
// Not LINK_INTERFACE_LIBRARIES or LINK_PUBLIC, do not add to interface.
return;
}
}
this->Target->AppendProperty("INTERFACE_LINK_LIBRARIES",
this->Target->GetDebugGeneratorExpressions(lib, llt).c_str());
const cmPolicies::PolicyStatus policy22Status
= this->Target->GetPolicyStatusCMP0022();
if (policy22Status != cmPolicies::OLD
&& policy22Status != cmPolicies::WARN)
{
return;
}
// Get the list of configurations considered to be DEBUG.
std::vector<std::string> const& debugConfigs =
this->Makefile->GetCMakeInstance()->GetDebugConfigs();