Răsfoiți Sursa

Factor implicit link info addition into methods

In cmComputeLinkInformation::Compute we add implicit link information
from languages other than the linker language to the end of the link
line.  This factors out that code into separate methods to improve
readability and organization.
Brad King 16 ani în urmă
părinte
comite
8aaf3cebeb
2 a modificat fișierele cu 43 adăugiri și 28 ștergeri
  1. 41 28
      Source/cmComputeLinkInformation.cxx
  2. 2 0
      Source/cmComputeLinkInformation.h

+ 41 - 28
Source/cmComputeLinkInformation.cxx

@@ -553,6 +553,15 @@ bool cmComputeLinkInformation::Compute()
     }
 
   // Add implicit language runtime libraries and directories.
+  this->AddImplicitLinkInfo();
+
+  return true;
+}
+
+//----------------------------------------------------------------------------
+void cmComputeLinkInformation::AddImplicitLinkInfo()
+{
+  // The link closure lists all languages whose implicit info is needed.
   cmTarget::LinkClosure const* lc=this->Target->GetLinkClosure(this->Config);
   for(std::vector<std::string>::const_iterator li = lc->Languages.begin();
       li != lc->Languages.end(); ++li)
@@ -560,40 +569,44 @@ bool cmComputeLinkInformation::Compute()
     // Skip those of the linker language.  They are implicit.
     if(*li != this->LinkLanguage)
       {
-      // Add libraries for this language that are not implied by the
-      // linker language.
-      std::string libVar = "CMAKE_";
-      libVar += *li;
-      libVar += "_IMPLICIT_LINK_LIBRARIES";
-      if(const char* libs = this->Makefile->GetDefinition(libVar.c_str()))
-        {
-        std::vector<std::string> libsVec;
-        cmSystemTools::ExpandListArgument(libs, libsVec);
-        for(std::vector<std::string>::const_iterator i = libsVec.begin();
-            i != libsVec.end(); ++i)
-          {
-          if(this->ImplicitLinkLibs.find(*i) == this->ImplicitLinkLibs.end())
-            {
-            this->AddItem(i->c_str(), 0);
-            }
-          }
-        }
+      this->AddImplicitLinkInfo(*li);
+      }
+    }
+}
 
-      // Add linker search paths for this language that are not
-      // implied by the linker language.
-      std::string dirVar = "CMAKE_";
-      dirVar += *li;
-      dirVar += "_IMPLICIT_LINK_DIRECTORIES";
-      if(const char* dirs = this->Makefile->GetDefinition(dirVar.c_str()))
+//----------------------------------------------------------------------------
+void cmComputeLinkInformation::AddImplicitLinkInfo(std::string const& lang)
+{
+  // Add libraries for this language that are not implied by the
+  // linker language.
+  std::string libVar = "CMAKE_";
+  libVar += lang;
+  libVar += "_IMPLICIT_LINK_LIBRARIES";
+  if(const char* libs = this->Makefile->GetDefinition(libVar.c_str()))
+    {
+    std::vector<std::string> libsVec;
+    cmSystemTools::ExpandListArgument(libs, libsVec);
+    for(std::vector<std::string>::const_iterator i = libsVec.begin();
+        i != libsVec.end(); ++i)
+      {
+      if(this->ImplicitLinkLibs.find(*i) == this->ImplicitLinkLibs.end())
         {
-        std::vector<std::string> dirsVec;
-        cmSystemTools::ExpandListArgument(dirs, dirsVec);
-        this->OrderLinkerSearchPath->AddLanguageDirectories(dirsVec);
+        this->AddItem(i->c_str(), 0);
         }
       }
     }
 
-  return true;
+  // Add linker search paths for this language that are not
+  // implied by the linker language.
+  std::string dirVar = "CMAKE_";
+  dirVar += lang;
+  dirVar += "_IMPLICIT_LINK_DIRECTORIES";
+  if(const char* dirs = this->Makefile->GetDefinition(dirVar.c_str()))
+    {
+    std::vector<std::string> dirsVec;
+    cmSystemTools::ExpandListArgument(dirs, dirsVec);
+    this->OrderLinkerSearchPath->AddLanguageDirectories(dirsVec);
+    }
 }
 
 //----------------------------------------------------------------------------

+ 2 - 0
Source/cmComputeLinkInformation.h

@@ -163,6 +163,8 @@ private:
 
   // Implicit link libraries and directories for linker language.
   void LoadImplicitLinkInfo();
+  void AddImplicitLinkInfo();
+  void AddImplicitLinkInfo(std::string const& lang);
   std::set<cmStdString> ImplicitLinkDirs;
   std::set<cmStdString> ImplicitLinkLibs;