| 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_
|
|
|