mirror of
https://github.com/isar/rusqlite.git
synced 2024-11-23 00:39:20 +08:00
Merge pull request #308 from jgallagher/lvillani-sqlcipher
Add support for linking to SQLCipher
This commit is contained in:
commit
00e90eaafe
@ -1,4 +1,5 @@
|
|||||||
sudo: false
|
sudo: false
|
||||||
|
dist: trusty
|
||||||
|
|
||||||
language: rust
|
language: rust
|
||||||
|
|
||||||
@ -13,12 +14,10 @@ matrix:
|
|||||||
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
|
||||||
- llvm-toolchain-precise-3.9
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages: # recommanded versions for rust-bindgen
|
packages: # recommanded versions for rust-bindgen
|
||||||
- llvm-3.9-dev
|
- llvm-3.9-dev
|
||||||
- libclang-3.9-dev
|
- libclang-3.9-dev
|
||||||
|
- libsqlcipher-dev
|
||||||
|
|
||||||
env: # specify the clang path for rust-bindgen
|
env: # specify the clang path for rust-bindgen
|
||||||
- LIBCLANG_PATH=/usr/lib/llvm-3.9/lib
|
- LIBCLANG_PATH=/usr/lib/llvm-3.9/lib
|
||||||
@ -26,6 +25,7 @@ env: # specify the clang path for rust-bindgen
|
|||||||
script:
|
script:
|
||||||
- cargo build
|
- cargo build
|
||||||
- cargo build --features bundled
|
- cargo build --features bundled
|
||||||
|
- cargo build --features sqlcipher
|
||||||
- cargo test
|
- cargo test
|
||||||
- cargo test --features backup
|
- cargo test --features backup
|
||||||
- cargo test --features blob
|
- cargo test --features blob
|
||||||
@ -36,6 +36,7 @@ script:
|
|||||||
- cargo test --features chrono
|
- cargo test --features chrono
|
||||||
- cargo test --features serde_json
|
- cargo test --features serde_json
|
||||||
- cargo test --features bundled
|
- cargo test --features bundled
|
||||||
|
- cargo test --features sqlcipher
|
||||||
- cargo test --features "backup blob chrono functions limits load_extension serde_json trace"
|
- cargo test --features "backup blob chrono functions limits load_extension serde_json trace"
|
||||||
- cargo test --features "backup blob chrono functions limits load_extension serde_json trace buildtime_bindgen"
|
- cargo test --features "backup blob chrono functions limits load_extension serde_json trace buildtime_bindgen"
|
||||||
- cargo test --features "backup blob chrono functions limits load_extension serde_json trace bundled"
|
- cargo test --features "backup blob chrono functions limits load_extension serde_json trace bundled"
|
||||||
|
@ -26,6 +26,7 @@ trace = ["libsqlite3-sys/min_sqlite_version_3_6_23"]
|
|||||||
bundled = ["libsqlite3-sys/bundled"]
|
bundled = ["libsqlite3-sys/bundled"]
|
||||||
buildtime_bindgen = ["libsqlite3-sys/buildtime_bindgen"]
|
buildtime_bindgen = ["libsqlite3-sys/buildtime_bindgen"]
|
||||||
limits = []
|
limits = []
|
||||||
|
sqlcipher = ["libsqlite3-sys/sqlcipher"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
time = "0.1.0"
|
time = "0.1.0"
|
||||||
|
@ -7,13 +7,14 @@ description = "Native bindings to the libsqlite3 library"
|
|||||||
license = "MIT"
|
license = "MIT"
|
||||||
links = "sqlite3"
|
links = "sqlite3"
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
keywords = ["sqlite", "database", "ffi"]
|
keywords = ["sqlite", "sqlcipher", "database", "ffi"]
|
||||||
categories = ["database", "external-ffi-bindings"]
|
categories = ["database", "external-ffi-bindings"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["min_sqlite_version_3_6_8"]
|
default = ["min_sqlite_version_3_6_8"]
|
||||||
bundled = ["cc"]
|
bundled = ["cc"]
|
||||||
buildtime_bindgen = ["bindgen", "pkg-config", "vcpkg"]
|
buildtime_bindgen = ["bindgen", "pkg-config", "vcpkg"]
|
||||||
|
sqlcipher = []
|
||||||
min_sqlite_version_3_6_8 = ["pkg-config", "vcpkg"]
|
min_sqlite_version_3_6_8 = ["pkg-config", "vcpkg"]
|
||||||
min_sqlite_version_3_6_11 = ["pkg-config", "vcpkg"]
|
min_sqlite_version_3_6_11 = ["pkg-config", "vcpkg"]
|
||||||
min_sqlite_version_3_6_23 = ["pkg-config", "vcpkg"]
|
min_sqlite_version_3_6_23 = ["pkg-config", "vcpkg"]
|
||||||
|
@ -9,6 +9,10 @@ mod build {
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
|
if cfg!(feature = "sqlcipher") {
|
||||||
|
panic!("Builds with bundled SQLCipher are not supported");
|
||||||
|
}
|
||||||
|
|
||||||
let out_dir = env::var("OUT_DIR").unwrap();
|
let out_dir = env::var("OUT_DIR").unwrap();
|
||||||
let out_path = Path::new(&out_dir).join("bindgen.rs");
|
let out_path = Path::new(&out_dir).join("bindgen.rs");
|
||||||
fs::copy("sqlite3/bindgen_bundled_version.rs", out_path)
|
fs::copy("sqlite3/bindgen_bundled_version.rs", out_path)
|
||||||
@ -58,8 +62,9 @@ mod build {
|
|||||||
fn from(header: HeaderLocation) -> String {
|
fn from(header: HeaderLocation) -> String {
|
||||||
match header {
|
match header {
|
||||||
HeaderLocation::FromEnvironment => {
|
HeaderLocation::FromEnvironment => {
|
||||||
let mut header = env::var("SQLITE3_INCLUDE_DIR")
|
let prefix = env_prefix();
|
||||||
.expect("SQLITE3_INCLUDE_DIR must be set if SQLITE3_LIB_DIR is set");
|
let mut header = env::var(format!("{}_INCLUDE_DIR", prefix))
|
||||||
|
.expect(&format!("{}_INCLUDE_DIR must be set if {}_LIB_DIR is set", prefix, prefix));
|
||||||
header.push_str("/sqlite3.h");
|
header.push_str("/sqlite3.h");
|
||||||
header
|
header
|
||||||
}
|
}
|
||||||
@ -76,9 +81,11 @@ mod build {
|
|||||||
|
|
||||||
// Prints the necessary cargo link commands and returns the path to the header.
|
// Prints the necessary cargo link commands and returns the path to the header.
|
||||||
fn find_sqlite() -> HeaderLocation {
|
fn find_sqlite() -> HeaderLocation {
|
||||||
|
let link_lib = link_lib();
|
||||||
|
|
||||||
// Allow users to specify where to find SQLite.
|
// Allow users to specify where to find SQLite.
|
||||||
if let Ok(dir) = env::var("SQLITE3_LIB_DIR") {
|
if let Ok(dir) = env::var(format!("{}_LIB_DIR", env_prefix())) {
|
||||||
println!("cargo:rustc-link-lib=sqlite3");
|
println!("cargo:rustc-link-lib={}", link_lib);
|
||||||
println!("cargo:rustc-link-search={}", dir);
|
println!("cargo:rustc-link-search={}", dir);
|
||||||
return HeaderLocation::FromEnvironment;
|
return HeaderLocation::FromEnvironment;
|
||||||
}
|
}
|
||||||
@ -88,7 +95,7 @@ mod build {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// See if pkg-config can do everything for us.
|
// See if pkg-config can do everything for us.
|
||||||
match pkg_config::Config::new().print_system_libs(false).probe("sqlite3") {
|
match pkg_config::Config::new().print_system_libs(false).probe(link_lib) {
|
||||||
Ok(mut lib) => {
|
Ok(mut lib) => {
|
||||||
if let Some(mut header) = lib.include_paths.pop() {
|
if let Some(mut header) = lib.include_paths.pop() {
|
||||||
header.push("sqlite3.h");
|
header.push("sqlite3.h");
|
||||||
@ -102,7 +109,7 @@ mod build {
|
|||||||
// request and hope that the library exists on the system paths. We used to
|
// request and hope that the library exists on the system paths. We used to
|
||||||
// output /usr/lib explicitly, but that can introduce other linking problems; see
|
// output /usr/lib explicitly, but that can introduce other linking problems; see
|
||||||
// https://github.com/jgallagher/rusqlite/issues/207.
|
// https://github.com/jgallagher/rusqlite/issues/207.
|
||||||
println!("cargo:rustc-link-lib=sqlite3");
|
println!("cargo:rustc-link-lib={}", link_lib);
|
||||||
HeaderLocation::Wrapper
|
HeaderLocation::Wrapper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,7 +118,7 @@ mod build {
|
|||||||
#[cfg(all(feature = "vcpkg", target_env = "msvc"))]
|
#[cfg(all(feature = "vcpkg", target_env = "msvc"))]
|
||||||
fn try_vcpkg() -> Option<HeaderLocation> {
|
fn try_vcpkg() -> Option<HeaderLocation> {
|
||||||
// See if vcpkg can find it.
|
// See if vcpkg can find it.
|
||||||
if let Ok(mut lib) = vcpkg::Config::new().probe("sqlite3") {
|
if let Ok(mut lib) = vcpkg::Config::new().probe(link_lib()) {
|
||||||
if let Some(mut header) = lib.include_paths.pop() {
|
if let Some(mut header) = lib.include_paths.pop() {
|
||||||
header.push("sqlite3.h");
|
header.push("sqlite3.h");
|
||||||
return Some(HeaderLocation::FromPath(header.to_string_lossy().into()));
|
return Some(HeaderLocation::FromPath(header.to_string_lossy().into()));
|
||||||
@ -125,6 +132,22 @@ mod build {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn env_prefix() -> &'static str {
|
||||||
|
if cfg!(feature = "sqlcipher") {
|
||||||
|
"SQLCIPHER"
|
||||||
|
} else {
|
||||||
|
"SQLITE3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn link_lib() -> &'static str {
|
||||||
|
if cfg!(feature = "sqlcipher") {
|
||||||
|
"sqlcipher"
|
||||||
|
} else {
|
||||||
|
"sqlite3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "buildtime_bindgen"))]
|
#[cfg(not(feature = "buildtime_bindgen"))]
|
||||||
mod bindings {
|
mod bindings {
|
||||||
use super::HeaderLocation;
|
use super::HeaderLocation;
|
||||||
|
Loading…
Reference in New Issue
Block a user