@@ -15,6 +15,7 @@ use crate::{utf8_stdout, ManifestPath};
1515#[ derive( Debug , Clone , Eq , PartialEq ) ]
1616pub struct Sysroot {
1717 root : AbsPathBuf ,
18+ src_root : AbsPathBuf ,
1819 crates : Arena < SysrootCrateData > ,
1920}
2021
@@ -35,6 +36,15 @@ impl ops::Index<SysrootCrate> for Sysroot {
3536}
3637
3738impl Sysroot {
39+ /// Returns sysroot directory, where `bin/`, `etc/`, `lib/`, `libexec/`
40+ /// subfolder live, like:
41+ /// `$HOME/.rustup/toolchains/nightly-2022-07-23-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library`
42+ pub fn src_root ( & self ) -> & AbsPath {
43+ & self . src_root
44+ }
45+
46+ /// Returns sysroot "src" directory, where stdlib sources are located, like:
47+ /// `$HOME/.rustup/toolchains/nightly-2022-07-23-x86_64-unknown-linux-gnu`
3848 pub fn root ( & self ) -> & AbsPath {
3949 & self . root
4050 }
@@ -61,7 +71,7 @@ impl Sysroot {
6171 tracing:: debug!( "Discovering sysroot for {}" , dir. display( ) ) ;
6272 let sysroot_dir = discover_sysroot_dir ( dir) ?;
6373 let sysroot_src_dir = discover_sysroot_src_dir ( & sysroot_dir, dir) ?;
64- let res = Sysroot :: load ( sysroot_src_dir) ?;
74+ let res = Sysroot :: load ( sysroot_dir , sysroot_src_dir) ?;
6575 Ok ( res)
6676 }
6777
@@ -71,14 +81,15 @@ impl Sysroot {
7181 discover_sysroot_dir ( current_dir) . ok ( ) . and_then ( |sysroot_dir| get_rustc_src ( & sysroot_dir) )
7282 }
7383
74- pub fn load ( sysroot_src_dir : AbsPathBuf ) -> Result < Sysroot > {
75- let mut sysroot = Sysroot { root : sysroot_src_dir, crates : Arena :: default ( ) } ;
84+ pub fn load ( sysroot_dir : AbsPathBuf , sysroot_src_dir : AbsPathBuf ) -> Result < Sysroot > {
85+ let mut sysroot =
86+ Sysroot { root : sysroot_dir, src_root : sysroot_src_dir, crates : Arena :: default ( ) } ;
7687
7788 for path in SYSROOT_CRATES . trim ( ) . lines ( ) {
7889 let name = path. split ( '/' ) . last ( ) . unwrap ( ) ;
7990 let root = [ format ! ( "{}/src/lib.rs" , path) , format ! ( "lib{}/lib.rs" , path) ]
8091 . into_iter ( )
81- . map ( |it| sysroot. root . join ( it) )
92+ . map ( |it| sysroot. src_root . join ( it) )
8293 . filter_map ( |it| ManifestPath :: try_from ( it) . ok ( ) )
8394 . find ( |it| fs:: metadata ( it) . is_ok ( ) ) ;
8495
@@ -119,7 +130,7 @@ impl Sysroot {
119130 } ;
120131 anyhow:: bail!(
121132 "could not find libcore in sysroot path `{}`{}" ,
122- sysroot. root . as_path( ) . display( ) ,
133+ sysroot. src_root . as_path( ) . display( ) ,
123134 var_note,
124135 ) ;
125136 }
0 commit comments