[cmake-commits] martink committed cmGlobalGenerator.cxx 1.171 1.172
cmGlobalGenerator.h 1.72 1.73
cmake-commits at cmake.org
cmake-commits at cmake.org
Thu Apr 12 15:46:08 EDT 2007
Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv24465/Source
Modified Files:
cmGlobalGenerator.cxx cmGlobalGenerator.h
Log Message:
ENH: some code consolidation and cleanup
Index: cmGlobalGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalGenerator.h,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -d -r1.72 -r1.73
--- cmGlobalGenerator.h 13 Mar 2007 18:23:08 -0000 1.72
+++ cmGlobalGenerator.h 12 Apr 2007 19:46:06 -0000 1.73
@@ -193,6 +193,9 @@
virtual const char* GetEditCacheTargetName() { return 0; }
virtual const char* GetRebuildCacheTargetName() { return 0; }
+ // what targets does the specified target depend on
+ std::vector<cmTarget *>& GetTargetDepends(cmTarget& target);
+
protected:
// Fill the ProjectMap, this must be called after LocalGenerators
// has been populated.
@@ -236,6 +239,8 @@
// this is used to improve performance
std::map<cmStdString,cmTarget *> TotalTargets;
+
+ std::map<cmStdString, std::vector<cmTarget *> > TargetDependencies;
};
#endif
Index: cmGlobalGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalGenerator.cxx,v
retrieving revision 1.171
retrieving revision 1.172
diff -u -d -r1.171 -r1.172
--- cmGlobalGenerator.cxx 13 Mar 2007 18:23:08 -0000 1.171
+++ cmGlobalGenerator.cxx 12 Apr 2007 19:46:06 -0000 1.172
@@ -1110,31 +1110,10 @@
{
// 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<cmStdString>::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<cmTarget *>& tgtdeps = this->GetTargetDepends(target);
+ this->ProjectToTargetMap[projectName].insert(tgtdeps.begin(),
+ tgtdeps.end());
}
}
}
@@ -1504,3 +1483,80 @@
// Only certain generators need this check. They define this
// method.
}
+
+//----------------------------------------------------------------------------
+std::vector<cmTarget *>& cmGlobalGenerator
+::GetTargetDepends(cmTarget& target)
+{
+ // if the depends are already in the map then return
+ std::map<cmStdString, std::vector<cmTarget *> >::iterator tgtI =
+ this->TargetDependencies.find(target.GetName());
+ if (tgtI != this->TargetDependencies.end())
+ {
+ return tgtI->second;
+ }
+
+ // A target should not depend on itself.
+ std::set<cmStdString> emitted;
+ emitted.insert(target.GetName());
+
+ // the vector of results
+ std::vector<cmTarget *>& 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<cmStdString>& tutils = target.GetUtilities();
+ for(std::set<cmStdString>::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;
+}
+
More information about the Cmake-commits
mailing list