use std::env; use std::path::PathBuf; use std::process::Command; fn main() { println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=vendor/libghostty-vt.vendor.json"); println!("cargo:rerun-if-changed=vendor/libghostty-vt/build.zig"); println!("cargo:rerun-if-changed=vendor/libghostty-vt/build.zig.zon"); println!("cargo:rerun-if-changed=vendor/libghostty-vt/VERSION"); println!("cargo:rerun-if-env-changed=LIBGHOSTTY_VT_OPTIMIZE"); if env::var_os("CARGO_FEATURE_GHOSTTY_VT").is_none() { return; } let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR")); let vendored_dir = manifest_dir.join("vendor/libghostty-vt"); let optimize = env::var("LIBGHOSTTY_VT_OPTIMIZE").unwrap_or_else(|_| "ReleaseFast".into()); let status = Command::new("zig") .arg("build") .arg("-Demit-lib-vt") .arg(format!("-Doptimize={optimize}")) .current_dir(&vendored_dir) .status() .expect("failed to execute zig build for vendored libghostty-vt"); assert!( status.success(), "zig build for vendored libghostty-vt failed: {status}" ); let lib_dir = vendored_dir.join("zig-out/lib"); println!("cargo:rustc-link-search=native={}", lib_dir.display()); println!("cargo:rustc-link-lib=dylib=ghostty-vt"); let target = env::var("TARGET").expect("TARGET"); if target.contains("linux") { println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib_dir.display()); } else if target.contains("apple-darwin") { println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib_dir.display()); } }