dirent-sys 0.2.0

Generated bindings for Linux <dirent.h>
Documentation
extern crate bindgen;

use std::process;

fn main() {
  println!("cargo:rustc-link-lib=bcc");
  // Uncomment below to update binding
  build_bindings();
}

fn build_bindings() {
  let mut bindings = bindgen::Builder::default()
    .header("wrapper.h")
    .clang_arg("-I");

  bindings = bindings
    .derive_debug(true)
    .impl_debug(true)
    .derive_default(true)
    .derive_partialeq(true)
    .impl_partialeq(true)
    .derive_eq(true)
    .derive_partialord(true)
    .derive_ord(true)
    .derive_hash(true)
    .rustfmt_bindings(true);

  let builder = bindings.generate().expect("Should generate bindings");

  builder
    .write_to_file("src/dirent.rs")
    .expect("Couldn't write dirent bindings!");

  let have_working_rustfmt = process::Command::new("rustup")
    .args(&["run", "nightly", "rustfmt", "--version"])
    .stdout(process::Stdio::null())
    .stderr(process::Stdio::null())
    .status()
    .ok()
    .map_or(false, |status| status.success());

  if have_working_rustfmt {
    let output = process::Command::new("rustup")
      .args(&[
        "run",
        "nightly",
        "rustfmt",
        "--config-path",
        concat!(env!("CARGO_MANIFEST_DIR"), "/rustfmt.toml"),
        concat!(env!("CARGO_MANIFEST_DIR"), "/src/dirent.rs"),
      ])
      .output()
      .expect("fail to execute `rustup run nightly rustfmt`");
    println!("status: {}", output.status);
    println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
    println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
    assert!(output.status.success());
  } else {
    println!("
        The latest `rustfmt` is required to format the generated bindings. Install
            `rustfmt` with:
            $ rustup update nightly
            $ rustup run nightly cargo install -f rustfmt-nightly
            ");
  }
}