From 7b048433c1d644103f7440dce78d05e4625f1958 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 11 Feb 2008 10:31:38 -0500 Subject: [PATCH] BUG: Fix cmComputeLinkDepends::AddVarLinkEntries - Track link type correctly - Use _LINK_TYPE variables exported by CMake 2.4 --- Source/cmComputeLinkDepends.cxx | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx index 4ca590baf..29164a2f8 100644 --- a/Source/cmComputeLinkDepends.cxx +++ b/Source/cmComputeLinkDepends.cxx @@ -410,28 +410,58 @@ void cmComputeLinkDepends::AddVarLinkEntries(int depender_index, // Look for entries meant for this configuration. std::vector actual_libs; cmTarget::LinkLibraryType llt = cmTarget::GENERAL; + bool haveLLT = false; for(std::vector::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; } }