use std::{process::Command, env};
macro_rules! msg
{
($($tokens: tt)*) => {
println!("cargo:warning={}", format!($($tokens)*))
}
}
const DEFAULT_FREEBSD_VER: &'static str = "14.0";
fn get_freebsd_version() -> String
{
let use_ver =
option_env!("USE_FREEBSD_VER")
.map_or(DEFAULT_FREEBSD_VER, |v| v)
.to_string();
let output = Command::new("freebsd-version").output().ok();
if let Some(res) = output
{
if res.status.success() == false
{
return use_ver;
}
let stdout = String::from_utf8(res.stdout).unwrap();
let ver =
match stdout.split_once("-")
{
Some((v, _)) =>
{
v.to_string()
},
None =>
{
msg!("can not determine freebsd version, building for: USE_FREEBSD_VER '{}'", use_ver);
use_ver
}
};
return ver;
}
else
{
return use_ver;
}
}
fn ver_to_feature(ver: String) -> &'static str
{
match ver.as_str()
{
"13.0" => return "FREEBSD_V13_0",
"13.1" => return "FREEBSD_V13_1",
"13.2" => return "FREEBSD_V13_2",
"14.0" => return "FREEBSD_V14_0",
_ => panic!("Freebsd version: '{}' is not supported", ver)
}
}
fn main()
{
let feature = ver_to_feature(get_freebsd_version());
println!("cargo:rustc-cfg=feature=\"{}\"", feature);
return;
}