blob: 71c31606546c1334a6453ee18721deb59feea87c [file] [log] [blame]
#!/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()