use std::sync::OnceLock;
use crate::discover::{DiscoverOptions, ToolchainInfo, discover_toolchain};
static EMITTED: OnceLock<()> = OnceLock::new();
pub fn emit_lean_link_directives() {
if EMITTED.set(()).is_err() {
return;
}
match discover_toolchain(&DiscoverOptions::default()) {
Ok(info) => emit_for(&info),
Err(diagnostic) => {
println!("cargo:warning={diagnostic}");
emit_rerun_triggers(None);
}
}
}
fn emit_for(info: &ToolchainInfo) {
let lib_lean = info.lib_dir.join("lean");
println!("cargo:rustc-link-search=native={}", lib_lean.display());
println!("cargo:rustc-link-search=native={}", info.lib_dir.display());
println!("cargo:rustc-link-lib=dylib=leanshared");
emit_rerun_triggers(Some(info));
}
fn emit_rerun_triggers(info: Option<&ToolchainInfo>) {
if let Some(info) = info {
println!("cargo:rerun-if-changed={}", info.header_path.display());
}
println!("cargo:rerun-if-env-changed=LEAN_SYSROOT");
println!("cargo:rerun-if-env-changed=ELAN_HOME");
println!("cargo:rerun-if-env-changed=PATH");
}