uring-sys 0.7.4

liburing bindings
Documentation
use std::env;
use std::fs;
use std::path::*;
use std::process::Command;

use cc::Build;

fn main() {
    let project = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).canonicalize().unwrap();
    let liburing = project.join("liburing");

    // Run the configure script in OUT_DIR to get `compat.h`
    let configured_include = configure(&liburing);

    let src = liburing.join("src");

    // liburing
    Build::new().file(src.join("setup.c"))
                .file(src.join("queue.c"))
                .file(src.join("syscall.c"))
                .file(src.join("register.c"))
                .include(src.join("include"))
                .include(&configured_include)
                .extra_warnings(false)
                .compile("uring");

    // (our additional, linkable C bindings)
    Build::new().file(project.join("rusturing.c"))
                .include(src.join("include"))
                .include(&configured_include)
                .compile("rusturing");
}

fn configure(liburing: &Path) -> PathBuf {
    let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()).canonicalize().unwrap();
    fs::copy(liburing.join("configure"), out_dir.join("configure")).unwrap();
    fs::create_dir_all(out_dir.join("src/include/liburing")).unwrap();
    Command::new("./configure").current_dir(&out_dir).output().expect("configure script failed");
    out_dir.join("src/include")
}