Index: tools/gn/ninja_action_target_writer.cc |
diff --git a/tools/gn/ninja_action_target_writer.cc b/tools/gn/ninja_action_target_writer.cc |
index 6a632e789e32f7f0f24c69dc9f89c8d75a7f5b6c..6fec07976c41fe09343c70c691d1f4065539abd4 100644 |
--- a/tools/gn/ninja_action_target_writer.cc |
+++ b/tools/gn/ninja_action_target_writer.cc |
@@ -23,8 +23,11 @@ NinjaActionTargetWriter::~NinjaActionTargetWriter() { |
} |
void NinjaActionTargetWriter::Run() { |
- FileTemplate args_template(target_->settings(), |
- target_->action_values().args()); |
+ FileTemplate args_template( |
+ target_->settings(), |
+ target_->action_values().args(), |
+ FileTemplate::OUTPUT_RELATIVE, |
+ target_->settings()->build_settings()->build_dir()); |
std::string custom_rule_name = WriteRuleDefinition(args_template); |
// Collect our deps to pass as "extra hard dependencies" for input deps. This |
@@ -58,10 +61,11 @@ void NinjaActionTargetWriter::Run() { |
// Write a rule that invokes the script once with the outputs as outputs, |
// and the data as inputs. |
out_ << "build"; |
- const Target::FileList& outputs = target_->action_values().outputs(); |
+ const std::vector<std::string>& outputs = |
+ target_->action_values().outputs(); |
for (size_t i = 0; i < outputs.size(); i++) { |
OutputFile output_path( |
- RemovePrefix(outputs[i].value(), |
+ RemovePrefix(outputs[i], |
settings_->build_settings()->build_dir().value())); |
output_files.push_back(output_path); |
out_ << " "; |
@@ -141,7 +145,7 @@ void NinjaActionTargetWriter::WriteArgsSubstitutions( |
template_escape_options.mode = ESCAPE_NINJA_COMMAND; |
args_template.WriteNinjaVariablesForSubstitution( |
- out_, target_->settings(), source, template_escape_options); |
+ out_, source, template_escape_options); |
} |
void NinjaActionTargetWriter::WriteSourceRules( |
@@ -149,7 +153,7 @@ void NinjaActionTargetWriter::WriteSourceRules( |
const std::string& implicit_deps, |
const FileTemplate& args_template, |
std::vector<OutputFile>* output_files) { |
- FileTemplate output_template(GetOutputTemplate()); |
+ FileTemplate output_template = FileTemplate::GetForTargetOutputs(target_); |
const Target::FileList& sources = target_->sources(); |
for (size_t i = 0; i < sources.size(); i++) { |
@@ -208,7 +212,11 @@ void NinjaActionTargetWriter::WriteOutputFilesForBuildLine( |
std::vector<std::string> output_template_result; |
output_template.Apply(source, &output_template_result); |
for (size_t out_i = 0; out_i < output_template_result.size(); out_i++) { |
- OutputFile output_path(output_template_result[out_i]); |
+ // All output files should be in the build directory, so we can rebase |
+ // them just by trimming the prefix. |
+ OutputFile output_path( |
+ RemovePrefix(output_template_result[out_i], |
+ settings_->build_settings()->build_dir().value())); |
output_files->push_back(output_path); |
out_ << " "; |
path_output_.WriteFile(out_, output_path); |
@@ -227,5 +235,6 @@ FileTemplate NinjaActionTargetWriter::GetDepfileTemplate() const { |
RemovePrefix(target_->action_values().depfile().value(), |
settings_->build_settings()->build_dir().value()); |
template_args.push_back(depfile_relative_to_build_dir); |
- return FileTemplate(settings_, template_args); |
+ return FileTemplate(settings_, template_args, FileTemplate::OUTPUT_ABSOLUTE, |
+ SourceDir()); |
} |