Просмотр исходного кода

cmGlobalGenerator: Base exclusion computation on cmGeneratorTarget.

Stephen Kelly 10 лет назад
Родитель
Сommit
dd11f72ced

+ 7 - 6
Source/cmGlobalGenerator.cxx

@@ -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
-      || target.GetPropertyAsBool("EXCLUDE_FROM_ALL"))
+  if(target->GetType() == cmTarget::INTERFACE_LIBRARY
+      || 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

+ 1 - 1
Source/cmGlobalGenerator.h

@@ -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,

+ 1 - 1
Source/cmGlobalNinjaGenerator.h

@@ -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) {

+ 2 - 2
Source/cmGlobalUnixMakefileGenerator3.cxx

@@ -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);

+ 6 - 4
Source/cmGlobalVisualStudioGenerator.cxx

@@ -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();
-        for(cmTargets::iterator t = targets.begin();
+        cmGeneratorTargetsType targets =
+            (*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());
             }
             }
           }
           }
         }
         }

+ 1 - 1
Source/cmLocalNinjaGenerator.cxx

@@ -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;
       }
       }