Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Unified Diff: tools/gn/file_template.h

Issue 387663003: Improve GN handling of directory templates. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_;

Powered by Google App Engine
This is Rietveld 408576698