diff options
Diffstat (limited to 'Source/cmComputeLinkInformation.cxx')
-rw-r--r-- | Source/cmComputeLinkInformation.cxx | 69 |
1 files changed, 41 insertions, 28 deletions
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx index 3405546..d4ef7e5 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<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); + } } //---------------------------------------------------------------------------- |