use std::{env, path::PathBuf, process::Command}; fn main() { let sdk_path = String::from_utf8( Command::new("xcrun") .args(["--sdk", "macosx", "--show-sdk-path"]) .output() .unwrap() .stdout, ) .unwrap(); let sdk_path = sdk_path.trim_end(); println!("cargo:rerun-if-changed=src/bindings.h"); let bindings = bindgen::Builder::default() .header("src/bindings.h") .clang_arg(format!("-isysroot{}", sdk_path)) .clang_arg("-xobjective-c") .allowlist_type("CMItemIndex") .allowlist_type("CMSampleTimingInfo") .allowlist_type("CMVideoCodecType") .allowlist_type("VTEncodeInfoFlags") .allowlist_function("CMTimeMake") .allowlist_var("kCVPixelFormatType_.*") .allowlist_var("kCVReturn.*") .allowlist_var("VTEncodeInfoFlags_.*") .allowlist_var("kCMVideoCodecType_.*") .allowlist_var("kCMTime.*") .allowlist_var("kCMSampleAttachmentKey_.*") .parse_callbacks(Box::new(bindgen::CargoCallbacks)) .layout_tests(false) .generate() .expect("unable to generate bindings"); let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); bindings .write_to_file(out_path.join("bindings.rs")) .expect("couldn't write dispatch bindings"); }