From 7a87f9f500fb49658a02f40e97e8c9fa02e6c9d6 Mon Sep 17 00:00:00 2001 From: Andrew Boie Date: Thu, 2 Jun 2016 12:27:54 -0700 Subject: [PATCH] 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 --- scripts/expr_parser.py | 9 ++++++++- scripts/sanitycheck | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/scripts/expr_parser.py b/scripts/expr_parser.py index 91aaa555b7b..3047553f2f2 100644 --- a/scripts/expr_parser.py +++ b/scripts/expr_parser.py @@ -18,6 +18,7 @@ import sys import os import copy import threading +import re try: import ply.lex as lex @@ -51,6 +52,7 @@ tokens = [ "CBRACKET", "COMMA", "SYMBOL", + "COLON", ] + list(reserved.values()) def t_HEX(t): @@ -91,6 +93,8 @@ t_CBRACKET = r"\]" 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 @@ def p_expr_eval(p): | 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 @@ def ast_expr(ast, env): 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 1d849bec072..3b80d0cd70c 100755 --- a/scripts/sanitycheck +++ b/scripts/sanitycheck @@ -80,6 +80,7 @@ Each testcase.ini block can define the following key/value pairs: | symbol ">=" number | symbol "<=" number | symbol "in" list + | symbol ":" string | symbol list ::= "[" list_contents "]" @@ -110,6 +111,14 @@ Each testcase.ini block can define the following key/value pairs: 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: