zebra/zebrad/build.rs

53 lines
1.9 KiB
Rust

use vergen::{vergen, Config, SemverKind, ShaKind};
/// Disable vergen env vars that could cause spurious reproducible build
/// failures
fn disable_non_reproducible(_config: &mut Config) {
/*
Currently, these features are disabled in `Cargo.toml`
// We don't use build or host-specific env vars, because they can break
// reproducible builds.
*config.build_mut().enabled_mut() = false;
*config.rustc mut().host_triple_mut() = false;
// It's ok for reproducible builds to depend on the build OS. But most other
// sysinfo should not change reproducible builds, so we disable it.
*config.sysinfo mut().user_mut() = false;
*config.sysinfo mut().memory_mut() = false;
*config.sysinfo mut().cpu_vendor_mut() = false;
*config.sysinfo mut().cpu_core_count_mut() = false;
*config.sysinfo mut().cpu_name_mut() = false;
*config.sysinfo mut().cpu_brand_mut() = false;
*config.sysinfo mut().cpu_frequency_mut() = false;
*/
}
fn main() {
let mut config = Config::default();
disable_non_reproducible(&mut config);
*config.git_mut().sha_kind_mut() = ShaKind::Short;
*config.git_mut().semver_kind_mut() = SemverKind::Lightweight;
// git typically uses "-dirty", but we change that so:
// - we're explicit and direct about source code state
// - it matches the SemVer 2.0 format, using dot separators
*config.git_mut().semver_dirty_mut() = Some(".modified");
// Disable env vars we aren't using right now
*config.cargo_mut().features_mut() = false;
// Disable git if we're building with an invalid `zebra/.git`
match vergen(config) {
Ok(_) => {}
Err(e) => {
eprintln!(
"git error in vergen build script: skipping git env vars: {:?}",
e
);
*config.git_mut().enabled_mut() = false;
vergen(config).expect("non-git vergen should succeed");
}
}
}