about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-02-19 10:21:50 -0800
committerbors <bors@rust-lang.org>2014-02-19 10:21:50 -0800
commit209b47f248ba98fce70210dede3f99cf0313d357 (patch)
treece7bb02db70641394af507d1ced5299d0e994547
parentaf4b5b4aac1b39a2d69bdd1b18863c86bcc248e1 (diff)
parent2eacc729e245972c3e162f144c0c4ef38c191146 (diff)
downloadrust-209b47f248ba98fce70210dede3f99cf0313d357.tar.gz
rust-209b47f248ba98fce70210dede3f99cf0313d357.zip
auto merge of #12379 : alexcrichton/rust/fix-ar-thing, r=brson
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.
-rw-r--r--src/librustc/back/archive.rs1
-rw-r--r--src/test/run-make/staticlib-blank-lib/Makefile6
-rw-r--r--src/test/run-make/staticlib-blank-lib/foo.rs16
3 files changed, 23 insertions, 0 deletions
diff --git a/src/librustc/back/archive.rs b/src/librustc/back/archive.rs
index 18aef17b9eb..406c3026614 100644
--- a/src/librustc/back/archive.rs
+++ b/src/librustc/back/archive.rs
@@ -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];
diff --git a/src/test/run-make/staticlib-blank-lib/Makefile b/src/test/run-make/staticlib-blank-lib/Makefile
new file mode 100644
index 00000000000..c56d1212047
--- /dev/null
+++ b/src/test/run-make/staticlib-blank-lib/Makefile
@@ -0,0 +1,6 @@
+-include ../tools.mk
+
+all:
+	ar crus libfoo.a foo.rs
+	ar d libfoo.a foo.rs
+	$(RUSTC) foo.rs
diff --git a/src/test/run-make/staticlib-blank-lib/foo.rs b/src/test/run-make/staticlib-blank-lib/foo.rs
new file mode 100644
index 00000000000..b3d9c006976
--- /dev/null
+++ b/src/test/run-make/staticlib-blank-lib/foo.rs
@@ -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() {}