use std::env;
use std::path::PathBuf;
use std::process::Command;
fn set_lib_search_dir() -> () {
let cargo_manifest_dir: String = env::var("CARGO_MANIFEST_DIR").unwrap();
fn print_link_search_path(base_dir: String, extension_path: &[&str]) {
let mut path = PathBuf::from(base_dir.clone());
path.extend(extension_path);
println!("cargo:rustc-link-search=native={}", path.display());
}
cfg_if::cfg_if! {
if #[cfg(all(target_arch="x86_64", target_os="macos"))] {
print_link_search_path (cargo_manifest_dir, &["libs", "darwin-x86_64"]);
} else if #[cfg(all(target_arch="aarch64", target_os="macos"))] {
print_link_search_path(cargo_manifest_dir, &["libs", "darwin-aarch64"]);
} else if #[cfg(all(target_arch="aarch64", target_os="linux", target_env="gnu"))] {
print_link_search_path(cargo_manifest_dir, &["libs", "linux-aarch64"]);
} else if #[cfg(all(target_arch="x86_64", target_os="linux", target_env="gnu"))] {
print_link_search_path(cargo_manifest_dir, &["libs", "linux-x86_64"]);
} else if #[cfg(all(target_arch="x86", target_os="linux", target_env="gnu"))] {
print_link_search_path(cargo_manifest_dir, &["libs", "linux-x86"]);
} else if #[cfg(all(target_arch="x86_64", target_os="linux", target_env="musl"))] {
print_link_search_path(cargo_manifest_dir, &["libs", "musl-x86_64"]);
} else if #[cfg(all(target_arch="aarch64", target_os="linux", target_env="musl"))] {
print_link_search_path(cargo_manifest_dir, &["libs", "musl-aarch64"]);
} else if #[cfg(all(target_arch="x86_64", target_os="windows", target_env="msvc"))] {
print_link_search_path(cargo_manifest_dir, &["libs", "win32-x86_64"]);
} else if #[cfg(all(target_arch="x86", target_os="windows", target_env="msvc"))] {
print_link_search_path(cargo_manifest_dir, &["libs", "win32-x86"]);
} else {
compile_error!("The build target is not supported by LexActivator.");
}
}
println!("cargo:rustc-link-lib=LexActivator");
}
fn set_libs_to_link() {
cfg_if::cfg_if! {
if #[cfg(target_os="macos")] {
println!("cargo:rustc-link-lib=dylib=c++");
let output = Command::new("sh")
.arg("-c")
.arg("clang --print-search-dirs | grep -E 'libraries' | cut -d'=' -f2")
.output()
.expect("LexActivator failed to find clang libraries. Please ensure that clang is installed.");
let path = String::from_utf8_lossy(&output.stdout);
let clang_libs_path = format!("{}/lib/darwin/", path.trim());
println!("cargo:rustc-link-search=native={}", clang_libs_path);
println!("cargo:rustc-link-lib=static=clang_rt.osx");
println!("cargo:rustc-link-lib=framework=Security");
println!("cargo:rustc-link-lib=framework=CoreFoundation");
println!("cargo:rustc-link-lib=framework=SystemConfiguration");
} else if #[cfg(target_os="linux")] {
println!("cargo:rustc-link-lib=dylib=stdc++");
} else if #[cfg(target_os="windows")] {
}
}
}
fn main() {
set_lib_search_dir();
set_libs_to_link();
}