use std::fs;
use std::path::Path;
fn main() {
let is_linux = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default() == "linux";
let keyboard_enabled = std::env::var("CARGO_FEATURE_KEYBOARD").is_ok();
if is_linux && keyboard_enabled {
let out_dir = std::env::var("OUT_DIR").unwrap_or_else(|_| "/tmp".to_string());
let lib_dir = format!("{}/doe-x11-libs", out_dir);
if !Path::new(&lib_dir).exists() {
let _ = fs::create_dir_all(&lib_dir);
}
link_runtime_lib(&lib_dir, "libXtst.so.6", "libXtst.so");
println!("cargo:rustc-link-search=native={}", lib_dir);
println!("cargo:rustc-link-search=/usr/lib/x86_64-linux-gnu");
println!("cargo:rustc-link-search=/usr/lib/aarch64-linux-gnu");
println!("cargo:rustc-link-search=/usr/lib/i386-linux-gnu");
println!("cargo:rustc-link-search=/usr/lib64");
println!("cargo:rustc-link-search=/usr/lib");
println!("cargo:rustc-link-search=/lib/x86_64-linux-gnu");
println!("cargo:rustc-link-search=/lib64");
println!("cargo:rerun-if-changed=build.rs");
}
}
fn link_runtime_lib(lib_dir: &str, runtime_name: &str, link_name: &str) {
let link_path = format!("{}/{}", lib_dir, link_name);
if Path::new(&link_path).exists() {
return;
}
let search_paths = [
"/lib/x86_64-linux-gnu",
"/usr/lib/x86_64-linux-gnu",
"/lib64",
"/usr/lib64",
"/usr/lib",
"/lib",
];
for dir in &search_paths {
let runtime_path = format!("{}/{}", dir, runtime_name);
if Path::new(&runtime_path).exists() {
let _ = std::os::unix::fs::symlink(&runtime_path, &link_path);
return;
}
}
}