blob: 977e97d275a1997fab9b5199cc80e5ccba9bfcf2 [file] [log] [blame]
// Copyright 2015 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.
#include "gn/inherited_libraries.h"
#include "gn/target.h"
InheritedLibraries::InheritedLibraries() = default;
InheritedLibraries::~InheritedLibraries() = default;
std::vector<std::pair<const Target*, bool>>
InheritedLibraries::GetOrderedAndPublicFlag() const {
std::vector<std::pair<const Target*, bool>> result;
result.reserve(targets_.size());
for (size_t i = 0; i < targets_.size(); ++i)
result.emplace_back(targets_[i], public_flags_[i]);
return result;
}
void InheritedLibraries::Append(const Target* target, bool is_public) {
// Try to insert a new node.
auto ret = targets_.PushBackWithIndex(target);
if (ret.first) {
public_flags_.push_back(is_public);
} else if (is_public) {
// Target already present, if |is_public|, set its flag.
public_flags_[ret.second] = true;
}
}
void InheritedLibraries::AppendInherited(const InheritedLibraries& other,
bool is_public) {
// Append all items in order, mark them public only if the're already public
// and we're adding them publicly.
for (size_t i = 0; i < other.targets_.size(); ++i) {
Append(other.targets_[i], is_public && other.public_flags_[i]);
}
}
void InheritedLibraries::AppendPublicSharedLibraries(
const InheritedLibraries& other,
bool is_public) {
for (size_t i = 0; i < other.targets_.size(); ++i) {
const Target* target = other.targets_[i];
if (target->output_type() == Target::SHARED_LIBRARY &&
other.public_flags_[i]) {
Append(target, is_public);
}
}
}