| #!/usr/bin/env python3 |
| |
| # |
| # Run from the root of the tree, after product-config has been run to see |
| # the product inheritance hierarchy for the current lunch target. |
| # |
| |
| import csv |
| import sys |
| |
| def PrintNodes(graph, node, prefix): |
| sys.stdout.write("%s%s" % (prefix, node)) |
| children = graph.get(node, []) |
| if children: |
| sys.stdout.write(" {\n") |
| for child in sorted(graph.get(node, [])): |
| PrintNodes(graph, child, prefix + " ") |
| sys.stdout.write("%s}\n" % prefix); |
| else: |
| sys.stdout.write("\n") |
| |
| def main(argv): |
| if len(argv) != 2: |
| print("usage: inherit_tree.py out/$TARGET_PRODUCT-$TARGET_BUILD_VARIANT/dumpconfig.csv") |
| sys.exit(1) |
| |
| root = None |
| graph = {} |
| with open(argv[1], newline='') as csvfile: |
| for line in csv.reader(csvfile): |
| if not root: |
| # Look for PRODUCTS |
| if len(line) < 3 or line[0] != "phase" or line[1] != "PRODUCTS": |
| continue |
| root = line[2] |
| else: |
| # Everything else |
| if len(line) < 3 or line[0] != "inherit": |
| continue |
| graph.setdefault(line[1], list()).append(line[2]) |
| |
| PrintNodes(graph, root, "") |
| |
| |
| if __name__ == "__main__": |
| main(sys.argv) |
| |
| # vim: set expandtab ts=2 sw=2 sts=2: |
| |