/* * Copyright (c) 2026-present, the Ladybird developers. * * SPDX-License-Identifier: BSD-2-Clause */ use std::env; use std::error::Error; use std::path::PathBuf; fn main() -> Result<(), Box> { let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?); let out_dir = PathBuf::from(env::var("OUT_DIR")?); println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=cbindgen.toml"); println!("cargo:rerun-if-env-changed=FFI_OUTPUT_DIR"); println!("cargo:rerun-if-changed=src"); let ffi_out_dir = env::var("FFI_OUTPUT_DIR") .map(PathBuf::from) .unwrap_or_else(|_| out_dir.clone()); cbindgen::generate(manifest_dir).map_or_else( |error| match error { cbindgen::Error::ParseSyntaxError { .. } => {} e => panic!("{e:?}"), }, |bindings| { let header_path = out_dir.join("RustFFI.h"); bindings.write_to_file(&header_path); if ffi_out_dir != out_dir { bindings.write_to_file(ffi_out_dir.join("RustFFI.h")); } }, ); Ok(()) }