@@ -1180,11 +1180,8 @@ impl Build {
1180
1180
Err ( _) => return Err ( Error :: new ( ErrorKind :: IOError , "Could not copy or create a hard-link to the generated lib file." ) ) ,
1181
1181
} ;
1182
1182
} else {
1183
- let ar = self . get_ar ( ) ?;
1184
- let cmd = ar. file_name ( )
1185
- . ok_or_else ( || Error :: new ( ErrorKind :: IOError , "Failed to get archiver (ar) path." ) ) ?
1186
- . to_string_lossy ( ) ;
1187
- run ( self . cmd ( & ar)
1183
+ let ( mut ar, cmd) = self . get_ar ( ) ?;
1184
+ run ( ar
1188
1185
. arg ( "crs" )
1189
1186
. arg ( dst)
1190
1187
. args ( objects)
@@ -1427,28 +1424,29 @@ impl Build {
1427
1424
}
1428
1425
}
1429
1426
1430
- fn get_ar ( & self ) -> Result < PathBuf , Error > {
1431
- match self . archiver
1432
- . clone ( )
1433
- . or_else ( || self . get_var ( "AR" ) . map ( PathBuf :: from) . ok ( ) ) {
1434
- Some ( p) => Ok ( p) ,
1435
- None => {
1436
- if self . get_target ( ) ?. contains ( "android" ) {
1437
- Ok ( PathBuf :: from ( format ! ( "{}-ar" , self . get_target( ) ?. replace( "armv7" , "arm" ) ) ) )
1438
- } else if self . get_target ( ) ?. contains ( "emscripten" ) {
1439
- //Windows use bat files so we have to be a bit more specific
1440
- let tool = if cfg ! ( windows) {
1441
- "emar.bat"
1442
- } else {
1443
- "emar"
1444
- } ;
1445
-
1446
- Ok ( PathBuf :: from ( tool) )
1447
- } else {
1448
- Ok ( PathBuf :: from ( "ar" ) )
1449
- }
1450
- }
1427
+ fn get_ar ( & self ) -> Result < ( Command , String ) , Error > {
1428
+ if let Some ( ref p) = self . archiver {
1429
+ let name = p. file_name ( ) . and_then ( |s| s. to_str ( ) ) . unwrap_or ( "ar" ) ;
1430
+ return Ok ( ( self . cmd ( p) , name. to_string ( ) ) )
1431
+ }
1432
+ if let Ok ( p) = self . get_var ( "AR" ) {
1433
+ return Ok ( ( self . cmd ( & p) , p) )
1434
+ }
1435
+ let program = if self . get_target ( ) ?. contains ( "android" ) {
1436
+ format ! ( "{}-ar" , self . get_target( ) ?. replace( "armv7" , "arm" ) )
1437
+ } else if self . get_target ( ) ?. contains ( "emscripten" ) {
1438
+ // Windows use bat files so we have to be a bit more specific
1439
+ if cfg ! ( windows) {
1440
+ let mut cmd = self . cmd ( "cmd" ) ;
1441
+ cmd. arg ( "/c" ) . arg ( "emar.bat" ) ;
1442
+ return Ok ( ( cmd, "emar.bat" . to_string ( ) ) )
1451
1443
}
1444
+
1445
+ "emar" . to_string ( )
1446
+ } else {
1447
+ "ar" . to_string ( )
1448
+ } ;
1449
+ Ok ( ( self . cmd ( & program) , program) )
1452
1450
}
1453
1451
1454
1452
fn get_target ( & self ) -> Result < String , Error > {
0 commit comments