expr_parser: support ':' operator
Similar to '==' but compiles the RHS into a regular expression
and attempts to match whatever is in the environment against it.
Change-Id: I7a03452ef88d067b62661d14dc6f42273de436fa
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
diff --git a/scripts/expr_parser.py b/scripts/expr_parser.py
index 91aaa55..3047553 100644
--- a/scripts/expr_parser.py
+++ b/scripts/expr_parser.py
@@ -18,6 +18,7 @@
import os
import copy
import threading
+import re
try:
import ply.lex as lex
@@ -51,6 +52,7 @@
"CBRACKET",
"COMMA",
"SYMBOL",
+ "COLON",
] + list(reserved.values())
def t_HEX(t):
@@ -91,6 +93,8 @@
t_COMMA = r","
+t_COLON = ":"
+
def t_SYMBOL(t):
r"[A-Za-z_][0-9A-Za-z_]*"
t.type = reserved.get(t.value, "SYMBOL")
@@ -133,7 +137,8 @@
| SYMBOL LT number
| SYMBOL GTEQ number
| SYMBOL LTEQ number
- | SYMBOL IN list"""
+ | SYMBOL IN list
+ | SYMBOL COLON STR"""
p[0] = (p[2], p[1], p[3])
def p_expr_single(p):
@@ -204,6 +209,8 @@
return ast_sym(ast[1], env) in ast[2]
elif ast[0] == "exists":
return True if ast_sym(ast[1], env) else False
+ elif ast[0] == ":":
+ return True if re.compile(ast[2]).match(ast_sym(ast[1], env)) else False
mutex = threading.Lock()
diff --git a/scripts/sanitycheck b/scripts/sanitycheck
index 1d849be..3b80d0c 100755
--- a/scripts/sanitycheck
+++ b/scripts/sanitycheck
@@ -80,6 +80,7 @@
| symbol ">=" number
| symbol "<=" number
| symbol "in" list
+ | symbol ":" string
| symbol
list ::= "[" list_contents "]"
@@ -110,6 +111,14 @@
filter = not ARCH in ["x86", "arc"]
+ The ':' operator compiles the string argument as a regular expression,
+ and then returns a true value only if the symbol's value in the environment
+ matches. For example, if CONFIG_SOC="quark_se" then
+
+ filter = CONFIG_SOC : "quark.*"
+
+ Would match it.
+
Architectures and platforms are defined in an archtecture configuration
file which are stored by default in scripts/sanity_chk/arches/. These
each define an [arch] block with the following key/value pairs: