@@ -1487,12 +1487,7 @@ impl Build {
1487
1487
let objects: Vec < _ > = objs. iter ( ) . map ( |obj| obj. dst . clone ( ) ) . collect ( ) ;
1488
1488
let target = self . get_target ( ) ?;
1489
1489
if target. contains ( "msvc" ) {
1490
- let mut cmd = match self . archiver {
1491
- Some ( ref s) => self . cmd ( s) ,
1492
- None => windows_registry:: find ( & target, "lib.exe" )
1493
- . unwrap_or_else ( || self . cmd ( "lib.exe" ) ) ,
1494
- } ;
1495
-
1490
+ let ( mut cmd, program) = self . get_ar ( ) ?;
1496
1491
let mut out = OsString :: from ( "/OUT:" ) ;
1497
1492
out. push ( dst) ;
1498
1493
cmd. arg ( out) . arg ( "/nologo" ) ;
@@ -1537,7 +1532,7 @@ impl Build {
1537
1532
} else {
1538
1533
cmd. args ( & objects) . args ( & self . objects ) ;
1539
1534
}
1540
- run ( & mut cmd, "lib.exe" ) ?;
1535
+ run ( & mut cmd, & program ) ?;
1541
1536
1542
1537
// The Rust compiler will look for libfoo.a and foo.lib, but the
1543
1538
// MSVC linker will also be passed foo.lib, so be sure that both
@@ -1979,9 +1974,10 @@ impl Build {
1979
1974
if let Ok ( p) = self . get_var ( "AR" ) {
1980
1975
return Ok ( ( self . cmd ( & p) , p) ) ;
1981
1976
}
1982
- let program = if self . get_target ( ) ?. contains ( "android" ) {
1983
- format ! ( "{}-ar" , self . get_target( ) ?. replace( "armv7" , "arm" ) )
1984
- } else if self . get_target ( ) ?. contains ( "emscripten" ) {
1977
+ let target = self . get_target ( ) ?;
1978
+ let program = if target. contains ( "android" ) {
1979
+ format ! ( "{}-ar" , target. replace( "armv7" , "arm" ) )
1980
+ } else if target. contains ( "emscripten" ) {
1985
1981
// Windows use bat files so we have to be a bit more specific
1986
1982
if cfg ! ( windows) {
1987
1983
let mut cmd = self . cmd ( "cmd" ) ;
@@ -1990,6 +1986,14 @@ impl Build {
1990
1986
}
1991
1987
1992
1988
"emar" . to_string ( )
1989
+ } else if target. contains ( "msvc" ) {
1990
+ match windows_registry:: find_tool ( & target, "lib.exe" ) {
1991
+ Some ( t) => match t. path ( ) . to_str ( ) {
1992
+ Some ( ref p) => p. to_string ( ) ,
1993
+ None => "lib.exe" . to_string ( ) ,
1994
+ } ,
1995
+ None => "lib.exe" . to_string ( ) ,
1996
+ }
1993
1997
} else {
1994
1998
"ar" . to_string ( )
1995
1999
} ;
0 commit comments