From 42f3f3c342849d48bbf00a1bca1392c4e5abb18d Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 28 Dec 2007 11:49:46 -0500 Subject: [PATCH] ENH: Store in DependInfo.cmake files a list of the corresponding files for the targets to which a target links. This is useful for locating Fortran modules provided by linked targets. See issue #5809. --- Source/cmMakefileTargetGenerator.cxx | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index d4c61cc05..e780219ec 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -792,6 +792,37 @@ void cmMakefileTargetGenerator::WriteTargetDependRules() *this->InfoFileStream << " )\n\n"; } + // Store list of targets linked directly or transitively. + { + *this->InfoFileStream + << "\n" + << "# Targets to which this target links.\n" + << "SET(CMAKE_TARGET_LINKED_INFO_FILES\n"; + cmGlobalGenerator* gg = this->GlobalGenerator; + std::set emitted; + cmTarget::LinkLibraryVectorType const& libs = + this->Target->GetLinkLibraries(); + for(cmTarget::LinkLibraryVectorType::const_iterator j = libs.begin(); + j != libs.end(); ++j) + { + if(cmTarget const* linkee = gg->FindTarget(0, j->first.c_str(), false)) + { + if(emitted.insert(linkee).second) + { + cmMakefile* mf = linkee->GetMakefile(); + cmLocalGenerator* lg = mf->GetLocalGenerator(); + std::string di = mf->GetStartOutputDirectory(); + di += "/"; + di += lg->GetTargetDirectory(*linkee); + di += "/DependInfo.cmake"; + *this->InfoFileStream << " \"" << di << "\"\n"; + } + } + } + *this->InfoFileStream + << " )\n"; + } + // and now write the rule to use it std::vector depends; std::vector commands;