57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
|
|
#!/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()
|
||
|
|
|