- Notifications
You must be signed in to change notification settings - Fork17
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
A parser and evaluator for Rustcfg()
expressions. Builtin targets as of 1.88.0 are supported.
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.88.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 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 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.
Topics
Resources
License
Apache-2.0, MIT licenses found
Licenses found
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors10
Uh oh!
There was an error while loading.Please reload this page.