Add source placeholder values

This resolves source_file_part and source_name_part in all the contexts
the placeholders are supposed to resolve.

Bug: 273
Change-Id: Ia60724a0785a5bbc9df94a68c874a4ab4f5bb98f
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/13200
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Roland McGrath <mcgrathr@google.com>
diff --git a/src/gn/ninja_binary_target_writer.cc b/src/gn/ninja_binary_target_writer.cc
index 48f485a..e6f0cda 100644
--- a/src/gn/ninja_binary_target_writer.cc
+++ b/src/gn/ninja_binary_target_writer.cc
@@ -275,7 +275,8 @@
     const std::vector<OutputFile>& extra_deps,
     const std::vector<OutputFile>& order_only_deps,
     const char* tool_name,
-    const std::vector<OutputFile>& outputs) {
+    const std::vector<OutputFile>& outputs,
+    bool can_write_source_info) {
   out_ << "build";
   path_output_.WriteFiles(out_, outputs);
 
@@ -292,6 +293,16 @@
     path_output_.WriteFiles(out_, order_only_deps);
   }
   out_ << std::endl;
+
+  if (!sources.empty() && can_write_source_info) {
+    out_ << "  "
+         << "source_file_part = " << sources[0].GetName();
+    out_ << std::endl;
+    out_ << "  "
+         << "source_name_part = "
+         << FindFilenameNoExtension(&sources[0].value());
+    out_ << std::endl;
+  }
 }
 
 void NinjaBinaryTargetWriter::WriteCustomLinkerFlags(
diff --git a/src/gn/ninja_binary_target_writer.h b/src/gn/ninja_binary_target_writer.h
index e53e28e..e87bc9c 100644
--- a/src/gn/ninja_binary_target_writer.h
+++ b/src/gn/ninja_binary_target_writer.h
@@ -63,7 +63,8 @@
                               const std::vector<OutputFile>& extra_deps,
                               const std::vector<OutputFile>& order_only_deps,
                               const char* tool_name,
-                              const std::vector<OutputFile>& outputs);
+                              const std::vector<OutputFile>& outputs,
+                              bool can_write_source_info = true);
 
   void WriteLinkerFlags(std::ostream& out,
                         const Tool* tool,
diff --git a/src/gn/ninja_binary_target_writer_unittest.cc b/src/gn/ninja_binary_target_writer_unittest.cc
index 970aa82..5fd066b 100644
--- a/src/gn/ninja_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_binary_target_writer_unittest.cc
@@ -42,7 +42,11 @@
       "target_output_name = bar\n"
       "\n"
       "build obj/foo/bar.input1.o: cxx ../../foo/input1.cc\n"
+      "  source_file_part = input1.cc\n"
+      "  source_name_part = input1\n"
       "build obj/foo/bar.input2.o: cxx ../../foo/input2.cc\n"
+      "  source_file_part = input2.cc\n"
+      "  source_name_part = input2\n"
       "\n"
       "build obj/foo/bar.stamp: stamp obj/foo/bar.input1.o "
       "obj/foo/bar.input2.o ../../foo/input3.o ../../foo/input4.obj\n";
@@ -137,6 +141,8 @@
         "\n"
         "build obj/foo/bar.source1.o: cxx ../../foo/source1.cc | "
         "../../foo/input1 ../../foo/input2\n"
+        "  source_file_part = source1.cc\n"
+        "  source_name_part = source1\n"
         "\n"
         "build obj/foo/bar.stamp: stamp obj/foo/bar.source1.o\n";
     std::string out_str = out.str();
@@ -172,8 +178,12 @@
         "../../foo/input1 ../../foo/input2\n"
         "build obj/foo/bar.source1.o: cxx ../../foo/source1.cc | "
         "obj/foo/bar.inputs.stamp\n"
+        "  source_file_part = source1.cc\n"
+        "  source_name_part = source1\n"
         "build obj/foo/bar.source2.o: cxx ../../foo/source2.cc | "
         "obj/foo/bar.inputs.stamp\n"
+        "  source_file_part = source2.cc\n"
+        "  source_name_part = source2\n"
         "\n"
         "build obj/foo/bar.stamp: stamp obj/foo/bar.source1.o "
         "obj/foo/bar.source2.o\n";
diff --git a/src/gn/ninja_c_binary_target_writer.cc b/src/gn/ninja_c_binary_target_writer.cc
index 438e185..213505e 100644
--- a/src/gn/ninja_c_binary_target_writer.cc
+++ b/src/gn/ninja_c_binary_target_writer.cc
@@ -681,14 +681,14 @@
 
     WriteCompilerBuildLine(target_->sources(), input_deps,
                            swift_order_only_deps.vector(), tool->name(),
-                           {swiftmodule_output_file});
+                           {swiftmodule_output_file}, false);
 
     if (!additional_outputs.empty()) {
       out_ << std::endl;
       WriteCompilerBuildLine(
           {swiftmodule_output_file.AsSourceFile(settings_->build_settings())},
           input_deps, swift_order_only_deps.vector(),
-          GeneralTool::kGeneralToolStamp, additional_outputs);
+          GeneralTool::kGeneralToolStamp, additional_outputs, false);
     }
   }
 
