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;