81 lines
2.6 KiB
Markdown
81 lines
2.6 KiB
Markdown
|
# version\_check
|
||
|
|
||
|
[![Build Status](https://github.com/SergioBenitez/version_check/workflows/CI/badge.svg)](https://github.com/SergioBenitez/version_check/actions)
|
||
|
[![Current Crates.io Version](https://img.shields.io/crates/v/version_check.svg)](https://crates.io/crates/version_check)
|
||
|
[![rustdocs on docs.rs](https://docs.rs/version_check/badge.svg)](https://docs.rs/version_check)
|
||
|
|
||
|
This tiny crate checks that the running or installed `rustc` meets some version
|
||
|
requirements. The version is queried by calling the Rust compiler with
|
||
|
`--version`. The path to the compiler is determined first via the `RUSTC`
|
||
|
environment variable. If it is not set, then `rustc` is used. If that fails, no
|
||
|
determination is made, and calls return `None`.
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
Add to your `Cargo.toml` file, typically as a build dependency:
|
||
|
|
||
|
```toml
|
||
|
[build-dependencies]
|
||
|
version_check = "0.9"
|
||
|
```
|
||
|
|
||
|
`version_check` is compatible and compiles with Rust 1.0.0 and beyond.
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
Set a `cfg` flag in `build.rs` if the running compiler was determined to be
|
||
|
at least version `1.13.0`:
|
||
|
|
||
|
```rust
|
||
|
extern crate version_check as rustc;
|
||
|
|
||
|
if rustc::is_min_version("1.13.0").unwrap_or(false) {
|
||
|
println!("cargo:rustc-cfg=question_mark_operator");
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Check that the running compiler was released on or after `2018-12-18`:
|
||
|
|
||
|
```rust
|
||
|
extern crate version_check as rustc;
|
||
|
|
||
|
match rustc::is_min_date("2018-12-18") {
|
||
|
Some(true) => "Yep! It's recent!",
|
||
|
Some(false) => "No, it's older.",
|
||
|
None => "Couldn't determine the rustc version."
|
||
|
};
|
||
|
```
|
||
|
|
||
|
Check that the running compiler supports feature flags:
|
||
|
|
||
|
```rust
|
||
|
extern crate version_check as rustc;
|
||
|
|
||
|
match rustc::is_feature_flaggable() {
|
||
|
Some(true) => "Yes! It's a dev or nightly release!",
|
||
|
Some(false) => "No, it's stable or beta.",
|
||
|
None => "Couldn't determine the rustc version."
|
||
|
};
|
||
|
```
|
||
|
|
||
|
See the [rustdocs](https://docs.rs/version_check) for more examples and complete
|
||
|
documentation.
|
||
|
|
||
|
## Alternatives
|
||
|
|
||
|
This crate is dead simple with no dependencies. If you need something more and
|
||
|
don't care about panicking if the version cannot be obtained, or if you don't
|
||
|
mind adding dependencies, see [rustc_version]. If you'd instead prefer a feature
|
||
|
detection library that works by dynamically invoking `rustc` with a
|
||
|
representative code sample, see [autocfg].
|
||
|
|
||
|
[rustc_version]: https://crates.io/crates/rustc_version
|
||
|
[autocfg]: https://crates.io/crates/autocfg
|
||
|
|
||
|
## License
|
||
|
|
||
|
`version_check` is licensed under either of the following, at your option:
|
||
|
|
||
|
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
|
||
|
* MIT License ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|