File tree 1 file changed +18
-9
lines changed
1 file changed +18
-9
lines changed Original file line number Diff line number Diff line change @@ -278,7 +278,7 @@ impl ToolchainComponents {
278
278
/// Finds known library components in the given `dir` and stores them in `self`.
279
279
fn fill_libraries ( & mut self , dir : & Path ) -> anyhow:: Result < ( ) > {
280
280
let files: Vec < ( PathBuf , String ) > = fs:: read_dir ( dir)
281
- . context ( "Cannot read lib dir to find components" ) ?
281
+ . with_context ( || format ! ( "Cannot read lib dir `{}` to find components" , dir . display ( ) ) ) ?
282
282
. map ( |entry| Ok ( entry?) )
283
283
. collect :: < anyhow:: Result < Vec < _ > > > ( ) ?
284
284
. into_iter ( )
@@ -589,14 +589,23 @@ pub fn create_toolchain_from_published_version(
589
589
}
590
590
591
591
fn get_lib_dir_from_rustc ( rustc : & Path ) -> anyhow:: Result < PathBuf > {
592
- let sysroot = Command :: new ( rustc)
593
- . arg ( "--print" )
594
- . arg ( "sysroot" )
595
- . output ( ) ?
596
- . stdout ;
597
- let sysroot_path = String :: from_utf8_lossy ( & sysroot) ;
598
-
599
- Ok ( Path :: new ( sysroot_path. as_ref ( ) . trim ( ) ) . join ( "lib" ) )
592
+ let output = Command :: new ( rustc) . arg ( "--print" ) . arg ( "sysroot" ) . output ( ) ?;
593
+ if !output. status . success ( ) {
594
+ anyhow:: bail!(
595
+ "rustc failed to provide sysroot, exit status: {}\n stderr: {}" ,
596
+ output. status,
597
+ String :: from_utf8_lossy( & output. stderr)
598
+ ) ;
599
+ }
600
+ let sysroot_path = String :: from_utf8_lossy ( & output. stdout ) ;
601
+ let lib_dir = Path :: new ( sysroot_path. as_ref ( ) . trim ( ) ) . join ( "lib" ) ;
602
+ if !lib_dir. exists ( ) {
603
+ anyhow:: bail!(
604
+ "rustc returned non-existent sysroot: `{}`" ,
605
+ lib_dir. display( )
606
+ ) ;
607
+ }
608
+ Ok ( lib_dir)
600
609
}
601
610
602
611
#[ cfg( test) ]
You can’t perform that action at this time.
0 commit comments