1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file.
4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#ifndef TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_
6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#define TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_
7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "base/basictypes.h"
9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "base/memory/scoped_ptr.h"
10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/scope.h"
11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/source_file.h"
12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// ProgrammaticProvider for a scope to provide it with per-file built-in
14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// variable support.
15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass ScopePerFileProvider : public Scope::ProgrammaticProvider {
16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch public:
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // allow_target_vars allows the target-related variables to get resolved.
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // When allow_target_vars is unset, the target-related values will be
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // undefined to GN script.
20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ScopePerFileProvider(Scope* scope, bool allow_target_vars);
21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  virtual ~ScopePerFileProvider();
22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // ProgrammaticProvider implementation.
24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  virtual const Value* GetProgrammaticValue(
25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch      const base::StringPiece& ident) OVERRIDE;
26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch private:
283240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  const Value* GetCurrentToolchain();
29d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  const Value* GetDefaultToolchain();
30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  const Value* GetPythonPath();
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const Value* GetRootBuildDir();
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const Value* GetRootGenDir();
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  const Value* GetRootOutDir();
34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const Value* GetTargetGenDir();
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  const Value* GetTargetOutDir();
36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bool allow_target_vars_;
38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // All values are lazily created.
403240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  scoped_ptr<Value> current_toolchain_;
41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  scoped_ptr<Value> default_toolchain_;
42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  scoped_ptr<Value> python_path_;
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<Value> root_build_dir_;
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  scoped_ptr<Value> root_gen_dir_;
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  scoped_ptr<Value> root_out_dir_;
46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  scoped_ptr<Value> target_gen_dir_;
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  scoped_ptr<Value> target_out_dir_;
48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(ScopePerFileProvider);
50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch};
51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#endif  // TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_
53