diff --git a/src/gn/ninja_c_binary_target_writer_unittest.cc b/src/gn/ninja_c_binary_target_writer_unittest.cc
index e1bdbcc..630ba28 100644
--- a/src/gn/ninja_c_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_c_binary_target_writer_unittest.cc
@@ -53,7 +53,11 @@
         "target_output_name = bar\n"
         "\n"
         "build obj/foo/bar.input1.o: cxx ../../foo/input1.cc\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "build obj/foo/bar.input2.o: cxx ../../foo/input2.cc\n"
+        "  source_file_part = input2.cc\n"
+        "  source_name_part = input2\n"
         "\n"
         "build obj/foo/bar.stamp: stamp obj/foo/bar.input1.o "
         "obj/foo/bar.input2.o ../../foo/input3.o ../../foo/input4.obj\n";
@@ -204,6 +208,8 @@
       "target_output_name = libbar\n"
       "\n"
       "build obj/foo/libbar.input1.o: cxx ../../foo/input1.cc\n"
+      "  source_file_part = input1.cc\n"
+      "  source_name_part = input1\n"
       "\n"
       "build obj/foo/libbar.a: alink obj/foo/libbar.input1.o\n"
       "  arflags = --asdf\n"
@@ -250,6 +256,8 @@
         "target_output_name = libbar\n"
         "\n"
         "build obj/foo/libbar.input1.o: cxx ../../foo/input1.cc\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "\n"
         "build obj/foo/libbar.a: alink obj/foo/libbar.input1.o "
         "obj/foo/libbaz.input2.o || obj/foo/libbaz.a\n"
@@ -279,6 +287,8 @@
         "target_output_name = libbar\n"
         "\n"
         "build obj/foo/libbar.input1.o: cxx ../../foo/input1.cc\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "\n"
         "build obj/foo/libbar.a: alink obj/foo/libbar.input1.o "
         "|| obj/foo/libbaz.a\n"
@@ -330,8 +340,12 @@
       "\n"
       "build obj/foo/libshlib.input1.o: cxx ../../foo/input1.cc"
       " || obj/foo/action.stamp\n"
+      "  source_file_part = input1.cc\n"
+      "  source_name_part = input1\n"
       "build obj/foo/libshlib.input2.o: cxx ../../foo/input2.cc"
       " || obj/foo/action.stamp\n"
+      "  source_file_part = input2.cc\n"
+      "  source_name_part = input2\n"
       "\n"
       "build ./libshlib.so.6: solink obj/foo/libshlib.input1.o "
       // The order-only dependency here is stricly unnecessary since the
@@ -393,6 +407,8 @@
       "\n"
       "build obj/out/Debug/gen_obj.generated.o: cxx generated.cc"
       " || obj/foo/generate.stamp\n"
+      "  source_file_part = generated.cc\n"
+      "  source_name_part = generated\n"
       "\n"
       "build obj/foo/gen_obj.stamp: stamp obj/out/Debug/gen_obj.generated.o"
       // The order-only dependency here is strictly unnecessary since the
@@ -467,6 +483,8 @@
       "target_output_name = final_target\n"
       "\n"
       "build obj/foo/final_target.main.o: cxx ../../foo/main.cc\n"
+      "  source_file_part = main.cc\n"
+      "  source_name_part = main\n"
       "\n"
       "build ./final_target: link obj/foo/final_target.main.o"
       " ./libgen_lib.so\n"
