parent
19961b33ac
commit
ef8f09ae52
@ -1,49 +1,18 @@ |
||||
extern crate "pkg-config" as pkg_config; |
||||
extern crate gcc; |
||||
|
||||
use std::io::process::Command; |
||||
use std::default::Default; |
||||
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()); |
||||
if !pkg_config::find_library("liblmdb").is_ok() { |
||||
|
||||
let mut cflags = os::getenv("CFLAGS").unwrap_or(String::new()); |
||||
let target = os::getenv("TARGET").unwrap(); |
||||
let mdb = Path::new(os::getenv("CARGO_MANIFEST_DIR").unwrap()) |
||||
.join_many(&["mdb", "libraries", "liblmdb"]); |
||||
|
||||
if target.contains("i686") { |
||||
cflags.push_str(" -m32"); |
||||
} else if target.contains("x86_64") { |
||||
cflags.push_str(" -m64"); |
||||
gcc::compile_library("liblmdb.a", |
||||
&Default::default(), |
||||
&[mdb.join("mdb.c").as_str().unwrap(), |
||||
mdb.join("midl.c").as_str().unwrap()]) |
||||
} |
||||
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()); |
||||
} |
||||
|
Loading…
Reference in new issue