From 1005cd78db54075594c44181d43bb950e0b61459 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 15 Feb 2025 13:09:31 +1100 Subject: [PATCH 1/5] Fix archiver detection for musl cross compilation Fixed #1399 --- src/lib.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index f059d4f4..ddf681b5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3226,7 +3226,6 @@ impl Build { } }); - let default = tool.to_string(); let tool = match tool_opt { Some(t) => t, None => { @@ -3287,7 +3286,7 @@ impl Build { self.cmd(&name) } else if self.get_is_cross_compile()? { match self.prefix_for_target(&self.get_raw_target()?) { - Some(p) => { + Some(prefix) => { // GCC uses $target-gcc-ar, whereas binutils uses $target-ar -- try both. // Prefer -ar if it exists, as builds of `-gcc-ar` have been observed to be // outright broken (such as when targeting freebsd with `--disable-lto` @@ -3295,24 +3294,25 @@ impl Build { // fails to find one). // // The same applies to ranlib. - let mut chosen = default; - for &infix in &["", "-gcc"] { - let target_p = format!("{}{}-{}", p, infix, tool); - if Command::new(&target_p).output().is_ok() { - chosen = target_p; - break; - } - } + let chosen = ["", "-gcc"] + .into_iter() + .filter_map(|infix| { + let target_p = format!("{prefix}{infix}-{tool}"); + let status = Command::new(&target_p).status().ok()?; + status.success().then_some(target_p) + }) + .next() + .unwrap_or_else(|| tool.to_string()); name = chosen.into(); self.cmd(&name) } None => { - name = default.into(); + name = tool.into(); self.cmd(&name) } } } else { - name = default.into(); + name = tool.into(); self.cmd(&name) } } From a64bb2f56dc149280c9953aebff8890aa98581cb Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 15 Feb 2025 13:12:49 +1100 Subject: [PATCH 2/5] Replace use of array::into_iter with iter --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index ddf681b5..9a6cc7c2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3295,7 +3295,7 @@ impl Build { // // The same applies to ranlib. let chosen = ["", "-gcc"] - .into_iter() + .iter() .filter_map(|infix| { let target_p = format!("{prefix}{infix}-{tool}"); let status = Command::new(&target_p).status().ok()?; From 98eb42b043f303b86fccbff881d74085d57b6a75 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 15 Feb 2025 13:30:32 +1100 Subject: [PATCH 3/5] Fix tests --- src/lib.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 9a6cc7c2..fa13fe69 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3298,8 +3298,13 @@ impl Build { .iter() .filter_map(|infix| { let target_p = format!("{prefix}{infix}-{tool}"); - let status = Command::new(&target_p).status().ok()?; - status.success().then_some(target_p) + let status = Command::new(&target_p) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .ok()?; + status.success().then_some(target_p) }) .next() .unwrap_or_else(|| tool.to_string()); From 8e226da8ea4af2dcad860462925d3b68273817a9 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 15 Feb 2025 13:35:56 +1100 Subject: [PATCH 4/5] Fix import of Stdio --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index fa13fe69..d95dbdc6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -232,7 +232,7 @@ use std::io::{self, Write}; use std::path::{Component, Path, PathBuf}; #[cfg(feature = "parallel")] use std::process::Child; -use std::process::Command; +use std::process::{Command, Stdio}; use std::sync::{ atomic::{AtomicU8, Ordering::Relaxed}, Arc, RwLock, From 32665bc12c51b158024a6aa876298b31d8f5dbc0 Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sat, 15 Feb 2025 13:50:06 +1100 Subject: [PATCH 5/5] Pass --version when detecting archiver --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index d95dbdc6..033d9469 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3299,6 +3299,7 @@ impl Build { .filter_map(|infix| { let target_p = format!("{prefix}{infix}-{tool}"); let status = Command::new(&target_p) + .arg("--version") .stdin(Stdio::null()) .stdout(Stdio::null()) .stderr(Stdio::null())