Index: trunk/src/tools/gn/functions_target.cc |
=================================================================== |
--- trunk/src/tools/gn/functions_target.cc (revision 214322) |
+++ trunk/src/tools/gn/functions_target.cc (working copy) |
@@ -1,221 +0,0 @@ |
-// 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. |
- |
-#include "tools/gn/functions.h" |
- |
-#include "tools/gn/err.h" |
-#include "tools/gn/parse_tree.h" |
-#include "tools/gn/scope.h" |
-#include "tools/gn/target_generator.h" |
-#include "tools/gn/value.h" |
- |
-namespace { |
- |
-Value ExecuteGenericTarget(const char* target_type, |
- Scope* scope, |
- const FunctionCallNode* function, |
- const std::vector<Value>& args, |
- BlockNode* block, |
- Err* err) { |
- if (!EnsureNotProcessingImport(function, scope, err) || |
- !EnsureNotProcessingBuildConfig(function, scope, err)) |
- return Value(); |
- Scope block_scope(scope); |
- if (!FillTargetBlockScope(scope, function, target_type, block, |
- args, &block_scope, err)) |
- return Value(); |
- |
- block->ExecuteBlockInScope(&block_scope, err); |
- if (err->has_error()) |
- return Value(); |
- |
- TargetGenerator::GenerateTarget(&block_scope, function->function(), args, |
- target_type, err); |
- |
- block_scope.CheckForUnusedVars(err); |
- return Value(); |
-} |
- |
-} // namespace |
- |
-Value ExecuteComponent(Scope* scope, |
- const FunctionCallNode* function, |
- const std::vector<Value>& args, |
- BlockNode* block, |
- Err* err) { |
- // A component is either a shared or static library, depending on the value |
- // of |component_mode|. |
- const Value* component_mode_value = scope->GetValue("component_mode"); |
- |
- static const char helptext[] = |
- "You're declaring a component here but have not defined " |
- "\"component_mode\" to\neither \"shared_library\" or \"static_library\"."; |
- if (!component_mode_value) { |
- *err = Err(function->function(), "No component mode set.", helptext); |
- return Value(); |
- } |
- if (component_mode_value->type() != Value::STRING || |
- (component_mode_value->string_value() != functions::kSharedLibrary && |
- component_mode_value->string_value() != functions::kStaticLibrary)) { |
- *err = Err(function->function(), "Invalid component mode set.", helptext); |
- return Value(); |
- } |
- const std::string& component_mode = component_mode_value->string_value(); |
- |
- if (!EnsureNotProcessingImport(function, scope, err)) |
- return Value(); |
- Scope block_scope(scope); |
- if (!FillTargetBlockScope(scope, function, component_mode.c_str(), block, |
- args, &block_scope, err)) |
- return Value(); |
- |
- block->ExecuteBlockInScope(&block_scope, err); |
- if (err->has_error()) |
- return Value(); |
- |
- TargetGenerator::GenerateTarget(&block_scope, function->function(), args, |
- component_mode, err); |
- return Value(); |
-} |
- |
-Value ExecuteCopy(Scope* scope, |
- const FunctionCallNode* function, |
- const std::vector<Value>& args, |
- Err* err) { |
- if (!EnsureNotProcessingImport(function, scope, err) || |
- !EnsureNotProcessingBuildConfig(function, scope, err)) |
- return Value(); |
- TargetGenerator::GenerateTarget(scope, function->function(), args, |
- functions::kCopy, err); |
- return Value(); |
-} |
- |
-/* |
-custom: Declare a script-generated target. |
- |
- This target type allows you to run a script over a set of sources files and |
- generate a set of output files. |
- |
- The script will be executed with the given arguments with the current |
- directory being that of the current BUILD file. |
- |
- There are two modes. The first mode is the "per-file" mode where you |
- specify a list of sources and the script is run once for each one as a build |
- rule. In this case, each file specified in the |outputs| variable must be |
- unique when applied to each source file (normally you would reference |
- "{{source_name_part}}" from within each one) or the build system will get |
- confused about how to build those files. You should use the |data| variable |
- to list all additional dependencies of your script: these will be added |
- as dependencies for each build step. |
- |
- The second mode is when you just want to run a script once rather than as a |
- general rule over a set of files. In this case you don't list any sources. |
- Dependencies of your script are specified only in the |data| variable and |
- your |outputs| variable should just list all outputs. |
- |
-Variables: |
- |
- args, data, deps, outputs, script*, sources |
- * = required |
- |
- There are some special substrings that will be searched for when processing |
- some variables: |
- |
- "{{source}}" |
- Expanded in |args|, this is the name of the source file relative to the |
- current directory when running the script. This is how you specify |
- the current input file to your script. |
- |
- "{{source_name_part}}" |
- Expanded in |args| and |outputs|, this is just the filename part of the |
- current source file with no directory or extension. This is how you |
- specify a name transoformation to the output. Normally you would |
- write an output as "$target_output_dir/{{source_name_part}}.o". |
- |
- All |outputs| files must be inside the output directory of the build. You |
- would generally use "$target_output_dir" or "$target_gen_dir" to reference |
- the output or generated intermediate file directories, respectively. |
- |
-Examples: |
- |
- custom("general_rule") { |
- script = "do_processing.py" |
- sources = [ "foo.idl" ] |
- data = [ "my_configuration.txt" ] |
- outputs = [ "$target_gen_dir/{{source_name_part}}.h" ] |
- args = [ "{{source}}", |
- "-o", "$relative_target_gen_dir/{{source_name_part}}.h" ] |
- } |
- |
- custom("just_run_this_guy_once") { |
- script = "doprocessing.py" |
- data = [ "my_configuration.txt" ] |
- outputs = [ "$target_gen_dir/insightful_output.txt" ] |
- args = [ "--output_dir", $target_gen_dir ] |
- } |
-*/ |
-Value ExecuteCustom(Scope* scope, |
- const FunctionCallNode* function, |
- const std::vector<Value>& args, |
- BlockNode* block, |
- Err* err) { |
- return ExecuteGenericTarget(functions::kCustom, scope, function, args, |
- block, err); |
-} |
- |
-Value ExecuteExecutable(Scope* scope, |
- const FunctionCallNode* function, |
- const std::vector<Value>& args, |
- BlockNode* block, |
- Err* err) { |
- return ExecuteGenericTarget(functions::kExecutable, scope, function, args, |
- block, err); |
-} |
- |
-Value ExecuteSharedLibrary(Scope* scope, |
- const FunctionCallNode* function, |
- const std::vector<Value>& args, |
- BlockNode* block, |
- Err* err) { |
- return ExecuteGenericTarget(functions::kSharedLibrary, scope, function, args, |
- block, err); |
-} |
- |
-Value ExecuteStaticLibrary(Scope* scope, |
- const FunctionCallNode* function, |
- const std::vector<Value>& args, |
- BlockNode* block, |
- Err* err) { |
- return ExecuteGenericTarget(functions::kStaticLibrary, scope, function, args, |
- block, err); |
-} |
- |
-/* |
-group: Declare a group of targets. |
- |
- This target type allows you to create meta-targets that just collect a set |
- of dependencies into one named target. |
- |
-Variables: |
- |
- deps |
- |
-Example: |
- |
- group("all") { |
- deps = [ |
- "//project:runner", |
- "//project:unit_tests", |
- ] |
- } |
-*/ |
-Value ExecuteGroup(Scope* scope, |
- const FunctionCallNode* function, |
- const std::vector<Value>& args, |
- BlockNode* block, |
- Err* err) { |
- return ExecuteGenericTarget(functions::kGroup, scope, function, args, |
- block, err); |
-} |
- |