annotate codeOptimizer.py @ 4:3a56cd936c59

Cleanup some code. Add code for breaking loops in the dependency tree.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Mon, 24 Sep 2012 01:16:43 +0200
parents f65c2d63ab66
children 94b1959b0108
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
1 #!/usr/bin/env python -O
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
2
1
a1224150b8f6 Cleanup and making code easier to read.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
3 import sys
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
4
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
5 from Compilable import Compilable
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
6 from DepGraph import DepGraph
3
f65c2d63ab66 Rename Options to Config
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 2
diff changeset
7 from Config import Config
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
8
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
9
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
10 def usage(name):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
11 print "Usage is:\n\t%s <xml configuration file> [files for analysis]" % name
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
12
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
13 if len(sys.argv) < 2:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
14 usage(sys.argv[0])
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
15 sys.exit(1)
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
16
2
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
17 try:
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
18 options = Config(sys.argv[1])
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
19 except:
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
20 print sys.argv[1] + ' is not a valid xml file'
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
21 sys.exit(1)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
22
2
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
23 infiles = sys.argv[2:]
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
24
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
25 if not infiles:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
26 infiles = options.getFiles()
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
27
1
a1224150b8f6 Cleanup and making code easier to read.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
28 files = {}
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
29 unknown = []
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
30
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
31 for file in infiles:
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
32 if Compilable.acceptsFile(file):
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
33 c = Compilable(file)
2
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
34 c.setFlags(options.getCxxflags(file))
1
a1224150b8f6 Cleanup and making code easier to read.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
35 files[file] = c
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
36 else:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
37 unknown.append(file)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
38
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
39 if len(unknown) > 0:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
40 str = ", "
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
41 raise SystemExit(str.join(unknown) + " are of unknown filetype")
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
42
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
43 depgraph = DepGraph()
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
44
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
45 for file in files:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
46 depgraph.add(files[file])
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
47
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
48 for file in files:
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
49 depgraph.addDependency(files[file],
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
50 list(files[dep]
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
51 for dep in files[file].dependencies()))
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
52
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
53 files = depgraph.directedGraph()
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
54 print files
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
55
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
56 for file in files:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
57 if not file.worksWithoutModifications():
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
58 print files[file].path
2
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
59 raise SystemExit(file.path + " does not compile at all")
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
60
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
61 for file in files:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
62 removable = file.removeRemovableIncludes()
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
63 if removable:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
64 print 'Removable lines in ' + file.path
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
65 for r in removable:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
66 print str(r) + ' : ' + file.lines[r].rstrip()
1
a1224150b8f6 Cleanup and making code easier to read.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
67
a1224150b8f6 Cleanup and making code easier to read.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
68 replacable = file.replaceIncludes(dict.fromkeys(removable, '\n'))
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
69 if replacable:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
70 print 'Replacable lines in ' + file.path
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
71 for r in replacable:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
72 print str(r) + ' : ' + file.lines[r].rstrip()