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.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.