From 2eacc729e245972c3e162f144c0c4ef38c191146 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 18 Feb 2014 16:05:05 -0800 Subject: [PATCH] Fix staticlib outputs linking to blank archives 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. --- src/librustc/back/archive.rs | 1 + src/test/run-make/staticlib-blank-lib/Makefile | 6 ++++++ src/test/run-make/staticlib-blank-lib/foo.rs | 16 ++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 src/test/run-make/staticlib-blank-lib/Makefile create mode 100644 src/test/run-make/staticlib-blank-lib/foo.rs diff --git a/src/librustc/back/archive.rs b/src/librustc/back/archive.rs index 18aef17b9eb77..406c3026614dc 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 0000000000000..c56d1212047e8 --- /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 0000000000000..b3d9c006976d0 --- /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 or the MIT license +// , 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() {}