Expose whisper.cpp version as a static string
Add a `WHISPER_CPP_VERSION` static that contains the version number of whisper.cpp that whisper-rs was built with. This can be useful for downstream applications for debugging and logging purposes. This is implemented using [build script metadata](https://doc.rust-lang.org/cargo/reference/build-scripts.html#the-links-manifest-key) for whisper-rs-sys to expose the version number of whisper.cpp defined in `CMakeLists.txt` as metadata to crates that depend on it. Then whisper-rs accesses that build metadata and defines its own internal compile-time environment variable containing the same value, which is then assigned to a static variable. It seemed better to expose this information through build metadata rather than defining a static in whisper-rs-sys directly, despite the extra indirection, so as to keep whisper-rs-sys as pure bindings.
This commit is contained in:
parent
8596d2d98c
commit
fe9ffb8030
3 changed files with 32 additions and 0 deletions
5
build.rs
Normal file
5
build.rs
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("cargo:rustc-env=WHISPER_CPP_VERSION={}", env::var("DEP_WHISPER_WHISPER_CPP_VERSION").unwrap());
|
||||||
|
}
|
||||||
|
|
@ -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 WhisperAbortCallback = whisper_rs_sys::ggml_abort_callback;
|
||||||
pub type WhisperLogCallback = whisper_rs_sys::ggml_log_callback;
|
pub type WhisperLogCallback = whisper_rs_sys::ggml_log_callback;
|
||||||
pub type DtwAhead = whisper_rs_sys::whisper_ahead;
|
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");
|
||||||
|
|
|
||||||
24
sys/build.rs
24
sys/build.rs
|
|
@ -4,6 +4,8 @@ extern crate bindgen;
|
||||||
|
|
||||||
use cmake::Config;
|
use cmake::Config;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::{BufRead, BufReader};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
@ -218,6 +220,13 @@ fn main() {
|
||||||
println!("cargo:rustc-link-lib=static=whisper");
|
println!("cargo:rustc-link-lib=static=whisper");
|
||||||
println!("cargo:rustc-link-lib=static=ggml");
|
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
|
// for whatever reason this file is generated during build and triggers cargo complaining
|
||||||
_ = std::fs::remove_file("bindings/javascript/package.json");
|
_ = 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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_whisper_cpp_version(whisper_root: &std::path::Path) -> std::io::Result<Option<String>> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue