Create uniform build script

Previously, each unique compiler cfg attribute that appeared in the
codebase was hard coded and emitted to stdout at compile time. This
meant keeping the file up to date as different compiler cfg attributes
changed. It's inconsequential to emit a compiler version that's not
used, so this change just emits all possibilities to reduce the
maintenance burden of the build script.
This commit is contained in:
yancy 2023-10-28 11:41:27 +02:00
parent 7246585588
commit fde6479c6a
2 changed files with 14 additions and 14 deletions

View File

@ -1,10 +1,13 @@
const MSRV_MINOR: u64 = 48;
fn main() {
let rustc = std::env::var_os("RUSTC").unwrap_or_else(|| "rustc".into());
let rustc = std::env::var_os("RUSTC");
let rustc = rustc.as_ref().map(std::path::Path::new).unwrap_or_else(|| "rustc".as_ref());
let output = std::process::Command::new(rustc)
.arg("--version")
.output()
.expect("Failed to run rustc --version");
assert!(output.status.success(), "Failed to get rust version");
.unwrap_or_else(|error| panic!("Failed to run `{:?} --version`: {:?}", rustc, error));
assert!(output.status.success(), "{:?} -- version returned non-zero exit code", rustc);
let stdout = String::from_utf8(output.stdout).expect("rustc produced non-UTF-8 output");
let version_prefix = "rustc ";
if !stdout.starts_with(version_prefix) {
@ -16,16 +19,15 @@ fn main() {
let version = &version[..end];
let mut version_components = version.split('.');
let major = version_components.next().unwrap();
assert_eq!(major, "1", "Unexpected Rust version");
assert_eq!(major, "1", "Unexpected Rust major version");
let minor = version_components
.next()
.unwrap_or("0")
.parse::<u64>()
.expect("invalid Rust minor version");
for activate_version in &[53, 60] {
if minor >= *activate_version {
println!("cargo:rustc-cfg=rust_v_1_{}", activate_version);
}
// print cfg for all interesting versions less than or equal to minor
for version in MSRV_MINOR..=minor {
println!("cargo:rustc-cfg=rust_v_1_{}", version);
}
}

View File

@ -1,3 +1,5 @@
const MSRV_MINOR: u64 = 48;
fn main() {
let rustc = std::env::var_os("RUSTC");
let rustc = rustc.as_ref().map(std::path::Path::new).unwrap_or_else(|| "rustc".as_ref());
@ -25,11 +27,7 @@ fn main() {
.expect("invalid Rust minor version");
// print cfg for all interesting versions less than or equal to minor
// 46 adds `track_caller`
// 55 adds `kind()` to `ParseIntError`
for version in &[46, 55] {
if *version <= minor {
println!("cargo:rustc-cfg=rust_v_1_{}", version);
}
for version in MSRV_MINOR..=minor {
println!("cargo:rustc-cfg=rust_v_1_{}", version);
}
}