blob: 93b086a019e55232c7c328be9b4a6cc793a2148c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# Does a case-insensitive search for a string in the help texts for symbols and
# choices and the titles of menus and comments. Prints the matching items
# together with their locations and the matching text. Used like
#
# $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/help_grep.py SCRIPT_ARG=<search text>
import kconfiglib
import sys
if len(sys.argv) < 3:
print 'Pass search string with SCRIPT_ARG="search string"'
sys.exit(1)
search_string = sys.argv[2].lower()
conf = kconfiglib.Config(sys.argv[1])
for item in conf.get_symbols() +\
conf.get_choices() + conf.get_menus() + conf.get_comments():
if item.is_symbol() or item.is_choice():
text = item.get_help()
elif item.is_menu():
text = item.get_title()
else:
# Comment
text = item.get_text()
# Case-insensitive search
if text is not None and search_string in text.lower():
if item.is_symbol() or item.is_choice():
# Indent lines in help text. (There might be a nicer way. :)
text = "\n".join([" " + s for s in text.splitlines()])
# Don't worry about symbols/choices defined in multiple locations to
# keep things simple
fname, linenr = item.get_def_locations()[0]
if item.is_symbol():
print "config {0} at {1}:{2}:\n{3}".\
format(item.get_name(), fname, linenr, text)
elif item.is_choice():
print "choice at {0}:{1}:\n{2}".\
format(fname, linenr, text)
else:
# Menu or comment
fname, linenr = item.get_location()
if item.is_menu():
print 'menu "{0}" at {1}:{2}'.\
format(text, fname, linenr)
else:
# Comment
print 'comment "{0}" at {1}:{2}'.\
format(text, fname, linenr)
|