@@ -613,7 +631,11 @@
       "target_output_name = shlib\n"
       "\n"
       "build obj/foo/shlib.input1.o: cxx ../../foo/input1.cc\n"
+      "  source_file_part = input1.cc\n"
+      "  source_name_part = input1\n"
       "build obj/foo/shlib.input2.o: cxx ../../foo/input2.cc\n"
+      "  source_file_part = input2.cc\n"
+      "  source_name_part = input2\n"
       "\n"
       "build ./shlib: solink obj/foo/shlib.input1.o "
       "obj/foo/shlib.input2.o\n"
@@ -667,6 +689,8 @@
       "target_output_name = inter\n"
       "\n"
       "build obj/foo/inter.inter.o: cxx ../../foo/inter.cc\n"
+      "  source_file_part = inter.cc\n"
+      "  source_name_part = inter\n"
       "\n"
       "build obj/foo/inter.stamp: stamp obj/foo/inter.inter.o || "
       "./data_target\n";
@@ -700,6 +724,8 @@
       "target_output_name = exe\n"
       "\n"
       "build obj/foo/exe.final.o: cxx ../../foo/final.cc\n"
+      "  source_file_part = final.cc\n"
+      "  source_name_part = final\n"
       "\n"
       "build ./exe: link obj/foo/exe.final.o obj/foo/inter.inter.o || "
       "obj/foo/inter.stamp\n"
@@ -739,6 +765,8 @@
       "target_output_name = libbar\n"
       "\n"
       "build obj/foo/libbar.sources.o: cxx ../../foo/sources.cc\n"
+      "  source_file_part = sources.cc\n"
+      "  source_name_part = sources\n"
       "\n"
       "build ./libbar.so: solink obj/foo/libbar.sources.o | ../../foo/bar.def\n"
       "  ldflags = /DEF:../../foo/bar.def\n"
@@ -776,6 +804,8 @@
       "target_output_name = libbar\n"
       "\n"
       "build obj/foo/libbar.sources.o: cxx ../../foo/sources.cc\n"
+      "  source_file_part = sources.cc\n"
+      "  source_name_part = sources\n"
       "\n"
       "build ./libbar.so: solink_module obj/foo/libbar.sources.o\n"
       "  ldflags =\n"
@@ -811,6 +841,8 @@
       "target_output_name = exe\n"
       "\n"
       "build obj/foo/exe.final.o: cxx ../../foo/final.cc\n"
+      "  source_file_part = final.cc\n"
+      "  source_name_part = final\n"
       "\n"
       "build ./exe: link obj/foo/exe.final.o || ./libbar.so\n"
       "  ldflags =\n"
@@ -888,8 +920,12 @@
         "\n"
         "build withpch/obj/foo/no_pch_target.input1.o: "
         "withpch_cxx ../../foo/input1.cc\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "build withpch/obj/foo/no_pch_target.input2.o: "
         "withpch_cc ../../foo/input2.c\n"
+        "  source_file_part = input2.c\n"
+        "  source_name_part = input2\n"
         "\n"
         "build withpch/obj/foo/no_pch_target.stamp: "
         "withpch_stamp withpch/obj/foo/no_pch_target.input1.o "
@@ -930,20 +966,28 @@
         // Compile the precompiled source files with /Yc.
         "build withpch/obj/build/pch_target.precompile.c.o: "
         "withpch_cc ../../build/precompile.cc\n"
+        "  source_file_part = precompile.cc\n"
+        "  source_name_part = precompile\n"
         "  cflags_c = ${cflags_c} /Ycbuild/precompile.h\n"
         "\n"
         "build withpch/obj/build/pch_target.precompile.cc.o: "
         "withpch_cxx ../../build/precompile.cc\n"
+        "  source_file_part = precompile.cc\n"
+        "  source_name_part = precompile\n"
         "  cflags_cc = ${cflags_cc} /Ycbuild/precompile.h\n"
         "\n"
         "build withpch/obj/foo/pch_target.input1.o: "
         "withpch_cxx ../../foo/input1.cc | "
         // Explicit dependency on the PCH build step.
         "withpch/obj/build/pch_target.precompile.cc.o\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "build withpch/obj/foo/pch_target.input2.o: "
         "withpch_cc ../../foo/input2.c | "
         // Explicit dependency on the PCH build step.
         "withpch/obj/build/pch_target.precompile.c.o\n"
