|  | // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef TOOLS_GN_NINJA_TOOLCHAIN_WRITER_H_ | 
|  | #define TOOLS_GN_NINJA_TOOLCHAIN_WRITER_H_ | 
|  |  | 
|  | #include <iosfwd> | 
|  | #include <set> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/gtest_prod_util.h" | 
|  | #include "base/macros.h" | 
|  | #include "tools/gn/ninja_writer.h" | 
|  | #include "tools/gn/path_output.h" | 
|  | #include "tools/gn/toolchain.h" | 
|  |  | 
|  | struct EscapeOptions; | 
|  | class Settings; | 
|  | class Tool; | 
|  |  | 
|  | class NinjaToolchainWriter { | 
|  | public: | 
|  | // Takes the settings for the toolchain, as well as the list of all targets | 
|  | // associated with the toolchain. | 
|  | static bool RunAndWriteFile( | 
|  | const Settings* settings, | 
|  | const Toolchain* toolchain, | 
|  | const std::vector<NinjaWriter::TargetRulePair>& rules); | 
|  |  | 
|  | private: | 
|  | FRIEND_TEST_ALL_PREFIXES(NinjaToolchainWriter, WriteToolRule); | 
|  | FRIEND_TEST_ALL_PREFIXES(NinjaToolchainWriter, WriteToolRuleWithLauncher); | 
|  |  | 
|  | NinjaToolchainWriter(const Settings* settings, | 
|  | const Toolchain* toolchain, | 
|  | std::ostream& out); | 
|  | ~NinjaToolchainWriter(); | 
|  |  | 
|  | void Run(const std::vector<NinjaWriter::TargetRulePair>& extra_rules); | 
|  |  | 
|  | void WriteRules(); | 
|  | void WriteToolRule(Tool* tool, const std::string& rule_prefix); | 
|  | void WriteRulePattern(const char* name, | 
|  | const SubstitutionPattern& pattern, | 
|  | const EscapeOptions& options); | 
|  | void WriteCommandRulePattern(const char* name, | 
|  | const std::string& launcher, | 
|  | const SubstitutionPattern& command, | 
|  | const EscapeOptions& options); | 
|  |  | 
|  | const Settings* settings_; | 
|  | const Toolchain* toolchain_; | 
|  | std::ostream& out_; | 
|  | PathOutput path_output_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(NinjaToolchainWriter); | 
|  | }; | 
|  |  | 
|  | #endif  // TOOLS_GN_NINJA_TOOLCHAIN_WRITER_H_ |