Move output argument from ArchiveBuilder::new to .build()

This commit is contained in:
bjorn3 2022-07-28 08:39:19 +00:00
parent a6260ecd81
commit e0697a309d

View File

@ -19,7 +19,6 @@ enum ArchiveEntry {
pub(crate) struct ArArchiveBuilder<'a> { pub(crate) struct ArArchiveBuilder<'a> {
sess: &'a Session, sess: &'a Session,
dst: PathBuf,
use_gnu_style_archive: bool, use_gnu_style_archive: bool,
no_builtin_ranlib: bool, no_builtin_ranlib: bool,
@ -30,10 +29,9 @@ pub(crate) struct ArArchiveBuilder<'a> {
} }
impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> { impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
fn new(sess: &'a Session, output: &Path) -> Self { fn new(sess: &'a Session) -> Self {
ArArchiveBuilder { ArArchiveBuilder {
sess, sess,
dst: output.to_path_buf(),
use_gnu_style_archive: sess.target.archive_format == "gnu", use_gnu_style_archive: sess.target.archive_format == "gnu",
// FIXME fix builtin ranlib on macOS // FIXME fix builtin ranlib on macOS
no_builtin_ranlib: sess.target.is_like_osx, no_builtin_ranlib: sess.target.is_like_osx,
@ -74,7 +72,7 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
Ok(()) Ok(())
} }
fn build(mut self) -> bool { fn build(mut self, output: &Path) -> bool {
enum BuilderKind { enum BuilderKind {
Bsd(ar::Builder<File>), Bsd(ar::Builder<File>),
Gnu(ar::GnuBuilder<File>), Gnu(ar::GnuBuilder<File>),
@ -163,7 +161,7 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
let mut builder = if self.use_gnu_style_archive { let mut builder = if self.use_gnu_style_archive {
BuilderKind::Gnu( BuilderKind::Gnu(
ar::GnuBuilder::new( ar::GnuBuilder::new(
File::create(&self.dst).unwrap_or_else(|err| { File::create(output).unwrap_or_else(|err| {
sess.fatal(&format!( sess.fatal(&format!(
"error opening destination during archive building: {}", "error opening destination during archive building: {}",
err err
@ -178,7 +176,7 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
} else { } else {
BuilderKind::Bsd( BuilderKind::Bsd(
ar::Builder::new( ar::Builder::new(
File::create(&self.dst).unwrap_or_else(|err| { File::create(output).unwrap_or_else(|err| {
sess.fatal(&format!( sess.fatal(&format!(
"error opening destination during archive building: {}", "error opening destination during archive building: {}",
err err
@ -209,7 +207,7 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
// Run ranlib to be able to link the archive // Run ranlib to be able to link the archive
let status = std::process::Command::new(ranlib) let status = std::process::Command::new(ranlib)
.arg(self.dst) .arg(output)
.status() .status()
.expect("Couldn't run ranlib"); .expect("Couldn't run ranlib");