+        "  source_file_part = input2.c\n"
+        "  source_name_part = input2\n"
         "\n"
         "build withpch/obj/foo/pch_target.stamp: withpch_stamp "
         "withpch/obj/foo/pch_target.input1.o "
@@ -1022,8 +1066,12 @@
         "\n"
         "build withpch/obj/foo/no_pch_target.input1.o: "
         "withpch_cxx ../../foo/input1.cc\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "build withpch/obj/foo/no_pch_target.input2.o: "
         "withpch_cc ../../foo/input2.c\n"
+        "  source_file_part = input2.c\n"
+        "  source_name_part = input2\n"
         "\n"
         "build withpch/obj/foo/no_pch_target.stamp: "
         "withpch_stamp withpch/obj/foo/no_pch_target.input1.o "
@@ -1062,20 +1110,28 @@
         // Compile the precompiled sources with -x <lang>.
         "build withpch/obj/build/pch_target.precompile.h-c.gch: "
         "withpch_cc ../../build/precompile.h\n"
+        "  source_file_part = precompile.h\n"
+        "  source_name_part = precompile\n"
         "  cflags_c = -std=c99 -x c-header\n"
         "\n"
         "build withpch/obj/build/pch_target.precompile.h-cc.gch: "
         "withpch_cxx ../../build/precompile.h\n"
+        "  source_file_part = precompile.h\n"
+        "  source_name_part = precompile\n"
         "  cflags_cc = -x c++-header\n"
         "\n"
         "build withpch/obj/foo/pch_target.input1.o: "
         "withpch_cxx ../../foo/input1.cc | "
         // Explicit dependency on the PCH build step.
         "withpch/obj/build/pch_target.precompile.h-cc.gch\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "build withpch/obj/foo/pch_target.input2.o: "
         "withpch_cc ../../foo/input2.c | "
         // Explicit dependency on the PCH build step.
         "withpch/obj/build/pch_target.precompile.h-c.gch\n"
+        "  source_file_part = input2.c\n"
+        "  source_name_part = input2\n"
         "\n"
         "build withpch/obj/foo/pch_target.stamp: "
         "withpch_stamp withpch/obj/foo/pch_target.input1.o "
@@ -1140,8 +1196,12 @@
         "\n"
         "build obj/foo/bar.input1.o: cxx ../../foo/input1.cc"
         " | ../../foo/input.data\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "build obj/foo/bar.input2.o: cxx ../../foo/input2.cc"
         " | ../../foo/input.data\n"
+        "  source_file_part = input2.cc\n"
+        "  source_name_part = input2\n"
         "\n"
         "build obj/foo/bar.stamp: stamp obj/foo/bar.input1.o "
         "obj/foo/bar.input2.o\n";
@@ -1211,8 +1271,12 @@
         " ../../foo/input1.data ../../foo/input2.data\n"
         "build obj/foo/bar.input1.o: cxx ../../foo/input1.cc"
         " | obj/foo/bar.inputs.stamp\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "build obj/foo/bar.input2.o: cxx ../../foo/input2.cc"
         " | obj/foo/bar.inputs.stamp\n"
+        "  source_file_part = input2.cc\n"
+        "  source_name_part = input2\n"
         "\n"
         "build obj/foo/bar.stamp: stamp obj/foo/bar.input1.o "
         "obj/foo/bar.input2.o\n";
@@ -1261,8 +1325,12 @@
         " ../../foo/input1.data ../../foo/input2.data ../../foo/input3.data\n"
         "build obj/foo/bar.input1.o: cxx ../../foo/input1.cc"
         " | obj/foo/bar.inputs.stamp\n"
+        "  source_file_part = input1.cc\n"
+        "  source_name_part = input1\n"
         "build obj/foo/bar.input2.o: cxx ../../foo/input2.cc"
         " | obj/foo/bar.inputs.stamp\n"
+        "  source_file_part = input2.cc\n"
+        "  source_name_part = input2\n"
         "\n"
         "build obj/foo/bar.stamp: stamp obj/foo/bar.input1.o "
         "obj/foo/bar.input2.o\n";
@@ -1311,6 +1379,8 @@
         "target_output_name = bar\n"
         "\n"
         "build obj/bar/bar.bar.o: cxx ../../bar/bar.cc\n"
