Safe Rust bindings for LMDB with encryption at rest
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lmdb-rs/lmdb-sys/build.rs

50 lines
1.4 KiB

10 years ago
extern crate "pkg-config" as pkg_config;
use std::io::process::Command;
use std::os;
/// Run a command and ensure a successful result.
fn run_cmd(cmd: &Command) {
assert!(cmd.status().unwrap().success(),
format!("Failed to execute command \"{}\"", cmd))
}
fn main() {
if pkg_config::find_library("liblmdb").is_ok() { return }
let base_dir = Path::new(os::getenv("CARGO_MANIFEST_DIR").unwrap());
let lmdb_dir = base_dir.join_many(&["mdb", "libraries", "liblmdb"]);
let dest_dir = Path::new(os::getenv("OUT_DIR").unwrap());
let mut cflags = os::getenv("CFLAGS").unwrap_or(String::new());
let target = os::getenv("TARGET").unwrap();
if target.contains("i686") {
cflags.push_str(" -m32");
} else if target.contains("x86_64") {
cflags.push_str(" -m64");
}
if !target.contains("i686") {
cflags.push_str(" -fPIC");
}
let mut make = Command::new("make");
make.arg("-C").arg(lmdb_dir.clone());
let mut make_build = make.clone();
make_build.arg("liblmdb.a")
.arg(format!("XCFLAGS={}", cflags));
let mut make_clean = make.clone();
make_clean.arg("clean");
run_cmd(&make_clean);
run_cmd(&make_build);
run_cmd(Command::new("cp")
.arg(lmdb_dir.join("liblmdb.a"))
.arg(dest_dir.clone()));
run_cmd(&make_clean);
println!("cargo:rustc-flags=-L {} -l lmdb:static", dest_dir.display());
}