use std::{env, path::PathBuf};
fn main() {
let outdir = env::var("OUT_DIR").unwrap();
println!("cargo:include={}", outdir);
let mut gen_header_path: PathBuf = outdir.clone().into();
gen_header_path.push("tectonic_bridge_core_generated.h");
println!("cargo:rerun-if-changed=src/lib.rs");
let mut config = cbindgen::Config {
cpp_compat: true,
..Default::default()
};
config.enumeration.prefix_with_name = true;
let mut manifest_dir: PathBuf = env::var("CARGO_MANIFEST_DIR").unwrap().into();
if env::var_os("DOCS_RS").is_some() {
env::set_var("CARGO_NET_OFFLINE", "true");
}
cbindgen::Builder::new()
.with_config(config)
.with_crate(&manifest_dir)
.with_language(cbindgen::Language::C)
.with_include_guard("TECTONIC_BRIDGE_CORE_GENERATED_H")
.with_style(cbindgen::Style::Type)
.with_after_include(
"
typedef struct ttbc_input_handle_t ttbc_input_handle_t;
typedef struct ttbc_output_handle_t ttbc_output_handle_t;
typedef ttbc_input_handle_t *rust_input_handle_t;
typedef ttbc_output_handle_t *rust_output_handle_t;",
)
.rename_item("CoreBridgeState", "ttbc_state_t")
.rename_item("Diagnostic", "ttbc_diagnostic_t")
.rename_item("FileFormat", "ttbc_file_format")
.rename_item("InputHandle", "ttbc_input_handle_t")
.rename_item("OutputHandle", "ttbc_output_handle_t")
.generate()
.expect("Unable to generate bindings")
.write_to_file(&gen_header_path);
let mut main_header_src = manifest_dir.clone();
main_header_src.push("support");
main_header_src.push("tectonic_bridge_core.h");
let mut main_header_dest = PathBuf::from(outdir.clone());
main_header_dest.push("tectonic_bridge_core.h");
std::fs::copy(&main_header_src, &main_header_dest).expect("failed to copy main header");
println!("cargo:rerun-if-changed=support/tectonic_bridge_core.h");
let mut build = cc::Build::new();
build
.warnings(true)
.file("support/support.c")
.include(&outdir)
.compile("libtectonic_bridge_core.a");
println!("cargo:rerun-if-changed=support/support.c");
manifest_dir.push("Cargo.lock");
let _ignored = std::fs::remove_file(&manifest_dir);
}