| Index: tools/gn/target.h
|
| diff --git a/tools/gn/target.h b/tools/gn/target.h
|
| index ef194f87f73f8a34c089d0949d1b7a385a5c1522..40f1e969616cea8a97e49c4359c0f37e303828c0 100644
|
| --- a/tools/gn/target.h
|
| +++ b/tools/gn/target.h
|
| @@ -125,16 +125,20 @@ class Target : public Item {
|
| output_type_ == COPY_FILES;
|
| }
|
|
|
| - // Linked dependencies.
|
| - const LabelTargetVector& deps() const { return deps_; }
|
| - LabelTargetVector& deps() { return deps_; }
|
| + // Linked private dependencies.
|
| + const LabelTargetVector& private_deps() const { return private_deps_; }
|
| + LabelTargetVector& private_deps() { return private_deps_; }
|
| +
|
| + // Linked public dependencies.
|
| + const LabelTargetVector& public_deps() const { return public_deps_; }
|
| + LabelTargetVector& public_deps() { return public_deps_; }
|
|
|
| // Non-linked dependencies.
|
| - const LabelTargetVector& datadeps() const { return datadeps_; }
|
| - LabelTargetVector& datadeps() { return datadeps_; }
|
| + const LabelTargetVector& data_deps() const { return data_deps_; }
|
| + LabelTargetVector& data_deps() { return data_deps_; }
|
|
|
| // List of configs that this class inherits settings from. Once a target is
|
| - // resolved, this will also list all- and direct-dependent configs.
|
| + // resolved, this will also list all-dependent and public configs.
|
| const UniqueVector<LabelConfigPair>& configs() const { return configs_; }
|
| UniqueVector<LabelConfigPair>& configs() { return configs_; }
|
|
|
| @@ -149,16 +153,16 @@ class Target : public Item {
|
| }
|
|
|
| // List of configs that targets depending directly on this one get. These
|
| - // configs are not added to this target.
|
| - const UniqueVector<LabelConfigPair>& direct_dependent_configs() const {
|
| - return direct_dependent_configs_;
|
| + // configs are also added to this target.
|
| + const UniqueVector<LabelConfigPair>& public_configs() const {
|
| + return public_configs_;
|
| }
|
| - UniqueVector<LabelConfigPair>& direct_dependent_configs() {
|
| - return direct_dependent_configs_;
|
| + UniqueVector<LabelConfigPair>& public_configs() {
|
| + return public_configs_;
|
| }
|
|
|
| - // A list of a subset of deps where we'll re-export direct_dependent_configs
|
| - // as direct_dependent_configs of this target.
|
| + // A list of a subset of deps where we'll re-export public_configs as
|
| + // public_configs of this target.
|
| const UniqueVector<LabelTargetPair>& forward_dependent_configs() const {
|
| return forward_dependent_configs_;
|
| }
|
| @@ -224,8 +228,6 @@ class Target : public Item {
|
| }
|
|
|
| private:
|
| - void ExpandGroups();
|
| -
|
| // Pulls necessary information from dependencies to this one when all
|
| // dependencies have been resolved.
|
| void PullDependentTargetInfo();
|
| @@ -233,6 +235,7 @@ class Target : public Item {
|
| // These each pull specific things from dependencies to this one when all
|
| // deps have been resolved.
|
| void PullForwardedDependentConfigs();
|
| + void PullForwardedDependentConfigsFrom(const Target* from);
|
| void PullRecursiveHardDeps();
|
|
|
| // Fills the link and dependency output files when a target is resolved.
|
| @@ -257,23 +260,13 @@ class Target : public Item {
|
|
|
| bool hard_dep_;
|
|
|
| - // Note that if there are any groups in the deps, once the target is resolved
|
| - // these vectors will list *both* the groups as well as the groups' deps.
|
| - //
|
| - // This is because, in general, groups should be "transparent" ways to add
|
| - // groups of dependencies, so adding the groups deps make this happen with
|
| - // no additional complexity when iterating over a target's deps.
|
| - //
|
| - // However, a group may also have specific settings and configs added to it,
|
| - // so we also need the group in the list so we find these things. But you
|
| - // shouldn't need to look inside the deps of the group since those will
|
| - // already be added.
|
| - LabelTargetVector deps_;
|
| - LabelTargetVector datadeps_;
|
| + LabelTargetVector private_deps_;
|
| + LabelTargetVector public_deps_;
|
| + LabelTargetVector data_deps_;
|
|
|
| UniqueVector<LabelConfigPair> configs_;
|
| UniqueVector<LabelConfigPair> all_dependent_configs_;
|
| - UniqueVector<LabelConfigPair> direct_dependent_configs_;
|
| + UniqueVector<LabelConfigPair> public_configs_;
|
| UniqueVector<LabelTargetPair> forward_dependent_configs_;
|
|
|
| std::set<Label> allow_circular_includes_from_;
|
| @@ -309,6 +302,54 @@ class Target : public Item {
|
| DISALLOW_COPY_AND_ASSIGN(Target);
|
| };
|
|
|
| +// Iterates over the deps of a target.
|
| +//
|
| +// Since there are multiple kinds of deps, this iterator allows looping over
|
| +// each one in one loop.
|
| +class DepsIterator {
|
| + public:
|
| + enum LinkedOnly {
|
| + LINKED_ONLY,
|
| + };
|
| +
|
| + // Iterate over public, private, and data deps.
|
| + explicit DepsIterator(const Target* t);
|
| +
|
| + // Iterate over the public and private linked deps, but not the data deps.
|
| + DepsIterator(const Target* t, LinkedOnly);
|
| +
|
| + // Returns true when there are no more targets.
|
| + bool done() const {
|
| + return !vect_stack_[0];
|
| + }
|
| +
|
| + // Advance to the next position. This assumes there are more vectors.
|
| + //
|
| + // For internal use, this function tolerates an initial index equal to the
|
| + // length of the current vector. In this case, it will advance to the next
|
| + // one.
|
| + void Advance();
|
| +
|
| + // The current dependency.
|
| + const LabelTargetPair& pair() const {
|
| + DCHECK(current_index_ < vect_stack_[0]->size());
|
| + return (*vect_stack_[0])[current_index_];
|
| + }
|
| +
|
| + // The pointer to the current dependency.
|
| + const Target* target() const { return pair().ptr; }
|
| +
|
| + // The label of the current dependency.
|
| + const Label& label() const { return pair().label; }
|
| +
|
| + private:
|
| + const LabelTargetVector* vect_stack_[3];
|
| +
|
| + size_t current_index_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DepsIterator);
|
| +};
|
| +
|
| namespace BASE_HASH_NAMESPACE {
|
|
|
| #if defined(COMPILER_GCC)
|
|
|