Skip to content

Commit

Permalink
Fix staticlib outputs linking to blank archives
Browse files Browse the repository at this point in the history
When creating a staticlib, it unzips all static archives it finds and then
inserts the files manually into the output file. This process is done through
`ar`, and `ar` doesn't like if you specify you want to add files and you don't
give it any files.

This case arose whenever you linked to an archive that didn't have any contents
or all of the contents were filtered out. This just involved ignoring the case
where the number of inputs we have is 0, because we don't have any files to add
anyway.
  • Loading branch information
alexcrichton committed Feb 19, 2014
1 parent 517e389 commit 2eacc72
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/librustc/back/archive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ impl Archive {
if_ok!(fs::rename(file, &new_filename));
inputs.push(new_filename);
}
if inputs.len() == 0 { return Ok(()) }

// Finally, add all the renamed files to this archive
let mut args = ~[&self.dst];
Expand Down
6 changes: 6 additions & 0 deletions src/test/run-make/staticlib-blank-lib/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-include ../tools.mk

all:
ar crus libfoo.a foo.rs
ar d libfoo.a foo.rs
$(RUSTC) foo.rs
16 changes: 16 additions & 0 deletions src/test/run-make/staticlib-blank-lib/foo.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[crate_type = "staticlib"];

#[link(name = "foo", kind = "static")]
extern {}

fn main() {}

5 comments on commit 2eacc72

@bors
Copy link
Contributor

@bors bors commented on 2eacc72 Feb 19, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from brson
at alexcrichton@2eacc72

@bors
Copy link
Contributor

@bors bors commented on 2eacc72 Feb 19, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging alexcrichton/rust/fix-ar-thing = 2eacc72 into auto

@bors
Copy link
Contributor

@bors bors commented on 2eacc72 Feb 19, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alexcrichton/rust/fix-ar-thing = 2eacc72 merged ok, testing candidate = 209b47f

@bors
Copy link
Contributor

@bors bors commented on 2eacc72 Feb 19, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bors
Copy link
Contributor

@bors bors commented on 2eacc72 Feb 19, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = 209b47f

Please sign in to comment.