⚙️ cfg-expr
A parser and evaluator for Rust cfg()
expressions. Targets as of Rust 1.58.0 are supported.
Alternatives
Usage
use cfg_expr::{targets::get_builtin_target_by_triple, Expression, Predicate};
fn main() {
let specific = Expression::parse(
r#"all(
target_os = "windows",
target_arch = "x86",
windows,
target_env = "msvc",
target_feature = "fxsr",
target_feature = "sse",
target_feature = "sse2",
target_pointer_width = "32",
target_endian = "little",
not(target_vendor = "uwp"),
feature = "cool_thing",
)"#,
)
.unwrap();
let x86_win = get_builtin_target_by_triple("i686-pc-windows-msvc").unwrap();
let x86_pentium_win = get_builtin_target_by_triple("i586-pc-windows-msvc").unwrap();
let uwp_win = get_builtin_target_by_triple("i686-uwp-windows-msvc").unwrap();
let mac = get_builtin_target_by_triple("x86_64-apple-darwin").unwrap();
let avail_targ_feats = ["fxsr", "sse", "sse2"];
assert!(specific.eval(|pred| {
match pred {
Predicate::Target(tp) => tp.matches(x86_win),
Predicate::TargetFeature(feat) => avail_targ_feats.contains(feat),
Predicate::Feature(feat) => *feat == "cool_thing",
_ => false,
}
}));
assert!(!specific.eval(|pred| {
match pred {
Predicate::Target(tp) => tp.matches(x86_pentium_win),
Predicate::TargetFeature(feat) => avail_targ_feats.contains(feat),
_ => false,
}
}));
assert!(!specific.eval(|pred| {
match pred {
Predicate::Target(tp) => tp.matches(uwp_win),
Predicate::TargetFeature(feat) => avail_targ_feats.contains(feat),
_ => false,
}
}));
assert!(!specific.eval(|pred| {
match pred {
Predicate::Target(tp) => tp.matches(mac),
Predicate::TargetFeature(feat) => avail_targ_feats.contains(feat),
_ => false,
}
}));
}
Contributing
We welcome community contributions to this project.
Please read our Contributor Guide for more information on how to get started.
License
Licensed under either of
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.