浏览代码

Ninja: remove 'friend' in ninja code

Peter Kümmel 13 年之前
父节点
当前提交
7751966297

+ 52 - 52
Source/cmGlobalNinjaGenerator.h

@@ -153,6 +153,7 @@ public:
 
   static bool IsMinGW() { return UsingMinGW; }
 
+
 public:
   /// Default constructor.
   cmGlobalNinjaGenerator();
@@ -216,12 +217,12 @@ public:
   }
   virtual const char* GetCleanTargetName()         const { return "clean"; }
 
-public:
-  cmGeneratedFileStream* GetBuildFileStream() const
-  { return this->BuildFileStream; }
 
-  cmGeneratedFileStream* GetRulesFileStream() const
-  { return this->RulesFileStream; }
+  cmGeneratedFileStream* GetBuildFileStream() const {
+    return this->BuildFileStream; }
+
+  cmGeneratedFileStream* GetRulesFileStream() const {
+    return this->RulesFileStream; }
 
   void AddCXXCompileCommand(const std::string &commandLine,
                             const std::string &sourceFile);
@@ -246,27 +247,63 @@ public:
   void AddCustomCommandRule();
   void AddMacOSXContentRule();
 
+  bool HasCustomCommandOutput(const std::string &output) {
+    return this->CustomCommandOutputs.find(output) !=
+           this->CustomCommandOutputs.end();
+  }
+
+  /// Called when we have seen the given custom command.  Returns true
+  /// if we has seen it before.
+  bool SeenCustomCommand(cmCustomCommand const *cc) {
+    return !this->CustomCommands.insert(cc).second;
+  }
+
+  /// Called when we have seen the given custom command output.
+  void SeenCustomCommandOutput(const std::string &output) {
+    this->CustomCommandOutputs.insert(output);
+    // We don't need the assumed dependencies anymore, because we have
+    // an output.
+    this->AssumedSourceDependencies.erase(output);
+  }
+
+  void AddAssumedSourceDependencies(const std::string &source,
+                                    const cmNinjaDeps &deps) {
+    std::set<std::string> &ASD = this->AssumedSourceDependencies[source];
+    // Because we may see the same source file multiple times (same source
+    // specified in multiple targets), compute the union of any assumed
+    // dependencies.
+    ASD.insert(deps.begin(), deps.end());
+  }
+
+  void AppendTargetOutputs(cmTarget* target, cmNinjaDeps& outputs);
+  void AppendTargetDepends(cmTarget* target, cmNinjaDeps& outputs);
+  void AddDependencyToAll(cmTarget* target);
+  void AddDependencyToAll(const std::string& input);
+
+  const std::vector<cmLocalGenerator*>& GetLocalGenerators() const {
+    return LocalGenerators; }
+
+  bool IsExcluded(cmLocalGenerator* root, cmTarget& target) {
+    return cmGlobalGenerator::IsExcluded(root, target); }
+
+  int GetRuleCmdLength(const std::string& name) {
+    return RuleCmdLength[name]; }
+
+  void AddTargetAlias(const std::string& alias, cmTarget* target);
+
+
 protected:
 
   /// Overloaded methods.
   /// @see cmGlobalGenerator::CheckALLOW_DUPLICATE_CUSTOM_TARGETS()
   virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS() { return true; }
 
+
 private:
 
   /// @see cmGlobalGenerator::ComputeTargetObjects
   virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
 
-private:
-  // In order to access the AddDependencyToAll() functions and co.
-  friend class cmLocalNinjaGenerator;
-
-  // In order to access the SeenCustomCommand() function.
-  friend class cmNinjaTargetGenerator;
-  friend class cmNinjaNormalTargetGenerator;
-  friend class cmNinjaUtilityTargetGenerator;
-
-private:
   void OpenBuildFileStream();
   void CloseBuildFileStream();
 
@@ -278,15 +315,8 @@ private:
   /// Write the common disclaimer text at the top of each build file.
   void WriteDisclaimer(std::ostream& os);
 
-  void AddDependencyToAll(cmTarget* target);
-  void AddDependencyToAll(const std::string& input);
-
   void WriteAssumedSourceDependencies();
 
-  void AppendTargetOutputs(cmTarget* target, cmNinjaDeps& outputs);
-  void AppendTargetDepends(cmTarget* target, cmNinjaDeps& outputs);
-
-  void AddTargetAlias(const std::string& alias, cmTarget* target);
   void WriteTargetAliases(std::ostream& os);
 
   void WriteBuiltinTargets(std::ostream& os);
@@ -295,39 +325,9 @@ private:
   void WriteTargetClean(std::ostream& os);
   void WriteTargetHelp(std::ostream& os);
 
-  /// Called when we have seen the given custom command.  Returns true
-  /// if we has seen it before.
-  bool SeenCustomCommand(cmCustomCommand const *cc) {
-    return !this->CustomCommands.insert(cc).second;
-  }
-
-  /// Called when we have seen the given custom command output.
-  void SeenCustomCommandOutput(const std::string &output) {
-    this->CustomCommandOutputs.insert(output);
-    // We don't need the assumed dependencies anymore, because we have
-    // an output.
-    this->AssumedSourceDependencies.erase(output);
-  }
-
-  bool HasCustomCommandOutput(const std::string &output) {
-    return this->CustomCommandOutputs.find(output) !=
-           this->CustomCommandOutputs.end();
-  }
-
-  void AddAssumedSourceDependencies(const std::string &source,
-                                    const cmNinjaDeps &deps) {
-    std::set<std::string> &ASD = this->AssumedSourceDependencies[source];
-    // Because we may see the same source file multiple times (same source
-    // specified in multiple targets), compute the union of any assumed
-    // dependencies.
-    ASD.insert(deps.begin(), deps.end());
-  }
-
   std::string ninjaCmd() const;
 
