blob: 79b8365f19e7495d1b70d53e614f76d853390e4b [file] [log] [blame]
// Copyright (c) 2013 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 "tools/gn/build_settings.h"
#include <utility>
#include "base/files/file_util.h"
#include "tools/gn/filesystem_utils.h"
BuildSettings::BuildSettings() = default;
BuildSettings::BuildSettings(const BuildSettings& other)
: root_path_(other.root_path_),
root_path_utf8_(other.root_path_utf8_),
secondary_source_path_(other.secondary_source_path_),
python_path_(other.python_path_),
build_config_file_(other.build_config_file_),
arg_file_template_path_(other.arg_file_template_path_),
build_dir_(other.build_dir_),
build_args_(other.build_args_) {}
BuildSettings::~BuildSettings() = default;
void BuildSettings::SetRootTargetLabel(const Label& r) {
root_target_label_ = r;
}
void BuildSettings::SetRootPath(const base::FilePath& r) {
DCHECK(r.value()[r.value().size() - 1] != base::FilePath::kSeparators[0]);
root_path_ = r.NormalizePathSeparatorsTo('/');
root_path_utf8_ = FilePathToUTF8(root_path_);
}
void BuildSettings::SetSecondarySourcePath(const SourceDir& d) {
secondary_source_path_ = GetFullPath(d).NormalizePathSeparatorsTo('/');
}
void BuildSettings::SetBuildDir(const SourceDir& d) {
build_dir_ = d;
}
base::FilePath BuildSettings::GetFullPath(const SourceFile& file) const {
return file.Resolve(root_path_).NormalizePathSeparatorsTo('/');
}
base::FilePath BuildSettings::GetFullPath(const SourceDir& dir) const {
return dir.Resolve(root_path_).NormalizePathSeparatorsTo('/');
}
base::FilePath BuildSettings::GetFullPath(const std::string& path,
bool as_file) const {
return ResolvePath(path, as_file, root_path_).NormalizePathSeparatorsTo('/');
}
base::FilePath BuildSettings::GetFullPathSecondary(
const SourceFile& file) const {
return file.Resolve(secondary_source_path_).NormalizePathSeparatorsTo('/');
}
base::FilePath BuildSettings::GetFullPathSecondary(
const SourceDir& dir) const {
return dir.Resolve(secondary_source_path_).NormalizePathSeparatorsTo('/');
}
base::FilePath BuildSettings::GetFullPathSecondary(const std::string& path,
bool as_file) const {
return ResolvePath(path, as_file, secondary_source_path_)
.NormalizePathSeparatorsTo('/');
}
void BuildSettings::ItemDefined(std::unique_ptr<Item> item) const {
DCHECK(item);
if (!item_defined_callback_.is_null())
item_defined_callback_.Run(std::move(item));
}