Index: tools/gn/label_pattern.h |
diff --git a/tools/gn/label_pattern.h b/tools/gn/label_pattern.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e805ffb62ef60dc82419f4baf6dbd9528ed6923b |
--- /dev/null |
+++ b/tools/gn/label_pattern.h |
@@ -0,0 +1,72 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef TOOLS_GN_LABEL_PATTERN_H_ |
+#define TOOLS_GN_LABEL_PATTERN_H_ |
+ |
+#include "base/strings/string_piece.h" |
+#include "tools/gn/label.h" |
+#include "tools/gn/source_dir.h" |
+ |
+class Err; |
+class Value; |
+ |
+extern const char kLabelPattern_Help[]; |
+ |
+// A label pattern is a simple pattern that matches labels. It is used for |
+// specifying visibility and other times when multiple targets need to be |
+// referenced. |
+class LabelPattern { |
+ public: |
+ enum Type { |
+ MATCH = 1, // Exact match for a given target. |
+ DIRECTORY, // Only targets in the file in the given directory. |
+ RECURSIVE_DIRECTORY // The given directory and any subdir. |
+ // (also indicates "public" when dir is empty). |
+ }; |
+ |
+ LabelPattern(); |
+ LabelPattern(Type type, |
+ const SourceDir& dir, |
+ const base::StringPiece& name, |
+ const Label& toolchain_label); |
+ ~LabelPattern(); |
+ |
+ // Converts the given input string to a pattern. This does special stuff |
+ // to treat the pattern as a label. Sets the error on failure. |
+ static LabelPattern GetPattern(const SourceDir& current_dir, |
+ const Value& value, |
+ Err* err); |
+ |
+ // Returns true if this pattern matches the given label. |
+ bool Matches(const Label& label) const; |
+ |
+ // Returns a string representation of this pattern. |
+ std::string Describe() const; |
+ |
+ Type type() const { return type_; } |
+ |
+ const SourceDir& dir() const { return dir_; } |
+ const std::string& name() const { return name_; } |
+ |
+ const Label& toolchain() const { return toolchain_; } |
+ void set_toolchain(const Label& tc) { toolchain_ = tc; } |
+ |
+ private: |
+ // If nonempty, specifies the toolchain to use. If empty, this will match |
+ // all toolchains. This is independent of the match type. |
+ Label toolchain_; |
+ |
+ Type type_; |
+ |
+ // Used when type_ == PRIVATE and PRIVATE_RECURSIVE. This specifies the |
+ // directory that to which the pattern is private to. |
+ SourceDir dir_; |
+ |
+ // Empty name means match everything. Otherwise the name must match |
+ // exactly. |
+ std::string name_; |
+}; |
+ |
+#endif // TOOLS_GN_LABEL_PATTERN_H_ |