[cmake-commits] king committed cmComputeLinkDepends.cxx 1.9 1.10

cmake-commits at cmake.org cmake-commits at cmake.org
Mon Feb 11 10:31:40 EST 2008


Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv17208/Source

Modified Files:
	cmComputeLinkDepends.cxx 
Log Message:
BUG: Fix cmComputeLinkDepends::AddVarLinkEntries

  - Track link type correctly
  - Use _LINK_TYPE variables exported by CMake 2.4


Index: cmComputeLinkDepends.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmComputeLinkDepends.cxx,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- cmComputeLinkDepends.cxx	7 Feb 2008 21:24:54 -0000	1.9
+++ cmComputeLinkDepends.cxx	11 Feb 2008 15:31:38 -0000	1.10
@@ -410,28 +410,58 @@
   // 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;
       }
     }
 



More information about the Cmake-commits mailing list