use std::env;
const KNOWN_THRESHOLDS: &[(u32, u32, u32)] = &[
(4, 16, 0), ];
fn main() {
for (major, minor, patch) in KNOWN_THRESHOLDS {
println!("cargo::rustc-check-cfg=cfg(z3_{major}_{minor}_{patch})");
}
println!("cargo::rustc-check-cfg=cfg(z3_version_major, values(any()))");
println!("cargo::rustc-check-cfg=cfg(z3_version_minor, values(any()))");
println!("cargo::rustc-check-cfg=cfg(z3_version_patch, values(any()))");
println!("cargo:rerun-if-env-changed=DOCS_RS");
println!("cargo:rerun-if-env-changed=DEP_Z3_VERSION_MAJOR");
println!("cargo:rerun-if-env-changed=DEP_Z3_VERSION_MINOR");
println!("cargo:rerun-if-env-changed=DEP_Z3_VERSION_PATCH");
let (major, minor, patch) = if env::var_os("DOCS_RS").is_some() {
*KNOWN_THRESHOLDS
.iter()
.max()
.expect("KNOWN_THRESHOLDS is non-empty")
} else {
read_dep_z3_version()
};
println!("cargo::rustc-cfg=z3_version_major=\"{major}\"");
println!("cargo::rustc-cfg=z3_version_minor=\"{minor}\"");
println!("cargo::rustc-cfg=z3_version_patch=\"{patch}\"");
for (t_major, t_minor, t_patch) in KNOWN_THRESHOLDS {
if (major, minor, patch) >= (*t_major, *t_minor, *t_patch) {
println!("cargo::rustc-cfg=z3_{t_major}_{t_minor}_{t_patch}");
}
}
}
fn read_dep_z3_version() -> (u32, u32, u32) {
let major = env::var("DEP_Z3_VERSION_MAJOR")
.ok()
.and_then(|s| s.parse().ok());
let minor = env::var("DEP_Z3_VERSION_MINOR")
.ok()
.and_then(|s| s.parse().ok());
let patch = env::var("DEP_Z3_VERSION_PATCH")
.ok()
.and_then(|s| s.parse().ok());
match (major, minor, patch) {
(Some(major), Some(minor), Some(patch)) => (major, minor, patch),
_ => {
println!(
"cargo:warning=z3: could not read the Z3 version detected by z3-sys \
(DEP_Z3_VERSION_MAJOR/MINOR/PATCH); version-gated APIs will be unavailable."
);
(0, 0, 0)
}
}
}