+        "  source_file_part = bar.cc\n"
+        "  source_name_part = bar\n"
         "\n"
         "build ./bar: link obj/bar/bar.bar.o obj/foo/libfoo.a\n"
         "  ldflags =\n"
@@ -1423,6 +1493,8 @@
         "target_output_name = bar\n"
         "\n"
         "build obj/bar/bar.bar.o: cxx ../../bar/bar.cc\n"
+        "  source_file_part = bar.cc\n"
+        "  source_name_part = bar\n"
         "\n"
         "build ./bar: link obj/bar/bar.bar.o obj/foo/libfoo.a | "
         "obj/baz/lib.rlib obj/quux/lib4.rlib obj/qux/lib2.rlib\n"
@@ -1486,6 +1558,8 @@
         "target_output_name = bar\n"
         "\n"
         "build obj/bar/bar.bar.o: cxx ../../bar/bar.cc\n"
+        "  source_file_part = bar.cc\n"
+        "  source_name_part = bar\n"
         "\n"
         "build ./bar: link obj/bar/bar.bar.o obj/foo/libfoo.a\n"
         "  ldflags =\n"
@@ -1589,6 +1663,8 @@
       "target_output_name = binary\n"
       "\n"
       "build obj/exe/binary.main.o: cxx ../../exe/main.cc\n"
+      "  source_file_part = main.cc\n"
+      "  source_name_part = main\n"
       "\n"
       "build ./binary: link obj/exe/binary.main.o obj/sh/libmylib.so | "
       "obj/near/libnear.rlib\n"
@@ -1635,7 +1711,11 @@
       "target_output_name = libbar\n"
       "\n"
       "build obj/foo/libbar.bar.o: cxx ../../foo/bar.cc | obj/foo/libbar.bar.pcm\n"
+      "  source_file_part = bar.cc\n"
+      "  source_name_part = bar\n"
       "build obj/foo/libbar.bar.pcm: cxx_module ../../foo/bar.modulemap\n"
+      "  source_file_part = bar.modulemap\n"
+      "  source_name_part = bar\n"
       "\n"
       "build obj/foo/libbar.a: alink obj/foo/libbar.bar.o\n"
       "  arflags =\n"
@@ -1894,7 +1974,11 @@
 target_output_name = liba
 
 build obj/blah/liba.a.pcm: cxx_module ../../blah/a.modulemap
+  source_file_part = a.modulemap
+  source_name_part = a
 build obj/blah/liba.a.o: cxx ../../blah/a.cc | obj/blah/liba.a.pcm
+  source_file_part = a.cc
+  source_name_part = a
 
 build obj/blah/liba.a: alink obj/blah/liba.a.o
   arflags =
@@ -1935,7 +2019,11 @@
 target_output_name = libb
 
 build obj/stuff/libb.b.pcm: cxx_module ../../stuff/b.modulemap
+  source_file_part = b.modulemap
+  source_name_part = b
 build obj/stuff/libb.b.o: cxx ../../stuff/b.cc | obj/stuff/libb.b.pcm
+  source_file_part = b.cc
+  source_name_part = b
 
 build obj/stuff/libb.a: alink obj/stuff/libb.b.o
   arflags =
@@ -1975,6 +2063,8 @@
 target_output_name = libc
 
 build obj/stuff/libc.c.pcm: cxx_module ../../stuff/c.modulemap | obj/blah/liba.a.pcm
+  source_file_part = c.modulemap
+  source_name_part = c
 
 build obj/things/libc.a: alink || obj/blah/liba.a
   arflags =
@@ -2014,7 +2104,11 @@
 target_output_name = c
 
 build obj/zap/c.x.o: cxx ../../zap/x.cc | obj/blah/liba.a.pcm obj/stuff/libb.b.pcm
+  source_file_part = x.cc
+  source_name_part = x
 build obj/zap/c.y.o: cxx ../../zap/y.cc | obj/blah/liba.a.pcm obj/stuff/libb.b.pcm
+  source_file_part = y.cc
+  source_name_part = y
 
 build withmodules/c: link obj/zap/c.x.o obj/zap/c.y.o obj/blah/liba.a obj/stuff/libb.a
   ldflags =
@@ -2067,6 +2161,8 @@
 target_output_name = main
 
 build obj/launchpad/main.main.o: cxx ../../launchpad/main.cc
