Skip to content

Commit 4f73673

Browse files
committed
Use cmd /c emar.bat on Windows emscripten
cc #239
1 parent 0a2ea72 commit 4f73673

File tree

1 file changed

+24
-26
lines changed

1 file changed

+24
-26
lines changed

src/lib.rs

+24-26
Original file line numberDiff line numberDiff line change
@@ -1180,11 +1180,8 @@ impl Build {
11801180
Err(_) => return Err(Error::new(ErrorKind::IOError, "Could not copy or create a hard-link to the generated lib file.")),
11811181
};
11821182
} else {
1183-
let ar = self.get_ar()?;
1184-
let cmd = ar.file_name()
1185-
.ok_or_else(|| Error::new(ErrorKind::IOError, "Failed to get archiver (ar) path."))?
1186-
.to_string_lossy();
1187-
run(self.cmd(&ar)
1183+
let (mut ar, cmd) = self.get_ar()?;
1184+
run(ar
11881185
.arg("crs")
11891186
.arg(dst)
11901187
.args(objects)
@@ -1427,28 +1424,29 @@ impl Build {
14271424
}
14281425
}
14291426

1430-
fn get_ar(&self) -> Result<PathBuf, Error> {
1431-
match self.archiver
1432-
.clone()
1433-
.or_else(|| self.get_var("AR").map(PathBuf::from).ok()) {
1434-
Some(p) => Ok(p),
1435-
None => {
1436-
if self.get_target()?.contains("android") {
1437-
Ok(PathBuf::from(format!("{}-ar", self.get_target()?.replace("armv7", "arm"))))
1438-
} else if self.get_target()?.contains("emscripten") {
1439-
//Windows use bat files so we have to be a bit more specific
1440-
let tool = if cfg!(windows) {
1441-
"emar.bat"
1442-
} else {
1443-
"emar"
1444-
};
1445-
1446-
Ok(PathBuf::from(tool))
1447-
} else {
1448-
Ok(PathBuf::from("ar"))
1449-
}
1450-
}
1427+
fn get_ar(&self) -> Result<(Command, String), Error> {
1428+
if let Some(ref p) = self.archiver {
1429+
let name = p.file_name().and_then(|s| s.to_str()).unwrap_or("ar");
1430+
return Ok((self.cmd(p), name.to_string()))
1431+
}
1432+
if let Ok(p) = self.get_var("AR") {
1433+
return Ok((self.cmd(&p), p))
1434+
}
1435+
let program = if self.get_target()?.contains("android") {
1436+
format!("{}-ar", self.get_target()?.replace("armv7", "arm"))
1437+
} else if self.get_target()?.contains("emscripten") {
1438+
// Windows use bat files so we have to be a bit more specific
1439+
if cfg!(windows) {
1440+
let mut cmd = self.cmd("cmd");
1441+
cmd.arg("/c").arg("emar.bat");
1442+
return Ok((cmd, "emar.bat".to_string()))
14511443
}
1444+
1445+
"emar".to_string()
1446+
} else {
1447+
"ar".to_string()
1448+
};
1449+
Ok((self.cmd(&program), program))
14521450
}
14531451

14541452
fn get_target(&self) -> Result<String, Error> {

0 commit comments

Comments
 (0)