do not use tool prefix for phony rule
This is to fix
https://logs.chromium.org/logs/chromium/buildbucket/cr-buildbucket/8737840748939434977/+/u/compile__with_patch_/stdout
Bug: 42440099
Change-Id: Iddd5d446e8e13d0e8e24e96143ae2cf03e22da4b
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/17700
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: David Turner <digit@google.com>
Commit-Queue: Takuto Ikuta <tikuta@google.com>
diff --git a/src/gn/ninja_create_bundle_target_writer.cc b/src/gn/ninja_create_bundle_target_writer.cc
index 87f0ab7..09299c7 100644
--- a/src/gn/ninja_create_bundle_target_writer.cc
+++ b/src/gn/ninja_create_bundle_target_writer.cc
@@ -395,12 +395,13 @@
GetBuildDirForTargetAsOutputFile(target_, BuildDirType::OBJ);
stamp_or_phony.value().append(target_->label().name());
stamp_or_phony.value().append(".postprocessing.inputdeps.stamp");
- tool = GeneralTool::kGeneralToolStamp;
+ tool = GetNinjaRulePrefixForToolchain(settings_) +
+ GeneralTool::kGeneralToolStamp;
}
out_ << "build ";
WriteOutput(stamp_or_phony);
- out_ << ": " << GetNinjaRulePrefixForToolchain(settings_) << tool;
+ out_ << ": " << tool;
for (const SourceFile& source : post_processing_input_files) {
out_ << " ";
diff --git a/src/gn/ninja_create_bundle_target_writer_unittest.cc b/src/gn/ninja_create_bundle_target_writer_unittest.cc
index 4397643..8540671 100644
--- a/src/gn/ninja_create_bundle_target_writer_unittest.cc
+++ b/src/gn/ninja_create_bundle_target_writer_unittest.cc
@@ -493,3 +493,90 @@
std::string out_str = out.str();
EXPECT_EQ(expected, out_str);
}
+
+TEST(NinjaCreateBundleTargetWriter, PostProcessingNoStampFilesCustomToolchain) {
+ Err err;
+ TestWithScope setup;
+ setup.build_settings()->set_no_stamp_files(true);
+
+ Label other_toolchain_label(SourceDir("//other/"), "toolchain");
+ setup.settings()->set_toolchain_label(other_toolchain_label);
+
+ std::unique_ptr<Target> action = NewAction(setup);
+ ASSERT_TRUE(action->OnResolved(&err)) << err.message();
+
+ Target executable(setup.settings(), Label(SourceDir("//baz/"), "quz"));
+ executable.set_output_type(Target::EXECUTABLE);
+ executable.sources().push_back(SourceFile("//baz/quz.c"));
+ executable.SetToolchain(setup.toolchain());
+ executable.visibility().SetPublic();
+ ASSERT_TRUE(executable.OnResolved(&err));
+
+ Target bundle_data(setup.settings(), Label(SourceDir("//foo/"), "data"));
+ bundle_data.set_output_type(Target::BUNDLE_DATA);
+ bundle_data.sources().push_back(SourceFile("//foo/input1.txt"));
+ bundle_data.sources().push_back(SourceFile("//foo/input2.txt"));
+ bundle_data.action_values().outputs() = SubstitutionList::MakeForTest(
+ "{{bundle_resources_dir}}/{{source_file_part}}");
+ bundle_data.SetToolchain(setup.toolchain());
+ bundle_data.visibility().SetPublic();
+ ASSERT_TRUE(bundle_data.OnResolved(&err));
+
+ Target create_bundle(
+ setup.settings(),
+ Label(SourceDir("//baz/"), "bar", setup.toolchain()->label().dir(),
+ setup.toolchain()->label().name()));
+ SetupBundleDataDir(&create_bundle.bundle_data(), "//out/Debug");
+ create_bundle.set_output_type(Target::CREATE_BUNDLE);
+ create_bundle.bundle_data().set_post_processing_script(
+ SourceFile("//build/codesign.py"));
+ create_bundle.bundle_data().post_processing_sources().push_back(
+ SourceFile("//out/Debug/quz"));
+ create_bundle.bundle_data().post_processing_outputs() =
+ SubstitutionList::MakeForTest(
+ "//out/Debug/bar.bundle/Contents/quz",
+ "//out/Debug/bar.bundle/_CodeSignature/CodeResources");
+ create_bundle.bundle_data().post_processing_args() =
+ SubstitutionList::MakeForTest("-b=quz", "bar.bundle");
+ create_bundle.public_deps().push_back(LabelTargetPair(&executable));
+ create_bundle.private_deps().push_back(LabelTargetPair(&bundle_data));
+ create_bundle.private_deps().push_back(LabelTargetPair(action.get()));
+ create_bundle.SetToolchain(setup.toolchain());
+ ASSERT_TRUE(create_bundle.OnResolved(&err));
+
+ std::ostringstream out;
+ NinjaCreateBundleTargetWriter writer(&create_bundle, out);
+ writer.Run();
+
+ const char expected[] =
+ "build toolchain/phony/baz/bar.inputdeps: phony ./quz "
+ "toolchain/phony/foo/bar "
+ "toolchain/phony/foo/data\n"
+ "rule __baz_bar___toolchain_default__post_processing_rule\n"
+ " command = ../../build/codesign.py -b=quz bar.bundle\n"
+ " description = POST PROCESSING //baz:bar(//toolchain:default)\n"
+ " restat = 1\n"
+ "\n"
+ "build bar.bundle/Contents/Resources/input1.txt: "
+ "toolchain_copy_bundle_data "
+ "../../foo/input1.txt || toolchain/phony/baz/bar.inputdeps\n"
+ "build bar.bundle/Contents/Resources/input2.txt: "
+ "toolchain_copy_bundle_data "
+ "../../foo/input2.txt || toolchain/phony/baz/bar.inputdeps\n"
+ "build toolchain/phony/baz/bar.postprocessing.inputdeps: phony "
+ "../../build/codesign.py "
+ "quz "
+ "bar.bundle/Contents/Resources/input1.txt "
+ "bar.bundle/Contents/Resources/input2.txt || "
+ "toolchain/phony/baz/bar.inputdeps\n"
+ "build bar.bundle/Contents/quz bar.bundle/_CodeSignature/CodeResources: "
+ "__baz_bar___toolchain_default__post_processing_rule "
+ "| toolchain/phony/baz/bar.postprocessing.inputdeps\n"
+ "build toolchain/phony/baz/bar: phony "
+ "bar.bundle/Contents/quz "
+ "bar.bundle/_CodeSignature/CodeResources || "
+ "toolchain/phony/baz/bar.inputdeps\n"
+ "build bar.bundle: phony toolchain/phony/baz/bar\n";
+ std::string out_str = out.str();
+ EXPECT_EQ(expected, out_str) << expected << "\n" << out_str;
+}