mirror of
https://github.com/zerotier/DesktopUI.git
synced 2026-09-23 00:28:30 -07:00
66 lines
2.2 KiB
Rust
66 lines
2.2 KiB
Rust
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();
|
|
|
|
// 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_targ_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_targ_feats.contains(feat),
|
|
Predicate::Feature(feat) => *feat == "cool_thing",
|
|
_ => false,
|
|
}
|
|
}));
|
|
|
|
// This won't, it doesnt' have the cool_thing feature!
|
|
assert!(!specific.eval(|pred| {
|
|
match pred {
|
|
Predicate::Target(tp) => tp.matches(x86_pentium_win),
|
|
Predicate::TargetFeature(feat) => avail_targ_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_targ_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_targ_feats.contains(feat),
|
|
_ => false,
|
|
}
|
|
}));
|
|
}
|