+  source_file_part = main.cc
+  source_name_part = main
 
 build ./main: link obj/launchpad/main.main.o | ./Space$ Cadet.so.TOC
   ldflags =
diff --git a/src/gn/ninja_rust_binary_target_writer_unittest.cc b/src/gn/ninja_rust_binary_target_writer_unittest.cc
index 29f9756..cc77bfc 100644
--- a/src/gn/ninja_rust_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_rust_binary_target_writer_unittest.cc
@@ -64,6 +64,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/input3.rs "
         "../../foo/main.rs\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags = -fsanitize=address\n"
@@ -115,6 +117,8 @@
         "\n"
         "build obj/baz/libprivatelib.rlib: rust_rlib ../../baz/lib.rs | "
         "../../baz/privatelib.rs ../../baz/lib.rs\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -154,6 +158,8 @@
         "\n"
         "build obj/far/libfarlib.rlib: rust_rlib ../../far/lib.rs | "
         "../../far/farlib.rs ../../far/lib.rs\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -193,6 +199,8 @@
         "\n"
         "build obj/bar/libpubliclib.rlib: rust_rlib ../../bar/lib.rs | "
         "../../bar/publiclib.rs ../../bar/lib.rs obj/far/libfarlib.rlib\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs = --extern farcrate=obj/far/libfarlib.rlib\n"
         "  rustdeps = -Ldependency=obj/far\n"
         "  ldflags =\n"
@@ -246,6 +254,8 @@
         "\n"
         "build ./main_crate: rust_bin ../../main/main.rs | "
         "../../main/source.rs ../../main/main.rs obj/foo/libdirect.rlib\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern direct=obj/foo/libdirect.rlib "
         "--extern publiccrate=obj/bar/libpubliclib.rlib "
         "--extern farcrate=obj/far/libfarlib.rlib\n"
@@ -292,6 +302,8 @@
         "\n"
         "build obj/faz/libprivate_inside.rlib: rust_rlib ../../faz/lib.rs | "
         "../../faz/private_inside.rs ../../faz/lib.rs\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -330,6 +342,8 @@
         "\n"
         "build obj/baz/libinside.rlib: rust_rlib ../../baz/lib.rs | "
         "../../baz/inside.rs ../../baz/lib.rs\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -372,6 +386,8 @@
         "build obj/bar/libmylib.so: rust_dylib ../../bar/lib.rs | "
         "../../bar/mylib.rs ../../bar/lib.rs "
         "obj/baz/libinside.rlib obj/faz/libprivate_inside.rlib\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs = --extern inside=obj/baz/libinside.rlib "
         "--extern private_inside=obj/faz/libprivate_inside.rlib\n"
         "  rustdeps = -Ldependency=obj/baz -Ldependency=obj/faz\n"
@@ -426,6 +442,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/foo/libdirect.so\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern direct=obj/foo/libdirect.so "
         "--extern mylib=obj/bar/libmylib.so "
         "--extern inside=obj/baz/libinside.rlib\n"
@@ -473,6 +491,8 @@
         "\n"
         "build obj/bar/libmymacro.so: rust_macro ../../bar/lib.rs | "
         "../../bar/mylib.rs ../../bar/lib.rs\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -520,6 +540,8 @@
         "build obj/bar/libmylib.rlib: rust_rlib ../../bar/lib.rs | "
         "../../bar/mylib.rs ../../bar/lib.rs obj/bar/libmymacro.so || "
         "obj/baz/group.stamp\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs = --extern mymacro=obj/bar/libmymacro.so\n"
         "  rustdeps = -Ldependency=obj/bar\n"
         "  ldflags =\n"
@@ -560,6 +582,8 @@
         "build ./foo_bar: rust_bin ../../foo/main.rs | "
         "../../foo/source.rs ../../foo/main.rs obj/bar/libmylib.rlib || "
         "obj/baz/group.stamp\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern mylib=obj/bar/libmylib.rlib "
         "--extern mymacro=obj/bar/libmymacro.so\n"
         "  rustdeps = -Ldependency=obj/bar\n"
@@ -648,6 +672,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/bar/libdirect.rlib obj/baz/libmylib.rlib\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern direct_renamed=obj/bar/libdirect.rlib "
         "--extern mylib=obj/baz/libmylib.rlib "
         "--extern transitive_renamed=obj/faz/libtransitive.rlib\n"
