From 2a1e2456ae98a1d89715a428df7245ade72101ae Mon Sep 17 00:00:00 2001 From: Ken Martin Date: Thu, 12 Apr 2007 15:46:14 -0400 Subject: [PATCH] ENH: some code consolidation and cleanup --- Source/cmGlobalGenerator.cxx | 106 +++++++++++++++++----- Source/cmGlobalGenerator.h | 5 + Source/cmGlobalUnixMakefileGenerator3.cxx | 76 ---------------- Source/cmGlobalUnixMakefileGenerator3.h | 4 - 4 files changed, 86 insertions(+), 105 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 6703de2dc..0d9cad3ee 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1110,31 +1110,10 @@ void cmGlobalGenerator::FillProjectToTargetMap() { // add this target to the project this->ProjectToTargetMap[projectName].insert(&target); - // now get all the targets that link to this target and - // add them - cmTarget::LinkLibraryVectorType::const_iterator j, jend; - j = target.GetLinkLibraries().begin(); - jend = target.GetLinkLibraries().end(); - for(;j!= jend; ++j) - { - cmTarget* depTarget = this->FindTarget(0, j->first.c_str()); - if(depTarget) - { - this->ProjectToTargetMap[projectName].insert(depTarget); - } - } - // Now add any utility targets used by this target - std::set::const_iterator i, end; - i = target.GetUtilities().begin(); - end = target.GetUtilities().end(); - for(;i!= end; ++i) - { - cmTarget* depTarget = this->FindTarget(0, i->c_str()); - if(depTarget) - { - this->ProjectToTargetMap[projectName].insert(depTarget); - } - } + // get the target's dependencies + std::vector& tgtdeps = this->GetTargetDepends(target); + this->ProjectToTargetMap[projectName].insert(tgtdeps.begin(), + tgtdeps.end()); } } } @@ -1504,3 +1483,80 @@ void cmGlobalGenerator::CheckMultipleOutputs(cmMakefile*, bool) // Only certain generators need this check. They define this // method. } + +//---------------------------------------------------------------------------- +std::vector& cmGlobalGenerator +::GetTargetDepends(cmTarget& target) +{ + // if the depends are already in the map then return + std::map >::iterator tgtI = + this->TargetDependencies.find(target.GetName()); + if (tgtI != this->TargetDependencies.end()) + { + return tgtI->second; + } + + // A target should not depend on itself. + std::set emitted; + emitted.insert(target.GetName()); + + // the vector of results + std::vector& result = + this->TargetDependencies[target.GetName()]; + + // Loop over all library dependencies but not for static libs + if (target.GetType() != cmTarget::STATIC_LIBRARY) + { + const cmTarget::LinkLibraryVectorType& tlibs = target.GetLinkLibraries(); + for(cmTarget::LinkLibraryVectorType::const_iterator lib = tlibs.begin(); + lib != tlibs.end(); ++lib) + { + // Don't emit the same library twice for this target. + if(emitted.insert(lib->first).second) + { + cmTarget *target2 = + target.GetMakefile()->FindTarget(lib->first.c_str()); + + // search each local generator until a match is found + if (!target2) + { + target2 = this->FindTarget(0,lib->first.c_str()); + } + + // if a match was found then ... + if (target2) + { + // Add this dependency. + result.push_back(target2); + } + } + } + } + + // Loop over all utility dependencies. + const std::set& tutils = target.GetUtilities(); + for(std::set::const_iterator util = tutils.begin(); + util != tutils.end(); ++util) + { + // Don't emit the same utility twice for this target. + if(emitted.insert(*util).second) + { + cmTarget *target2 = target.GetMakefile()->FindTarget(util->c_str()); + + // search each local generator until a match is found + if (!target2) + { + target2 = this->FindTarget(0,util->c_str()); + } + + // if a match was found then ... + if (target2) + { + // Add this dependency. + result.push_back(target2); + } + } + } + return result; +} + diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index eac72a4f1..65fe7159e 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -193,6 +193,9 @@ public: virtual const char* GetEditCacheTargetName() { return 0; } virtual const char* GetRebuildCacheTargetName() { return 0; } + // what targets does the specified target depend on + std::vector& GetTargetDepends(cmTarget& target); + protected: // Fill the ProjectMap, this must be called after LocalGenerators // has been populated. @@ -236,6 +239,8 @@ private: // this is used to improve performance std::map TotalTargets; + + std::map > TargetDependencies; }; #endif diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx index f846f40c8..26c8ad280 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.cxx +++ b/Source/cmGlobalUnixMakefileGenerator3.cxx @@ -1002,82 +1002,6 @@ unsigned long cmGlobalUnixMakefileGenerator3 } -//---------------------------------------------------------------------------- -std::vector& cmGlobalUnixMakefileGenerator3 -::GetTargetDepends(cmTarget& target) -{ - // if the depends are already in the map then return - std::map >::iterator tgtI = - this->TargetDependencies.find(target.GetName()); - if (tgtI != this->TargetDependencies.end()) - { - return tgtI->second; - } - - // A target should not depend on itself. - std::set emitted; - emitted.insert(target.GetName()); - - // the vector of results - std::vector& result = - this->TargetDependencies[target.GetName()]; - - // Loop over all library dependencies but not for static libs - if (target.GetType() != cmTarget::STATIC_LIBRARY) - { - const cmTarget::LinkLibraryVectorType& tlibs = target.GetLinkLibraries(); - for(cmTarget::LinkLibraryVectorType::const_iterator lib = tlibs.begin(); - lib != tlibs.end(); ++lib) - { - // Don't emit the same library twice for this target. - if(emitted.insert(lib->first).second) - { - cmTarget *target2 = - target.GetMakefile()->FindTarget(lib->first.c_str()); - - // search each local generator until a match is found - if (!target2) - { - target2 = this->FindTarget(0,lib->first.c_str()); - } - - // if a match was found then ... - if (target2) - { - // Add this dependency. - result.push_back(target2); - } - } - } - } - - // Loop over all utility dependencies. - const std::set& tutils = target.GetUtilities(); - for(std::set::const_iterator util = tutils.begin(); - util != tutils.end(); ++util) - { - // Don't emit the same utility twice for this target. - if(emitted.insert(*util).second) - { - cmTarget *target2 = target.GetMakefile()->FindTarget(util->c_str()); - - // search each local generator until a match is found - if (!target2) - { - target2 = this->FindTarget(0,util->c_str()); - } - - // if a match was found then ... - if (target2) - { - // Add this dependency. - result.push_back(target2); - } - } - } - return result; -} - //---------------------------------------------------------------------------- void cmGlobalUnixMakefileGenerator3 diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h index 7bf675cff..aa901af1c 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.h +++ b/Source/cmGlobalUnixMakefileGenerator3.h @@ -132,9 +132,6 @@ public: unsigned long GetNumberOfProgressActionsInAll (cmLocalUnixMakefileGenerator3 *lg); - // what targets does the specified target depend on - std::vector& GetTargetDepends(cmTarget& target); - protected: void WriteMainMakefile2(); void WriteMainCMakefile(); @@ -187,7 +184,6 @@ protected: typedef std::map MultipleOutputPairsType; MultipleOutputPairsType MultipleOutputPairs; - std::map > TargetDependencies; std::map TargetSourceFileCount; };