Mercurial > codeOptimizer
annotate codeOptimizer.py @ 12:07e34df56b2a
Separate target for running from only conffilename.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Wed, 14 Nov 2012 22:08:58 +0100 |
| parents | 5b542d05e2b1 |
| children | 2213edf59af4 |
| 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 |
|
12
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
65 def codeOptimizerFromFilename(conffile, infiles): |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
66 try: |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
67 options = Config(conffile) |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
68 except: |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
69 print sys.argv[1] + ' is not a valid xml file' |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
70 sys.exit(1) |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
71 |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
72 codeOptimizer(options, infiles) |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
73 |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
74 |
|
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
75 |
|
4
3a56cd936c59
Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
3
diff
changeset
|
76 if len(sys.argv) < 2: |
|
3a56cd936c59
Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
3
diff
changeset
|
77 usage(sys.argv[0]) |
|
3a56cd936c59
Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
3
diff
changeset
|
78 sys.exit(1) |
|
0
28b636105ed6
Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
79 |
|
2
10f1d7de9bc3
New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
1
diff
changeset
|
80 infiles = sys.argv[2:] |
|
0
28b636105ed6
Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
81 |
|
12
07e34df56b2a
Separate target for running from only conffilename.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
11
diff
changeset
|
82 codeOptimizerFromFilename(sys.argv[1], infiles) |
