README.OpenSource
1[
2 {
3 "Name": "autocfg",
4 "License": "Apache License V2.0, MIT",
5 "License File": "LICENSE-APACHE, LICENSE-MIT",
6 "Version Number": "1.4.0",
7 "Owner": "fangting12@huawei.com",
8 "Upstream URL": "https://github.com/cuviper/autocfg",
9 "Description": "A library that generates Rust code based on compile-time configuration options."
10 }
11]
12
README.md
1autocfg
2=======
3
4[](https://crates.io/crates/autocfg)
5[](https://docs.rs/autocfg)
6
7
8
9A Rust library for build scripts to automatically configure code based on
10compiler support. Code snippets are dynamically tested to see if the `rustc`
11will accept them, rather than hard-coding specific version support.
12
13
14## Usage
15
16Add this to your `Cargo.toml`:
17
18```toml
19[build-dependencies]
20autocfg = "1"
21```
22
23Then use it in your `build.rs` script to detect compiler features. For
24example, to test for 128-bit integer support, it might look like:
25
26```rust
27extern crate autocfg;
28
29fn 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("build.rs");
35}
36```
37
38If the type test succeeds, this will write a `cargo:rustc-cfg=has_i128` line
39for Cargo, which translates to Rust arguments `--cfg has_i128`. Then in the
40rest of your Rust code, you can add `#[cfg(has_i128)]` conditions on code that
41should only be used when the compiler supports it.
42
43
44## Release Notes
45
46- 1.4.0 (2024-09-26)
47
48 - Add `emit_possibility` for Rust 1.80's [checked cfgs], and call that
49 automatically for methods that conditionally `emit`, by @Techcable.
50
51[checked cfgs]: https://blog.rust-lang.org/2024/05/06/check-cfg.html
52
53- 1.3.0 (2024-05-03)
54
55 - Add `probe_raw` for direct control of the code that will be test-compiled.
56 - Use wrappers when querying the `rustc` version information too.
57
58- 1.2.0 (2024-03-25)
59
60 - Add `no_std` and `set_no_std` to control the use of `#![no_std]` in probes.
61 - Use `RUSTC_WRAPPER` and `RUSTC_WORKSPACE_WRAPPER` when they are set.
62
63- 1.1.0 (2022-02-07)
64 - Use `CARGO_ENCODED_RUSTFLAGS` when it is set.
65
66- 1.0.1 (2020-08-20)
67 - Apply `RUSTFLAGS` for more `--target` scenarios, by @adamreichold.
68
69- 1.0.0 (2020-01-08)
70 - Release 1.0! (no breaking changes)
71 - Add `probe_expression` and `emit_expression_cfg` to test arbitrary expressions.
72 - Add `probe_constant` and `emit_constant_cfg` to test arbitrary constant expressions.
73
74- 0.1.7 (2019-10-20)
75 - Apply `RUSTFLAGS` when probing `$TARGET != $HOST`, mainly for sysroot, by @roblabla.
76
77- 0.1.6 (2019-08-19)
78 - Add `probe`/`emit_sysroot_crate`, by @leo60228.
79
80- 0.1.5 (2019-07-16)
81 - Mask some warnings from newer rustc.
82
83- 0.1.4 (2019-05-22)
84 - Relax `std`/`no_std` probing to a warning instead of an error.
85 - Improve `rustc` bootstrap compatibility.
86
87- 0.1.3 (2019-05-21)
88 - Auto-detects if `#![no_std]` is needed for the `$TARGET`.
89
90- 0.1.2 (2019-01-16)
91 - Add `rerun_env(ENV)` to print `cargo:rerun-if-env-changed=ENV`.
92 - Add `rerun_path(PATH)` to print `cargo:rerun-if-changed=PATH`.
93
94
95## Minimum Rust version policy
96
97This crate's minimum supported `rustc` version is `1.0.0`. Compatibility is
98its entire reason for existence, so this crate will be extremely conservative
99about raising this requirement. If this is ever deemed necessary, it will be
100treated as a major breaking change for semver purposes.
101
102
103## License
104
105This project is licensed under either of
106
107 * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
108 https://www.apache.org/licenses/LICENSE-2.0)
109 * MIT license ([LICENSE-MIT](LICENSE-MIT) or
110 https://opensource.org/licenses/MIT)
111
112at your option.
113