modgraph.lua 925 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #!/usr/bin/lua
  2. -- display the kernel module dependencies
  3. -- author: John Ellson <[email protected]>
  4. require('gv')
  5. modules = io.lines('/proc/modules')
  6. G = gv.digraph("G")
  7. N = gv.protonode(G)
  8. E = gv.protoedge(G)
  9. gv.setv(G, 'rankdir', 'LR')
  10. gv.setv(G, 'nodesep', '0.05')
  11. gv.setv(N, 'shape', 'box')
  12. gv.setv(N, 'width', '0')
  13. gv.setv(N, 'height', '0')
  14. gv.setv(N, 'margin', '.03')
  15. gv.setv(N, 'fontsize', '8')
  16. gv.setv(N, 'fontname', 'helvetica')
  17. gv.setv(E, 'arrowsize', '.4')
  18. for rec in modules do
  19. -- note - Lua's "string.gfind" in 5.1 became "string.gmatch" in 5.2
  20. for mod, usedbylist in string.gmatch(rec, "([_%w]+) %w+ %w+ ([-,_%w]+)") do
  21. n = gv.node(G, mod)
  22. for usedby in string.gmatch(usedbylist, "([-_%w]+)") do
  23. if (usedby ~= '-') and (usedby ~= '') then
  24. gv.edge(n, gv.node(G, usedby))
  25. end
  26. end
  27. end
  28. end
  29. gv.tred(G)
  30. gv.layout(G, 'dot')
  31. gv.render(G, 'gtk')