use std::env;
enum Strategy {
StaticLinking,
DynamicLinking,
DynamicLoading,
}
fn resolve_strategy() -> Strategy {
if env::var("CARGO_FEATURE_DLOPEN").is_ok() {
return Strategy::DynamicLoading;
}
if env::var("XMF_STATIC").is_ok() {
return Strategy::StaticLinking;
}
if env::var("XMF_DYNAMIC").is_ok() {
return Strategy::DynamicLinking;
}
if env::var("CARGO_FEATURE_STATIC").is_ok() {
return Strategy::StaticLinking;
}
Strategy::DynamicLinking
}
fn main() {
println!("cargo::rerun-if-env-changed=XMF_STATIC");
println!("cargo::rerun-if-env-changed=XMF_DYNAMIC");
println!("cargo::rerun-if-env-changed=XMF_SEARCH_PATH");
let strategy = resolve_strategy();
match strategy {
Strategy::StaticLinking => {
println!("cargo:rustc-link-lib=static=xmf");
}
Strategy::DynamicLinking => {
println!("cargo:rustc-link-lib=dylib=xmf");
}
Strategy::DynamicLoading => {
}
}
if let Ok(search_path) = env::var("XMF_SEARCH_PATH") {
println!("cargo::rustc-link-search={search_path}");
}
}