Index: tools/gn/substitution_type.h |
diff --git a/tools/gn/substitution_type.h b/tools/gn/substitution_type.h |
index fd7c40692dc70c3cac80657617bd0b62c22c8fb9..7212157837bb1f2d02dc831df5cd8e2144839e76 100644 |
--- a/tools/gn/substitution_type.h |
+++ b/tools/gn/substitution_type.h |
@@ -19,7 +19,11 @@ enum SubstitutionType { |
// until NUM_TYPES. |
SUBSTITUTION_FIRST_PATTERN, |
+ // These map to Ninja's {in} and {out} variables. |
SUBSTITUTION_SOURCE = SUBSTITUTION_FIRST_PATTERN, // {{source}} |
+ SUBSTITUTION_OUTPUT, // {{output}} |
+ |
+ // Valid for all compiler tools. |
SUBSTITUTION_SOURCE_NAME_PART, // {{source_name_part}} |
SUBSTITUTION_SOURCE_FILE_PART, // {{source_file_part}} |
SUBSTITUTION_SOURCE_DIR, // {{source_dir}} |
@@ -27,8 +31,9 @@ enum SubstitutionType { |
SUBSTITUTION_SOURCE_GEN_DIR, // {{source_gen_dir}} |
SUBSTITUTION_SOURCE_OUT_DIR, // {{source_out_dir}} |
- // Valid for all compiler and linker tools (depends on target). |
- SUBSTITUTION_OUTPUT, // {{output}} |
+ // Valid for all compiler and linker tools. These depend on the target and |
+ // no not vary on a per-file basis. |
+ SUBSTITUTION_LABEL, // {{label}} |
SUBSTITUTION_ROOT_GEN_DIR, // {{root_gen_dir}} |
SUBSTITUTION_ROOT_OUT_DIR, // {{root_out_dir}} |
SUBSTITUTION_TARGET_GEN_DIR, // {{target_gen_dir}} |
@@ -63,6 +68,23 @@ extern const char* kSubstitutionNames[SUBSTITUTION_NUM_TYPES]; |
// the dollar sign. |
extern const char* kSubstitutionNinjaNames[SUBSTITUTION_NUM_TYPES]; |
+// A wrapper around an array if flags indicating whether a give substitution |
+// type is required in some context. By convention, the LITERAL type bit is |
+// not set. |
+struct SubstitutionBits { |
+ SubstitutionBits(); |
+ |
+ // Merges any bits set in the given "other" to this one. This object will |
+ // then be the union of all bits in the two lists. |
+ void MergeFrom(const SubstitutionBits& other); |
+ |
+ // Converts the substitution type bitfield (with a true set for each required |
+ // item) to a vector of the types listed. Does not include LITERAL. |
+ void FillVector(std::vector<SubstitutionType>* vect) const; |
+ |
+ bool used[SUBSTITUTION_NUM_TYPES]; |
+}; |
+ |
// Returns true if the given substitution pattern references the output |
// directory. This is used to check strings that begin with a substitution to |
// verify that the produce a file in the output directory. |
@@ -76,6 +98,7 @@ bool IsValidCompilerSubstitution(SubstitutionType type); |
bool IsValidCompilerOutputsSubstitution(SubstitutionType type); |
bool IsValidLinkerSubstitution(SubstitutionType type); |
bool IsValidLinkerOutputsSubstitution(SubstitutionType type); |
+bool IsValidCopySubstitution(SubstitutionType type); |
// Like the "IsValid..." version above but checks a list of types and sets a |
// an error blaming the given source if the test fails. |