Use gcc Cargo helper instead of makefile in lmdb-sys

without.crypto
Dan Burkert 10 years ago
parent 19961b33ac
commit ef8f09ae52
  1. 2
      .travis.yml
  2. 8
      README.md
  3. 3
      lmdb-sys/Cargo.toml
  4. 49
      lmdb-sys/build.rs

@ -7,4 +7,4 @@ script:
- cargo test -v
- cargo doc
after_script:
- curl http://www.rust-ci.org/artifacts/put?t=$RUSTCI_TOKEN | sh
- mv target/doc . && curl http://www.rust-ci.org/artifacts/put?t=$RUSTCI_TOKEN | sh

@ -11,6 +11,14 @@ Safe Rust bindings for the [Symas Lightning Memory-Mapped Database (LMDB)](http:
Provides the minimal amount of abstraction necessary to interact with LMDB safely in Rust. In
general, the API is very similar to the LMDB [C-API](http://symas.com/mdb/doc/).
## Building from Source
```bash
git clone --recursive git@github.com:danburkert/lmdb-rs.git
cd lmdb-rs
cargo build
```
## TODO
* [x] lmdb-sys.

@ -14,3 +14,6 @@ name = "lmdb-sys"
[build-dependencies.pkg-config]
pkg-config = "*"
[build-dependencies.gcc]
gcc = "*"

@ -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…
Cancel
Save