| Index: tools/gn/xcode_object.cc
|
| diff --git a/tools/gn/xcode_object.cc b/tools/gn/xcode_object.cc
|
| index 9d574a570debfa9dabe79fa00a002f47aacc6c41..b8c8502a213f65dad3dddd46b59d8ddaa03a48cf 100644
|
| --- a/tools/gn/xcode_object.cc
|
| +++ b/tools/gn/xcode_object.cc
|
| @@ -244,6 +244,8 @@ const char* ToString(PBXObjectClass cls) {
|
| return "PBXAggregateTarget";
|
| case PBXBuildFileClass:
|
| return "PBXBuildFile";
|
| + case PBXContainerItemProxyClass:
|
| + return "PBXContainerItemProxy";
|
| case PBXFileReferenceClass:
|
| return "PBXFileReference";
|
| case PBXFrameworksBuildPhaseClass:
|
| @@ -258,6 +260,8 @@ const char* ToString(PBXObjectClass cls) {
|
| return "PBXShellScriptBuildPhase";
|
| case PBXSourcesBuildPhaseClass:
|
| return "PBXSourcesBuildPhase";
|
| + case PBXTargetDependencyClass:
|
| + return "PBXTargetDependency";
|
| case XCBuildConfigurationClass:
|
| return "XCBuildConfiguration";
|
| case XCConfigurationListClass:
|
| @@ -323,6 +327,11 @@ PBXTarget::PBXTarget(const std::string& name,
|
|
|
| PBXTarget::~PBXTarget() {}
|
|
|
| +void PBXTarget::AddDependency(std::unique_ptr<PBXTargetDependency> dependency) {
|
| + DCHECK(dependency);
|
| + dependencies_.push_back(std::move(dependency));
|
| +}
|
| +
|
| std::string PBXTarget::Name() const {
|
| return name_;
|
| }
|
| @@ -330,9 +339,10 @@ std::string PBXTarget::Name() const {
|
| void PBXTarget::Visit(PBXObjectVisitor& visitor) {
|
| PBXObject::Visit(visitor);
|
| configurations_->Visit(visitor);
|
| - for (const auto& build_phase : build_phases_) {
|
| + for (const auto& dependency : dependencies_)
|
| + dependency->Visit(visitor);
|
| + for (const auto& build_phase : build_phases_)
|
| build_phase->Visit(visitor);
|
| - }
|
| }
|
|
|
| // PBXAggregateTarget ---------------------------------------------------------
|
| @@ -399,6 +409,37 @@ void PBXBuildFile::Print(std::ostream& out, unsigned indent) const {
|
| out << "};\n";
|
| }
|
|
|
| +// PBXContainerItemProxy ------------------------------------------------------
|
| +PBXContainerItemProxy::PBXContainerItemProxy(const PBXProject* project,
|
| + const PBXTarget* target)
|
| + : project_(project), target_(target) {}
|
| +
|
| +PBXContainerItemProxy::~PBXContainerItemProxy() {}
|
| +
|
| +PBXObjectClass PBXContainerItemProxy::Class() const {
|
| + return PBXContainerItemProxyClass;
|
| +}
|
| +
|
| +void PBXContainerItemProxy::Visit(PBXObjectVisitor& visitor) {
|
| + PBXObject::Visit(visitor);
|
| +}
|
| +
|
| +std::string PBXContainerItemProxy::Name() const {
|
| + return "PBXContainerItemProxy";
|
| +}
|
| +
|
| +void PBXContainerItemProxy::Print(std::ostream& out, unsigned indent) const {
|
| + const std::string indent_str(indent, '\t');
|
| + const IndentRules rules = {true, 0};
|
| + out << indent_str << Reference() << " = {";
|
| + PrintProperty(out, rules, "isa", ToString(Class()));
|
| + PrintProperty(out, rules, "containerPortal", project_);
|
| + PrintProperty(out, rules, "proxyType", 1u);
|
| + PrintProperty(out, rules, "remoteGlobalIDString", target_);
|
| + PrintProperty(out, rules, "remoteInfo", target_->Name());
|
| + out << indent_str << "};\n";
|
| +}
|
| +
|
| // PBXFileReference -----------------------------------------------------------
|
|
|
| PBXFileReference::PBXFileReference(const std::string& name,
|
| @@ -604,7 +645,7 @@ void PBXNativeTarget::Print(std::ostream& out, unsigned indent) const {
|
| PrintProperty(out, rules, "buildConfigurationList", configurations_);
|
| PrintProperty(out, rules, "buildPhases", build_phases_);
|
| PrintProperty(out, rules, "buildRules", EmptyPBXObjectVector());
|
| - PrintProperty(out, rules, "dependencies", EmptyPBXObjectVector());
|
| + PrintProperty(out, rules, "dependencies", dependencies_);
|
| PrintProperty(out, rules, "name", name_);
|
| PrintProperty(out, rules, "productName", product_name_);
|
| PrintProperty(out, rules, "productReference", product_reference_);
|
| @@ -843,6 +884,33 @@ void PBXSourcesBuildPhase::Print(std::ostream& out, unsigned indent) const {
|
| out << indent_str << "};\n";
|
| }
|
|
|
| +PBXTargetDependency::PBXTargetDependency(
|
| + const PBXTarget* target,
|
| + std::unique_ptr<PBXContainerItemProxy> container_item_proxy)
|
| + : target_(target), container_item_proxy_(std::move(container_item_proxy)) {}
|
| +
|
| +PBXTargetDependency::~PBXTargetDependency() {}
|
| +
|
| +PBXObjectClass PBXTargetDependency::Class() const {
|
| + return PBXTargetDependencyClass;
|
| +}
|
| +std::string PBXTargetDependency::Name() const {
|
| + return "PBXTargetDependency";
|
| +}
|
| +void PBXTargetDependency::Visit(PBXObjectVisitor& visitor) {
|
| + PBXObject::Visit(visitor);
|
| + container_item_proxy_->Visit(visitor);
|
| +}
|
| +void PBXTargetDependency::Print(std::ostream& out, unsigned indent) const {
|
| + const std::string indent_str(indent, '\t');
|
| + const IndentRules rules = {false, indent + 1};
|
| + out << indent_str << Reference() << " = {\n";
|
| + PrintProperty(out, rules, "isa", ToString(Class()));
|
| + PrintProperty(out, rules, "target", target_);
|
| + PrintProperty(out, rules, "targetProxy", container_item_proxy_);
|
| + out << indent_str << "};\n";
|
| +}
|
| +
|
| // XCBuildConfiguration -------------------------------------------------------
|
|
|
| XCBuildConfiguration::XCBuildConfiguration(const std::string& name,
|
|
|