From cb823b09dfc2ca71bda66e874c5e450038fbec1d Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 3 Dec 2013 08:59:09 -0800 Subject: [PATCH] Search for libfoo.a on windows as well as foo.lib Turns out LLVM only builds libfoo.a libraries, so we're going to need this logic to statically link librustc --- src/librustc/back/archive.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/librustc/back/archive.rs b/src/librustc/back/archive.rs index 9f5aaf3a426..4711381a7b8 100644 --- a/src/librustc/back/archive.rs +++ b/src/librustc/back/archive.rs @@ -119,18 +119,25 @@ fn add_archive(&mut self, archive: &Path, name: &str) { } fn find_library(&self, name: &str) -> Path { - let (prefix, ext) = match self.sess.targ_cfg.os { + let (osprefix, osext) = match self.sess.targ_cfg.os { abi::OsWin32 => ("", "lib"), _ => ("lib", "a"), }; - let libname = format!("{}{}.{}", prefix, name, ext); + // On windows, static libraries sometimes show up as libfoo.a and other + // times show up as foo.lib + let oslibname = format!("{}{}.{}", osprefix, name, osext); + let unixlibname = format!("lib{}.a", name); let mut rustpath = filesearch::rust_path(); rustpath.push(self.sess.filesearch.get_target_lib_path()); let path = self.sess.opts.addl_lib_search_paths.iter(); for path in path.chain(rustpath.iter()) { debug!("looking for {} inside {}", name, path.display()); - let test = path.join(libname.clone()); + let test = path.join(oslibname.as_slice()); if test.exists() { return test } + if oslibname != unixlibname { + let test = path.join(unixlibname.as_slice()); + if test.exists() { return test } + } } self.sess.fatal(format!("could not find native static library `{}`, \ perhaps an -L flag is missing?", name));