]>
Commit | Line | Data |
---|---|---|
e74abb32 XL |
1 | autocfg |
2 | ======= | |
3 | ||
4 | [![autocfg crate](https://img.shields.io/crates/v/autocfg.svg)](https://crates.io/crates/autocfg) | |
5 | [![autocfg documentation](https://docs.rs/autocfg/badge.svg)](https://docs.rs/autocfg) | |
6 | ![minimum rustc 1.0](https://img.shields.io/badge/rustc-1.0+-red.svg) | |
7 | [![Travis Status](https://travis-ci.org/cuviper/autocfg.svg?branch=master)](https://travis-ci.org/cuviper/autocfg) | |
8 | ||
9 | A Rust library for build scripts to automatically configure code based on | |
10 | compiler support. Code snippets are dynamically tested to see if the `rustc` | |
11 | will accept them, rather than hard-coding specific version support. | |
12 | ||
13 | ||
14 | ## Usage | |
15 | ||
16 | Add this to your `Cargo.toml`: | |
17 | ||
18 | ```toml | |
19 | [build-dependencies] | |
20 | autocfg = "0.1" | |
21 | ``` | |
22 | ||
23 | Then use it in your `build.rs` script to detect compiler features. For | |
24 | example, to test for 128-bit integer support, it might look like: | |
25 | ||
26 | ```rust | |
27 | extern crate autocfg; | |
28 | ||
29 | fn main() { | |
30 | let ac = autocfg::new(); | |
31 | ac.emit_has_type("i128"); | |
32 | ||
33 | // (optional) We don't need to rerun for anything external. | |
34 | autocfg::rerun_path(file!()); | |
35 | } | |
36 | ``` | |
37 | ||
38 | If the type test succeeds, this will write a `cargo:rustc-cfg=has_i128` line | |
39 | for Cargo, which translates to Rust arguments `--cfg has_i128`. Then in the | |
40 | rest of your Rust code, you can add `#[cfg(has_i128)]` conditions on code that | |
41 | should only be used when the compiler supports it. | |
42 | ||
43 | ||
44 | ## Release Notes | |
45 | ||
dfeec247 XL |
46 | - 0.1.7 (2019-10-20) |
47 | - Apply `RUSTFLAGS` when probing `$TARGET != $HOST`, mainly for sysroot, by @roblabla. | |
48 | ||
e74abb32 | 49 | - 0.1.6 (2019-08-19) |
dfeec247 | 50 | - Add `probe`/`emit_sysroot_crate`, by @leo60228. |
e74abb32 XL |
51 | |
52 | - 0.1.5 (2019-07-16) | |
53 | - Mask some warnings from newer rustc. | |
54 | ||
55 | - 0.1.4 (2019-05-22) | |
56 | - Relax `std`/`no_std` probing to a warning instead of an error. | |
57 | - Improve `rustc` bootstrap compatibility. | |
58 | ||
59 | - 0.1.3 (2019-05-21) | |
dfeec247 | 60 | - Auto-detects if `#![no_std]` is needed for the `$TARGET`. |
e74abb32 XL |
61 | |
62 | - 0.1.2 (2019-01-16) | |
dfeec247 XL |
63 | - Add `rerun_env(ENV)` to print `cargo:rerun-if-env-changed=ENV`. |
64 | - Add `rerun_path(PATH)` to print `cargo:rerun-if-changed=PATH`. | |
e74abb32 XL |
65 | |
66 | ||
67 | ## Minimum Rust version policy | |
68 | ||
69 | This crate's minimum supported `rustc` version is `1.0.0`. Compatibility is | |
70 | its entire reason for existence, so this crate will be extremely conservative | |
71 | about raising this requirement. If this is ever deemed necessary, it will be | |
72 | treated as a major breaking change for semver purposes. | |
73 | ||
74 | ||
75 | ## License | |
76 | ||
77 | This project is licensed under either of | |
78 | ||
79 | * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or | |
80 | http://www.apache.org/licenses/LICENSE-2.0) | |
81 | * MIT license ([LICENSE-MIT](LICENSE-MIT) or | |
82 | http://opensource.org/licenses/MIT) | |
83 | ||
84 | at your option. |