| // 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. | |
| #ifndef TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_ | |
| #define TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_ | |
| #include <memory> | |
| #include "base/macros.h" | |
| #include "tools/gn/scope.h" | |
| // ProgrammaticProvider for a scope to provide it with per-file built-in | |
| // variable support. | |
| class ScopePerFileProvider : public Scope::ProgrammaticProvider { | |
| public: | |
| // allow_target_vars allows the target-related variables to get resolved. | |
| // When allow_target_vars is unset, the target-related values will be | |
| // undefined to GN script. | |
| ScopePerFileProvider(Scope* scope, bool allow_target_vars); | |
| ~ScopePerFileProvider() override; | |
| // ProgrammaticProvider implementation. | |
| const Value* GetProgrammaticValue(const base::StringPiece& ident) override; | |
| private: | |
| const Value* GetCurrentToolchain(); | |
| const Value* GetDefaultToolchain(); | |
| const Value* GetPythonPath(); | |
| const Value* GetRootBuildDir(); | |
| const Value* GetRootGenDir(); | |
| const Value* GetRootOutDir(); | |
| const Value* GetTargetGenDir(); | |
| const Value* GetTargetOutDir(); | |
| bool allow_target_vars_; | |
| // All values are lazily created. | |
| std::unique_ptr<Value> current_toolchain_; | |
| std::unique_ptr<Value> default_toolchain_; | |
| std::unique_ptr<Value> python_path_; | |
| std::unique_ptr<Value> root_build_dir_; | |
| std::unique_ptr<Value> root_gen_dir_; | |
| std::unique_ptr<Value> root_out_dir_; | |
| std::unique_ptr<Value> target_gen_dir_; | |
| std::unique_ptr<Value> target_out_dir_; | |
| DISALLOW_COPY_AND_ASSIGN(ScopePerFileProvider); | |
| }; | |
| #endif // TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_ |