Docs.rs
  • cfg-expr-0.17.0
    • cfg-expr 0.17.0
    • Docs.rs crate page
    • MIT OR Apache-2.0
    • Links
    • Homepage
    • Repository
    • crates.io
    • Source
    • Owners
    • embark-studios
    • Dependencies
      • smallvec ^1.8 normal
      • target-lexicon =0.12.16 normal optional
      • similar-asserts ^1.1 dev
    • Versions
    • 94.89% of the crate is documented
  • Go to latest version
  • Platform
    • i686-pc-windows-msvc
    • i686-unknown-linux-gnu
    • x86_64-apple-darwin
    • x86_64-pc-windows-msvc
    • x86_64-unknown-linux-gnu
  • Feature flags
  • Rust
    • About docs.rs
    • Privacy policy
    • Rust website
    • The Book
    • Standard Library API Reference
    • Rust by Example
    • The Cargo Guide
    • Clippy Documentation

Crate cfg_expr

cfg_expr0.17.0

  • All Items
  • Re-exports
  • Modules

Crates

  • cfg_expr
?
Settings

Crate cfg_expr

source ·
Expand description

§⚙️ cfg-expr

A parser and evaluator for Rust cfg() expressions. Builtin targets as of 1.81.0 are supported.

Build Status Crates.io Docs Minimum Stable Rust Version Rust Targets Contributor Covenant Embark

§Alternatives

  • cargo-platform
  • parse_cfg

§Usage

cfg-expr is a crate that can be used to parse and evaluate Rust cfg() 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.81.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 rustc
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_target_feats = ["fxsr", "sse", "sse2"];

// This will satisfy all requirements
assert!(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 predicate
assert!(!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 predicates
assert!(!specific.eval(|pred| {
    match pred {
        Predicate::Target(tp) => tp.matches(mac),
        Predicate::TargetFeature(feat) => avail_target_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

  • Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

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.

Re-exports§

  • pub use error::ParseError;
  • pub use expr::Expression;
  • pub use expr::Predicate;
  • pub use expr::TargetPredicate;

Modules§

  • error
    Types related to parse errors
  • expr
    Types related to cfg expressions
  • targets
    Types related to rustc targets

Results

Query parser error: "Unexpected ) after l".