-  int GetRuleCmdLength(const std::string& name) { return RuleCmdLength[name]; }
 
-private:
   /// The file containing the build statement. (the relation ship of the
   /// compilation DAG).
   cmGeneratedFileStream* BuildFileStream;

+ 1 - 1
Source/cmLocalNinjaGenerator.cxx

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

+ 31 - 31
Source/cmLocalNinjaGenerator.h

@@ -45,7 +45,6 @@ public:
   /// Overloaded methods. @see cmLocalGenerator::GetTargetDirectory()
   virtual std::string GetTargetDirectory(cmTarget const& target) const;
 
-public:
   const cmGlobalNinjaGenerator* GetGlobalNinjaGenerator() const;
   cmGlobalNinjaGenerator* GetGlobalNinjaGenerator();
 
@@ -67,33 +66,8 @@ public:
   std::string GetHomeRelativeOutputPath() const
   { return this->HomeRelativeOutputPath; }
 
-protected:
-  virtual std::string ConvertToLinkReference(std::string const& lib);
-  virtual std::string ConvertToIncludeReference(std::string const& path);
-
-private:
-  friend class cmGlobalNinjaGenerator;
-
-  // In order to access to protected member of the local generator.
-  friend class cmNinjaTargetGenerator;
-  friend class cmNinjaNormalTargetGenerator;
-  friend class cmNinjaUtilityTargetGenerator;
-
-private:
-  cmGeneratedFileStream& GetBuildFileStream() const;
-  cmGeneratedFileStream& GetRulesFileStream() const;
-
-  void WriteBuildFileTop();
-  void WriteProjectHeader(std::ostream& os);
-  void WriteNinjaFilesInclusion(std::ostream& os);
-  void WriteProcessedMakefile(std::ostream& os);
-
-  void SetConfigName();
-
   std::string ConvertToNinjaPath(const char *path);
 
-  struct map_to_ninja_path;
-  friend struct map_to_ninja_path;
   struct map_to_ninja_path {
     cmLocalNinjaGenerator *LocalGenerator;
     map_to_ninja_path(cmLocalNinjaGenerator *LocalGen)
@@ -102,26 +76,52 @@ private:
       return LocalGenerator->ConvertToNinjaPath(path.c_str());
     }
   };
+
   map_to_ninja_path MapToNinjaPath() {
     return map_to_ninja_path(this);
   }
 
+  void ExpandRuleVariables(std::string& string,
+                           const RuleVariables& replaceValues) {
+    return cmLocalGenerator::
+             ExpandRuleVariables(string, replaceValues); }
+
+  std::string BuildCommandLine(const std::vector<std::string> &cmdLines);
+
   void AppendTargetOutputs(cmTarget* target, cmNinjaDeps& outputs);
   void AppendTargetDepends(cmTarget* target, cmNinjaDeps& outputs);
 
-  void AppendCustomCommandDeps(const cmCustomCommand *cc,
-                               cmNinjaDeps &ninjaDeps);
-  std::string BuildCommandLine(const std::vector<std::string> &cmdLines);
+  void AddCustomCommandTarget(cmCustomCommand const* cc, cmTarget* target);
   void AppendCustomCommandLines(const cmCustomCommand *cc,
                                 std::vector<std::string> &cmdLines);
+  void AppendCustomCommandDeps(const cmCustomCommand *cc,
+                               cmNinjaDeps &ninjaDeps);
+
+  virtual std::string ConvertToLinkReference(std::string const& lib);
+
+
+protected:
+  virtual std::string ConvertToIncludeReference(std::string const& path);
+
+
+private:
+  cmGeneratedFileStream& GetBuildFileStream() const;
+  cmGeneratedFileStream& GetRulesFileStream() const;
+
+  void WriteBuildFileTop();
+  void WriteProjectHeader(std::ostream& os);
+  void WriteNinjaFilesInclusion(std::ostream& os);
+  void WriteProcessedMakefile(std::ostream& os);
+
+  void SetConfigName();
+
   void WriteCustomCommandRule();
   void WriteCustomCommandBuildStatement(cmCustomCommand const *cc,
                                         const cmNinjaDeps& orderOnlyDeps);
 
-  void AddCustomCommandTarget(cmCustomCommand const* cc, cmTarget* target);
   void WriteCustomCommandBuildStatements();
 
-private:
+
   std::string ConfigName;
   std::string HomeRelativeOutputPath;
 

+ 1 - 1
Source/cmNinjaTargetGenerator.cxx

@@ -91,7 +91,7 @@ cmGlobalNinjaGenerator* cmNinjaTargetGenerator::GetGlobalGenerator() const
 
 const char* cmNinjaTargetGenerator::GetConfigName() const
 {
-  return this->LocalGenerator->ConfigName.c_str();
+  return this->LocalGenerator->GetConfigName();
 }
 
 // TODO: Picked up from cmMakefileTargetGenerator.  Refactor it.

+ 2 - 1
Source/cmNinjaTargetGenerator.h

@@ -126,7 +126,7 @@ protected:
   private:
     cmNinjaTargetGenerator* Generator;
   };
-  friend class MacOSXContentGeneratorType;
+
 
 protected:
   MacOSXContentGeneratorType MacOSXContentGenerator;
@@ -134,6 +134,7 @@ protected:
   cmOSXBundleGenerator* OSXBundleGenerator;
   std::set<cmStdString> MacContentFolders;
 
+
 private:
   cmTarget* Target;
   cmGeneratorTarget* GeneratorTarget;