@@ -93,7 +93,8 @@ impl Config {
93
93
}
94
94
95
95
pub fn rustc ( & self ) -> CargoResult < & Rustc > {
96
- self . rustc . get_or_try_init ( || Rustc :: new ( self . get_tool ( "rustc" ) ?) )
96
+ self . rustc . get_or_try_init ( || Rustc :: new ( self . get_tool ( "rustc" ) ?,
97
+ self . maybe_get_tool ( "rustc_wrapper" ) ?) )
97
98
}
98
99
99
100
pub fn cargo_exe ( & self ) -> CargoResult < & Path > {
@@ -415,18 +416,27 @@ impl Config {
415
416
}
416
417
}
417
418
418
- fn get_tool ( & self , tool : & str ) -> CargoResult < PathBuf > {
419
+ /// Look for a path for `tool` in an environment variable or config path, but return `None`
420
+ /// if it's not present.
421
+ fn maybe_get_tool ( & self , tool : & str ) -> CargoResult < Option < PathBuf > > {
419
422
let var = tool. chars ( ) . flat_map ( |c| c. to_uppercase ( ) ) . collect :: < String > ( ) ;
420
423
if let Some ( tool_path) = env:: var_os ( & var) {
421
- return Ok ( PathBuf :: from ( tool_path) ) ;
424
+ return Ok ( Some ( PathBuf :: from ( tool_path) ) ) ;
422
425
}
423
426
424
427
let var = format ! ( "build.{}" , tool) ;
425
428
if let Some ( tool_path) = self . get_path ( & var) ? {
426
- return Ok ( tool_path. val ) ;
429
+ return Ok ( Some ( tool_path. val ) ) ;
427
430
}
428
431
429
- Ok ( PathBuf :: from ( tool) )
432
+ Ok ( None )
433
+ }
434
+
435
+ /// Look for a path for `tool` in an environment variable or config path, defaulting to `tool`
436
+ /// as a path.
437
+ fn get_tool ( & self , tool : & str ) -> CargoResult < PathBuf > {
438
+ self . maybe_get_tool ( tool)
439
+ . map ( |t| t. unwrap_or ( PathBuf :: from ( tool) ) )
430
440
}
431
441
}
432
442
0 commit comments