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 ScopePerFileProvider(Scope
* scope
);
18 virtual ~ScopePerFileProvider();
20 // ProgrammaticProvider implementation.
21 virtual const Value
* GetProgrammaticValue(
22 const base::StringPiece
& ident
) OVERRIDE
;
25 const Value
* GetCurrentToolchain();
26 const Value
* GetDefaultToolchain();
27 const Value
* GetPythonPath();
28 const Value
* GetRootBuildDir();
29 const Value
* GetRootGenDir();
30 const Value
* GetRootOutDir();
31 const Value
* GetTargetGenDir();
32 const Value
* GetTargetOutDir();
34 static std::string
GetRootOutputDirWithNoLastSlash(const Settings
* settings
);
35 static std::string
GetToolchainOutputDirWithNoLastSlash(
36 const Settings
* settings
);
37 static std::string
GetToolchainGenDirWithNoLastSlash(
38 const Settings
* settings
);
40 std::string
GetFileDirWithNoLastSlash() const;
42 // All values are lazily created.
43 scoped_ptr
<Value
> current_toolchain_
;
44 scoped_ptr
<Value
> default_toolchain_
;
45 scoped_ptr
<Value
> python_path_
;
46 scoped_ptr
<Value
> root_build_dir_
;
47 scoped_ptr
<Value
> root_gen_dir_
;
48 scoped_ptr
<Value
> root_out_dir_
;
49 scoped_ptr
<Value
> target_gen_dir_
;
50 scoped_ptr
<Value
> target_out_dir_
;
52 DISALLOW_COPY_AND_ASSIGN(ScopePerFileProvider
);
55 #endif // TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_