#!/usr/bin/env python3 import argparse from Kconfiglib import kconfiglib def search(node, term): while node: if isinstance(node.item, kconfiglib.Symbol): if node.item.name == term: return node.item.str_value if node.list: r = search(node.list, term) if r is not None: return r node = node.next def searchBug(node, term): bugs = "" while node: if isinstance(node.item, kconfiglib.Symbol): if node.item.name.startswith(term): if bugs is not "": bugs += ";" bugs += node.item.name if node.list: r = searchBug(node.list, term) if r is not None and r is not "": if bugs is not "": bugs += ";" bugs += r node = node.next return bugs def main(args): kconf = kconfiglib.Kconfig(args.kconfig) if args.dotconfig is not None: kconf.load_config(args.dotconfig) i = "" if args.setting.endswith("BUG"): i = searchBug(kconf.top_node, args.setting) else: i = search(kconf.top_node, args.setting) if i is not None: print(i) def writeItem(node, gen): while node: if isinstance(node.item, kconfiglib.Symbol): if node.item.str_value == 'y': gen.write("#define CONFIG_{0}\n".format(node.item.name)) elif node.item.str_value == 'n': gen.write("#undef CONFIG_{0}\n".format(node.item.name)) else: gen.write("#define CONFIG_{0} \"{1}\"\n".format(node.item.name, node.item.str_value)) if node.list: writeItem(node.list, gen) node = node.next def generate(args): kconf = kconfiglib.Kconfig(args.kconfig) if args.dotconfig is not None: kconf.load_config(args.dotconfig) with open(args.generate, "wt") as gen: gen.write("// This is an auto-generated file, do not edit.\n") writeItem(kconf.top_node, gen) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--kconfig", metavar="Kconfig", nargs="?", default="Kconfig", help="Top-level Kconfig file (default: Kconfig)") parser.add_argument("--dotconfig", metavar="dotconfig", nargs="?", help=".config") parser.add_argument("--generate", metavar="config_header", nargs="?", help="Generate config file") parser.add_argument("setting", metavar="CONFIG_KEY", nargs="?", help="Top-level Kconfig file (default: Kconfig)") args = parser.parse_args() if args.generate is not None: generate(args) else: main(args)