@@ -56,29 +56,40 @@ static WHITELIST_CRATES: &'static [CrateVersion] = &[
56
56
57
57
/// Whitelist of crates rustc is allowed to depend on. Avoid adding to the list if possible.
58
58
static WHITELIST : & ' static [ Crate ] = & [
59
- Crate ( "backtrace" ) ,
60
- Crate ( "backtrace-sys" ) ,
61
- Crate ( "bitflags" ) ,
62
- Crate ( "byteorder" ) ,
63
- Crate ( "cc" ) ,
64
- Crate ( "cfg-if" ) ,
65
- Crate ( "flate2" ) ,
66
- Crate ( "fuchsia-zircon" ) ,
67
- Crate ( "fuchsia-zircon-sys" ) ,
68
- Crate ( "jobserver" ) ,
69
- Crate ( "lazy_static" ) ,
70
- Crate ( "libc" ) ,
71
- Crate ( "log" ) ,
72
- Crate ( "miniz-sys" ) ,
73
- Crate ( "num_cpus" ) ,
74
- Crate ( "rand" ) ,
75
- Crate ( "rustc" ) ,
76
- Crate ( "rustc-demangle" ) ,
77
- Crate ( "rustc_trans" ) ,
78
- Crate ( "tempdir" ) ,
79
- Crate ( "winapi" ) ,
80
- Crate ( "winapi-i686-pc-windows-gnu" ) ,
81
- Crate ( "winapi-x86_64-pc-windows-gnu" ) ,
59
+ // Crate("ar"),
60
+ // Crate("backtrace"),
61
+ // Crate("backtrace-sys"),
62
+ // Crate("bitflags"),
63
+ // Crate("byteorder"),
64
+ // Crate("cc"),
65
+ // Crate("cfg-if"),
66
+ // Crate("cmake"),
67
+ // Crate("filetime"),
68
+ // Crate("flate2"),
69
+ // Crate("fuchsia-zircon"),
70
+ // Crate("fuchsia-zircon-sys"),
71
+ // Crate("jobserver"),
72
+ // Crate("kernel32-sys"),
73
+ // Crate("lazy_static"),
74
+ // Crate("libc"),
75
+ // Crate("log"),
76
+ // Crate("log_settings"),
77
+ // Crate("miniz-sys"),
78
+ // Crate("num_cpus"),
79
+ // Crate("owning_ref"),
80
+ // Crate("parking_lot"),
81
+ // Crate("parking_lot_core"),
82
+ // Crate("rand"),
83
+ // Crate("redox_syscall"),
84
+ // Crate("rustc-demangle"),
85
+ // Crate("smallvec"),
86
+ // Crate("stable_deref_trait"),
87
+ // Crate("tempdir"),
88
+ // Crate("unicode-width"),
89
+ // Crate("winapi"),
90
+ // Crate("winapi-build"),
91
+ // Crate("winapi-i686-pc-windows-gnu"),
92
+ // Crate("winapi-x86_64-pc-windows-gnu"),
82
93
] ;
83
94
84
95
// Some types for Serde to deserialize the output of `cargo metadata` to...
@@ -179,7 +190,7 @@ pub fn check_whitelist(path: &Path, cargo: &Path, bad: &mut bool) {
179
190
let mut visited = BTreeSet :: new ( ) ;
180
191
let mut unapproved = BTreeSet :: new ( ) ;
181
192
for & krate in WHITELIST_CRATES . iter ( ) {
182
- let mut bad = check_crate_whitelist ( & whitelist, & resolve, & mut visited, krate) ;
193
+ let mut bad = check_crate_whitelist ( & whitelist, & resolve, & mut visited, krate, false ) ;
183
194
unapproved. append ( & mut bad) ;
184
195
}
185
196
@@ -256,6 +267,7 @@ fn check_crate_whitelist<'a, 'b>(
256
267
resolve : & ' a Resolve ,
257
268
visited : & ' b mut BTreeSet < CrateVersion < ' a > > ,
258
269
krate : CrateVersion < ' a > ,
270
+ must_be_on_whitelist : bool ,
259
271
) -> BTreeSet < Crate < ' a > > {
260
272
// Will contain bad deps
261
273
let mut unapproved = BTreeSet :: new ( ) ;
@@ -267,9 +279,12 @@ fn check_crate_whitelist<'a, 'b>(
267
279
268
280
visited. insert ( krate) ;
269
281
270
- // If this dependency is not on the WHITELIST, add to bad set
271
- if !whitelist. contains ( & krate. into ( ) ) {
272
- unapproved. insert ( krate. into ( ) ) ;
282
+ // If this path is in-tree, we don't require it to be on the whitelist
283
+ if must_be_on_whitelist {
284
+ // If this dependency is not on the WHITELIST, add to bad set
285
+ if !whitelist. contains ( & krate. into ( ) ) {
286
+ unapproved. insert ( krate. into ( ) ) ;
287
+ }
273
288
}
274
289
275
290
// Do a DFS in the crate graph (it's a DAG, so we know we have no cycles!)
@@ -282,11 +297,8 @@ fn check_crate_whitelist<'a, 'b>(
282
297
for dep in to_check. dependencies . iter ( ) {
283
298
let ( krate, is_path_dep) = CrateVersion :: from_str ( dep) ;
284
299
285
- // We don't check in-tree deps
286
- if !is_path_dep {
287
- let mut bad = check_crate_whitelist ( whitelist, resolve, visited, krate) ;
288
- unapproved. append ( & mut bad) ;
289
- }
300
+ let mut bad = check_crate_whitelist ( whitelist, resolve, visited, krate, !is_path_dep) ;
301
+ unapproved. append ( & mut bad) ;
290
302
}
291
303
292
304
unapproved
0 commit comments