Add use_system_unicorn feature in rust bindings
This commit is contained in:
parent
1923c12315
commit
3e9ae003b7
|
@ -24,8 +24,14 @@ bitflags = "1.3"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
build-helper = "0.1"
|
reqwest = { optional = true, version = "0.11", features = ["blocking"] }
|
||||||
reqwest = { version = "0.11", features = ["blocking"] }
|
flate2 = { optional = true, version = "1.0" }
|
||||||
flate2 = "1.0.22"
|
tar = { optional = true, version = "0.4" }
|
||||||
tar = "0.4.37"
|
bytes = { optional = true, version = "1" }
|
||||||
bytes = "1.1.0"
|
pkg-config = { optional = true, version = "0.3" }
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["build_unicorn_cmake"]
|
||||||
|
|
||||||
|
use_system_unicorn = ["pkg-config"]
|
||||||
|
build_unicorn_cmake = ["reqwest", "flate2", "tar", "bytes"]
|
||||||
|
|
|
@ -1,10 +1,19 @@
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
use bytes::Buf;
|
use bytes::Buf;
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
use flate2::read::GzDecoder;
|
use flate2::read::GzDecoder;
|
||||||
|
#[cfg(feature = "use_system_unicorn")]
|
||||||
|
use pkg_config;
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
use reqwest::header::USER_AGENT;
|
use reqwest::header::USER_AGENT;
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
use std::{env, process::Command};
|
use std::{env, process::Command};
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
use tar::Archive;
|
use tar::Archive;
|
||||||
|
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
fn find_unicorn(unicorn_dir: &Path) -> Option<PathBuf> {
|
fn find_unicorn(unicorn_dir: &Path) -> Option<PathBuf> {
|
||||||
for entry in std::fs::read_dir(unicorn_dir).ok()? {
|
for entry in std::fs::read_dir(unicorn_dir).ok()? {
|
||||||
let entry = entry.unwrap();
|
let entry = entry.unwrap();
|
||||||
|
@ -18,11 +27,13 @@ fn find_unicorn(unicorn_dir: &Path) -> Option<PathBuf> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
fn out_dir() -> PathBuf {
|
fn out_dir() -> PathBuf {
|
||||||
let out_dir = env::var("OUT_DIR").unwrap();
|
let out_dir = env::var("OUT_DIR").unwrap();
|
||||||
Path::new(&out_dir).to_path_buf()
|
Path::new(&out_dir).to_path_buf()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
fn download_unicorn() -> PathBuf {
|
fn download_unicorn() -> PathBuf {
|
||||||
// https://docs.github.com/en/rest/reference/repos#download-a-repository-archive-tar
|
// https://docs.github.com/en/rest/reference/repos#download-a-repository-archive-tar
|
||||||
let pkg_version;
|
let pkg_version;
|
||||||
|
@ -51,8 +62,9 @@ fn download_unicorn() -> PathBuf {
|
||||||
find_unicorn(&out_dir).unwrap()
|
find_unicorn(&out_dir).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
#[allow(clippy::branches_sharing_code)]
|
#[allow(clippy::branches_sharing_code)]
|
||||||
fn main() {
|
fn build_with_cmake() {
|
||||||
let profile = env::var("PROFILE").unwrap();
|
let profile = env::var("PROFILE").unwrap();
|
||||||
|
|
||||||
if let Some(unicorn_dir) = find_unicorn(&out_dir()) {
|
if let Some(unicorn_dir) = find_unicorn(&out_dir()) {
|
||||||
|
@ -184,3 +196,16 @@ fn main() {
|
||||||
println!("cargo:rerun-if-changed=build.rs");
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
println!("cargo:rerun-if-changed=src");
|
println!("cargo:rerun-if-changed=src");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
if cfg!(feature = "use_system_unicorn") {
|
||||||
|
#[cfg(feature = "use_system_unicorn")]
|
||||||
|
pkg_config::Config::new()
|
||||||
|
.atleast_version("2")
|
||||||
|
.probe("unicorn")
|
||||||
|
.expect("Could not find system unicorn2");
|
||||||
|
} else {
|
||||||
|
#[cfg(feature = "build_unicorn_cmake")]
|
||||||
|
build_with_cmake();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue