Mercurial > codeOptimizer
annotate codeOptimizer.py @ 11:5b542d05e2b1
Make main function an actual function for easier testing.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Wed, 14 Nov 2012 22:04:53 +0100 |
| parents | 94b1959b0108 |
| children | 07e34df56b2a |
| 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 |
|
11
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
13 def codeOptimizer(options, infiles): |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
14 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
15 if not infiles: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
16 infiles = options.getFiles() |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
17 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
18 files = {} |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
19 unknown = [] |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
20 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
21 for file in infiles: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
22 if Compilable.acceptsFile(file): |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
23 c = Compilable(file) |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
24 c.setFlags(options.getCxxflags(file)) |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
25 files[file] = c |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
26 else: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
27 unknown.append(file) |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
28 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
29 if len(unknown) > 0: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
30 delim = ", " |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
31 raise SystemExit(delim.join(unknown) + " are of unknown filetype") |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
32 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
33 depgraph = DepGraph() |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
34 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
35 for file in files: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
36 depgraph.add(files[file]) |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
37 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
38 for file in files: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
39 depgraph.addDependency(files[file], |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
40 list(files[dep] |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
41 for dep in files[file].dependencies())) |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
42 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
43 files = depgraph.directedGraph() |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
44 print files |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
45 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
46 for file in files: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
47 if not file.worksWithoutModifications(): |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
48 print file.path |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
49 raise SystemExit(file.path + " does not compile at all") |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
50 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
51 for file in files: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
52 removable = file.removeRemovableIncludes() |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
53 if removable: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
54 print 'Removable lines in ' + file.path |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
55 for r in removable: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
56 print str(r) + ' : ' + file.lines[r].rstrip() |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
57 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
58 replacable = file.replaceIncludes(dict.fromkeys(removable, '\n')) |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
59 if replacable: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
60 print 'Replacable lines in ' + file.path |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
61 for r in replacable: |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
62 print str(r) + ' : ' + file.lines[r].rstrip() |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
63 |
|
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
64 |
|
4
3a56cd936c59
Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
3
diff
changeset
|
65 if len(sys.argv) < 2: |
|
3a56cd936c59
Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
3
diff
changeset
|
66 usage(sys.argv[0]) |
|
3a56cd936c59
Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
3
diff
changeset
|
67 sys.exit(1) |
|
0
28b636105ed6
Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
68 |
|
2
10f1d7de9bc3
New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
1
diff
changeset
|
69 try: |
|
10f1d7de9bc3
New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
1
diff
changeset
|
70 options = Config(sys.argv[1]) |
|
10f1d7de9bc3
New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
1
diff
changeset
|
71 except: |
|
10f1d7de9bc3
New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
1
diff
changeset
|
72 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
|
73 sys.exit(1) |
|
3a56cd936c59
Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
3
diff
changeset
|
74 |
|
2
10f1d7de9bc3
New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
1
diff
changeset
|
75 infiles = sys.argv[2:] |
|
0
28b636105ed6
Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
76 |
|
11
5b542d05e2b1
Make main function an actual function for easier testing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
77 codeOptimizer(options, infiles) |
|
0
28b636105ed6
Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
78 |
