liburing2-sys 0.3.0+f4e42a5

liburing bindings with optional LTO
Documentation
fn main() {
    println!("cargo:rerun-if-changed=build.rs");

    let cflags = match std::env::var("CARGO_FEATURE_LTO").is_ok() {
        true => "CFLAGS=\"-O3 -flto=thin\"",
        false => "CFLAGS=\"-O3\"",
    };

    let out_dir = std::env::var("OUT_DIR").unwrap();
    let manifest = std::env::var("CARGO_MANIFEST_DIR").unwrap();

    let script = format!(
        r#"
rm -rf {out_dir}/build
cp -r {manifest}/liburing {out_dir}/build
cd {out_dir}/build
./configure --cc=clang --use-libc
make -C src V=1 {cflags} liburing-ffi.a
cp src/liburing-ffi.a ../liburing2-sys.a
"#
    );

    std::process::Command::new("sh").arg("-c").arg(script).status().unwrap();

    println!("cargo:rustc-link-lib=uring2-sys");
    println!("cargo:rustc-link-search={out_dir}");

    bindgen::Builder::default()
        .clang_arg("--define-macro=IOURINGINLINE=")
        .header(format!("{out_dir}/build/src/include/liburing.h"))
        .allowlist_function("io_uring.*")
        .allowlist_type("io_uring.*")
        .allowlist_var("IOSQE.*")
        .allowlist_var("IORING.*")
        .anon_fields_prefix("anonymous")
        .default_non_copy_union_style(bindgen::NonCopyUnionStyle::ManuallyDrop)
        .default_enum_style(bindgen::EnumVariation::ModuleConsts)
        .layout_tests(false)
        .merge_extern_blocks(true)
        .use_core()
        .generate()
        .unwrap()
        .write_to_file(format!("{out_dir}/bindings.rs"))
        .unwrap();
}