1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
#![warn(missing_docs)]
//! Simple library for getting the version information of a `rustc`
//! compiler in runtime.
//!
//! The goal of this crate is to provide debug information to developers,
//! not to branch application logic based on compiler version. Please, don't
//! do that.
//!
//! # Example
//!
//! ```rust
//! extern crate rustc_version_runtime;
//!
//! println!("This was compiled using {:?}", rustc_version_runtime::version());
//! ```
extern crate rustc_version;
extern crate semver;
use rustc_version::LlvmVersion;
use semver::{BuildMetadata, Prerelease, VersionReq};
pub use rustc_version::{Channel, Version, VersionMeta};
mod version {
use super::*;
include!(concat!(env!("OUT_DIR"), "/version.rs"));
}
pub use version::version_meta;
/// Returns the `rustc` SemVer version.
pub fn version() -> Version {
version_meta().semver
}
/// Check wether the `rustc` version matches the given SemVer
/// version requirement.
pub fn version_matches(req: &str) -> bool {
// There is some issue checking requirements for pre-releases
// https://github.com/steveklabnik/semver/issues/172
// I believe users of this crate would expect 1.31.0-nightly to be greater than 1.30 and
// equal to 1.31.0. This might not be the case, but I cannot see why.
let mut v = version();
v.pre = Prerelease::new("").unwrap();
VersionReq::parse(req).unwrap().matches(&v)
}
#[test]
fn smoketest() {
let v = version();
assert!(v.major >= 1);
assert!(v.minor >= 2);
let v = version_meta();
assert!(v.semver.major >= 1);
assert!(v.semver.minor >= 2);
assert!(version_matches(">= 1.2.0"));
}