| // 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/scope_per_file_provider.h" |
| |
| #include "tools/gn/filesystem_utils.h" |
| #include "tools/gn/settings.h" |
| #include "tools/gn/source_file.h" |
| #include "tools/gn/value.h" |
| #include "tools/gn/variables.h" |
| |
| ScopePerFileProvider::ScopePerFileProvider(Scope* scope, |
| bool allow_target_vars) |
| : ProgrammaticProvider(scope), |
| allow_target_vars_(allow_target_vars) { |
| } |
| |
| ScopePerFileProvider::~ScopePerFileProvider() { |
| } |
| |
| const Value* ScopePerFileProvider::GetProgrammaticValue( |
| const base::StringPiece& ident) { |
| if (ident == variables::kCurrentToolchain) |
| return GetCurrentToolchain(); |
| if (ident == variables::kDefaultToolchain) |
| return GetDefaultToolchain(); |
| if (ident == variables::kPythonPath) |
| return GetPythonPath(); |
| |
| if (ident == variables::kRootBuildDir) |
| return GetRootBuildDir(); |
| if (ident == variables::kRootGenDir) |
| return GetRootGenDir(); |
| if (ident == variables::kRootOutDir) |
| return GetRootOutDir(); |
| |
| if (allow_target_vars_) { |
| if (ident == variables::kTargetGenDir) |
| return GetTargetGenDir(); |
| if (ident == variables::kTargetOutDir) |
| return GetTargetOutDir(); |
| } |
| return nullptr; |
| } |
| |
| const Value* ScopePerFileProvider::GetCurrentToolchain() { |
| if (!current_toolchain_) { |
| current_toolchain_.reset(new Value( |
| nullptr, |
| scope_->settings()->toolchain_label().GetUserVisibleName(false))); |
| } |
| return current_toolchain_.get(); |
| } |
| |
| const Value* ScopePerFileProvider::GetDefaultToolchain() { |
| if (!default_toolchain_) { |
| default_toolchain_.reset(new Value( |
| nullptr, |
| scope_->settings()->default_toolchain_label().GetUserVisibleName( |
| false))); |
| } |
| return default_toolchain_.get(); |
| } |
| |
| const Value* ScopePerFileProvider::GetPythonPath() { |
| if (!python_path_) { |
| python_path_.reset(new Value( |
| nullptr, |
| FilePathToUTF8(scope_->settings()->build_settings()->python_path()))); |
| } |
| return python_path_.get(); |
| } |
| |
| const Value* ScopePerFileProvider::GetRootBuildDir() { |
| if (!root_build_dir_) { |
| root_build_dir_.reset(new Value( |
| nullptr, DirectoryWithNoLastSlash( |
| scope_->settings()->build_settings()->build_dir()))); |
| } |
| return root_build_dir_.get(); |
| } |
| |
| const Value* ScopePerFileProvider::GetRootGenDir() { |
| if (!root_gen_dir_) { |
| root_gen_dir_.reset(new Value( |
| nullptr, |
| DirectoryWithNoLastSlash(GetToolchainGenDir(scope_->settings())))); |
| } |
| return root_gen_dir_.get(); |
| } |
| |
| const Value* ScopePerFileProvider::GetRootOutDir() { |
| if (!root_out_dir_) { |
| root_out_dir_.reset(new Value( |
| nullptr, |
| DirectoryWithNoLastSlash(GetToolchainOutputDir(scope_->settings())))); |
| } |
| return root_out_dir_.get(); |
| } |
| |
| const Value* ScopePerFileProvider::GetTargetGenDir() { |
| if (!target_gen_dir_) { |
| target_gen_dir_.reset( |
| new Value(nullptr, DirectoryWithNoLastSlash(GetCurrentGenDir(scope_)))); |
| } |
| return target_gen_dir_.get(); |
| } |
| |
| const Value* ScopePerFileProvider::GetTargetOutDir() { |
| if (!target_out_dir_) { |
| target_out_dir_.reset(new Value( |
| nullptr, DirectoryWithNoLastSlash(GetCurrentOutputDir(scope_)))); |
| } |
| return target_out_dir_.get(); |
| } |