wiredtiger-sys 0.1.0

Rust bindings for libwiredtiger
Documentation
use std::{path::PathBuf, process::Command};

fn main() {
    println!("cargo::rerun-if-changed=vendor");
    let subdir: &str = "wiredtiger-3.1.0";

    let out_dir = PathBuf::from(std::env::var("OUT_DIR").expect("OUT_DIR env var"));

    eprintln!("out_dir={out_dir:?}");

    let output = Command::new("cp")
        .arg("-R")
        .arg(format!("vendor/{subdir}"))
        .arg(out_dir.join(subdir))
        .output()
        .expect("autogen wiredtiger build");
    if !output.status.success() {
        panic!("failed to copy sources: {:?}", output);
    } else {
        eprintln!("cp: {output:?}");
    }

    std::env::set_current_dir(out_dir.join(subdir)).expect("chdir to OUT_DIR");

    eprintln!("starting autogen...");
    let output = Command::new("./autogen.sh")
        .output()
        .expect("autogen wiredtiger build");
    if !output.status.success() {
        panic!("failed to autogen: {:?}", output);
    }
    eprintln!("done with autogen.sh");

    eprintln!("starting configure...");
    let output = Command::new("./configure")
        .output()
        .expect("configure wiredtiger build");
    if !output.status.success() {
        panic!("failed to configure wiredtiger: {:?}", output);
    }
    eprintln!("done with configure");

    eprintln!("starting make...");
    let output = Command::new("make")
        .arg("-j4") // TODO(rpb): what is a reasonable value here?
        .output()
        .expect("make wiredtiger");
    if !output.status.success() {
        panic!("failed to make wiredtiger: {:?}", output);
    }
    eprintln!("done with make");

    println!(
        "cargo:rustc-link-search={build_dir}/.libs",
        build_dir = out_dir.join(subdir).display(),
    );
    println!("cargo:rustc-link-lib=static=wiredtiger");

    eprintln!("starting bindgen...");
    bindgen::Builder::default()
        .header("wiredtiger.h")
        .generate()
        .expect("generate bindings")
        .write_to_file(out_dir.join("bindings.rs"))
        .expect("write bindings to file");
    eprintln!("done with bindgen");
}