@@ -56,29 +56,40 @@ static WHITELIST_CRATES: &'static [CrateVersion] = &[
5656
5757/// Whitelist of crates rustc is allowed to depend on. Avoid adding to the list if possible.
5858static 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"),
8293] ;
8394
8495// 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) {
179190 let mut visited = BTreeSet :: new ( ) ;
180191 let mut unapproved = BTreeSet :: new ( ) ;
181192 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 ) ;
183194 unapproved. append ( & mut bad) ;
184195 }
185196
@@ -256,6 +267,7 @@ fn check_crate_whitelist<'a, 'b>(
256267 resolve : & ' a Resolve ,
257268 visited : & ' b mut BTreeSet < CrateVersion < ' a > > ,
258269 krate : CrateVersion < ' a > ,
270+ must_be_on_whitelist : bool ,
259271) -> BTreeSet < Crate < ' a > > {
260272 // Will contain bad deps
261273 let mut unapproved = BTreeSet :: new ( ) ;
@@ -267,9 +279,12 @@ fn check_crate_whitelist<'a, 'b>(
267279
268280 visited. insert ( krate) ;
269281
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+ }
273288 }
274289
275290 // 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>(
282297 for dep in to_check. dependencies . iter ( ) {
283298 let ( krate, is_path_dep) = CrateVersion :: from_str ( dep) ;
284299
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) ;
290302 }
291303
292304 unapproved
0 commit comments