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 test -v
- cargo doc - cargo doc
after_script: 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 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/). 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 ## TODO
* [x] lmdb-sys. * [x] lmdb-sys.

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

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