| Index: tools/gn/visibility.h
|
| diff --git a/tools/gn/visibility.h b/tools/gn/visibility.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..52ec73ca15915811980d464f7d228c57dc671a6e
|
| --- /dev/null
|
| +++ b/tools/gn/visibility.h
|
| @@ -0,0 +1,94 @@
|
| +// 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_VISIBILITY_H_
|
| +#define TOOLS_GN_VISIBILITY_H_
|
| +
|
| +#include <vector>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/strings/string_piece.h"
|
| +#include "tools/gn/source_dir.h"
|
| +
|
| +class Err;
|
| +class Item;
|
| +class Label;
|
| +class Scope;
|
| +class Value;
|
| +
|
| +class Visibility {
|
| + public:
|
| + class VisPattern {
|
| + 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).
|
| + };
|
| +
|
| + VisPattern();
|
| + VisPattern(Type type, const SourceDir& dir, const base::StringPiece& name);
|
| + ~VisPattern();
|
| +
|
| + bool Matches(const Label& label) const;
|
| +
|
| + Type type() const { return type_; }
|
| + const SourceDir& dir() const { return dir_; }
|
| + const std::string& name() const { return name_; }
|
| +
|
| + private:
|
| + 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_;
|
| + };
|
| +
|
| + // Defaults to private visibility (only the current file).
|
| + Visibility();
|
| + ~Visibility();
|
| +
|
| + // Set the visibility to the thing specified by the given value. On failure,
|
| + // returns false and sets the error.
|
| + bool Set(const SourceDir& current_dir, const Value& value, Err* err);
|
| +
|
| + // Sets the visibility to be public.
|
| + void SetPublic();
|
| +
|
| + // Sets the visibility to be private to the given directory.
|
| + void SetPrivate(const SourceDir& current_dir);
|
| +
|
| + // Returns true if the target with the given label can depend on one with the
|
| + // current visibility.
|
| + bool CanSeeMe(const Label& label) const;
|
| +
|
| + // Returns a string listing the visibility.
|
| + std::string Describe() const;
|
| +
|
| + // 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 VisPattern GetPattern(const SourceDir& current_dir,
|
| + const Value& value,
|
| + Err* err);
|
| +
|
| + // Helper function to check visibility between the given two items. If
|
| + // to is invisible to from, returns false and sets the error.
|
| + static bool CheckItemVisibility(const Item* from, const Item* to, Err* err);
|
| +
|
| + // Helper function to fill an item's visibility from the "visibility" value
|
| + // in the current scope.
|
| + static bool FillItemVisibility(Item* item, Scope* scope, Err* err);
|
| +
|
| + private:
|
| + std::vector<VisPattern> patterns_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Visibility);
|
| +};
|
| +
|
| +#endif // TOOLS_GN_VISIBILITY_H_
|
|
|