@@ -15,6 +15,7 @@ use crate::{utf8_stdout, ManifestPath};
15
15
#[ derive( Debug , Clone , Eq , PartialEq ) ]
16
16
pub struct Sysroot {
17
17
root : AbsPathBuf ,
18
+ src_root : AbsPathBuf ,
18
19
crates : Arena < SysrootCrateData > ,
19
20
}
20
21
@@ -35,6 +36,15 @@ impl ops::Index<SysrootCrate> for Sysroot {
35
36
}
36
37
37
38
impl 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`
38
48
pub fn root ( & self ) -> & AbsPath {
39
49
& self . root
40
50
}
@@ -61,7 +71,7 @@ impl Sysroot {
61
71
tracing:: debug!( "Discovering sysroot for {}" , dir. display( ) ) ;
62
72
let sysroot_dir = discover_sysroot_dir ( dir) ?;
63
73
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) ?;
65
75
Ok ( res)
66
76
}
67
77
@@ -71,14 +81,15 @@ impl Sysroot {
71
81
discover_sysroot_dir ( current_dir) . ok ( ) . and_then ( |sysroot_dir| get_rustc_src ( & sysroot_dir) )
72
82
}
73
83
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 ( ) } ;
76
87
77
88
for path in SYSROOT_CRATES . trim ( ) . lines ( ) {
78
89
let name = path. split ( '/' ) . last ( ) . unwrap ( ) ;
79
90
let root = [ format ! ( "{}/src/lib.rs" , path) , format ! ( "lib{}/lib.rs" , path) ]
80
91
. into_iter ( )
81
- . map ( |it| sysroot. root . join ( it) )
92
+ . map ( |it| sysroot. src_root . join ( it) )
82
93
. filter_map ( |it| ManifestPath :: try_from ( it) . ok ( ) )
83
94
. find ( |it| fs:: metadata ( it) . is_ok ( ) ) ;
84
95
@@ -119,7 +130,7 @@ impl Sysroot {
119
130
} ;
120
131
anyhow:: bail!(
121
132
"could not find libcore in sysroot path `{}`{}" ,
122
- sysroot. root . as_path( ) . display( ) ,
133
+ sysroot. src_root . as_path( ) . display( ) ,
123
134
var_note,
124
135
) ;
125
136
}
0 commit comments