use std::path::PathBuf;
use std::process::Command;
fn main() {
if let Ok(docs_rs) = std::env::var("DOCS_RS") {
if docs_rs == "1" {
return;
}
}
let lean_output = Command::new("lean")
.args(["--print-prefix"])
.output()
.expect("Failed to execute lean");
if !lean_output.status.success() {
panic!(
"Command \"lean --print-prefix\" exited unsuccessfully: error {}",
lean_output.status
);
}
let lean_dir = PathBuf::from(String::from_utf8(lean_output.stdout)
.expect("Path returned by \"lean --print-prefix\" is invalid UTF-8; this is currently not supported")
.trim());
let lib_dir = if cfg!(target_os = "windows") {
lean_dir.join("bin")
} else {
lean_dir.join("lib/lean")
};
if !cfg!(feature = "static") {
let mut shared_lib = lib_dir.clone();
let exists = if cfg!(target_os = "windows") {
shared_lib.push("libleanshared.dll");
shared_lib.exists()
} else if cfg!(target_os = "macos") {
shared_lib.push("libleanshared.dylib");
shared_lib.exists()
} else if cfg!(unix) {
shared_lib.push("libleanshared.so");
shared_lib.exists()
} else {
true
};
if !exists {
panic!(
"{} was not found. We errored, as this would probably cause a linking failure later",
shared_lib.display()
);
}
println!("cargo:rustc-link-search={}", lib_dir.display());
println!("cargo:rustc-link-lib=leanshared");
println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib_dir.display());
} else if cfg!(feature = "extern") {
println!("cargo:rustc-link-search={}/lib/lean", lean_dir.display());
println!("cargo:rustc-link-search={}/lib", lean_dir.display());
for lib in ["Lean", "Init", "leanrt", "leancpp", "gmp", "c++", "c++abi"] {
println!("cargo:rustc-link-lib=static={lib}");
}
} else {
println!("cargo:rustc-link-search={}/lib", lean_dir.display());
println!("cargo:rustc-link-search={}/lib/lean", lean_dir.display());
for libs in [["Lean", "leancpp"], ["Init", "leanrt"]] {
println!("cargo:rustc-link-arg=-Wl,--start-group");
for lib in libs {
println!("cargo:rustc-link-lib=static={lib}");
}
println!("cargo:rustc-link-arg=-Wl,--end-group");
}
for lib in ["Lake", "c++", "c++abi"] {
println!("cargo:rustc-link-lib=static={lib}");
}
for lib in ["m", "dl", "gmp"] {
println!("cargo:rustc-link-lib=dylib={lib}");
}
}
}