honzo-c 0.1.1

C FFI bindings for the Honzo ebook format
fn main() {
    let manifest_dir =
        std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR is set by Cargo");
    let entry = format!("{}/src/lib.rs", manifest_dir);
    let out_dir = format!("{}/include", manifest_dir);
    let cpp_out_dir = format!("{}/include/cpp", manifest_dir);
    println!("cargo:rerun-if-changed=src/lib.rs");
    println!("cargo:rerun-if-changed=diplomat.toml");
    println!("cargo:rerun-if-changed=include");
    std::fs::create_dir_all("include").ok();
    std::fs::create_dir_all("include/cpp").ok();

    let diplomat_bin = std::env::var("CARGO_BIN_EXE_diplomat_tool").unwrap_or_else(|_| {
        std::env::var("DIPLOMAT_TOOL_PATH").unwrap_or_else(|_| "diplomat-tool".into())
    });

    for (language, output_dir) in [("c", &out_dir), ("cpp", &cpp_out_dir)] {
        match std::process::Command::new(&diplomat_bin)
            .args([
                language,
                output_dir,
                "--entry",
                &entry,
                "--config-file",
                "diplomat.toml",
            ])
            .output()
        {
            Ok(output) if output.status.success() => {}
            Ok(output) => {
                panic!(
                    "diplomat-tool {} failed with status {}\nstdout:\n{}\nstderr:\n{}",
                    language,
                    output.status,
                    String::from_utf8_lossy(&output.stdout),
                    String::from_utf8_lossy(&output.stderr)
                );
            }
            Err(e) => {
                panic!(
                        "failed to run diplomat-tool {} (install with: cargo install diplomat-tool): {}",
                        language,
                        e
                    );
            }
        }
    }
}