| // Copyright 2020 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/swift_values_generator.h" |
| |
| #include "gn/label.h" |
| #include "gn/scope.h" |
| #include "gn/settings.h" |
| #include "gn/swift_values.h" |
| #include "gn/swift_variables.h" |
| #include "gn/target.h" |
| #include "gn/value_extractors.h" |
| |
| SwiftValuesGenerator::SwiftValuesGenerator(Target* target, |
| Scope* scope, |
| Err* err) |
| : target_(target), scope_(scope), err_(err) {} |
| |
| SwiftValuesGenerator::~SwiftValuesGenerator() = default; |
| |
| void SwiftValuesGenerator::Run() { |
| if (!FillBridgeHeader()) |
| return; |
| |
| if (!FillModuleName()) |
| return; |
| } |
| |
| bool SwiftValuesGenerator::FillBridgeHeader() { |
| const Value* value = scope_->GetValue(variables::kSwiftBridgeHeader, true); |
| if (!value) |
| return true; |
| |
| if (!value->VerifyTypeIs(Value::STRING, err_)) |
| return false; |
| |
| SourceFile dest; |
| if (!ExtractRelativeFile(scope_->settings()->build_settings(), *value, |
| scope_->GetSourceDir(), &dest, err_)) |
| return false; |
| |
| target_->swift_values().bridge_header() = std::move(dest); |
| return true; |
| } |
| |
| bool SwiftValuesGenerator::FillModuleName() { |
| const Value* value = scope_->GetValue(variables::kSwiftModuleName, true); |
| if (!value) { |
| // The target name will be used. |
| target_->swift_values().module_name() = target_->label().name(); |
| return true; |
| } |
| |
| if (!value->VerifyTypeIs(Value::STRING, err_)) |
| return false; |
| |
| target_->swift_values().module_name() = std::move(value->string_value()); |
| return true; |
| } |