("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"];
"chalk-ir",
"chalk-solve",
"chrono",
- "cmake",
"compiler_builtins",
"cpufeatures",
"crc32fast",
+ "crossbeam-channel",
"crossbeam-deque",
"crossbeam-epoch",
"crossbeam-utils",
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);
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 that all licenses are in the valid list in `LICENSES`.
/// 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,
}
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}");
}