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.
50 lines
1.4 KiB
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());
|
||
|
}
|