[PATCH 24/24] qconfig: Allow searching for CONFIG values
Simon Glass
sjg at chromium.org
Wed Jul 17 17:57:12 CEST 2024
Add basic support for searching for matching of non-matching values.
Signed-off-by: Simon Glass <sjg at chromium.org>
Fixes: https://source.denx.de/u-boot/custodians/u-boot-dm/-/issues/20
---
doc/develop/qconfig.rst | 14 ++++++++++++++
tools/qconfig.py | 16 ++++++++++++----
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/doc/develop/qconfig.rst b/doc/develop/qconfig.rst
index 8efb1eb2685..123779eab17 100644
--- a/doc/develop/qconfig.rst
+++ b/doc/develop/qconfig.rst
@@ -85,6 +85,20 @@ example, to find boards which enabled CONFIG_SCSI but not CONFIG_BLK::
3 matches
pg_wcom_seli8_defconfig highbank_defconfig pg_wcom_expu1_defconfig
+It is also possible to search for particular values. For example, this finds all
+boards with an empty string for `CONFIG_DEFAULT_FDT_FILE`::
+
+ ./tools/qconfig.py -f DEFAULT_FDT_FILE=\"\"
+ 1092 matches
+ ...
+
+This finds boards which have a value for SYS_MAXARGS other than 64::
+
+ ./tools/qconfig.py -f ~SYS_MAXARGS=64
+ cfg CONFIG_SYS_MAXARGS
+ 281 matches
+ ...
+
Finding implied CONFIGs
-----------------------
diff --git a/tools/qconfig.py b/tools/qconfig.py
index 408807931ff..3e7d42223dc 100755
--- a/tools/qconfig.py
+++ b/tools/qconfig.py
@@ -1079,7 +1079,7 @@ def do_imply_config(config_list, add_imply, imply_flags, skip_added,
for linenum in sorted(linenums, reverse=True):
add_imply_rule(config[CONFIG_LEN:], fname, linenum)
-def defconfig_matches(configs, re_match):
+def defconfig_matches(configs, re_match, re_val):
"""Check if any CONFIG option matches a regex
The match must be complete, i.e. from the start to end of the CONFIG option.
@@ -1089,13 +1089,15 @@ def defconfig_matches(configs, re_match):
key: CONFIG option
value: Value of option
re_match (re.Pattern): Match to check
+ re_val (re.Pattern): Regular expression to check against value (or None)
Returns:
bool: True if any CONFIG matches the regex
"""
- for cfg in configs:
+ for cfg, val in configs.items():
if re_match.fullmatch(cfg):
- return True
+ if not re_val or re_val.fullmatch(val):
+ return True
return False
def do_find_config(config_list):
@@ -1123,15 +1125,21 @@ def do_find_config(config_list):
if cfg[0] == '~':
want = False
cfg = cfg[1:]
+ val = None
+ re_val = None
+ if '=' in cfg:
+ cfg, val = cfg.split('=', maxsplit=1)
+ re_val = re.compile(val)
# Search everything that is still in the running. If it has a config
# that we want, or doesn't have one that we don't, add it into the
# running for the next stage
in_list = out
out = set()
+ print('cfg', cfg)
re_match = re.compile(cfg)
for defc in in_list:
- has_cfg = defconfig_matches(config_db[defc], re_match)
+ has_cfg = defconfig_matches(config_db[defc], re_match, re_val)
if has_cfg == want:
out.add(defc)
print(f'{len(out)} matches')
--
2.34.1
More information about the U-Boot
mailing list