cmGlobalGenerator: Base exclusion computation on cmGeneratorTarget.

This commit is contained in:
Stephen Kelly 2015-06-06 14:09:35 +02:00
parent 22590805bf
commit dd11f72ced
6 changed files with 18 additions and 15 deletions

View File

@ -2054,10 +2054,10 @@ bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
} }
bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root, bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
cmTarget const& target) const cmGeneratorTarget* target) const
{ {
if(target.GetType() == cmTarget::INTERFACE_LIBRARY if(target->GetType() == cmTarget::INTERFACE_LIBRARY
|| target.GetPropertyAsBool("EXCLUDE_FROM_ALL")) || target->Target->GetPropertyAsBool("EXCLUDE_FROM_ALL"))
{ {
// This target is excluded from its directory. // This target is excluded from its directory.
return true; return true;
@ -2066,7 +2066,7 @@ bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
{ {
// This target is included in its directory. Check whether the // This target is included in its directory. Check whether the
// directory is excluded. // directory is excluded.
return this->IsExcluded(root, target.GetMakefile()->GetLocalGenerator()); return this->IsExcluded(root, target->GetLocalGenerator());
} }
} }
@ -2127,15 +2127,16 @@ void cmGlobalGenerator::FillLocalGeneratorToTargetMap()
{ {
cmTarget const& target = t->second; cmTarget const& target = t->second;
cmGeneratorTarget* gt = this->GetGeneratorTarget(&target);
// Consider the directory containing the target and all its // Consider the directory containing the target and all its
// parents until something excludes the target. // parents until something excludes the target.
for(cmLocalGenerator* clg = lg; clg && !this->IsExcluded(clg, target); for(cmLocalGenerator* clg = lg; clg && !this->IsExcluded(clg, gt);
clg = clg->GetParent()) clg = clg->GetParent())
{ {
// This local generator includes the target. // This local generator includes the target.
std::set<cmGeneratorTarget const*>& targetSet = std::set<cmGeneratorTarget const*>& targetSet =
this->LocalGeneratorToTargetMap[clg]; this->LocalGeneratorToTargetMap[clg];
cmGeneratorTarget* gt = this->GetGeneratorTarget(&target);
targetSet.insert(gt); targetSet.insert(gt);
// Add dependencies of the included target. An excluded // Add dependencies of the included target. An excluded

View File

@ -391,7 +391,7 @@ protected:
void FillProjectMap(); void FillProjectMap();
void CheckLocalGenerators(); void CheckLocalGenerators();
bool IsExcluded(cmLocalGenerator* root, cmLocalGenerator* gen) const; bool IsExcluded(cmLocalGenerator* root, cmLocalGenerator* gen) const;
bool IsExcluded(cmLocalGenerator* root, cmTarget const& target) const; bool IsExcluded(cmLocalGenerator* root, cmGeneratorTarget* target) const;
void FillLocalGeneratorToTargetMap(); void FillLocalGeneratorToTargetMap();
void CreateDefaultGlobalTargets(cmTargets* targets); void CreateDefaultGlobalTargets(cmTargets* targets);
cmTarget CreateGlobalTarget(const std::string& name, const char* message, cmTarget CreateGlobalTarget(const std::string& name, const char* message,

View File

@ -289,7 +289,7 @@ public:
const std::vector<cmLocalGenerator*>& GetLocalGenerators() const { const std::vector<cmLocalGenerator*>& GetLocalGenerators() const {
return LocalGenerators; } return LocalGenerators; }
bool IsExcluded(cmLocalGenerator* root, cmTarget& target) { bool IsExcluded(cmLocalGenerator* root, cmGeneratorTarget* target) {
return cmGlobalGenerator::IsExcluded(root, target); } return cmGlobalGenerator::IsExcluded(root, target); }
int GetRuleCmdLength(const std::string& name) { int GetRuleCmdLength(const std::string& name) {

View File

@ -821,7 +821,7 @@ cmGlobalUnixMakefileGenerator3
localName, depends, commands, true); localName, depends, commands, true);
// add the all/all dependency // add the all/all dependency
if(!this->IsExcluded(this->LocalGenerators[0], *gtarget->Target)) if(!this->IsExcluded(this->LocalGenerators[0], gtarget))
{ {
depends.clear(); depends.clear();
depends.push_back(localName); depends.push_back(localName);
@ -889,7 +889,7 @@ cmGlobalUnixMakefileGenerator3
"Pre-install relink rule for target.", "Pre-install relink rule for target.",
localName, depends, commands, true); localName, depends, commands, true);
if(!this->IsExcluded(this->LocalGenerators[0], *gtarget->Target)) if(!this->IsExcluded(this->LocalGenerators[0], gtarget))
{ {
depends.clear(); depends.clear();
depends.push_back(localName); depends.push_back(localName);

View File

@ -111,17 +111,19 @@ bool cmGlobalVisualStudioGenerator::Compute()
for(std::vector<cmLocalGenerator*>::iterator i = gen.begin(); for(std::vector<cmLocalGenerator*>::iterator i = gen.begin();
i != gen.end(); ++i) i != gen.end(); ++i)
{ {
cmTargets& targets = (*i)->GetMakefile()->GetTargets(); cmGeneratorTargetsType targets =
for(cmTargets::iterator t = targets.begin(); (*i)->GetMakefile()->GetGeneratorTargets();
for(cmGeneratorTargetsType::iterator t = targets.begin();
t != targets.end(); ++t) t != targets.end(); ++t)
{ {
if (t->second.GetType() == cmTarget::GLOBAL_TARGET) if (t->second->GetType() == cmTarget::GLOBAL_TARGET
|| t->first->IsImported())
{ {
continue; continue;
} }
if(!this->IsExcluded(gen[0], t->second)) if(!this->IsExcluded(gen[0], t->second))
{ {
allBuild->AddUtility(t->second.GetName()); allBuild->AddUtility(t->second->GetName());
} }
} }
} }

View File

@ -90,7 +90,7 @@ void cmLocalNinjaGenerator::Generate()
// Add the target to "all" if required. // Add the target to "all" if required.
if (!this->GetGlobalNinjaGenerator()->IsExcluded( if (!this->GetGlobalNinjaGenerator()->IsExcluded(
this->GetGlobalNinjaGenerator()->GetLocalGenerators()[0], this->GetGlobalNinjaGenerator()->GetLocalGenerators()[0],
*t->second->Target)) t->second))
this->GetGlobalNinjaGenerator()->AddDependencyToAll(t->second->Target); this->GetGlobalNinjaGenerator()->AddDependencyToAll(t->second->Target);
delete tg; delete tg;
} }