Skip to content

Commit de69fc7

Browse files
author
Jon Gjengset
committed
Avoid CommandBuilder::get_program for MSRV
1 parent 7a0c2af commit de69fc7

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

src/lib.rs

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2666,13 +2666,7 @@ impl Build {
26662666
}
26672667

26682668
fn get_ar(&self) -> Result<(Command, String, bool), Error> {
2669-
let (cmd, any_flags) = self.try_get_archiver_and_flags()?;
2670-
let name = Path::new(cmd.get_program())
2671-
.file_name()
2672-
.ok_or_else(|| Error::new(ErrorKind::IOError, "Failed to get archiver path."))?
2673-
.to_string_lossy()
2674-
.into_owned();
2675-
Ok((cmd, name, any_flags))
2669+
self.try_get_archiver_and_flags()
26762670
}
26772671

26782672
/// Get the archiver (ar) that's in use for this configuration.
@@ -2704,21 +2698,21 @@ impl Build {
27042698
Ok(self.try_get_archiver_and_flags()?.0)
27052699
}
27062700

2707-
fn try_get_archiver_and_flags(&self) -> Result<(Command, bool), Error> {
2708-
let mut cmd = self.get_base_archiver()?;
2701+
fn try_get_archiver_and_flags(&self) -> Result<(Command, String, bool), Error> {
2702+
let (mut cmd, name) = self.get_base_archiver()?;
27092703
let flags = self.envflags("ARFLAGS");
27102704
let mut any_flags = !flags.is_empty();
27112705
cmd.args(flags);
27122706
for flag in &self.ar_flags {
27132707
any_flags = true;
27142708
cmd.arg(flag);
27152709
}
2716-
Ok((cmd, any_flags))
2710+
Ok((cmd, name, any_flags))
27172711
}
27182712

2719-
fn get_base_archiver(&self) -> Result<Command, Error> {
2713+
fn get_base_archiver(&self) -> Result<(Command, String), Error> {
27202714
if let Some(ref a) = self.archiver {
2721-
return Ok(self.cmd(a));
2715+
return Ok((self.cmd(a), a.to_string_lossy().into_owned()));
27222716
}
27232717

27242718
self.get_base_archiver_variant("AR", "ar")
@@ -2760,11 +2754,12 @@ impl Build {
27602754
return Ok(self.cmd(r));
27612755
}
27622756

2763-
self.get_base_archiver_variant("RANLIB", "ranlib")
2757+
Ok(self.get_base_archiver_variant("RANLIB", "ranlib")?.0)
27642758
}
27652759

2766-
fn get_base_archiver_variant(&self, env: &str, tool: &str) -> Result<Command, Error> {
2760+
fn get_base_archiver_variant(&self, env: &str, tool: &str) -> Result<(Command, String), Error> {
27672761
let target = self.get_target()?;
2762+
let mut name = String::new();
27682763
let tool_opt: Option<Command> = self
27692764
.env_tool(env)
27702765
.map(|(tool, _wrapper, args)| {
@@ -2777,10 +2772,12 @@ impl Build {
27772772
// Windows use bat files so we have to be a bit more specific
27782773
if cfg!(windows) {
27792774
let mut cmd = self.cmd("cmd");
2780-
cmd.arg("/c").arg(format!("em{}.bat", tool));
2775+
name = format!("em{}.bat", tool);
2776+
cmd.arg("/c").arg(&name);
27812777
Some(cmd)
27822778
} else {
2783-
Some(self.cmd(format!("em{}", tool)))
2779+
name = format!("em{}", tool);
2780+
Some(self.cmd(&name))
27842781
}
27852782
} else {
27862783
None
@@ -2792,7 +2789,8 @@ impl Build {
27922789
Some(t) => t,
27932790
None => {
27942791
if target.contains("android") {
2795-
self.cmd(format!("{}-{}", target.replace("armv7", "arm"), tool))
2792+
name = format!("{}-{}", target.replace("armv7", "arm"), tool);
2793+
self.cmd(&name)
27962794
} else if target.contains("msvc") {
27972795
// NOTE: There isn't really a ranlib on msvc, so arguably we should return
27982796
// `None` somehow here. But in general, callers will already have to be aware
@@ -2817,19 +2815,22 @@ impl Build {
28172815
}
28182816

28192817
if lib.is_empty() {
2818+
name = String::from("lib.exe");
28202819
match windows_registry::find(&target, "lib.exe") {
28212820
Some(t) => t,
28222821
None => self.cmd("lib.exe"),
28232822
}
28242823
} else {
2825-
self.cmd(lib)
2824+
name = lib;
2825+
self.cmd(&name)
28262826
}
28272827
} else if target.contains("illumos") {
28282828
// The default 'ar' on illumos uses a non-standard flags,
28292829
// but the OS comes bundled with a GNU-compatible variant.
28302830
//
28312831
// Use the GNU-variant to match other Unix systems.
2832-
self.cmd(format!("g{}", tool))
2832+
name = format!("g{}", tool);
2833+
self.cmd(&name)
28332834
} else if self.get_host()? != target {
28342835
match self.prefix_for_target(&target) {
28352836
Some(p) => {
@@ -2848,17 +2849,22 @@ impl Build {
28482849
break;
28492850
}
28502851
}
2851-
self.cmd(chosen)
2852+
name = chosen;
2853+
self.cmd(&name)
2854+
}
2855+
None => {
2856+
name = default;
2857+
self.cmd(&name)
28522858
}
2853-
None => self.cmd(default),
28542859
}
28552860
} else {
2856-
self.cmd(default)
2861+
name = default;
2862+
self.cmd(&name)
28572863
}
28582864
}
28592865
};
28602866

2861-
Ok(tool)
2867+
Ok((tool, name))
28622868
}
28632869

28642870
fn prefix_for_target(&self, target: &str) -> Option<String> {

0 commit comments

Comments
 (0)