| // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef TOOLS_GN_TARGET_GENERATOR_H_ | 
 | #define TOOLS_GN_TARGET_GENERATOR_H_ | 
 |  | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "base/macros.h" | 
 | #include "tools/gn/label_ptr.h" | 
 | #include "tools/gn/unique_vector.h" | 
 |  | 
 | class BuildSettings; | 
 | class Err; | 
 | class FunctionCallNode; | 
 | class Scope; | 
 | class SubstitutionPattern; | 
 | class Value; | 
 |  | 
 | // Fills the variables in a Target object from a Scope (the result of a script | 
 | // execution). Target-type-specific derivations of this class will be used | 
 | // for each different type of function call. This class implements the common | 
 | // behavior. | 
 | class TargetGenerator { | 
 |  public: | 
 |   TargetGenerator(Target* target, | 
 |                   Scope* scope, | 
 |                   const FunctionCallNode* function_call, | 
 |                   Err* err); | 
 |   virtual ~TargetGenerator(); | 
 |  | 
 |   void Run(); | 
 |  | 
 |   // The function call is the parse tree node that invoked the target. | 
 |   // err() will be set on failure. | 
 |   static void GenerateTarget(Scope* scope, | 
 |                              const FunctionCallNode* function_call, | 
 |                              const std::vector<Value>& args, | 
 |                              const std::string& output_type, | 
 |                              Err* err); | 
 |  | 
 |  protected: | 
 |   // Derived classes implement this to do type-specific generation. | 
 |   virtual void DoRun() = 0; | 
 |  | 
 |   const BuildSettings* GetBuildSettings() const; | 
 |  | 
 |   bool FillSources(); | 
 |   bool FillPublic(); | 
 |   bool FillConfigs(); | 
 |   bool FillOutputs(bool allow_substitutions); | 
 |   bool FillCheckIncludes(); | 
 |  | 
 |   // Rrturns true if the given pattern will expand to a file in the output | 
 |   // directory. If not, returns false and sets the error, blaming the given | 
 |   // Value. | 
 |   bool EnsureSubstitutionIsInOutputDir(const SubstitutionPattern& pattern, | 
 |                                        const Value& original_value); | 
 |  | 
 |   Target* target_; | 
 |   Scope* scope_; | 
 |   const FunctionCallNode* function_call_; | 
 |   Err* err_; | 
 |  | 
 |  private: | 
 |   bool FillDependentConfigs();  // Includes all types of dependent configs. | 
 |   bool FillData(); | 
 |   bool FillDependencies();  // Includes data dependencies. | 
 |   bool FillTestonly(); | 
 |   bool FillAssertNoDeps(); | 
 |   bool FillWriteRuntimeDeps(); | 
 |  | 
 |   // Reads configs/deps from the given var name, and uses the given setting on | 
 |   // the target to save them. | 
 |   bool FillGenericConfigs(const char* var_name, | 
 |                           UniqueVector<LabelConfigPair>* dest); | 
 |   bool FillGenericDeps(const char* var_name, LabelTargetVector* dest); | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(TargetGenerator); | 
 | }; | 
 |  | 
 | #endif  // TOOLS_GN_TARGET_GENERATOR_H_ |