mirror of
https://github.com/isar/rusqlite.git
synced 2024-11-24 18:01:37 +08:00
Merge pull request #1361 from gwenn/clean_build
Factorize code in build.rs
This commit is contained in:
commit
5980013935
@ -26,14 +26,19 @@ fn is_compiler(compiler_name: &str) -> bool {
|
|||||||
env::var("CARGO_CFG_TARGET_ENV").map_or(false, |v| v == compiler_name)
|
env::var("CARGO_CFG_TARGET_ENV").map_or(false, |v| v == compiler_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Copy bindgen file from `dir` to `out_path`.
|
||||||
|
fn copy_bindings<T: AsRef<Path>>(dir: &str, bindgen_name: &str, out_path: T) {
|
||||||
|
std::fs::copy(format!("{dir}/{bindgen_name}"), out_path)
|
||||||
|
.expect("Could not copy bindings to output directory");
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
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");
|
||||||
if cfg!(feature = "in_gecko") {
|
if cfg!(feature = "in_gecko") {
|
||||||
// When inside mozilla-central, we are included into the build with
|
// When inside mozilla-central, we are included into the build with
|
||||||
// sqlite3.o directly, so we don't want to provide any linker arguments.
|
// sqlite3.o directly, so we don't want to provide any linker arguments.
|
||||||
std::fs::copy("sqlite3/bindgen_bundled_version.rs", out_path)
|
copy_bindings("sqlite3", "bindgen_bundled_version.rs", out_path);
|
||||||
.expect("Could not copy bindings to output directory");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,14 +101,12 @@ mod build_bundled {
|
|||||||
#[cfg(feature = "buildtime_bindgen")]
|
#[cfg(feature = "buildtime_bindgen")]
|
||||||
{
|
{
|
||||||
use super::{bindings, HeaderLocation};
|
use super::{bindings, HeaderLocation};
|
||||||
let header = HeaderLocation::FromPath(format!("{}/sqlite3.h", lib_name));
|
let header = HeaderLocation::FromPath(lib_name.to_owned());
|
||||||
bindings::write_to_out_dir(header, out_path);
|
bindings::write_to_out_dir(header, out_path);
|
||||||
}
|
}
|
||||||
#[cfg(not(feature = "buildtime_bindgen"))]
|
#[cfg(not(feature = "buildtime_bindgen"))]
|
||||||
{
|
{
|
||||||
use std::fs;
|
super::copy_bindings(lib_name, "bindgen_bundled_version.rs", out_path);
|
||||||
fs::copy(format!("{lib_name}/bindgen_bundled_version.rs"), out_path)
|
|
||||||
.expect("Could not copy bindings to output directory");
|
|
||||||
}
|
}
|
||||||
println!("cargo:rerun-if-changed={lib_name}/sqlite3.c");
|
println!("cargo:rerun-if-changed={lib_name}/sqlite3.c");
|
||||||
println!("cargo:rerun-if-changed=sqlite3/wasm32-wasi-vfs.c");
|
println!("cargo:rerun-if-changed=sqlite3/wasm32-wasi-vfs.c");
|
||||||
@ -345,7 +348,7 @@ impl From<HeaderLocation> for String {
|
|||||||
header
|
header
|
||||||
}
|
}
|
||||||
HeaderLocation::Wrapper => "wrapper.h".into(),
|
HeaderLocation::Wrapper => "wrapper.h".into(),
|
||||||
HeaderLocation::FromPath(path) => path,
|
HeaderLocation::FromPath(path) => format!("{}/sqlite3.h", path),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -372,11 +375,7 @@ mod build_linked {
|
|||||||
// on buildtime_bindgen instead, but this is still supported as we
|
// on buildtime_bindgen instead, but this is still supported as we
|
||||||
// have runtime version checks and there are good reasons to not
|
// have runtime version checks and there are good reasons to not
|
||||||
// want to run bindgen.
|
// want to run bindgen.
|
||||||
std::fs::copy(
|
super::copy_bindings(lib_name(), "bindgen_bundled_version.rs", out_path);
|
||||||
format!("{}/bindgen_bundled_version.rs", lib_name()),
|
|
||||||
out_path,
|
|
||||||
)
|
|
||||||
.expect("Could not copy bindings to output directory");
|
|
||||||
} else {
|
} else {
|
||||||
bindings::write_to_out_dir(header, out_path);
|
bindings::write_to_out_dir(header, out_path);
|
||||||
}
|
}
|
||||||
@ -434,8 +433,7 @@ mod build_linked {
|
|||||||
.print_system_libs(false)
|
.print_system_libs(false)
|
||||||
.probe(link_lib)
|
.probe(link_lib)
|
||||||
{
|
{
|
||||||
if let Some(mut header) = lib.include_paths.pop() {
|
if let Some(header) = lib.include_paths.pop() {
|
||||||
header.push("sqlite3.h");
|
|
||||||
HeaderLocation::FromPath(header.to_string_lossy().into())
|
HeaderLocation::FromPath(header.to_string_lossy().into())
|
||||||
} else {
|
} else {
|
||||||
HeaderLocation::Wrapper
|
HeaderLocation::Wrapper
|
||||||
@ -454,8 +452,7 @@ mod build_linked {
|
|||||||
if cfg!(feature = "vcpkg") && is_compiler("msvc") {
|
if cfg!(feature = "vcpkg") && is_compiler("msvc") {
|
||||||
// See if vcpkg can find it.
|
// See if vcpkg can find it.
|
||||||
if let Ok(mut lib) = vcpkg::Config::new().probe(lib_name()) {
|
if let Ok(mut lib) = vcpkg::Config::new().probe(lib_name()) {
|
||||||
if let Some(mut header) = lib.include_paths.pop() {
|
if let Some(header) = lib.include_paths.pop() {
|
||||||
header.push("sqlite3.h");
|
|
||||||
return Some(HeaderLocation::FromPath(header.to_string_lossy().into()));
|
return Some(HeaderLocation::FromPath(header.to_string_lossy().into()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -471,14 +468,13 @@ mod bindings {
|
|||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
use super::HeaderLocation;
|
use super::HeaderLocation;
|
||||||
|
|
||||||
use std::fs;
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
static PREBUILT_BINDGEN_PATHS: &[&str] = &["bindgen-bindings/bindgen_3.14.0.rs"];
|
static PREBUILT_BINDGENS: &[&str] = &["bindgen_3.14.0.rs"];
|
||||||
|
|
||||||
pub fn write_to_out_dir(_header: HeaderLocation, out_path: &Path) {
|
pub fn write_to_out_dir(_header: HeaderLocation, out_path: &Path) {
|
||||||
let in_path = PREBUILT_BINDGEN_PATHS[PREBUILT_BINDGEN_PATHS.len() - 1];
|
let name = PREBUILT_BINDGENS[PREBUILT_BINDGENS.len() - 1];
|
||||||
fs::copy(in_path, out_path).expect("Could not copy bindings to output directory");
|
super::copy_bindings("bindgen-bindings", name, out_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user