@@ -750,6 +776,8 @@
         "obj/bar/libmylib.rlib "
         "obj/foo/libstatic.a ./libshared.so ./libshared_with_toc.so.TOC "
         "|| obj/baz/sourceset.stamp\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern mylib=obj/bar/libmylib.rlib\n"
         "  rustdeps = -Ldependency=obj/bar "
         "-Lnative=obj/baz -Lnative=obj/foo -Lnative=. "
@@ -792,6 +820,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/foo/libstatic.a\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs =\n"
         "  rustdeps = -Lnative=obj/foo -Clink-arg=-Bdynamic "
         "-Clink-arg=obj/foo/libstatic.a\n"
@@ -832,6 +862,8 @@
         "build obj/baz/libbaz.a: rust_staticlib ../../baz/lib.rs | "
         "../../baz/lib.rs "
         "obj/foo/libstatic.a\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs =\n"
         "  rustdeps = -Lnative=obj/foo -Clink-arg=-Bdynamic "
         "-Clink-arg=obj/foo/libstatic.a\n"
@@ -878,6 +910,8 @@
         "\n"
         "build ./foo_bar.exe: rust_bin ../../foo/main.rs | ../../foo/input3.rs "
         "../../foo/main.rs\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -924,6 +958,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/input.rs "
         "../../foo/main.rs\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs =\n"
         "  rustdeps = -Lnative=../../baz -lquux\n"
         "  ldflags =\n"
@@ -1004,6 +1040,8 @@
         "../../bar/mylib.rs ../../bar/lib.rs "
         "obj/baz/public/libmymacropublicdep.rlib "
         "obj/baz/private/libmymacroprivatedep.rlib\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs = "
         "--extern publicdep=obj/baz/public/libmymacropublicdep.rlib "
         "--extern privatedep=obj/baz/private/libmymacroprivatedep.rlib\n"
@@ -1046,6 +1084,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/bar/libmymacro.so\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern mymacro=obj/bar/libmymacro.so\n"
         "  rustdeps = -Ldependency=obj/bar\n"
         "  ldflags =\n"
@@ -1089,6 +1129,8 @@
         "\n"
         "build obj/bar/libmylib.rlib: rust_rlib ../../bar/lib.rs | "
         "../../bar/mylib.rs ../../bar/lib.rs\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -1135,6 +1177,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/bar/libmylib.rlib || obj/baz/group.stamp\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern mylib=obj/bar/libmylib.rlib\n"
         "  rustdeps = -Ldependency=obj/bar\n"
         "  ldflags =\n"
@@ -1186,6 +1230,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs ../../foo/lib1.rlib\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern lib1=../../foo/lib1.rlib --extern "
         "lib2=lib2.rlib\n"
         "  rustdeps =\n"
@@ -1235,6 +1281,8 @@
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs ../../foo/config.json ../../foo/template.h "
         "|| obj/foo/bar.inputs.stamp\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -1276,6 +1324,8 @@
         "\n"
         "build obj/bar/libmylib.so: rust_cdylib ../../bar/lib.rs | "
         "../../bar/lib.rs\n"
+        "  source_file_part = lib.rs\n"
+        "  source_name_part = lib\n"
         "  externs =\n"
         "  rustdeps =\n"
         "  ldflags =\n"
@@ -1314,6 +1364,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/source.rs "
         "../../foo/main.rs obj/bar/libmylib.so\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs =\n"
         "  rustdeps = -Lnative=obj/bar -Clink-arg=-Bdynamic "
         "-Clink-arg=obj/bar/libmylib.so\n"
@@ -1389,6 +1441,8 @@
         "\n"
         "build ./foo_bar: rust_bin ../../foo/main.rs | ../../foo/main.rs "
         "obj/bar/libmylib.rlib ./libshared.so ./libimplicit.so\n"
+        "  source_file_part = main.rs\n"
+        "  source_name_part = main\n"
         "  externs = --extern mylib=obj/bar/libmylib.rlib\n"
         "  rustdeps = -Ldependency=obj/bar -Lnative=. -Clink-arg=-Bdynamic "
         "-Clink-arg=./libshared.so -Clink-arg=./libimplicit.so\n"