BUG: Fix cmComputeLinkDepends::AddVarLinkEntries

- Track link type correctly
  - Use _LINK_TYPE variables exported by CMake 2.4
This commit is contained in:
Brad King 2008-02-11 10:31:38 -05:00
parent 0cdf73f0a2
commit 7b048433c1
1 changed files with 31 additions and 1 deletions

View File

@ -410,28 +410,58 @@ void cmComputeLinkDepends::AddVarLinkEntries(int depender_index,
// Look for entries meant for this configuration.
std::vector<std::string> actual_libs;
cmTarget::LinkLibraryType llt = cmTarget::GENERAL;
bool haveLLT = false;
for(std::vector<std::string>::const_iterator di = deplist.begin();
di != deplist.end(); ++di)
{
if(*di == "debug")
{
llt = cmTarget::DEBUG;
haveLLT = true;
}
else if(*di == "optimized")
{
llt = cmTarget::OPTIMIZED;
haveLLT = true;
}
else if(*di == "general")
{
llt = cmTarget::GENERAL;
haveLLT = true;
}
else if(!di->empty())
{
// If no explicit link type was given prior to this entry then
// check if the entry has its own link type variable. This is
// needed for compatibility with dependency files generated by
// the export_library_dependencies command from CMake 2.4 and
// lower.
if(!haveLLT)
{
std::string var = *di;
var += "_LINK_TYPE";
if(const char* val = this->Makefile->GetDefinition(var.c_str()))
{
if(strcmp(val, "debug") == 0)
{
llt = cmTarget::DEBUG;
}
else if(strcmp(val, "optimized") == 0)
{
llt = cmTarget::OPTIMIZED;
}
}
}
// If the library is meant for this link type then use it.
if(llt == cmTarget::GENERAL || llt == linkType)
{
actual_libs.push_back(*di);
}
linkType = cmTarget::GENERAL;
// Reset the link type until another explicit type is given.
llt = cmTarget::GENERAL;
haveLLT = false;
}
}