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.3.0 (2024-05-03)
probe_raw
for direct control of the code that will be test-compiled.rustc
version information too.1.2.0 (2024-03-25)
no_std
and set_no_std
to control the use of #![no_std]
in probes.RUSTC_WRAPPER
and RUSTC_WORKSPACE_WRAPPER
when they are set.1.1.0 (2022-02-07)
CARGO_ENCODED_RUSTFLAGS
when it is set.1.0.1 (2020-08-20)
RUSTFLAGS
for more --target
scenarios, by @adamreichold.1.0.0 (2020-01-08)
probe_expression
and emit_expression_cfg
to test arbitrary expressions.probe_constant
and emit_constant_cfg
to test arbitrary constant expressions.0.1.7 (2019-10-20)
RUSTFLAGS
when probing $TARGET != $HOST
, mainly for sysroot, by @roblabla.0.1.6 (2019-08-19)
probe
/emit_sysroot_crate
, by @leo60228.0.1.5 (2019-07-16)
0.1.4 (2019-05-22)
std
/no_std
probing to a warning instead of an error.rustc
bootstrap compatibility.0.1.3 (2019-05-21)
#![no_std]
is needed for the $TARGET
.0.1.2 (2019-01-16)
rerun_env(ENV)
to print cargo:rerun-if-env-changed=ENV
.rerun_path(PATH)
to print cargo:rerun-if-changed=PATH
.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
at your option.