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.
5 #ifndef TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_
6 #define TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "tools/gn/scope.h"
11 #include "tools/gn/source_file.h"
13 // ProgrammaticProvider for a scope to provide it with per-file built-in
15 class ScopePerFileProvider
: public Scope::ProgrammaticProvider
{
17 // allow_target_vars allows the target-related variables to get resolved.
18 // When allow_target_vars is unset, the target-related values will be
19 // undefined to GN script.
20 ScopePerFileProvider(Scope
* scope
, bool allow_target_vars
);
21 ~ScopePerFileProvider() override
;
23 // ProgrammaticProvider implementation.
24 const Value
* GetProgrammaticValue(const base::StringPiece
& ident
) override
;
27 const Value
* GetCurrentToolchain();
28 const Value
* GetDefaultToolchain();
29 const Value
* GetPythonPath();
30 const Value
* GetRootBuildDir();
31 const Value
* GetRootGenDir();
32 const Value
* GetRootOutDir();
33 const Value
* GetTargetGenDir();
34 const Value
* GetTargetOutDir();
36 bool allow_target_vars_
;
38 // All values are lazily created.
39 scoped_ptr
<Value
> current_toolchain_
;
40 scoped_ptr
<Value
> default_toolchain_
;
41 scoped_ptr
<Value
> python_path_
;
42 scoped_ptr
<Value
> root_build_dir_
;
43 scoped_ptr
<Value
> root_gen_dir_
;
44 scoped_ptr
<Value
> root_out_dir_
;
45 scoped_ptr
<Value
> target_gen_dir_
;
46 scoped_ptr
<Value
> target_out_dir_
;
48 DISALLOW_COPY_AND_ASSIGN(ScopePerFileProvider
);
51 #endif // TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_