| // 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/basictypes.h" |
| #include "base/gtest_prod_util.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "tools/gn/source_dir.h" |
| #include "tools/gn/target.h" |
| |
| class BuildSettings; |
| class Err; |
| class Location; |
| class Scope; |
| class Token; |
| class Value; |
| |
| // Creates Target objects from a Scope (the result of a script execution). |
| class TargetGenerator { |
| public: |
| TargetGenerator(Target* target, |
| Scope* scope, |
| const Token& function_token, |
| const std::vector<Value>& args, |
| const std::string& output_type, |
| Err* err); |
| ~TargetGenerator(); |
| |
| void Run(); |
| |
| // The function token is the token of the function name of the generator for |
| // this target. err() will be set on failure. |
| static void GenerateTarget(Scope* scope, |
| const Token& function_token, |
| const std::vector<Value>& args, |
| const std::string& output_type, |
| Err* err); |
| |
| private: |
| // Sets err_ on failure. |
| Target::OutputType GetOutputType() const; |
| |
| // Reads configs from the given var name, and uses the given setting on the |
| // target to save them |
| void FillGenericConfigs(const char* var_name, |
| void (Target::*setter)(std::vector<const Config*>*)); |
| |
| void FillConfigs(); |
| void FillAllDependentConfigs(); |
| void FillDirectDependentConfigs(); |
| void FillSources(); |
| void FillData(); |
| void FillDependencies(); |
| void FillDestDir(); |
| void FillScript(); |
| void FillScriptArgs(); |
| void FillOutputs(); |
| |
| const BuildSettings* GetBuildSettings() const; |
| |
| Target* target_; |
| Scope* scope_; |
| const Token& function_token_; |
| std::vector<Value> args_; |
| std::string output_type_; |
| Err* err_; |
| |
| // Sources are relative to this. This comes from the input file which doesn't |
| // get freed so we don't acautlly have to make a copy. |
| const SourceDir& input_directory_; |
| |
| FRIEND_TEST_ALL_PREFIXES(TargetGenerator, ResolveInputPath); |
| |
| DISALLOW_COPY_AND_ASSIGN(TargetGenerator); |
| }; |
| |
| #endif // TOOLS_GN_TARGET_GENERATOR_H_ |