[Add] 打通Kconfiglib配置操作
This commit is contained in:
64
scripts/kconfig/Kconfiglib/examples/help_grep.py
Normal file
64
scripts/kconfig/Kconfiglib/examples/help_grep.py
Normal file
@ -0,0 +1,64 @@
|
||||
# Does a case-insensitive search for a regular expression in the help texts of
|
||||
# symbols and choices and the prompts of menus and comments. Prints the
|
||||
# matching items together with their locations and the matching text.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/help_grep.py SCRIPT_ARG=<regex>
|
||||
#
|
||||
# Shortened example output for SCRIPT_ARG=general:
|
||||
#
|
||||
# menu "General setup"
|
||||
# location: init/Kconfig:39
|
||||
#
|
||||
# config SYSVIPC
|
||||
# bool
|
||||
# prompt "System V IPC"
|
||||
# help
|
||||
# ...
|
||||
# exchange information. It is generally considered to be a good thing,
|
||||
# ...
|
||||
#
|
||||
# location: init/Kconfig:233
|
||||
#
|
||||
# config BSD_PROCESS_ACCT
|
||||
# bool
|
||||
# prompt "BSD Process Accounting" if MULTIUSER
|
||||
# help
|
||||
# ...
|
||||
# information. This is generally a good idea, so say Y.
|
||||
#
|
||||
# location: init/Kconfig:403
|
||||
#
|
||||
# ...
|
||||
|
||||
|
||||
import re
|
||||
import sys
|
||||
|
||||
from kconfiglib import Kconfig, Symbol, Choice, MENU, COMMENT
|
||||
|
||||
|
||||
if len(sys.argv) < 3:
|
||||
sys.exit("Pass the regex with SCRIPT_ARG=<regex>")
|
||||
|
||||
search = re.compile(sys.argv[2], re.IGNORECASE).search
|
||||
|
||||
for node in Kconfig(sys.argv[1]).node_iter():
|
||||
match = False
|
||||
|
||||
if isinstance(node.item, (Symbol, Choice)) and \
|
||||
node.help is not None and search(node.help):
|
||||
print(node.item)
|
||||
match = True
|
||||
|
||||
elif node.item == MENU and search(node.prompt[0]):
|
||||
print('menu "{}"'.format(node.prompt[0]))
|
||||
match = True
|
||||
|
||||
elif node.item == COMMENT and search(node.prompt[0]):
|
||||
print('comment "{}"'.format(node.prompt[0]))
|
||||
match = True
|
||||
|
||||
if match:
|
||||
print("location: {}:{}\n".format(node.filename, node.linenr))
|
||||
Reference in New Issue
Block a user