# 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=] scriptconfig SCRIPT=Kconfiglib/examples/help_grep.py SCRIPT_ARG= 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)