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. // Look for entries meant for this configuration.
std::vector<std::string> actual_libs; std::vector<std::string> actual_libs;
cmTarget::LinkLibraryType llt = cmTarget::GENERAL; cmTarget::LinkLibraryType llt = cmTarget::GENERAL;
bool haveLLT = false;
for(std::vector<std::string>::const_iterator di = deplist.begin(); for(std::vector<std::string>::const_iterator di = deplist.begin();
di != deplist.end(); ++di) di != deplist.end(); ++di)
{ {
if(*di == "debug") if(*di == "debug")
{ {
llt = cmTarget::DEBUG; llt = cmTarget::DEBUG;
haveLLT = true;
} }
else if(*di == "optimized") else if(*di == "optimized")
{ {
llt = cmTarget::OPTIMIZED; llt = cmTarget::OPTIMIZED;
haveLLT = true;
} }
else if(*di == "general") else if(*di == "general")
{ {
llt = cmTarget::GENERAL; llt = cmTarget::GENERAL;
haveLLT = true;
} }
else if(!di->empty()) 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) if(llt == cmTarget::GENERAL || llt == linkType)
{ {
actual_libs.push_back(*di); actual_libs.push_back(*di);
} }
linkType = cmTarget::GENERAL;
// Reset the link type until another explicit type is given.
llt = cmTarget::GENERAL;
haveLLT = false;
} }
} }