libhdfs3-sys 0.2.0

A Rust binding to libhdfs3 from Apache hawq
Documentation
use std::env;
use std::path::PathBuf;

fn main() {
    build_hdfs3_lib();
    //
    // Generate the Rust wrapper bindings
    // build_hdfs3_ffi();
}

fn build_hdfs3_lib() {
    // Build the native C/C++ libraries
    // Will not be needed if we use system installed versions of libhdfs3. Using pre-installed
    // system version of the libhdfs3 will also save on compile time dependencies of Rust projects
    // as well as significant compilation time.
    //
    // Uncomment the following 4 lines for static linking
    //
    // println!("cargo:rerun-if-changed={}", get_hdfs3_file_path("src/client/hdfs.h"));
    // let dst = cmake::build("libhdfs3");
    // println!("cargo:rustc-link-search=native={}/lib", dst.display());
    // println!("cargo:rustc-link-lib=static=hdfs3");
    // println!("cargo:rustc-link-lib=dylib=stdc++");
    // println!("cargo:rustc-link-lib=dylib=protobuf");
    // println!("cargo:rustc-link-lib=dylib=gsasl");
    // println!("cargo:rustc-link-lib=dylib=uuid");
    // println!("cargo:rustc-link-lib=dylib=xml2");
    // println!("cargo:rustc-link-lib=dylib=krb5");

    // Comment out this, if statically linking
    println!("cargo:rustc-link-lib=dylib=hdfs3");
}

fn get_hdfs3_file_path(filename: &'static str) -> String {
    format!("{}/{}", get_hdfs3_source_dir(), filename)
}

fn get_hdfs3_source_dir() -> &'static str {
    "libhdfs3"
}

#[allow(unused)]
// This is the FFI builder for the Apache Hawq hdfs3 C++ library with its C bindings
fn build_hdfs3_ffi() {
    // Tell cargo to invalidate the built crate whenever the wrapper changes.
    println!("cargo:rerun-if-changed=wrapper.h");

    let bindings = bindgen::Builder::default()
        // The input headers we would like to generate bindings for
        .header("wrapper.h")
        .allowlist_function("nmd.*")
        .allowlist_function("hdfs.*")
        .allowlist_function("hadoop.*")
        .rustified_enum("tObjectKind")
        .parse_callbacks(Box::new(bindgen::CargoCallbacks))
        .generate()
        .expect("Unable to generate bindings!");

    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    bindings
        .write_to_file(out_path.join("hdfs3_bindings.rs"))
        .expect("Couldn't write bindings!");
}