about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume.gomez@huawei.com>2024-06-24 11:47:20 +0200
committerGuillaume Gomez <guillaume.gomez@huawei.com>2024-06-27 14:04:46 +0200
commit3394fe89d8a6b12ca86140724a09c2c9360a5684 (patch)
tree3ff54d193979f238efc3079b4e93307b02e300d0
parent449cde32ade77758359fcd83e0f6ac7a191b70f0 (diff)
downloadrust-3394fe89d8a6b12ca86140724a09c2c9360a5684.tar.gz
rust-3394fe89d8a6b12ca86140724a09c2c9360a5684.zip
Add `ar` command in `run-make-support`
-rw-r--r--Cargo.lock7
-rw-r--r--src/tools/run-make-support/Cargo.toml1
-rw-r--r--src/tools/run-make-support/src/lib.rs13
-rw-r--r--tests/run-make/invalid-library/rmake.rs4
4 files changed, 19 insertions, 6 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 6d0563839ae..e977964b72c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -229,6 +229,12 @@ dependencies = [
 ]
 
 [[package]]
+name = "ar"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d67af77d68a931ecd5cbd8a3b5987d63a1d1d1278f7f6a60ae33db485cdebb69"
+
+[[package]]
 name = "ar_archive_writer"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3394,6 +3400,7 @@ dependencies = [
 name = "run_make_support"
 version = "0.2.0"
 dependencies = [
+ "ar",
  "gimli 0.28.1",
  "object 0.34.0",
  "regex",
diff --git a/src/tools/run-make-support/Cargo.toml b/src/tools/run-make-support/Cargo.toml
index 2f7f51442f1..e3837a2f8cc 100644
--- a/src/tools/run-make-support/Cargo.toml
+++ b/src/tools/run-make-support/Cargo.toml
@@ -9,3 +9,4 @@ similar = "2.5.0"
 wasmparser = "0.118.2"
 regex = "1.8" # 1.8 to avoid memchr 2.6.0, as 2.5.0 is pinned in the workspace
 gimli = "0.28.1"
+ar = "0.9.0"
diff --git a/src/tools/run-make-support/src/lib.rs b/src/tools/run-make-support/src/lib.rs
index 14b4f14e8f0..771cda630af 100644
--- a/src/tools/run-make-support/src/lib.rs
+++ b/src/tools/run-make-support/src/lib.rs
@@ -63,10 +63,15 @@ pub fn target() -> String {
 
 /// `AR`
 #[track_caller]
-#[must_use]
-pub fn ar_command() -> Command {
-    let ar_path = env_var("AR");
-    Command::new(ar_path)
+pub fn ar(inputs: &[impl AsRef<Path>], output_path: impl AsRef<Path>) {
+    let output = fs::File::create(&output_path).expect(&format!(
+        "the file in path \"{}\" could not be created",
+        output_path.as_ref().display()
+    ));
+    let mut builder = ar::Builder::new(output);
+    for input in inputs {
+        builder.append_path(input).unwrap();
+    }
 }
 
 /// Check if target is windows-like.
diff --git a/tests/run-make/invalid-library/rmake.rs b/tests/run-make/invalid-library/rmake.rs
index e76b3f3b5d2..750fcd05c8a 100644
--- a/tests/run-make/invalid-library/rmake.rs
+++ b/tests/run-make/invalid-library/rmake.rs
@@ -1,8 +1,8 @@
 use run_make_support::fs_wrapper::create_file;
-use run_make_support::{ar_command, rustc};
+use run_make_support::{ar, rustc};
 
 fn main() {
     create_file("lib.rmeta");
-    ar_command().arg("crus").arg("libfoo-ffffffff-1.0.rlib").arg("lib.rmeta").run();
+    ar(&["lib.rmeta"], "libfoo-ffffffff-1.0.rlib");
     rustc().input("foo.rs").run_fail().assert_stderr_contains("found invalid metadata");
 }