Browse Source

BUG: Fix cmComputeLinkDepends::AddVarLinkEntries

  - Track link type correctly
  - Use _LINK_TYPE variables exported by CMake 2.4
Brad King 18 years ago
parent
commit
7b048433c1
1 changed files with 31 additions and 1 deletions
  1. 31 1
      Source/cmComputeLinkDepends.cxx

+ 31 - 1
Source/cmComputeLinkDepends.cxx

@@ -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;
       }
     }