fasthash-sys 0.1.0

A suite of non-cryptographic hash functions for Rust.
extern crate gcc;
extern crate libbindgen;

use std::env;
use std::path::Path;

fn main() {
    gcc::compile_library("libfasthash.a",
                         &["src/fasthash.cpp",
                           "src/smhasher/City.cpp",
                           "src/smhasher/farmhash-c.c",
                           "src/smhasher/mum.cc",
                           "src/smhasher/metrohash64.cpp",
                           // "src/smhasher/metrohash64crc.cpp",
                           "src/smhasher/metrohash128.cpp",
                           // "src/smhasher/metrohash128crc.cpp",
                           "src/smhasher/MurmurHash1.cpp",
                           "src/smhasher/MurmurHash2.cpp",
                           "src/smhasher/MurmurHash3.cpp",
                           "src/smhasher/Spooky.cpp",
                           "src/smhasher/t1ha.cc",
                           "src/smhasher/xxhash.c"]);

    let out_dir = env::var("OUT_DIR").unwrap();
    let _ = libbindgen::builder()
        .clang_arg("-xc++")
        .clang_arg("--std=c++11")
        .header("src/fasthash.hpp")
        .no_unstable_rust()
        .whitelisted_function("^CityHash.*")
        .whitelisted_function("^farmhash.*")
        .whitelisted_function("^metrohash.*")
        .whitelisted_function("^mum_hash.*")
        .whitelisted_function("^MurmurHash.*")
        .whitelisted_function("^SpookyHasher.*")
        .whitelisted_function("^t1ha.*")
        .whitelisted_function("^XXH.*")
        .link_static("fasthash")
        .generate()
        .unwrap()
        .write_to_file(Path::new(&out_dir).join("fasthash.rs"))
        .expect("Couldn't write bindings!");

    if cfg!(target_os = "macos") {
        println!("cargo:rustc-link-lib=dylib=c++");
    } else {
        println!("cargo:rustc-link-lib=dylib=stdc++");
    }
}