]>
Commit | Line | Data |
---|---|---|
4569a895 AT |
1 | #!/usr/bin/python |
2 | ||
3 | import sys | |
4 | import commands | |
5 | import re | |
6 | from xml.dom import minidom | |
7 | from BeautifulSoup import BeautifulSoup | |
8 | import make_graph | |
9 | ||
10 | class exception: | |
11 | pass | |
12 | ||
13 | res_div_re = re.compile('(.*?)_res_div') | |
14 | settings_div_re = re.compile('(.*?)_settings_div') | |
15 | ||
16 | ||
17 | gray_border_div_str = '<div style = "border-style: dotted; border-width: 1px; border-color: lightgray">' | |
18 | space_div_str = '<div style = "width: 100%; height: 20px">' | |
19 | ||
20 | ||
21 | ||
22 | def logical_build_from_build(build): | |
23 | if build == 'gcc': | |
24 | return 'g++' | |
25 | if build == 'msvc': | |
26 | return 'msvc++' | |
27 | if build == 'local': | |
28 | return 'local' | |
29 | sys.stderr.write(build) | |
30 | raise exception | |
31 | ||
32 | ||
33 | def img_title_from_origs(label, title, base_build_ref, build_name, logical_build_name): | |
34 | title = title.replace('_tt_', '<tt>') | |
35 | title = title.replace('_455tt_', '</tt>') | |
36 | title = title.replace('_b_', '<b>') | |
37 | title = title.replace('_455b_', '</b>') | |
38 | title = title.replace('_456', ',') | |
39 | title = title.replace('_457', '[]') | |
40 | title = title.replace('_', ' ') | |
41 | return '%s: %s - <a href = "%s_performance_tests.html#%s">%s</a>' % ( | |
42 | label, | |
43 | title, | |
44 | base_build_ref, | |
45 | build_name, | |
46 | logical_build_name) | |
47 | ||
48 | ||
49 | def make_png(src_dir, doc_dir, res_dir, tests_info_xml_f_name, build_name, test_name): | |
50 | cmd_str = '%s/scripts/make_graph.py %s %s %s %s %s' % ( | |
51 | src_dir, doc_dir, | |
52 | res_dir, | |
53 | tests_info_xml_f_name, | |
54 | test_name, | |
55 | build_name) | |
56 | # Must start a new process for pychart - otherwise pngs overlap. | |
57 | so = commands.getstatusoutput(cmd_str) | |
58 | if(so[0] != 0): | |
59 | sys.stderr.write(cmd_str + '\n') | |
60 | sys.stderr.write(so[1] + '\n') | |
61 | sys.exit(-1) | |
62 | ||
63 | ||
64 | def make_png_str(label, test_name, build): | |
65 | ret = '<h6 class="c1">' | |
66 | ret += '<a name="%s" id= "%s">' % (label, label) | |
67 | ret += '<img src="%s" ' % (test_name + '_' + build + '.png') | |
68 | ret += 'alt="no image" />' | |
69 | ret += '</a></h6>' | |
70 | return ret | |
71 | ||
72 | def process_html(html_f_name, src_dir, build_dir, htmls_xml_f_name, tests_info_xml_f_name, build_name, compiler_name): | |
4312e020 | 73 | doc_dir = src_dir + "/doc/html/ext/pb_ds" |
4569a895 AT |
74 | res_dir = build_dir |
75 | html_f = open(doc_dir + '/' + html_f_name) | |
76 | soup = BeautifulSoup(html_f.read()) | |
77 | html_f.close() | |
78 | platform_comp_re = re.compile('platform_comp_%s' % build_name) | |
79 | for d in soup('div'): | |
80 | try: | |
81 | settings_m = settings_div_re.match(d['id']) | |
82 | res_m = res_div_re.match(d['id']) | |
83 | except: | |
84 | settings_m = None | |
85 | res_m = None | |
86 | ||
87 | if settings_m: | |
88 | build = settings_m.groups()[0] | |
89 | if build == build_name: | |
90 | logical_build_name = logical_build_from_build(build) | |
91 | info = gray_border_div_str | |
92 | info += '<h3><a name = "%s"><u>%s</u></a></h3>' % (build, logical_build_name) | |
93 | info += make_graph.comp_platform_info(compiler_name) | |
94 | info += '</div>%s</div>' % space_div_str | |
95 | d.contents = info | |
96 | elif res_m: | |
97 | label = res_m.groups()[0] | |
98 | d = d.divTag | |
99 | ||
100 | build = d['id'].replace('%s_' % label, '') | |
101 | ||
102 | if build == build_name: | |
103 | logical_build_name = logical_build_from_build(build) | |
104 | d = d.divTag | |
105 | test_name = d['id'].replace('%s_' % label, '') | |
106 | d = d.divTag | |
107 | base_build_ref = d['id'].replace('%s_' % label, '') | |
108 | d = d.divTag | |
109 | title = d['id'].replace('%s_' % label, '') | |
110 | img_title = img_title_from_origs(label, title, base_build_ref, build, logical_build_name) | |
111 | ||
112 | make_png(src_dir, doc_dir, res_dir, tests_info_xml_f_name, build_name, test_name) | |
113 | png_str = make_png_str(label, test_name, build) | |
114 | content = gray_border_div_str | |
115 | content += png_str | |
116 | content += img_title | |
117 | # content += make_graph.legend(doc_dir, res_dir, tests_info_xml_f_name, test_name, build_name) | |
118 | content += '</div>%s</div>' % space_div_str | |
119 | d.contents = content | |
120 | ||
121 | return soup | |
122 | ||
123 | ||
124 | ||
125 | if __name__ == "__main__": | |
126 | """ | |
127 | Doc dir | |
128 | This module takes 6 parameters from the command line: | |
129 | Source directory | |
130 | Build directory | |
131 | HTMLs XML file name | |
132 | Tests info XML file name | |
133 | Build name | |
134 | Compiler name | |
135 | """ | |
136 | ||
137 | usg = "make_graph.py <src_dir> <build_dir> <htmls_xml_f_name> <tests_info_xml_f_name> <build_name> <compiler_name>\n" | |
138 | ||
139 | if len(sys.argv) != 7: | |
140 | sys.stderr.write(usg) | |
141 | raise exception | |
142 | ||
143 | src_dir = sys.argv[1] | |
144 | build_dir = sys.argv[2] | |
145 | htmls_xml_f_name = sys.argv[3] | |
146 | tests_info_xml_f_name = sys.argv[4] | |
147 | build_name = sys.argv[5] | |
148 | compiler_name = sys.argv[6] | |
4312e020 | 149 | doc_dir = src_dir + "/doc/html/ext/pb_ds" |
4569a895 AT |
150 | htmls_dat = minidom.parse(htmls_xml_f_name) |
151 | for html in htmls_dat.getElementsByTagName('html'): | |
152 | html_f_name = html.attributes['name'].value | |
153 | ||
154 | new_soup = process_html(html_f_name, src_dir, build_dir, htmls_xml_f_name, tests_info_xml_f_name, build_name, compiler_name) | |
155 | ||
156 | html_f = open(doc_dir + '/' + html_f_name, 'w') | |
157 | html_f.write(str(new_soup)) | |
158 | html_f.close() | |
159 | ||
160 |