const SCAMPER_MIN_VERSION: u32 = 20260204;
fn check_scamper_version() {
use std::process::Command;
let output = match Command::new("scamper").arg("-v").output() {
Ok(o) => o,
Err(_) => {
println!(
"cargo:warning=rscamper: could not run `scamper -v` — \
make sure scamper >= {} is installed and on PATH",
SCAMPER_MIN_VERSION
);
return;
}
};
let stdout = String::from_utf8_lossy(&output.stdout);
let version_str = stdout
.lines()
.find_map(|line| {
let lower = line.to_lowercase();
if lower.contains("version") {
lower.split_whitespace().last().map(|s| s.to_owned())
} else {
None
}
});
match version_str.and_then(|s| s.parse::<u32>().ok()) {
Some(v) if v >= SCAMPER_MIN_VERSION => {} Some(v) => {
println!(
"cargo:warning=rscamper: scamper {} is too old — \
version {} or later is required. \
Download from https://www.caida.org/catalog/software/scamper/",
v, SCAMPER_MIN_VERSION
);
}
None => {
println!(
"cargo:warning=rscamper: could not determine scamper version — \
version {} or later is required",
SCAMPER_MIN_VERSION
);
}
}
}
fn main() {
check_scamper_version();
if let Ok(dir) = std::env::var("SCAMPER_LIB_DIR") {
println!("cargo:rustc-link-search=native={}", dir);
} else {
println!("cargo:rustc-link-search=native=/usr/local/lib");
println!("cargo:rustc-link-search=native=/usr/lib");
println!("cargo:rustc-link-search=native=/usr/lib/x86_64-linux-gnu");
println!("cargo:rustc-link-search=native=/usr/lib/aarch64-linux-gnu");
}
println!("cargo:rustc-link-lib=scamperfile");
println!("cargo:rustc-link-lib=scamperctrl");
println!("cargo:rerun-if-env-changed=SCAMPER_LIB_DIR");
println!("cargo:rerun-if-changed=build.rs");
}