A Rust library for build scripts to automatically configure code based on
compiler support. Code snippets are dynamically tested to see if the rustc
will accept them, rather than hard-coding specific version support.
Add this to your Cargo.toml
:
[build-dependencies]
autocfg = "1"
Then use it in your build.rs
script to detect compiler features. For
example, to test for 128-bit integer support, it might look like:
extern crate autocfg;
fn main() {
let ac = autocfg::new();
ac.emit_has_type("i128");
// (optional) We don't need to rerun for anything external.
autocfg::rerun_path("build.rs");
}
If the type test succeeds, this will write a cargo:rustc-cfg=has_i128
line
for Cargo, which translates to Rust arguments --cfg has_i128
. Then in the
rest of your Rust code, you can add #[cfg(has_i128)]
conditions on code that
should only be used when the compiler supports it.
-
1.4.0 (2024-09-26)
- Add
emit_possibility
for Rust 1.80's checked cfgs, and call that automatically for methods that conditionallyemit
, by @Techcable.
- Add
-
1.3.0 (2024-05-03)
- Add
probe_raw
for direct control of the code that will be test-compiled. - Use wrappers when querying the
rustc
version information too.
- Add
-
1.2.0 (2024-03-25)
- Add
no_std
andset_no_std
to control the use of#![no_std]
in probes. - Use
RUSTC_WRAPPER
andRUSTC_WORKSPACE_WRAPPER
when they are set.
- Add
-
1.1.0 (2022-02-07)
- Use
CARGO_ENCODED_RUSTFLAGS
when it is set.
- Use
-
1.0.1 (2020-08-20)
- Apply
RUSTFLAGS
for more--target
scenarios, by @adamreichold.
- Apply
-
1.0.0 (2020-01-08)
- 🎉 Release 1.0! 🎉 (no breaking changes)
- Add
probe_expression
andemit_expression_cfg
to test arbitrary expressions. - Add
probe_constant
andemit_constant_cfg
to test arbitrary constant expressions.
-
0.1.7 (2019-10-20)
- Apply
RUSTFLAGS
when probing$TARGET != $HOST
, mainly for sysroot, by @roblabla.
- Apply
-
0.1.6 (2019-08-19)
- Add
probe
/emit_sysroot_crate
, by @leo60228.
- Add
-
0.1.5 (2019-07-16)
- Mask some warnings from newer rustc.
-
0.1.4 (2019-05-22)
- Relax
std
/no_std
probing to a warning instead of an error. - Improve
rustc
bootstrap compatibility.
- Relax
-
0.1.3 (2019-05-21)
- Auto-detects if
#![no_std]
is needed for the$TARGET
.
- Auto-detects if
-
0.1.2 (2019-01-16)
- Add
rerun_env(ENV)
to printcargo:rerun-if-env-changed=ENV
. - Add
rerun_path(PATH)
to printcargo:rerun-if-changed=PATH
.
- Add
This crate's minimum supported rustc
version is 1.0.0
. Compatibility is
its entire reason for existence, so this crate will be extremely conservative
about raising this requirement. If this is ever deemed necessary, it will be
treated as a major breaking change for semver purposes.
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.