diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..16b9b59 --- /dev/null +++ b/build.rs @@ -0,0 +1,5 @@ +use std::env; + +fn main() { + println!("cargo:rustc-env=WHISPER_CPP_VERSION={}", env::var("DEP_WHISPER_WHISPER_CPP_VERSION").unwrap()); +} diff --git a/src/lib.rs b/src/lib.rs index a35ff93..35214e7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -50,3 +50,6 @@ pub type WhisperLogitsFilterCallback = whisper_rs_sys::whisper_logits_filter_cal pub type WhisperAbortCallback = whisper_rs_sys::ggml_abort_callback; pub type WhisperLogCallback = whisper_rs_sys::ggml_log_callback; pub type DtwAhead = whisper_rs_sys::whisper_ahead; + +/// The version of whisper.cpp that whisper-rs was linked with. +pub static WHISPER_CPP_VERSION: &str = env!("WHISPER_CPP_VERSION"); diff --git a/sys/build.rs b/sys/build.rs index 211fe34..a32ec6e 100644 --- a/sys/build.rs +++ b/sys/build.rs @@ -4,6 +4,8 @@ extern crate bindgen; use cmake::Config; use std::env; +use std::fs::File; +use std::io::{BufRead, BufReader}; use std::path::PathBuf; fn main() { @@ -218,6 +220,13 @@ fn main() { println!("cargo:rustc-link-lib=static=whisper"); println!("cargo:rustc-link-lib=static=ggml"); + println!( + "cargo:WHISPER_CPP_VERSION={}", + get_whisper_cpp_version(&whisper_root) + .expect("Failed to read whisper.cpp CMake config") + .expect("Could not find whisper.cpp version declaration"), + ); + // for whatever reason this file is generated during build and triggers cargo complaining _ = std::fs::remove_file("bindings/javascript/package.json"); } @@ -244,3 +253,18 @@ fn add_link_search_path(dir: &std::path::Path) -> std::io::Result<()> { } Ok(()) } + +fn get_whisper_cpp_version(whisper_root: &std::path::Path) -> std::io::Result> { + let cmake_lists = BufReader::new(File::open(whisper_root.join("CMakeLists.txt"))?); + + for line in cmake_lists.lines() { + let line = line?; + + if let Some(suffix) = line.strip_prefix(r#"project("whisper.cpp" VERSION "#) { + let whisper_cpp_version = suffix.trim_end_matches(')'); + return Ok(Some(whisper_cpp_version.into())); + } + } + + Ok(None) +}