Rust FFI bindings to libversion, an advanced version string comparison library.
By default the crate vendors the C source and builds it directly, so no system-level installation of libversion is required. If you prefer linking an installed system copy, disable default features and make sure pkg-config can find libversion.
Add to Cargo.toml:
[dependencies] libversion-sys = "0.2"
Use the default vendored build:
[dependencies] libversion-sys = "0.2"
Or link a system-installed libversion:
[dependencies] libversion-sys = { version = "0.2", default-features = false }
use std::cmp::Ordering; use libversion_sys::{compare, compare_with_flags, VERSIONFLAG_P_IS_PATCH}; assert_eq!(compare("1.0", "1.1"), Ordering::Less); assert_eq!(compare("1.0", "1.0.0"), Ordering::Equal); assert_eq!(compare("1.0alpha1", "1.0"), Ordering::Less); // "p" as patch (post-release) instead of pre-release assert_eq!( compare_with_flags("1.0p1", "1.0", VERSIONFLAG_P_IS_PATCH, 0), Ordering::Greater, );
use std::ffi::CString; use libversion_sys::ffi; let v1 = CString::new("1.0").unwrap(); let v2 = CString::new("2.0").unwrap(); let result = unsafe { ffi::version_compare2(v1.as_ptr(), v2.as_ptr()) }; assert_eq!(result, -1);
assert!(libversion_sys::version_atleast(3, 0, 0)); assert!(!libversion_sys::version_string().is_empty());
| Flag | Description |
|---|---|
VERSIONFLAG_P_IS_PATCH |
Treat p as patch (post-release) instead of pre-release |
VERSIONFLAG_ANY_IS_PATCH |
Treat any letter sequence as post-release |
VERSIONFLAG_LOWER_BOUND |
Derive lowest possible version with the given prefix |
VERSIONFLAG_UPPER_BOUND |
Derive highest possible version with the given prefix |
- Rust (stable)
- C compiler (gcc/clang) for the default vendored build
- libclang (for bindgen)
pkg-configand a systemlibversioninstallation when building withdefault-features = false
On Ubuntu/Debian:
sudo apt-get install libclang-dev
For system linking:
sudo apt-get install pkg-config libversion-dev
cmake is only needed by maintainers when regenerating generated/libversion/config.h and generated/libversion/export.h after updating the vendored libversion source.
MIT -- see LICENSE.
The bundled libversion is also MIT licensed.