use std::{env, io::Write};
use tempfile::NamedTempFile;
fn main() {
println!("cargo:rerun-if-env-changed=CARGO_FEATURE_CAPI");
println!("cargo:rerun-if-env-changed=LIBPATHRS_CAPI_BUILDMODE");
if cfg!(feature = "capi") {
let is_cdylib = match env::var("LIBPATHRS_CAPI_BUILDMODE")
.unwrap_or_else(|_| "".to_string())
.as_str()
{
"cdylib" => {
println!("cargo:rustc-cfg=cdylib");
true
}
"staticlib" | "" => false,
v => panic!("unknown LIBPATHRS_CAPI_BUILDMODE={v} value"),
};
if is_cdylib {
let name = "pathrs";
let major = env::var("CARGO_PKG_VERSION_MAJOR").unwrap();
println!("cargo:rustc-cdylib-link-arg=-Wl,-soname,lib{name}.so.{major}");
let (mut version_script_file, version_script_path) =
NamedTempFile::with_prefix("libpathrs-version-script.")
.expect("mktemp")
.keep()
.expect("persist mktemp");
let version_script_path = version_script_path
.to_str()
.expect("mktemp should be utf-8 safe string");
writeln!(
version_script_file,
r#"
LIBPATHRS_0.1 {{ }};
LIBPATHRS_0.2 {{ local: *; }} LIBPATHRS_0.1;
"#
)
.expect("write version script");
println!("cargo:rustc-cdylib-link-arg=-Wl,--version-script={version_script_path}");
println!("cargo:rustc-cdylib-link-arg=-fuse-ld=lld");
}
}
}