use std::env;
use std::process::Command;
fn main() {
println!("cargo:rustc-link-lib=framework=ScreenCaptureKit");
let swift_dir = "swift-bridge";
let out_dir = env::var("OUT_DIR").unwrap();
let swift_build_dir = format!("{out_dir}/swift-build");
println!("cargo:rerun-if-changed={swift_dir}");
if let Ok(output) = Command::new("swiftlint")
.args(["lint"])
.current_dir(swift_dir)
.output()
{
if !output.status.success() {
eprintln!("SwiftLint warnings:\n{}", String::from_utf8_lossy(&output.stdout));
}
}
let output = Command::new("swift")
.args([
"build",
"-c", "release",
"--package-path", swift_dir,
"--scratch-path", &swift_build_dir,
])
.output()
.expect("Failed to build Swift bridge");
if !output.status.success() {
eprintln!("Swift build STDOUT:\n{}", String::from_utf8_lossy(&output.stdout));
eprintln!("Swift build STDERR:\n{}", String::from_utf8_lossy(&output.stderr));
panic!("Swift build failed with exit code: {:?}", output.status.code());
}
println!("cargo:rustc-link-search=native={swift_build_dir}/release");
println!("cargo:rustc-link-lib=static=ScreenCaptureKitBridge");
println!("cargo:rustc-link-lib=framework=Foundation");
println!("cargo:rustc-link-lib=framework=CoreGraphics");
println!("cargo:rustc-link-lib=framework=CoreMedia");
println!("cargo:rustc-link-lib=framework=IOSurface");
println!("cargo:rustc-link-arg=-Wl,-rpath,/usr/lib/swift");
}