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