# Prints a tree of all items in the configuration # vim: tabstop=4 shiftwidth=4 expandtab import kconfiglib import sys # Integers representing symbol types UNKNOWN, BOOL, TRISTATE, STRING, HEX, INT = range(6) # Strings to use for types TYPENAME = {UNKNOWN: "unknown", BOOL: "bool", TRISTATE: "tristate", STRING: "string", HEX: "hex", INT: "int"} done = [] itemIndex = {} def print_with_indent(s, indent): print((" " * indent) + s) def print_items(items, outdir, indent): for item in items: 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() if item.is_symbol(): var = "CONFIG_%s" %item.get_name() if not var in done: done.append(var) # Save up the config items in itemIndex, a dictionary indexed # by the item name with the value as the "prompt" (short # description) from the Kconfig file. (We'll output them # later in alphabetic order if len(item.get_prompts()) > 0: p = item.get_prompts()[0] else: p = "" itemIndex[var] = " * - :option:`%s`\n - %s\n" % (var, p) # Create a details .rst document for each symbol discovered config = open("%s/%s.rst" % (outdir, var), "w") config.write(":orphan:\n\n") config.write(".. title:: %s\n\n" %item.get_name()) config.write(".. option:: CONFIG_%s\n" %item.get_name()) config.write(".. _CONFIG_%s:\n" %item.get_name()) if text: config.write("\n%s\n\n" %text) else: config.write("\nThe configuration item %s:\n\n" %var) config.write("%s\n" %item.rest()) config.close() elif item.is_menu(): print_items(item.get_items(), outdir, indent + 2) elif item.is_choice(): print_items(item.get_items(), outdir, indent + 2) elif item.is_comment(): pass f = open("%s/index.rst" % (sys.argv[2]), "w") f.write(""".. _configuration: Configuration Options Reference Guide ##################################### Introduction ************ Kconfig files describe the configuration symbols supported in the build system, the logical organization and structure that group the symbols in menus and sub-menus, and the relationships between the different configuration symbols that govern the valid configuration combinations. The Kconfig files are distributed across the build directory tree. The files are organized based on their common characteristics and on what new symbols they add to the configuration menus. The configuration options' information below is extracted directly from :program:`Kconfig` using the :file:`~/doc/scripts/genrest/genrest.py` script. Click on the option name in the table below for detailed information about each option. Supported Options ***************** .. list-table:: Alphabetized Index of Configuration Options :header-rows: 1 * - Kconfig Symbol - Description """) conf = kconfiglib.Config(sys.argv[1]) print_items(conf.get_top_level_items(), sys.argv[2], 0) # print_items created separate .rst files for each configuration option as # well as filling itemIndex with all these options (and their descriptions). # Now we can print out the accumulated config symbols in alphabetic order. for item in sorted(itemIndex): f.write(itemIndex[item]) f.close()