#!/usr/bin/env python # Caolan McNamara import sys, re buildorder = False root = '.' buildfile = 'prj/build.lst' seenfrommodules = {} seentomodules = {} conditionals = [] dotlines = [] def mysplit(s): return re.split(':[\W]+', s) def handlemodule(module, level): seenfrommodules[module] = True file = root + '/' + module + '/' + buildfile # print >> sys.stderr, 'file is', file dependline = '' try: dep = open(file, "r") dependline = dep.readline()[:-1] while dependline[0] == '#': dependline = dep.readline()[:-1] dependline = mysplit(dependline)[1] dep.close() except: print >> sys.stderr, 'missing module', module # print >> sys.stderr, dependline depends = dependline.split() for depend in depends: if depend == 'NULL': break elif depend == 'solenv': continue newmodule = depend element = newmodule.split(':') if len(element) > 1: newmodule = element[1] conditionals.append(newmodule) if seentomodules.has_key(newmodule): continue if buildorder: seentomodules[newmodule] = True dotlines.append(module + " -> " + newmodule + ' ;') if seenfrommodules.has_key(newmodule): continue handlemodule(newmodule, level + 1) if len(sys.argv) < 1: print 'Usage: ooodrawbuildgraph [path] [-buildorder]' print 'e.g. oooextractcws /home/caolan/SRC680_m159' else: if len(sys.argv) > 1: root = sys.argv[1] if len(sys.argv) > 2: buildorder = True handlemodule('instsetoo_native', 0) print 'digraph OOo {' print 'node [shape = rectangle] ;' if buildorder == True: print 'size="26,34" ;' print 'rankdir=LR ;' for dotline in dotlines: print dotline; print '}'