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