| Index: tools/gn/file_template.h
|
| diff --git a/tools/gn/file_template.h b/tools/gn/file_template.h
|
| index 30b40da6200ced61989e06322f32bb5214a5b025..b04a6c7f4c48a14f3d68c417b3c0a2914e15f942 100644
|
| --- a/tools/gn/file_template.h
|
| +++ b/tools/gn/file_template.h
|
| @@ -14,6 +14,7 @@
|
|
|
| struct EscapeOptions;
|
| class ParseNode;
|
| +class Settings;
|
| class SourceFile;
|
| class Target;
|
|
|
| @@ -30,20 +31,17 @@ extern const char kSourceExpansion_Help[];
|
| class FileTemplate {
|
| public:
|
| struct Subrange {
|
| + // See the help in the .cc file for what these mean.
|
| enum Type {
|
| LITERAL = 0,
|
|
|
| - // {{source}} -> expands to be the source file name relative to the build
|
| - // root dir.
|
| - SOURCE,
|
| -
|
| - // {{source_name_part}} -> file name without extension or directory.
|
| - // Maps "foo/bar.txt" to "bar".
|
| - NAME_PART,
|
| -
|
| - // {{source_file_part}} -> file name including extension but no directory.
|
| - // Maps "foo/bar.txt" to "bar.txt".
|
| - FILE_PART,
|
| + SOURCE, // {{source}}
|
| + NAME_PART, // {{source_name_part}}
|
| + FILE_PART, // {{source_file_part}}
|
| + SOURCE_DIR, // {{source_dir}}
|
| + ROOT_RELATIVE_DIR, // {{root_relative_dir}}
|
| + SOURCE_GEN_DIR, // {{source_gen_dir}}
|
| + SOURCE_OUT_DIR, // {{source_out_dir}}
|
|
|
| NUM_TYPES // Must be last
|
| };
|
| @@ -60,9 +58,9 @@ class FileTemplate {
|
|
|
| // Constructs a template from the given value. On error, the err will be
|
| // set. In this case you should not use this object.
|
| - FileTemplate(const Value& t, Err* err);
|
| - FileTemplate(const std::vector<std::string>& t);
|
| - FileTemplate(const std::vector<SourceFile>& t);
|
| + FileTemplate(const Settings* settings, const Value& t, Err* err);
|
| + FileTemplate(const Settings* settings, const std::vector<std::string>& t);
|
| + FileTemplate(const Settings* settings, const std::vector<SourceFile>& t);
|
|
|
| ~FileTemplate();
|
|
|
| @@ -76,18 +74,10 @@ class FileTemplate {
|
| // Returns true if there are any substitutions.
|
| bool has_substitutions() const { return has_substitutions_; }
|
|
|
| - // Applies this template to the given list of sources, appending all
|
| - // results to the given dest list. The sources must be a list for the
|
| - // one that takes a value as an input, otherwise the given error will be set.
|
| - void Apply(const Value& sources,
|
| - const ParseNode* origin,
|
| - std::vector<Value>* dest,
|
| - Err* err) const;
|
| -
|
| - // Low-level version of Apply that handles one source file. The results
|
| - // will be *appended* to the output.
|
| - void ApplyString(const std::string& input,
|
| - std::vector<std::string>* output) const;
|
| + // Applies the template to one source file. The results will be *appended* to
|
| + // the output.
|
| + void Apply(const SourceFile& source,
|
| + std::vector<std::string>* output) const;
|
|
|
| // Writes a string representing the template with Ninja variables for the
|
| // substitutions, and the literals escaped for Ninja consumption.
|
| @@ -115,7 +105,8 @@ class FileTemplate {
|
| // (see GetWithNinjaExpansions).
|
| void WriteNinjaVariablesForSubstitution(
|
| std::ostream& out,
|
| - const std::string& source,
|
| + const Settings* settings,
|
| + const SourceFile& source,
|
| const EscapeOptions& escape_options) const;
|
|
|
| // Returns the Ninja variable name used by the above Ninja functions to
|
| @@ -124,13 +115,18 @@ class FileTemplate {
|
|
|
| // Extracts the given type of substitution from the given source. The source
|
| // should be the file name relative to the output directory.
|
| - static std::string GetSubstitution(const std::string& source,
|
| + static std::string GetSubstitution(const Settings* settings,
|
| + const SourceFile& source,
|
| Subrange::Type type);
|
|
|
| // Known template types, these include the "{{ }}"
|
| static const char kSource[];
|
| static const char kSourceNamePart[];
|
| static const char kSourceFilePart[];
|
| + static const char kSourceDir[];
|
| + static const char kRootRelDir[];
|
| + static const char kSourceGenDir[];
|
| + static const char kSourceOutDir[];
|
|
|
| private:
|
| typedef base::StackVector<Subrange, 8> Template;
|
| @@ -141,6 +137,8 @@ class FileTemplate {
|
| // Parses a template string and adds it to the templates_ list.
|
| void ParseOneTemplateString(const std::string& str);
|
|
|
| + const Settings* settings_;
|
| +
|
| TemplateVector templates_;
|
|
|
| // The corresponding value is set to true if the given subrange type is
|
|
|