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");
}