1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef TOOLS_GN_NINJA_ACTION_TARGET_WRITER_H_ 6#define TOOLS_GN_NINJA_ACTION_TARGET_WRITER_H_ 7 8#include <vector> 9 10#include "base/compiler_specific.h" 11#include "base/gtest_prod_util.h" 12#include "tools/gn/ninja_target_writer.h" 13 14class OutputFile; 15 16// Writes a .ninja file for a action target type. 17class NinjaActionTargetWriter : public NinjaTargetWriter { 18 public: 19 NinjaActionTargetWriter(const Target* target, std::ostream& out); 20 virtual ~NinjaActionTargetWriter(); 21 22 virtual void Run() OVERRIDE; 23 24 private: 25 FRIEND_TEST_ALL_PREFIXES(NinjaActionTargetWriter, 26 WriteOutputFilesForBuildLine); 27 FRIEND_TEST_ALL_PREFIXES(NinjaActionTargetWriter, 28 WriteOutputFilesForBuildLineWithDepfile); 29 FRIEND_TEST_ALL_PREFIXES(NinjaActionTargetWriter, 30 WriteArgsSubstitutions); 31 32 // Writes the Ninja rule for invoking the script. 33 // 34 // Returns the name of the custom rule generated. This will be based on the 35 // target name, and will include the string "$unique_name" if there are 36 // multiple inputs. 37 std::string WriteRuleDefinition(); 38 39 // Writes the rules for compiling each source, writing all output files 40 // to the given vector. 41 // 42 // input_dep is a file expressing the depencies common to all build steps. 43 // It will be a stamp file if there is more than one. 44 void WriteSourceRules(const std::string& custom_rule_name, 45 const OutputFile& input_dep, 46 std::vector<OutputFile>* output_files); 47 48 // Writes the output files generated by the output template for the given 49 // source file. This will start with a space and will not include a newline. 50 // Appends the output files to the given vector. 51 void WriteOutputFilesForBuildLine(const SourceFile& source, 52 std::vector<OutputFile>* output_files); 53 54 void WriteDepfile(const SourceFile& source); 55 56 // Path output writer that doesn't do any escaping or quoting. It does, 57 // however, convert slashes. Used for 58 // computing intermediate strings. 59 PathOutput path_output_no_escaping_; 60 61 DISALLOW_COPY_AND_ASSIGN(NinjaActionTargetWriter); 62}; 63 64#endif // TOOLS_GN_NINJA_ACTION_TARGET_WRITER_H_ 65