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

Unified Diff: tools/gn/function_get_target_outputs.cc

Issue 429423002: Refactor GN source expansions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clang warning 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 side-by-side diff with in-line comments
Download patch
Index: tools/gn/function_get_target_outputs.cc
diff --git a/tools/gn/function_get_target_outputs.cc b/tools/gn/function_get_target_outputs.cc
index aeb057f9b4f6080bc936d2f6da3bbf2d1708876f..d711428d2e5d2c35a99502f1a5ffe405b6f83e65 100644
--- a/tools/gn/function_get_target_outputs.cc
+++ b/tools/gn/function_get_target_outputs.cc
@@ -3,11 +3,11 @@
// found in the LICENSE file.
#include "tools/gn/build_settings.h"
-#include "tools/gn/file_template.h"
#include "tools/gn/functions.h"
#include "tools/gn/ninja_helper.h"
#include "tools/gn/parse_tree.h"
#include "tools/gn/settings.h"
+#include "tools/gn/substitution_writer.h"
#include "tools/gn/target.h"
#include "tools/gn/value.h"
@@ -17,27 +17,24 @@ namespace {
void GetOutputsForTarget(const Settings* settings,
const Target* target,
- std::vector<std::string>* ret) {
+ std::vector<SourceFile>* ret) {
switch (target->output_type()) {
case Target::ACTION: {
- // Actions: return the outputs specified.
- const std::vector<std::string>& outs = target->action_values().outputs();
- ret->reserve(outs.size());
- for (size_t i = 0; i < outs.size(); i++)
- ret->push_back(outs[i]);
+ // Actions just use the output list with no substitution. To keep things
+ // simple, pass an empty "source file" in to use the same code path for
+ // computing substitution outputs.
+ std::vector<SourceFile> sources;
+ sources.push_back(SourceFile());
+ SubstitutionWriter::ApplyListToSources(
+ settings, target->action_values().outputs(), sources, ret);
scottmg 2014/08/05 22:30:32 What will happen if there is a substitution? Maybe
brettw 2014/08/06 18:25:01 The thing that makes the target should prohibit th
break;
}
case Target::COPY_FILES:
- case Target::ACTION_FOREACH: {
- // Copy/action_foreach: return the result of the template in the outputs.
- FileTemplate file_template(settings, target->action_values().outputs(),
- FileTemplate::OUTPUT_ABSOLUTE, SourceDir());
- const std::vector<SourceFile>& sources = target->sources();
- for (size_t i = 0; i < sources.size(); i++)
- file_template.Apply(sources[i], ret);
+ case Target::ACTION_FOREACH:
+ SubstitutionWriter::ApplyListToSources(
+ settings, target->action_values().outputs(), target->sources(), ret);
break;
- }
case Target::EXECUTABLE:
case Target::SHARED_LIBRARY:
@@ -55,11 +52,9 @@ void GetOutputsForTarget(const Settings* settings,
OutputFile output_file = helper.GetTargetOutputFile(target);
// The output file is relative to the build dir.
- std::string absolute_output_file =
- settings->build_settings()->build_dir().value();
- absolute_output_file.append(output_file.value());
-
- ret->push_back(absolute_output_file);
+ ret->push_back(SourceFile(
+ settings->build_settings()->build_dir().value() +
+ output_file.value()));
break;
}
@@ -169,13 +164,13 @@ Value RunGetTargetOutputs(Scope* scope,
return Value();
}
- std::vector<std::string> files;
+ std::vector<SourceFile> files;
GetOutputsForTarget(scope->settings(), target, &files);
Value ret(function, Value::LIST);
ret.list_value().reserve(files.size());
for (size_t i = 0; i < files.size(); i++)
- ret.list_value().push_back(Value(function, files[i]));
+ ret.list_value().push_back(Value(function, files[i].value()));
return ret;
}

Powered by Google App Engine
This is Rietveld 408576698