- Notifications
You must be signed in to change notification settings - Fork16
A parser and evaluator for Rust cfg() expressions. Targets as of Rust 1.58.0 are supported.
License
Apache-2.0, MIT licenses found
Licenses found
EmbarkStudios/cfg-expr
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
cfg-expr
is a crate that can be used to parse and evaluate Rustcfg()
expressions, both as declarable in Rust code itself, as well in cargo manifests'[target.'cfg()'.dependencies]
sections.
It contains a list of all builtin targets known to rustc as of 1.85.0 that can be used to determine if a particular cfg expression is satisfiable.
use cfg_expr::{targets::get_builtin_target_by_triple,Expression,Predicate};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();// cfg_expr includes a list of every builtin target in rustclet 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_target_feats =["fxsr","sse","sse2"];// This will satisfy all requirementsassert!(specific.eval(|pred|{match pred{Predicate::Target(tp) => tp.matches(x86_win),Predicate::TargetFeature(feat) => avail_target_feats.contains(feat),Predicate::Feature(feat) =>*feat =="cool_thing", _ =>false,}}));// This won't, it doesn't have the cool_thing feature!assert!(!specific.eval(|pred|{match pred{Predicate::Target(tp) => tp.matches(x86_pentium_win),Predicate::TargetFeature(feat) => avail_target_feats.contains(feat), _ =>false,}}));// This will *not* satisfy the vendor predicateassert!(!specific.eval(|pred|{match pred{Predicate::Target(tp) => tp.matches(uwp_win),Predicate::TargetFeature(feat) => avail_target_feats.contains(feat), _ =>false,}}));// This will *not* satisfy the vendor, os, or env predicatesassert!(!specific.eval(|pred|{match pred{Predicate::Target(tp) => tp.matches(mac),Predicate::TargetFeature(feat) => avail_target_feats.contains(feat), _ =>false,}}));
We welcome community contributions to this project.
Please read ourContributor Guide for more information on how to get started.
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE orhttp://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT orhttp://opensource.org/licenses/MIT)
at your option.
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.
About
A parser and evaluator for Rust cfg() expressions. Targets as of Rust 1.58.0 are supported.