| #!/usr/bin/env python3 |
| |
| # note - needs |
| # sudo apt-get install python3-networkx python3-matplotlib |
| import matplotlib.pyplot as plt |
| import networkx as nx |
| |
| import re |
| import fileinput |
| |
| # okay - not actually using this now |
| # groups : 1 -> module name, 2 -> ultimate deps |
| RE_highlevel = re.compile("error: [^ ]* module \"([^\"]*)\" variant \"[^\"]*\" .*? depends on multiple versions of the same aidl_interface: (.*)\n") |
| |
| # groups : 1 -> module name |
| RE_dependencyStart = re.compile("error: [^ ]* module \"([^\"]*)\" variant \"[^\"]*\" .*? Dependency path.*\n") |
| |
| # groups : 1 -> module name |
| RE_dependencyCont = re.compile(" *-> ([^{]*){.*\n") |
| |
| RE_ignore= re.compile(" *via tag.*{.*}.*\n") |
| |
| # [(module, module)] |
| graph = [] |
| |
| last = None |
| |
| for i in fileinput.input(): |
| # could validate consistency of this graph based on this |
| if RE_highlevel.fullmatch(i): continue |
| |
| m = RE_dependencyStart.fullmatch(i) |
| if m: |
| last = m.groups()[0] |
| continue |
| |
| m = RE_dependencyCont.fullmatch(i) |
| if m: |
| curr = m.groups()[0] |
| graph += [(last, curr)] |
| last = curr |
| continue |
| |
| if RE_ignore.fullmatch(i): continue |
| |
| print("UNRECOGNIZED LINE", i.strip()) |
| |
| #for a,b in graph: |
| # print(a,b) |
| |
| G = nx.MultiDiGraph() |
| G.add_edges_from(graph) |
| plt.figure(figsize=(10,10)) |
| nx.draw(G, connectionstyle='arc3,rad=0.01', with_labels=True) |
| plt.show() |
| |