aboutsummaryrefslogtreecommitdiff
path: root/build.rs
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2020-09-22 19:09:40 +0200
committerRobin Krahl <robin.krahl@ireas.org>2020-09-22 19:09:40 +0200
commitc484777f3a7dde9e9fe8f47344fd8a6b30840b78 (patch)
tree3d6c111f619e8b2b428e9a1744a9dc15b4f1ca3d /build.rs
parent4932d2376cc03c64eb82972824be673cdc2e0741 (diff)
downloadnitrokey-sys-rs-c484777f3a7dde9e9fe8f47344fd8a6b30840b78.tar.gz
nitrokey-sys-rs-c484777f3a7dde9e9fe8f47344fd8a6b30840b78.tar.bz2
Add feature to generate bindings during build
This patch adds the bindgen feature to the crate that allows users to re-generate the bindings, including layout tests, during the build instead of using the pre-generated bindings. Per default, this feature is disabled.
Diffstat (limited to 'build.rs')
-rw-r--r--build.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/build.rs b/build.rs
index a6ae9fc..d097021 100644
--- a/build.rs
+++ b/build.rs
@@ -54,6 +54,35 @@ fn prepare_version_source(
Ok(out)
}
+#[cfg(feature = "bindgen")]
+fn generate_bindings(library_path: &path::Path, out_path: &path::Path) {
+ let header_path = library_path.join("NK_C_API.h");
+ let header_str = header_path
+ .to_str()
+ .expect("Header path contains invalid UTF-8");
+
+ let include_path = library_path.join("libnitrokey");
+ let include_str = include_path
+ .to_str()
+ .expect("Include path contains invalid UTF-8");
+
+ println!("cargo:rerun-if-changed={}", header_str);
+
+ // always keep options in sync with Makefile
+ let bindings = bindgen::Builder::default()
+ .header(header_str)
+ .whitelist_function("NK_.*")
+ .whitelist_var("NK_.*")
+ .whitelist_var("MAXIMUM_STR_REPLY_LENGTH")
+ .derive_default(true)
+ .clang_arg(&format!("-I{}", include_str))
+ .generate()
+ .expect("Unable to generate bindings");
+ bindings
+ .write_to_file(out_path.join("bindings.rs"))
+ .expect("Could not write bindings");
+}
+
fn main() {
if env::var("USE_SYSTEM_LIBNITROKEY").is_ok() {
println!("cargo:rustc-link-lib=nitrokey");
@@ -78,6 +107,9 @@ fn main() {
let version_source = prepare_version_source(LIBNITROKEY_VERSION, &out_path, &library_path)
.expect("Could not prepare the version source file");
+ #[cfg(feature = "bindgen")]
+ generate_bindings(library_path, &out_path);
+
cc::Build::new()
.cpp(true)
.flag("-std=c++14")