blob: ba56e2871672fd0c0db3f649325309a47e15db25 [file] [log] [blame]
// 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;
}