Chromium Code Reviews| Index: tools/gn/file_template.h |
| diff --git a/tools/gn/file_template.h b/tools/gn/file_template.h |
| index b04a6c7f4c48a14f3d68c417b3c0a2914e15f942..ddbd67fd5a46ef753c252174f0be17ec9b7af0f7 100644 |
| --- a/tools/gn/file_template.h |
| +++ b/tools/gn/file_template.h |
| @@ -10,6 +10,7 @@ |
| #include "base/basictypes.h" |
| #include "base/containers/stack_container.h" |
| #include "tools/gn/err.h" |
| +#include "tools/gn/source_dir.h" |
| #include "tools/gn/value.h" |
| struct EscapeOptions; |
| @@ -30,6 +31,11 @@ extern const char kSourceExpansion_Help[]; |
| // substitutions. |
| class FileTemplate { |
| public: |
| + enum OutputStyle { |
| + OUTPUT_ABSOLUTE, // Dirs will be absolute "//foo/bar". |
| + OUTPUT_RELATIVE, // Dirs will be relative to a given directory. |
| + }; |
| + |
| struct Subrange { |
| // See the help in the .cc file for what these mean. |
| enum Type { |
| @@ -58,9 +64,19 @@ 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 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(const Settings* settings, |
| + const Value& t, |
| + OutputStyle output_style, |
| + const SourceDir& relative_to, |
| + Err* err); |
| + FileTemplate(const Settings* settings, |
| + const std::vector<std::string>& t, |
| + OutputStyle output_style, |
| + const SourceDir& relative_to); |
| + FileTemplate(const Settings* settings, |
| + const std::vector<SourceFile>& t, |
| + OutputStyle output_style, |
| + const SourceDir& relative_to); |
| ~FileTemplate(); |
| @@ -105,7 +121,6 @@ class FileTemplate { |
| // (see GetWithNinjaExpansions). |
| void WriteNinjaVariablesForSubstitution( |
| std::ostream& out, |
| - const Settings* settings, |
| const SourceFile& source, |
| const EscapeOptions& escape_options) const; |
| @@ -113,13 +128,18 @@ class FileTemplate { |
| // substitute for the given type. |
| static const char* GetNinjaVariableNameForType(Subrange::Type type); |
| - // Extracts the given type of substitution from the given source. The source |
| - // should be the file name relative to the output directory. |
| + // Extracts the given type of substitution from the given source file. |
| + // If output_style is RELATIVE, relative_to indicates the directory that the |
|
viettrungluu
2014/07/10 23:10:39
nit: RELATIVE -> OUTPUT_RELATIVE?
|
| + // relative directories should be relative to, otherwise it is ignored. |
| static std::string GetSubstitution(const Settings* settings, |
| const SourceFile& source, |
| - Subrange::Type type); |
| + Subrange::Type type, |
| + OutputStyle output_style, |
| + const SourceDir& relative_to); |
| - // Known template types, these include the "{{ }}" |
| + // Known template types, these include the "{{ }}". |
| + // IF YOU ADD NEW ONES: If the expansion expands to something inside the |
| + // output directory, also update EnsureStringIsInOutputDir. |
| static const char kSource[]; |
| static const char kSourceNamePart[]; |
| static const char kSourceFilePart[]; |
| @@ -138,6 +158,8 @@ class FileTemplate { |
| void ParseOneTemplateString(const std::string& str); |
| const Settings* settings_; |
| + OutputStyle output_style_; |
| + SourceDir relative_to_; |
| TemplateVector templates_; |