about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoshua Nelson <jnelson@cloudflare.com>2022-05-29 10:37:05 -0500
committerJoshua Nelson <jnelson@cloudflare.com>2022-06-21 23:42:56 -0500
commit85c87f6c67f966e7b4fd292217c6db41fce88e0d (patch)
tree87eebf1e27072aec266863d086414da9a17107c4
parent9cde0f7877bda27e13da269ff7e6171831c84ec1 (diff)
downloadrust-85c87f6c67f966e7b4fd292217c6db41fce88e0d.tar.gz
rust-85c87f6c67f966e7b4fd292217c6db41fce88e0d.zip
Add bootstrap to tidy check
-rw-r--r--src/bootstrap/lib.rs2
-rw-r--r--src/tools/tidy/src/deps.rs108
2 files changed, 106 insertions, 4 deletions
diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs
index 37ed9a0b853..859d35b7d7b 100644
--- a/src/bootstrap/lib.rs
+++ b/src/bootstrap/lib.rs
@@ -549,7 +549,7 @@ impl Build {
         ];
         for s in rust_submodules {
             build.update_submodule(Path::new(s));
-        } 
+        }
 
         build.verbose("learning about cargo");
         metadata::build(&mut build);
diff --git a/src/tools/tidy/src/deps.rs b/src/tools/tidy/src/deps.rs
index 7775bbb13e8..c66ecda937d 100644
--- a/src/tools/tidy/src/deps.rs
+++ b/src/tools/tidy/src/deps.rs
@@ -63,6 +63,10 @@ const EXCEPTIONS_CRANELIFT: &[(&str, &str)] = &[
     ("target-lexicon", "Apache-2.0 WITH LLVM-exception"),
 ];
 
+const EXCEPTIONS_BOOTSTRAP: &[(&str, &str)] = &[
+    ("ryu", "Apache-2.0 OR BSL-1.0"), // through serde
+];
+
 /// These are the root crates that are part of the runtime. The licenses for
 /// these and all their dependencies *must not* be in the exception list.
 const RUNTIME_CRATES: &[&str] = &["std", "core", "alloc", "test", "panic_abort", "panic_unwind"];
@@ -96,7 +100,6 @@ const PERMITTED_DEPENDENCIES: &[&str] = &[
     "chalk-ir",
     "chalk-solve",
     "chrono",
-    "cmake",
     "compiler_builtins",
     "cpufeatures",
     "crc32fast",
@@ -290,6 +293,82 @@ const PERMITTED_CRANELIFT_DEPENDENCIES: &[&str] = &[
     "winapi-x86_64-pc-windows-gnu",
 ];
 
+const PERMITTED_BOOTSTRAP_DEPENDENCIES: &[&str] = &[
+    "aho-corasick",
+    "autocfg",
+    "ansi_term",
+    "block-buffer",
+    "bitflags",
+    "bstr",
+    "core-foundation-sys",
+    "cc",
+    "cfg-if",
+    "crossbeam-utils",
+    "cmake",
+    "cpufeatures",
+    "crossbeam-channel",
+    "crossbeam-deque",
+    "crossbeam-epoch",
+    "crypto-common",
+    "ctor",
+    "diff",
+    "digest",
+    "either",
+    "filetime",
+    "fnv",
+    "getopts",
+    "generic-array",
+    "globset",
+    "hermit-abi",
+    "hex",
+    "ignore",
+    "itoa",
+    "lazy_static",
+    "libc",
+    "log",
+    "lzma-sys",
+    "memchr",
+    "memoffset",
+    "ntapi",
+    "num_cpus",
+    "once_cell",
+    "opener",
+    "output_vt100",
+    "pkg-config",
+    "pretty_assertions",
+    "proc-macro2",
+    "quote",
+    "rayon",
+    "rayon-core",
+    "redox_syscall",
+    "regex",
+    "regex-automata",
+    "regex-syntax",
+    "ryu",
+    "same-file",
+    "scopeguard",
+    "serde",
+    "serde_derive",
+    "serde_json",
+    "sha2",
+    "syn",
+    "sysinfo",
+    "tar",
+    "thread_local",
+    "toml",
+    "typenum",
+    "unicode-ident",
+    "unicode-width",
+    "version_check",
+    "walkdir",
+    "winapi",
+    "winapi-i686-pc-windows-gnu",
+    "winapi-util",
+    "winapi-x86_64-pc-windows-gnu",
+    "xattr",
+    "xz2",
+];
+
 const FORBIDDEN_TO_HAVE_DUPLICATES: &[&str] = &[
     // These two crates take quite a long time to build, so don't allow two versions of them
     // to accidentally sneak into our dependency graph, in order to ensure we keep our CI times
@@ -309,7 +388,13 @@ pub fn check(root: &Path, cargo: &Path, bad: &mut bool) {
     let metadata = t!(cmd.exec());
     let runtime_ids = compute_runtime_crates(&metadata);
     check_exceptions(&metadata, EXCEPTIONS, runtime_ids, bad);
-    check_dependencies(&metadata, PERMITTED_DEPENDENCIES, RESTRICTED_DEPENDENCY_CRATES, bad);
+    check_dependencies(
+        &metadata,
+        "main workspace",
+        PERMITTED_DEPENDENCIES,
+        RESTRICTED_DEPENDENCY_CRATES,
+        bad,
+    );
     check_crate_duplicate(&metadata, FORBIDDEN_TO_HAVE_DUPLICATES, bad);
     check_rustfix(&metadata, bad);
 
@@ -323,11 +408,27 @@ pub fn check(root: &Path, cargo: &Path, bad: &mut bool) {
     check_exceptions(&metadata, EXCEPTIONS_CRANELIFT, runtime_ids, bad);
     check_dependencies(
         &metadata,
+        "cranelift",
         PERMITTED_CRANELIFT_DEPENDENCIES,
         &["rustc_codegen_cranelift"],
         bad,
     );
     check_crate_duplicate(&metadata, &[], bad);
+
+    let mut cmd = cargo_metadata::MetadataCommand::new();
+    cmd.cargo_path(cargo)
+        .manifest_path(root.join("src/bootstrap/Cargo.toml"))
+        .features(cargo_metadata::CargoOpt::AllFeatures);
+    let metadata = t!(cmd.exec());
+    let runtime_ids = HashSet::new();
+    check_exceptions(&metadata, EXCEPTIONS_BOOTSTRAP, runtime_ids, bad);
+    check_dependencies(
+        &metadata,
+        "bootstrap",
+        PERMITTED_BOOTSTRAP_DEPENDENCIES,
+        &["bootstrap"],
+        bad,
+    );
 }
 
 /// Check that all licenses are in the valid list in `LICENSES`.
@@ -409,6 +510,7 @@ fn check_exceptions(
 /// Specifically, this checks that the dependencies are on the `PERMITTED_DEPENDENCIES`.
 fn check_dependencies(
     metadata: &Metadata,
+    descr: &str,
     permitted_dependencies: &[&'static str],
     restricted_dependency_crates: &[&'static str],
     bad: &mut bool,
@@ -438,7 +540,7 @@ fn check_dependencies(
     }
 
     if !unapproved.is_empty() {
-        tidy_error!(bad, "Dependencies not explicitly permitted:");
+        tidy_error!(bad, "Dependencies for {} not explicitly permitted:", descr);
         for dep in unapproved {
             println!("* {dep}");
         }