about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2013-12-03 08:59:09 -0800
committerAlex Crichton <alex@alexcrichton.com>2013-12-03 08:59:09 -0800
commitcb823b09dfc2ca71bda66e874c5e450038fbec1d (patch)
tree5dba3a57d609a2540e4379f0707058b488084b70 /src
parent18084be3164d2fe7c540662ea1e44cf73af9bf0f (diff)
downloadrust-cb823b09dfc2ca71bda66e874c5e450038fbec1d.tar.gz
rust-cb823b09dfc2ca71bda66e874c5e450038fbec1d.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/librustc/back/archive.rs13
1 files 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 @@ impl Archive {
     }
 
     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));