6161#[ cfg( feature = "parallel" ) ]
6262extern crate rayon;
6363
64+ use std:: collections:: HashMap ;
6465use std:: env;
6566use std:: ffi:: { OsStr , OsString } ;
6667use std:: fs;
68+ use std:: io:: { self , BufRead , BufReader , Read , Write } ;
6769use std:: path:: { Path , PathBuf } ;
6870use std:: process:: { Child , Command , Stdio } ;
69- use std:: io:: { self , BufRead , BufReader , Read , Write } ;
70- use std:: thread:: { self , JoinHandle } ;
71- use std:: collections:: HashMap ;
7271use std:: sync:: { Arc , Mutex } ;
72+ use std:: thread:: { self , JoinHandle } ;
7373
7474// These modules are all glue to support reading the MSVC version from
7575// the registry and from COM interfaces
@@ -891,7 +891,7 @@ impl Build {
891891 return Err ( Error :: new (
892892 ErrorKind :: IOError ,
893893 "Getting object file details failed." ,
894- ) )
894+ ) ) ;
895895 }
896896 } ;
897897
@@ -1119,12 +1119,18 @@ impl Build {
11191119 // CFLAGS/CXXFLAGS, since those variables presumably already contain
11201120 // the desired set of warnings flags.
11211121
1122- if self . warnings . unwrap_or ( if self . has_flags ( ) { false } else { true } ) {
1122+ if self
1123+ . warnings
1124+ . unwrap_or ( if self . has_flags ( ) { false } else { true } )
1125+ {
11231126 let wflags = cmd. family . warnings_flags ( ) . into ( ) ;
11241127 cmd. push_cc_arg ( wflags) ;
11251128 }
11261129
1127- if self . extra_warnings . unwrap_or ( if self . has_flags ( ) { false } else { true } ) {
1130+ if self
1131+ . extra_warnings
1132+ . unwrap_or ( if self . has_flags ( ) { false } else { true } )
1133+ {
11281134 if let Some ( wflags) = cmd. family . extra_warnings_flags ( ) {
11291135 cmd. push_cc_arg ( wflags. into ( ) ) ;
11301136 }
@@ -1161,7 +1167,12 @@ impl Build {
11611167 Ok ( cmd)
11621168 }
11631169
1164- fn add_default_flags ( & self , cmd : & mut Tool , target : & str , opt_level : & str ) -> Result < ( ) , Error > {
1170+ fn add_default_flags (
1171+ & self ,
1172+ cmd : & mut Tool ,
1173+ target : & str ,
1174+ opt_level : & str ,
1175+ ) -> Result < ( ) , Error > {
11651176 // Non-target flags
11661177 // If the flag is not conditioned on target variable, it belongs here :)
11671178 match cmd. family {
@@ -1175,8 +1186,9 @@ impl Build {
11751186 Some ( true ) => "/MT" ,
11761187 Some ( false ) => "/MD" ,
11771188 None => {
1178- let features =
1179- self . getenv ( "CARGO_CFG_TARGET_FEATURE" ) . unwrap_or ( String :: new ( ) ) ;
1189+ let features = self
1190+ . getenv ( "CARGO_CFG_TARGET_FEATURE" )
1191+ . unwrap_or ( String :: new ( ) ) ;
11801192 if features. contains ( "crt-static" ) {
11811193 "/MT"
11821194 } else {
@@ -1258,7 +1270,8 @@ impl Build {
12581270 // the SDK, but for all released versions of the
12591271 // Windows SDK it is required.
12601272 if target. contains ( "arm" ) || target. contains ( "thumb" ) {
1261- cmd. args . push ( "/D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1" . into ( ) ) ;
1273+ cmd. args
1274+ . push ( "/D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1" . into ( ) ) ;
12621275 }
12631276 }
12641277 ToolFamily :: Gnu => {
@@ -1271,14 +1284,18 @@ impl Build {
12711284 }
12721285
12731286 if self . static_flag . is_none ( ) {
1274- let features = self . getenv ( "CARGO_CFG_TARGET_FEATURE" ) . unwrap_or ( String :: new ( ) ) ;
1287+ let features = self
1288+ . getenv ( "CARGO_CFG_TARGET_FEATURE" )
1289+ . unwrap_or ( String :: new ( ) ) ;
12751290 if features. contains ( "crt-static" ) {
12761291 cmd. args . push ( "-static" . into ( ) ) ;
12771292 }
12781293 }
12791294
12801295 // armv7 targets get to use armv7 instructions
1281- if ( target. starts_with ( "armv7" ) || target. starts_with ( "thumbv7" ) ) && target. contains ( "-linux-" ) {
1296+ if ( target. starts_with ( "armv7" ) || target. starts_with ( "thumbv7" ) )
1297+ && target. contains ( "-linux-" )
1298+ {
12821299 cmd. args . push ( "-march=armv7-a" . into ( ) ) ;
12831300 }
12841301
@@ -1443,7 +1460,11 @@ impl Build {
14431460 fn has_flags ( & self ) -> bool {
14441461 let flags_env_var_name = if self . cpp { "CXXFLAGS" } else { "CFLAGS" } ;
14451462 let flags_env_var_value = self . get_var ( flags_env_var_name) ;
1446- if let Ok ( _) = flags_env_var_value { true } else { false }
1463+ if let Ok ( _) = flags_env_var_value {
1464+ true
1465+ } else {
1466+ false
1467+ }
14471468 }
14481469
14491470 fn msvc_macro_assembler ( & self ) -> Result < ( Command , String ) , Error > {
@@ -1548,7 +1569,7 @@ impl Build {
15481569 return Err ( Error :: new (
15491570 ErrorKind :: IOError ,
15501571 "Could not copy or create a hard-link to the generated lib file." ,
1551- ) )
1572+ ) ) ;
15521573 }
15531574 } ;
15541575 } else {
@@ -1585,7 +1606,7 @@ impl Build {
15851606 return Err ( Error :: new (
15861607 ErrorKind :: ArchitectureInvalid ,
15871608 "Unknown architecture for iOS target." ,
1588- ) )
1609+ ) ) ;
15891610 }
15901611 } ;
15911612
@@ -1604,7 +1625,8 @@ impl Build {
16041625 } ;
16051626
16061627 self . print ( & format ! ( "Detecting iOS SDK path for {}" , sdk) ) ;
1607- let sdk_path = self . cmd ( "xcrun" )
1628+ let sdk_path = self
1629+ . cmd ( "xcrun" )
16081630 . arg ( "--show-sdk-path" )
16091631 . arg ( "--sdk" )
16101632 . arg ( sdk)
@@ -1618,7 +1640,7 @@ impl Build {
16181640 return Err ( Error :: new (
16191641 ErrorKind :: IOError ,
16201642 "Unable to determine iOS SDK path." ,
1621- ) )
1643+ ) ) ;
16221644 }
16231645 } ;
16241646
@@ -1669,7 +1691,8 @@ impl Build {
16691691
16701692 let cl_exe = windows_registry:: find_tool ( & target, "cl.exe" ) ;
16711693
1672- let tool_opt: Option < Tool > = self . env_tool ( env)
1694+ let tool_opt: Option < Tool > = self
1695+ . env_tool ( env)
16731696 . map ( |( tool, cc, args) | {
16741697 // chop off leading/trailing whitespace to work around
16751698 // semi-buggy build scripts which are shared in
@@ -1831,9 +1854,9 @@ impl Build {
18311854 // configure for invocations like `clang-cl` we still get a "works out
18321855 // of the box" experience.
18331856 if let Some ( cl_exe) = cl_exe {
1834- if tool. family == ( ToolFamily :: Msvc { clang_cl : true } ) &&
1835- tool. env . len ( ) == 0 &&
1836- target. contains ( "msvc" )
1857+ if tool. family == ( ToolFamily :: Msvc { clang_cl : true } )
1858+ && tool. env . len ( ) == 0
1859+ && target. contains ( "msvc" )
18371860 {
18381861 for & ( ref k, ref v) in cl_exe. env . iter ( ) {
18391862 tool. env . push ( ( k. to_owned ( ) , v. to_owned ( ) ) ) ;
@@ -1849,7 +1872,8 @@ impl Build {
18491872 let host = self . get_host ( ) ?;
18501873 let kind = if host == target { "HOST" } else { "TARGET" } ;
18511874 let target_u = target. replace ( "-" , "_" ) ;
1852- let res = self . getenv ( & format ! ( "{}_{}" , var_base, target) )
1875+ let res = self
1876+ . getenv ( & format ! ( "{}_{}" , var_base, target) )
18531877 . or_else ( || self . getenv ( & format ! ( "{}_{}" , var_base, target_u) ) )
18541878 . or_else ( || self . getenv ( & format ! ( "{}_{}" , kind, var_base) ) )
18551879 . or_else ( || self . getenv ( var_base) ) ;
@@ -2040,7 +2064,7 @@ impl Build {
20402064 fn getenv ( & self , v : & str ) -> Option < String > {
20412065 let mut cache = self . env_cache . lock ( ) . unwrap ( ) ;
20422066 if let Some ( val) = cache. get ( v) {
2043- return val. clone ( )
2067+ return val. clone ( ) ;
20442068 }
20452069 let r = env:: var ( v) . ok ( ) ;
20462070 self . print ( & format ! ( "{} = {:?}" , v, r) ) ;
@@ -2081,10 +2105,11 @@ impl Tool {
20812105 let family = if let Some ( fname) = path. file_name ( ) . and_then ( |p| p. to_str ( ) ) {
20822106 if fname. contains ( "clang-cl" ) {
20832107 ToolFamily :: Msvc { clang_cl : true }
2084- } else if fname. contains ( "cl" ) &&
2085- !fname. contains ( "cloudabi" ) &&
2086- !fname. contains ( "uclibc" ) &&
2087- !fname. contains ( "clang" ) {
2108+ } else if fname. contains ( "cl" )
2109+ && !fname. contains ( "cloudabi" )
2110+ && !fname. contains ( "uclibc" )
2111+ && !fname. contains ( "clang" )
2112+ {
20882113 ToolFamily :: Msvc { clang_cl : false }
20892114 } else if fname. contains ( "clang" ) {
20902115 ToolFamily :: Clang
@@ -2140,9 +2165,10 @@ impl Tool {
21402165
21412166 // Check for existing optimization flags (-O, /O)
21422167 if chars. next ( ) == Some ( 'O' ) {
2143- return self . args ( ) . iter ( ) . any ( |ref a|
2144- a. to_str ( ) . unwrap_or ( "" ) . chars ( ) . nth ( 1 ) == Some ( 'O' )
2145- ) ;
2168+ return self
2169+ . args ( )
2170+ . iter ( )
2171+ . any ( |ref a| a. to_str ( ) . unwrap_or ( "" ) . chars ( ) . nth ( 1 ) == Some ( 'O' ) ) ;
21462172 }
21472173
21482174 // TODO Check for existing -m..., -m...=..., /arch:... flags
@@ -2174,7 +2200,11 @@ impl Tool {
21742200 } ;
21752201 cmd. args ( & self . cc_wrapper_args ) ;
21762202
2177- let value = self . args . iter ( ) . filter ( |a| !self . removed_args . contains ( a) ) . collect :: < Vec < _ > > ( ) ;
2203+ let value = self
2204+ . args
2205+ . iter ( )
2206+ . filter ( |a| !self . removed_args . contains ( a) )
2207+ . collect :: < Vec < _ > > ( ) ;
21782208 cmd. args ( & value) ;
21792209
21802210 for & ( ref k, ref v) in self . env . iter ( ) {
@@ -2269,7 +2299,7 @@ fn run(cmd: &mut Command, program: &str) -> Result<(), Error> {
22692299 "Failed to wait on spawned child process, command {:?} with args {:?}." ,
22702300 cmd, program
22712301 ) ,
2272- ) )
2302+ ) ) ;
22732303 }
22742304 } ;
22752305 print. join ( ) . unwrap ( ) ;
@@ -2307,7 +2337,7 @@ fn run_output(cmd: &mut Command, program: &str) -> Result<Vec<u8>, Error> {
23072337 "Failed to wait on spawned child process, command {:?} with args {:?}." ,
23082338 cmd, program
23092339 ) ,
2310- ) )
2340+ ) ) ;
23112341 }
23122342 } ;
23132343 print. join ( ) . unwrap ( ) ;
0 commit comments