• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "tools/gn/scope_per_file_provider.h"
6 
7 #include "tools/gn/filesystem_utils.h"
8 #include "tools/gn/settings.h"
9 #include "tools/gn/source_file.h"
10 #include "tools/gn/value.h"
11 #include "tools/gn/variables.h"
12 
ScopePerFileProvider(Scope * scope,bool allow_target_vars)13 ScopePerFileProvider::ScopePerFileProvider(Scope* scope,
14                                            bool allow_target_vars)
15     : ProgrammaticProvider(scope),
16       allow_target_vars_(allow_target_vars) {
17 }
18 
~ScopePerFileProvider()19 ScopePerFileProvider::~ScopePerFileProvider() {
20 }
21 
GetProgrammaticValue(const base::StringPiece & ident)22 const Value* ScopePerFileProvider::GetProgrammaticValue(
23     const base::StringPiece& ident) {
24   if (ident == variables::kCurrentToolchain)
25     return GetCurrentToolchain();
26   if (ident == variables::kDefaultToolchain)
27     return GetDefaultToolchain();
28   if (ident == variables::kPythonPath)
29     return GetPythonPath();
30 
31   if (ident == variables::kRootBuildDir)
32     return GetRootBuildDir();
33   if (ident == variables::kRootGenDir)
34     return GetRootGenDir();
35   if (ident == variables::kRootOutDir)
36     return GetRootOutDir();
37 
38   if (allow_target_vars_) {
39     if (ident == variables::kTargetGenDir)
40       return GetTargetGenDir();
41     if (ident == variables::kTargetOutDir)
42       return GetTargetOutDir();
43   }
44   return NULL;
45 }
46 
GetCurrentToolchain()47 const Value* ScopePerFileProvider::GetCurrentToolchain() {
48   if (!current_toolchain_) {
49     current_toolchain_.reset(new Value(NULL,
50         scope_->settings()->toolchain_label().GetUserVisibleName(false)));
51   }
52   return current_toolchain_.get();
53 }
54 
GetDefaultToolchain()55 const Value* ScopePerFileProvider::GetDefaultToolchain() {
56   if (!default_toolchain_) {
57     default_toolchain_.reset(new Value(NULL,
58         scope_->settings()->default_toolchain_label().GetUserVisibleName(
59             false)));
60   }
61   return default_toolchain_.get();
62 }
63 
GetPythonPath()64 const Value* ScopePerFileProvider::GetPythonPath() {
65   if (!python_path_) {
66     python_path_.reset(new Value(NULL,
67         FilePathToUTF8(scope_->settings()->build_settings()->python_path())));
68   }
69   return python_path_.get();
70 }
71 
GetRootBuildDir()72 const Value* ScopePerFileProvider::GetRootBuildDir() {
73   if (!root_build_dir_) {
74     root_build_dir_.reset(new Value(NULL, DirectoryWithNoLastSlash(
75         scope_->settings()->build_settings()->build_dir())));
76   }
77   return root_build_dir_.get();
78 }
79 
GetRootGenDir()80 const Value* ScopePerFileProvider::GetRootGenDir() {
81   if (!root_gen_dir_) {
82     root_gen_dir_.reset(new Value(NULL,
83         DirectoryWithNoLastSlash(GetToolchainGenDir(scope_->settings()))));
84   }
85   return root_gen_dir_.get();
86 }
87 
GetRootOutDir()88 const Value* ScopePerFileProvider::GetRootOutDir() {
89   if (!root_out_dir_) {
90     root_out_dir_.reset(new Value(NULL,
91         DirectoryWithNoLastSlash(GetToolchainOutputDir(scope_->settings()))));
92   }
93   return root_out_dir_.get();
94 }
95 
GetTargetGenDir()96 const Value* ScopePerFileProvider::GetTargetGenDir() {
97   if (!target_gen_dir_) {
98     target_gen_dir_.reset(new Value(NULL,
99         DirectoryWithNoLastSlash(GetCurrentGenDir(scope_))));
100   }
101   return target_gen_dir_.get();
102 }
103 
GetTargetOutDir()104 const Value* ScopePerFileProvider::GetTargetOutDir() {
105   if (!target_out_dir_) {
106     target_out_dir_.reset(new Value(NULL,
107         DirectoryWithNoLastSlash(GetCurrentOutputDir(scope_))));
108   }
109   return target_out_dir_.get();
110 }
111