linux_version/
lib.rs

1pub use semver::{SemVerError, Version};
2
3mod raw {
4    include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
5}
6
7/// Get the version specified in `<linux/version.h>`.
8pub fn linux_headers_version() -> Version {
9    let version = raw::LINUX_VERSION_CODE as u64;
10    let major = version >> 16;
11    let minor = version >> 8 & 0xFF;
12    let patch = version & 0xFF;
13    Version::new(major, minor, patch)
14}
15
16/// Get the version specified by `uname -r`.
17///
18/// This treats everything after the `major.minor.patch` triple as build metadata.
19pub fn linux_kernel_version() -> Result<Version, SemVerError> {
20    let uname = nix::sys::utsname::uname();
21    let pre_ver = Version::parse(uname.release())?;
22    Ok(Version {
23        pre: vec![],
24        build: pre_ver.pre.clone(),
25        ..pre_ver
26    })
27}