Example 1
Example 2
Usage
#!/usr/bin/python
import os
import sys
nodes = ['']
edges = { }
used_substitute_set = { }
match_skip = [ '/usr/bin/ranlib', '/usr/bin/ar', '/usr/bin/gcc',
'programs', 'obj', 'tests', 'library', 'headers', 'modules',
'modules/domain', 'modules/sqlite', 'datacast']
substitute = { '/usr/include/glib' : 'glib', '/usr/lib/glib' : 'glib',
'/usr/include/gtk' : 'gtk', '/usr/lib/gtk' : 'gtk',
'/usr/include/pango' : 'pango', '/usr/include/atk' : 'atk',
'/usr/include/cairo' : 'cairo', '/usr/include/python' : 'libpython' }
start = 0
for line in sys.stdin:
if(line.find(" +-SConstruct") > -1):
start = 1
continue
if(start == 0):
continue
branch_pos = line.find("+-", 2)
if(branch_pos > -1):
n_levels = (branch_pos - 2) / 2
node = line[branch_pos + 2:-1].replace('[', '')
node = node.replace(']', '')
if(node[-2:] == '.o'):
passthrough = node
node = 'SKIP'
if(node[-3:] == '.os'):
passthrough = node
node = 'SKIP'
for c in match_skip:
if(node == c):
node = 'SKIP'
break
for c in substitute:
if(node.find(c) > -1):
node = substitute[c]
used_substitute_set[substitute[c]] = 1
if(len(nodes) < n_levels + 1):
nodes.append(node)
skip = 0
else:
if(nodes[n_levels] != node):
nodes[n_levels] = node
skip = 0
else:
skip = 1
if(skip == 0):
if( (n_levels > 0) and (nodes[n_levels] != 'SKIP') ):
head_level = n_levels - 1
while( (nodes[head_level] == 'SKIP') and (head_level > -1) ):
head_level = head_level - 1
if(head_level > -1):
keystring = "\"%s\" -> \"%s\"" % (nodes[head_level], nodes[n_levels])
edges[keystring] = 1
print "digraph S {"
for n in used_substitute_set:
print " \"%s\" [style=filled, fillcolor=purple];" % n
for edge in edges:
if(edges[edge] == 1):
print " %s;" % edge
print "}"
|