]>
Commit | Line | Data |
---|---|---|
74b04a01 XL |
1 | # version\_check |
2 | ||
3 | [![Build Status](https://travis-ci.com/SergioBenitez/version_check.svg?branch=master)](https://travis-ci.com/SergioBenitez/version_check) | |
4 | [![Current Crates.io Version](https://img.shields.io/crates/v/version_check.svg)](https://crates.io/crates/version_check) | |
5 | [![rustdocs on docs.rs](https://docs.rs/version_check/badge.svg)](https://docs.rs/version_check) | |
6 | ||
7 | This tiny crate checks that the running or installed `rustc` meets some version | |
8 | requirements. The version is queried by calling the Rust compiler with | |
9 | `--version`. The path to the compiler is determined first via the `RUSTC` | |
10 | environment variable. If it is not set, then `rustc` is used. If that fails, no | |
11 | determination is made, and calls return `None`. | |
12 | ||
13 | ## Usage | |
14 | ||
15 | Add to your `Cargo.toml` file, typically as a build dependency: | |
16 | ||
17 | ```toml | |
18 | [build-dependencies] | |
19 | version_check = "0.9" | |
20 | ``` | |
21 | ||
22 | `version_check` is compatible and compiles with Rust 1.0.0 and beyond. | |
23 | ||
24 | ## Examples | |
25 | ||
26 | Set a `cfg` flag in `build.rs` if the running compiler was determined to be | |
27 | at least version `1.13.0`: | |
28 | ||
29 | ```rust | |
30 | extern crate version_check as rustc; | |
31 | ||
32 | if rustc::is_min_version("1.13.0").unwrap_or(false) { | |
33 | println!("cargo:rustc-cfg=question_mark_operator"); | |
34 | } | |
35 | ``` | |
36 | ||
37 | Check that the running compiler was released on or after `2018-12-18`: | |
38 | ||
39 | ```rust | |
40 | extern crate version_check as rustc; | |
41 | ||
42 | match rustc::is_min_date("2018-12-18") { | |
43 | Some(true) => "Yep! It's recent!", | |
44 | Some(false) => "No, it's older.", | |
45 | None => "Couldn't determine the rustc version." | |
46 | }; | |
47 | ``` | |
48 | ||
49 | Check that the running compiler supports feature flags: | |
50 | ||
51 | ```rust | |
52 | extern crate version_check as rustc; | |
53 | ||
54 | match rustc::is_feature_flaggable() { | |
55 | Some(true) => "Yes! It's a dev or nightly release!", | |
56 | Some(false) => "No, it's stable or beta.", | |
57 | None => "Couldn't determine the rustc version." | |
58 | }; | |
59 | ``` | |
60 | ||
61 | See the [rustdocs](https://docs.rs/version_check) for more examples and complete | |
62 | documentation. | |
63 | ||
64 | ## Alternatives | |
65 | ||
66 | This crate is dead simple with no dependencies. If you need something more | |
67 | and don't care about panicking if the version cannot be obtained, or if you | |
68 | don't mind adding dependencies, see | |
69 | [rustc_version](https://crates.io/crates/rustc_version). | |
70 | ||
71 | ## License | |
72 | ||
73 | `version_check` is licensed under either of the following, at your option: | |
74 | ||
75 | * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) | |
76 | * MIT License ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) |