System rocksdb and snappy libs through envvars

Variables: ROCKSDB_LIB_DIR, SNAPPY_LIB_DIR, ROCKSDB_STATIC and SNAPPY_STATIC
master
Andrey Lesnikov 7 years ago
parent f784fc2692
commit d3ccbe5e43
No known key found for this signature in database
GPG Key ID: BFEC653B9728D1C3
  1. 30
      librocksdb-sys/build.rs

@ -29,10 +29,7 @@ fn fail_on_empty_directory(name: &str) {
}
}
fn build_rocksdb() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=rocksdb/");
fn bindgen_rocksdb() {
let bindings = bindgen::Builder::default()
.header("rocksdb/include/rocksdb/c.h")
.hide_type("max_align_t") // https://github.com/rust-lang-nursery/rust-bindgen/issues/550
@ -44,7 +41,9 @@ fn build_rocksdb() {
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("unable to write rocksdb bindings");
}
fn build_rocksdb() {
let mut config = cc::Build::new();
config.include("rocksdb/include/");
config.include("rocksdb/");
@ -148,9 +147,32 @@ fn build_snappy() {
config.compile("libsnappy.a");
}
fn try_to_find_and_link_lib(lib_name: &str) -> bool {
if let Ok(lib_dir) = env::var(&format!("{}_LIB_DIR", lib_name)) {
println!("cargo:rustc-link-search=native={}", lib_dir);
let mode = match env::var_os(&format!("{}_STATIC", lib_name)) {
Some(_) => "static",
None => "dylib",
};
println!("cargo:rustc-link-lib={}={}", mode, lib_name.to_lowercase());
return true;
}
false
}
fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=rocksdb/");
println!("cargo:rerun-if-changed=snappy/");
fail_on_empty_directory("rocksdb");
fail_on_empty_directory("snappy");
bindgen_rocksdb();
if !try_to_find_and_link_lib("ROCKSDB") {
build_rocksdb();
}
if !try_to_find_and_link_lib("SNAPPY") {
build_snappy();
}
}

Loading…
Cancel
Save