Mercurial > codeOptimizer
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 |
| 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() |
