Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: tools/gn/action_target_generator.cc

Issue 387663003: Improve GN handling of directory templates. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/gn/action_values.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "tools/gn/action_target_generator.h" 5 #include "tools/gn/action_target_generator.h"
6 6
7 #include "tools/gn/build_settings.h" 7 #include "tools/gn/build_settings.h"
8 #include "tools/gn/err.h" 8 #include "tools/gn/err.h"
9 #include "tools/gn/filesystem_utils.h" 9 #include "tools/gn/filesystem_utils.h"
10 #include "tools/gn/parse_tree.h" 10 #include "tools/gn/parse_tree.h"
11 #include "tools/gn/scope.h" 11 #include "tools/gn/scope.h"
12 #include "tools/gn/value.h" 12 #include "tools/gn/value.h"
13 #include "tools/gn/value_extractors.h" 13 #include "tools/gn/value_extractors.h"
14 #include "tools/gn/variables.h" 14 #include "tools/gn/variables.h"
15 15
16 namespace { 16 namespace {
17 17
18 // Returns true if the list of files looks like it might have a {{ }} pattern 18 // Returns true if the list of files looks like it might have a {{ }} pattern
19 // in it. Used for error checking. 19 // in it. Used for error checking.
20 bool FileListHasPattern(const Target::FileList& files) { 20 bool StringListHasPattern(const std::vector<std::string>& files) {
21 for (size_t i = 0; i < files.size(); i++) { 21 for (size_t i = 0; i < files.size(); i++) {
22 if (files[i].value().find("{{") != std::string::npos && 22 if (files[i].find("{{") != std::string::npos &&
23 files[i].value().find("}}") != std::string::npos) 23 files[i].find("}}") != std::string::npos)
24 return true; 24 return true;
25 } 25 }
26 return false; 26 return false;
27 } 27 }
28 28
29 } // namespace 29 } // namespace
30 30
31 ActionTargetGenerator::ActionTargetGenerator( 31 ActionTargetGenerator::ActionTargetGenerator(
32 Target* target, 32 Target* target,
33 Scope* scope, 33 Scope* scope,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 return; 101 return;
102 } 102 }
103 target_->action_values().set_script(script_file); 103 target_->action_values().set_script(script_file);
104 } 104 }
105 105
106 void ActionTargetGenerator::FillScriptArgs() { 106 void ActionTargetGenerator::FillScriptArgs() {
107 const Value* value = scope_->GetValue(variables::kArgs, true); 107 const Value* value = scope_->GetValue(variables::kArgs, true);
108 if (!value) 108 if (!value)
109 return; 109 return;
110 110
111 std::vector<std::string> args; 111 if (!ExtractListOfStringValues(*value, &target_->action_values().args(),
112 if (!ExtractListOfStringValues(*value, &args, err_)) 112 err_))
113 return; 113 return;
114 target_->action_values().swap_in_args(&args);
115 } 114 }
116 115
117 void ActionTargetGenerator::FillDepfile() { 116 void ActionTargetGenerator::FillDepfile() {
118 const Value* value = scope_->GetValue(variables::kDepfile, true); 117 const Value* value = scope_->GetValue(variables::kDepfile, true);
119 if (!value) 118 if (!value)
120 return; 119 return;
121 target_->action_values().set_depfile( 120 target_->action_values().set_depfile(
122 scope_->settings()->build_settings()->build_dir().ResolveRelativeFile( 121 scope_->settings()->build_settings()->build_dir().ResolveRelativeFile(
123 value->string_value())); 122 value->string_value()));
124 } 123 }
125 124
126 void ActionTargetGenerator::CheckOutputs() { 125 void ActionTargetGenerator::CheckOutputs() {
127 const Target::FileList& outputs = target_->action_values().outputs(); 126 const std::vector<std::string>& outputs = target_->action_values().outputs();
128 if (outputs.empty()) { 127 if (outputs.empty()) {
129 *err_ = Err(function_call_, "Action has no outputs.", 128 *err_ = Err(function_call_, "Action has no outputs.",
130 "If you have no outputs, the build system can not tell when your\n" 129 "If you have no outputs, the build system can not tell when your\n"
131 "script needs to be run."); 130 "script needs to be run.");
132 return; 131 return;
133 } 132 }
134 133
135 if (output_type_ == Target::ACTION) { 134 if (output_type_ == Target::ACTION) {
136 // Make sure the outputs for an action have no patterns in them. 135 // Make sure the outputs for an action have no patterns in them.
137 if (FileListHasPattern(outputs)) { 136 if (StringListHasPattern(outputs)) {
138 *err_ = Err(function_call_, "Action has patterns in the output.", 137 *err_ = Err(function_call_, "Action has patterns in the output.",
139 "An action target should have the outputs completely specified. If\n" 138 "An action target should have the outputs completely specified. If\n"
140 "you want to provide a mapping from source to output, use an\n" 139 "you want to provide a mapping from source to output, use an\n"
141 "\"action_foreach\" target."); 140 "\"action_foreach\" target.");
142 return; 141 return;
143 } 142 }
144 } else if (output_type_ == Target::ACTION_FOREACH) { 143 } else if (output_type_ == Target::ACTION_FOREACH) {
145 // A foreach target should always have a pattern in the outputs. 144 // A foreach target should always have a pattern in the outputs.
146 if (!FileListHasPattern(outputs)) { 145 if (!StringListHasPattern(outputs)) {
147 *err_ = Err(function_call_, 146 *err_ = Err(function_call_,
148 "action_foreach should have a pattern in the output.", 147 "action_foreach should have a pattern in the output.",
149 "An action_foreach target should have a source expansion pattern in\n" 148 "An action_foreach target should have a source expansion pattern in\n"
150 "it to map source file to unique output file name. Otherwise, the\n" 149 "it to map source file to unique output file name. Otherwise, the\n"
151 "build system can't determine when your script needs to be run."); 150 "build system can't determine when your script needs to be run.");
152 return; 151 return;
153 } 152 }
154 } 153 }
155 } 154 }
OLDNEW
« no previous file with comments | « no previous file | tools/gn/action_values.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698