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 virtual ~ScopePerFileProvider();
23 // ProgrammaticProvider implementation.
24 virtual const Value
* GetProgrammaticValue(
25 const base::StringPiece
& ident
) OVERRIDE
;
28 const Value
* GetCurrentToolchain();
29 const Value
* GetDefaultToolchain();
30 const Value
* GetPythonPath();
31 const Value
* GetRootBuildDir();
32 const Value
* GetRootGenDir();
33 const Value
* GetRootOutDir();
34 const Value
* GetTargetGenDir();
35 const Value
* GetTargetOutDir();
37 bool allow_target_vars_
;
39 // All values are lazily created.
40 scoped_ptr
<Value
> current_toolchain_
;
41 scoped_ptr
<Value
> default_toolchain_
;
42 scoped_ptr
<Value
> python_path_
;
43 scoped_ptr
<Value
> root_build_dir_
;
44 scoped_ptr
<Value
> root_gen_dir_
;
45 scoped_ptr
<Value
> root_out_dir_
;
46 scoped_ptr
<Value
> target_gen_dir_
;
47 scoped_ptr
<Value
> target_out_dir_
;
49 DISALLOW_COPY_AND_ASSIGN(ScopePerFileProvider
);
52 #endif // TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_