Skip to content

Commit 5be187e

Browse files
committed
WIP
1 parent 5b7fdb8 commit 5be187e

File tree

5 files changed

+48
-8
lines changed

5 files changed

+48
-8
lines changed

Cargo.lock

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3323,6 +3323,7 @@ dependencies = [
33233323
"rustc_serialize",
33243324
"rustc_span",
33253325
"tracing",
3326+
"wit-bindgen-rt 0.33.0",
33263327
]
33273328

33283329
[[package]]
@@ -3958,6 +3959,7 @@ dependencies = [
39583959
"rustc_span",
39593960
"thin-vec",
39603961
"tracing",
3962+
"wit-bindgen-rt 0.39.0",
39613963
]
39623964

39633965
[[package]]
@@ -5968,7 +5970,7 @@ version = "0.13.3+wasi-0.2.2"
59685970
source = "registry+https://github.com/rust-lang/crates.io-index"
59695971
checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
59705972
dependencies = [
5971-
"wit-bindgen-rt",
5973+
"wit-bindgen-rt 0.33.0",
59725974
]
59735975

59745976
[[package]]
@@ -6564,6 +6566,12 @@ dependencies = [
65646566
"bitflags",
65656567
]
65666568

6569+
[[package]]
6570+
name = "wit-bindgen-rt"
6571+
version = "0.39.0"
6572+
source = "registry+https://github.com/rust-lang/crates.io-index"
6573+
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
6574+
65676575
[[package]]
65686576
name = "wit-component"
65696577
version = "0.223.0"

compiler/rustc_abi/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ rustc_span = { path = "../rustc_span", optional = true }
1717
tracing = "0.1"
1818
# tidy-alphabetical-end
1919

20+
# This is a dependency of `rand` and contains a small binary blob for weak linking.
21+
# It's locked to ensure review of the binary before any updates.
22+
wit-bindgen-rt = "=0.33.0"
23+
2024
[features]
2125
# tidy-alphabetical-start
2226
default = ["nightly", "randomize"]

compiler/rustc_incremental/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,7 @@ rustc_span = { path = "../rustc_span" }
2121
thin-vec = "0.2.12"
2222
tracing = "0.1"
2323
# tidy-alphabetical-end
24+
25+
# This is a dependency of `rand` and contains a small binary blob for weak linking.
26+
# It's locked to ensure review of the binary before any updates.
27+
wit-bindgen-rt = "=0.39.0"

compiler/rustc_incremental/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
#![warn(unreachable_pub)]
1111
// tidy-alphabetical-end
1212

13+
#[allow(unused_extern_crates)]
14+
extern crate wit_bindgen_rt;
15+
1316
mod assert_dep_graph;
1417
mod errors;
1518
mod persist;
@@ -23,6 +26,7 @@ use rustc_middle::util::Providers;
2326

2427
#[allow(missing_docs)]
2528
pub fn provide(providers: &mut Providers) {
29+
wit_bindgen_rt::maybe_link_cabi_realloc();
2630
providers.hooks.save_dep_graph =
2731
|tcx| tcx.sess.time("serialize_dep_graph", || persist::save_dep_graph(tcx));
2832
}

src/tools/tidy/src/deps.rs

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
//! Checks the licenses of third-party dependencies.
22
3-
use std::collections::HashSet;
3+
use std::collections::{HashSet, HashMap};
44
use std::fs::{File, read_dir};
55
use std::io::Write;
66
use std::path::Path;
77

88
use build_helper::ci::CiEnv;
9+
use cargo_metadata::semver::Version;
910
use cargo_metadata::{Metadata, Package, PackageId};
1011

1112
#[path = "../../../bootstrap/src/utils/proc_macro_deps.rs"]
@@ -447,7 +448,7 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[
447448
"windows_x86_64_gnu",
448449
"windows_x86_64_gnullvm",
449450
"windows_x86_64_msvc",
450-
"wit-bindgen-rt", // via wasi
451+
"wit-bindgen-rt@0.33.0", // via wasi
451452
"writeable",
452453
"yoke",
453454
"yoke-derive",
@@ -805,7 +806,17 @@ fn check_permitted_dependencies(
805806

806807
// Check that the PERMITTED_DEPENDENCIES does not have unused entries.
807808
for permitted in permitted_dependencies {
808-
if !deps.iter().any(|dep_id| &pkg_from_id(metadata, dep_id).name == permitted) {
809+
fn compare(pkg: &Package, permitted: &str) -> bool {
810+
if let Some((name, version)) = permitted.split_once("@") {
811+
let Ok(version) = Version::parse(version) else {
812+
return false;
813+
};
814+
pkg.name == name && pkg.version == version
815+
} else {
816+
pkg.name == permitted
817+
}
818+
}
819+
if !deps.iter().any(|dep_id| compare(pkg_from_id(metadata, dep_id), permitted)) {
809820
tidy_error!(
810821
bad,
811822
"could not find allowed package `{permitted}`\n\
@@ -816,14 +827,23 @@ fn check_permitted_dependencies(
816827
}
817828

818829
// Get in a convenient form.
819-
let permitted_dependencies: HashSet<_> = permitted_dependencies.iter().cloned().collect();
830+
let permitted_dependencies: HashMap<_, _> = permitted_dependencies.iter().map(|s| {
831+
if let Some((name, version)) = s.split_once('@') {
832+
(name, Version::parse(version).ok())
833+
} else {
834+
(*s, None)
835+
}
836+
}).collect();
820837

821838
for dep in deps {
822839
let dep = pkg_from_id(metadata, dep);
823840
// If this path is in-tree, we don't require it to be explicitly permitted.
824-
if dep.source.is_some() && !permitted_dependencies.contains(dep.name.as_str()) {
825-
tidy_error!(bad, "Dependency for {descr} not explicitly permitted: {}", dep.id);
826-
has_permitted_dep_error = true;
841+
if dep.source.is_some() {
842+
let permitted = permitted_dependencies.get(dep.name);
843+
if permitted.is_none() || (let Some(permitted) = permitted && dep.version == permitted) {
844+
tidy_error!(bad, "Dependency for {descr} not explicitly permitted: {}", dep.id);
845+
has_permitted_dep_error = true;
846+
}
827847
}
828848
}
829849

0 commit comments

Comments
 (0)