use std::env::{self, var};
fn main() {
println!("cargo:rerun-if-changed=build.rs");
let tarpaulin = var("CARGO_FEATURE_TARPAULIN").is_ok();
if tarpaulin {
use_feature("tarpaulin");
} else {
println!("cargo:rerun-if-env-changed=CARGO_TARPAULIN");
println!("cargo:rerun-if-env-changed=CARGO_CFG_TARPAULIN");
if env::var("CARGO_TARPAULIN").is_ok() || env::var("CARGO_CFG_TARPAULIN").is_ok() {
use_feature("tarpaulin");
}
}
println!("cargo:rerun-if-env-changed=CARGO_FEATURE_TARPAULIN");
require_ffmpeg_9();
}
const FFMPEG_RELEASES: [(&str, &str); 19] = [
("ffmpeg_3_0", "3.0"),
("ffmpeg_3_1", "3.1"),
("ffmpeg_3_2", "3.2"),
("ffmpeg_3_3", "3.3"),
("ffmpeg_3_4", "3.4"),
("ffmpeg_4_0", "4.0"),
("ffmpeg_4_1", "4.1"),
("ffmpeg_4_2", "4.2"),
("ffmpeg_4_3", "4.3"),
("ffmpeg_4_4", "4.4"),
("ffmpeg_5_0", "5.0"),
("ffmpeg_5_1", "5.1"),
("ffmpeg_6_0", "6.0"),
("ffmpeg_6_1", "6.1"),
("ffmpeg_7_0", "7.0"),
("ffmpeg_7_1", "7.1"),
("ffmpeg_8_0", "8.0"),
("ffmpeg_8_1", "8.1"),
("ffmpeg_9_0", "9.0"),
];
fn require_ffmpeg_9() {
let set = |flag: &str| {
let name = format!("DEP_FFMPEG_{}", flag.to_uppercase());
println!("cargo:rerun-if-env-changed={name}");
env::var(name).as_deref() == Ok("true")
};
let linked = FFMPEG_RELEASES
.iter()
.rev()
.find(|(flag, _)| set(flag))
.map(|&(_, release)| release);
if linked != Some("9.0") {
let linked = linked.map_or_else(
|| "older than FFmpeg 3.0, the oldest ffmpeg-sys-next names".to_string(),
|release| format!("FFmpeg {release}"),
);
println!(
"cargo::error=the mediaio FFmpeg crates need FFmpeg 9 or newer, and the FFmpeg they are \
being built against is {linked}, as ffmpeg-sys-next reads its installed headers: install \
FFmpeg 9's libraries and headers, and point pkg-config (PKG_CONFIG_PATH) or FFMPEG_DIR at \
them"
);
}
}
fn use_feature(feature: &str) {
println!("cargo:rustc-cfg={}", feature);
}