mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 01:36:09 +03:00
81 lines
2.6 KiB
C++
81 lines
2.6 KiB
C++
// 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(const LabelPattern& other);
|
|
~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 the given input string might match more than one thing.
|
|
static bool HasWildcard(const std::string& str);
|
|
|
|
// Returns true if this pattern matches the given label.
|
|
bool Matches(const Label& label) const;
|
|
|
|
// Returns true if any of the patterns in the vector match the label.
|
|
static bool VectorMatches(const std::vector<LabelPattern>& patterns,
|
|
const Label& label);
|
|
|
|
// 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_
|