use std::collections::HashMap;
use std::env;
use std::path::{Path, PathBuf};
-use std::str::{self, FromStr};
+use std::str;
use core::profiles::Profiles;
use core::{Dependency, Workspace};
// ...including target.'cfg(...)'.rustflags
if let Some(target_cfg) = target_cfg {
if let Some(table) = config.get_table("target")? {
- let cfgs = table.val.keys().filter_map(|t| {
- if t.starts_with("cfg(") && t.ends_with(')') {
- let cfg = &t[4..t.len() - 1];
- CfgExpr::from_str(cfg).ok().and_then(|c| {
- if c.matches(target_cfg) {
- Some(t)
- } else {
- None
- }
- })
+ let cfgs = table.val.keys().filter_map(|key| {
+ if CfgExpr::matches_key(key, target_cfg) {
+ Some(key)
} else {
None
}
use std::env;
use std::ffi::OsStr;
use std::path::PathBuf;
-use std::str::FromStr;
use semver::Version;
if let Some(table) = bcx.config.get_table("target")? {
let mut matching_runner = None;
- for t in table.val.keys() {
- if t.starts_with("cfg(") && t.ends_with(')') {
- let cfg = &t[4..t.len() - 1];
- if let Ok(c) = CfgExpr::from_str(cfg) {
- if c.matches(target_cfg) {
- let key = format!("target.{}.runner", t);
- if let Some(runner) = bcx.config.get_path_and_args(&key)? {
- // more than one match, error out
- if matching_runner.is_some() {
- bail!("several matching instances of `target.'cfg(..)'.runner` \
- in `.cargo/config`")
- }
-
- matching_runner = Some(runner.val);
- }
+ for key in table.val.keys() {
+ if CfgExpr::matches_key(key, target_cfg) {
+ let key = format!("target.{}.runner", key);
+ if let Some(runner) = bcx.config.get_path_and_args(&key)? {
+ // more than one match, error out
+ if matching_runner.is_some() {
+ bail!("several matching instances of `target.'cfg(..)'.runner` \
+ in `.cargo/config`")
}
+
+ matching_runner = Some(runner.val);
}
}
}
}
impl CfgExpr {
+ /// Utility function to check if the key, "cfg(..)" matches the `target_cfg`
+ pub fn matches_key(key: &str, target_cfg: &[Cfg]) -> bool {
+ if key.starts_with("cfg(") && key.ends_with(')') {
+ let cfg = &key[4..key.len() - 1 ];
+
+ CfgExpr::from_str(cfg).ok().map(|ce| ce.matches(target_cfg)).unwrap_or(false)
+ } else {
+ false
+ }
+ }
+
pub fn matches(&self, cfg: &[Cfg]) -> bool {
match *self {
CfgExpr::Not(ref e) => !e.matches(cfg),