diff options
Diffstat (limited to 'build.rs')
| -rw-r--r-- | build.rs | 34 | 
1 files changed, 34 insertions, 0 deletions
| @@ -1,6 +1,9 @@  extern crate cc;  use std::env; +use std::io; +use std::io::{Read, Write}; +use std::fs;  use std::path;  struct Version { @@ -41,7 +44,34 @@ fn get_version() -> Result<Version, String> {      })  } +fn prepare_version_source( +    version: &Version, +    out_path: &path::Path, +    library_path: &path::Path +) -> io::Result<path::PathBuf> { +    let out = out_path.join("version.cc"); +    let template = library_path.join("version.cc.in"); + +    let mut file = fs::File::open(template)?; +    let mut data = String::new(); +    file.read_to_string(&mut data)?; +    drop(file); + +    let data = data +        .replace("@PROJECT_VERSION_MAJOR@", &version.major) +        .replace("@PROJECT_VERSION_MINOR@", &version.minor) +        .replace("@PROJECT_VERSION_GIT@", &version.git); + +    let mut file = fs::File::create(&out)?; +    file.write_all(data.as_bytes())?; + +    Ok(out) +} +  fn main() { +    let out_dir = env::var("OUT_DIR").expect("Environment variable OUT_DIR is not set"); +    let out_path = path::PathBuf::from(out_dir); +      let version = get_version().expect("Could not extract library version");      let sources = [ @@ -56,10 +86,14 @@ fn main() {      let library_dir = format!("libnitrokey-{}", version.git);      let library_path = path::Path::new(&library_dir); +    let version_source = prepare_version_source(&version, &out_path, &library_path) +        .expect("Could not prepare the version source file"); +      cc::Build::new()          .cpp(true)          .include(library_path.join("libnitrokey"))          .files(sources.iter().map(|s| library_path.join(s))) +        .file(version_source)          .compile("libnitrokey.a");      println!("cargo:rustc-link-lib=hidapi-libusb"); | 
