Avoid duplicating -Lnative rustc arguments. Change-Id: I4d7326328944c2c1417915487883949cdebabc8f Reviewed-on: https://gn-review.googlesource.com/c/gn/+/8180 Reviewed-by: Petr Hosek <phosek@google.com> Commit-Queue: Petr Hosek <phosek@google.com>
diff --git a/src/gn/ninja_rust_binary_target_writer.cc b/src/gn/ninja_rust_binary_target_writer.cc index c8f8e43..8a907bb 100644 --- a/src/gn/ninja_rust_binary_target_writer.cc +++ b/src/gn/ninja_rust_binary_target_writer.cc
@@ -265,11 +265,18 @@ const std::string_view lib_prefix("lib"); // Non-Rust native dependencies. + UniqueVector<SourceDir> nonrustdep_dirs; for (const auto& nonrustdep : nonrustdeps) { + nonrustdep_dirs.push_back( + nonrustdep.AsSourceFile(settings_->build_settings()).GetDir()); + } + // First -Lnative to specify search directories + for (const auto& nonrustdep_dir : nonrustdep_dirs) { out_ << " -Lnative="; - path_output_.WriteDir( - out_, nonrustdep.AsSourceFile(settings_->build_settings()).GetDir(), - PathOutput::DIR_NO_LAST_SLASH); + path_output_.WriteDir(out_, nonrustdep_dir, PathOutput::DIR_NO_LAST_SLASH); + } + // Now the dependencies themselves. + for (const auto& nonrustdep : nonrustdeps) { std::string_view file = FindFilenameNoExtension(&nonrustdep.value()); if (!file.compare(0, lib_prefix.size(), lib_prefix)) { out_ << " -l";
diff --git a/src/gn/ninja_rust_binary_target_writer_unittest.cc b/src/gn/ninja_rust_binary_target_writer_unittest.cc index 4d7d114..ded290a 100644 --- a/src/gn/ninja_rust_binary_target_writer_unittest.cc +++ b/src/gn/ninja_rust_binary_target_writer_unittest.cc
@@ -448,8 +448,8 @@ "../../foo/main.rs obj/bar/libmylib.rlib obj/foo/libstatic.a " "./libshared.so ./libshared_with_toc.so.TOC\n" " externs = --extern mylib=obj/bar/libmylib.rlib\n" - " rustdeps = -Ldependency=obj/bar -Lnative=obj/foo -lstatic " - "-Lnative=. -lshared -Lnative=. -lshared_with_toc\n"; + " rustdeps = -Ldependency=obj/bar -Lnative=obj/foo -Lnative=. " + "-lstatic -lshared -lshared_with_toc\n"; std::string out_str = out.str(); EXPECT_EQ(expected, out_str) << expected << "\n" << out_str; }