From 8aaf3cebeb0388eb7dde7b49ce4e7150b65908d7 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 24 Aug 2009 13:15:47 -0400 Subject: [PATCH] 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. --- Source/cmComputeLinkInformation.cxx | 69 +++++++++++++++++------------ Source/cmComputeLinkInformation.h | 2 + 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx index 3405546bd..d4ef7e554 100644 --- a/Source/cmComputeLinkInformation.cxx +++ b/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::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 libsVec; - cmSystemTools::ExpandListArgument(libs, libsVec); - for(std::vector::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 libsVec; + cmSystemTools::ExpandListArgument(libs, libsVec); + for(std::vector::const_iterator i = libsVec.begin(); + i != libsVec.end(); ++i) + { + if(this->ImplicitLinkLibs.find(*i) == this->ImplicitLinkLibs.end()) { - std::vector 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 dirsVec; + cmSystemTools::ExpandListArgument(dirs, dirsVec); + this->OrderLinkerSearchPath->AddLanguageDirectories(dirsVec); + } } //---------------------------------------------------------------------------- diff --git a/Source/cmComputeLinkInformation.h b/Source/cmComputeLinkInformation.h index 1fafc13c3..419776b0d 100644 --- a/Source/cmComputeLinkInformation.h +++ b/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 ImplicitLinkDirs; std::set ImplicitLinkLibs;