diff options
Diffstat (limited to 'meta/classes/distrodata.bbclass')
-rw-r--r-- | meta/classes/distrodata.bbclass | 425 |
1 files changed, 0 insertions, 425 deletions
diff --git a/meta/classes/distrodata.bbclass b/meta/classes/distrodata.bbclass deleted file mode 100644 index 7712c8e40d..0000000000 --- a/meta/classes/distrodata.bbclass +++ /dev/null | |||
@@ -1,425 +0,0 @@ | |||
1 | include conf/distro/include/distro_alias.inc | ||
2 | |||
3 | addhandler distro_eventhandler | ||
4 | distro_eventhandler[eventmask] = "bb.event.BuildStarted" | ||
5 | python distro_eventhandler() { | ||
6 | import oe.distro_check as dc | ||
7 | import csv | ||
8 | logfile = dc.create_log_file(e.data, "distrodata.csv") | ||
9 | |||
10 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
11 | with open(logfile, "a") as f: | ||
12 | writer = csv.writer(f) | ||
13 | writer.writerow(['Package', 'Description', 'Owner', 'License', | ||
14 | 'VerMatch', 'Version', 'Upstream', 'Reason', 'Recipe Status', | ||
15 | 'Distro 1', 'Distro 2', 'Distro 3']) | ||
16 | f.close() | ||
17 | bb.utils.unlockfile(lf) | ||
18 | |||
19 | return | ||
20 | } | ||
21 | |||
22 | addtask distrodata_np | ||
23 | do_distrodata_np[nostamp] = "1" | ||
24 | python do_distrodata_np() { | ||
25 | localdata = bb.data.createCopy(d) | ||
26 | pn = d.getVar("PN") | ||
27 | bb.note("Package Name: %s" % pn) | ||
28 | |||
29 | import oe.distro_check as dist_check | ||
30 | tmpdir = d.getVar('TMPDIR') | ||
31 | distro_check_dir = os.path.join(tmpdir, "distro_check") | ||
32 | datetime = localdata.getVar('DATETIME') | ||
33 | dist_check.update_distro_data(distro_check_dir, datetime, localdata) | ||
34 | |||
35 | if pn.find("-native") != -1: | ||
36 | pnstripped = pn.split("-native") | ||
37 | bb.note("Native Split: %s" % pnstripped) | ||
38 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
39 | |||
40 | if pn.find("-cross") != -1: | ||
41 | pnstripped = pn.split("-cross") | ||
42 | bb.note("cross Split: %s" % pnstripped) | ||
43 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
44 | |||
45 | if pn.find("-crosssdk") != -1: | ||
46 | pnstripped = pn.split("-crosssdk") | ||
47 | bb.note("cross Split: %s" % pnstripped) | ||
48 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
49 | |||
50 | if pn.startswith("nativesdk-"): | ||
51 | pnstripped = pn.replace("nativesdk-", "") | ||
52 | bb.note("NativeSDK Split: %s" % pnstripped) | ||
53 | localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES')) | ||
54 | |||
55 | |||
56 | if pn.find("-initial") != -1: | ||
57 | pnstripped = pn.split("-initial") | ||
58 | bb.note("initial Split: %s" % pnstripped) | ||
59 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
60 | |||
61 | """generate package information from .bb file""" | ||
62 | pname = localdata.getVar('PN') | ||
63 | pcurver = localdata.getVar('PV') | ||
64 | pdesc = localdata.getVar('DESCRIPTION') | ||
65 | if pdesc is not None: | ||
66 | pdesc = pdesc.replace(',','') | ||
67 | pdesc = pdesc.replace('\n','') | ||
68 | |||
69 | pgrp = localdata.getVar('SECTION') | ||
70 | plicense = localdata.getVar('LICENSE').replace(',','_') | ||
71 | |||
72 | rstatus = localdata.getVar('RECIPE_COLOR') | ||
73 | if rstatus is not None: | ||
74 | rstatus = rstatus.replace(',','') | ||
75 | |||
76 | pupver = localdata.getVar('RECIPE_UPSTREAM_VERSION') | ||
77 | if pcurver == pupver: | ||
78 | vermatch="1" | ||
79 | else: | ||
80 | vermatch="0" | ||
81 | noupdate_reason = localdata.getVar('RECIPE_NO_UPDATE_REASON') | ||
82 | if noupdate_reason is None: | ||
83 | noupdate="0" | ||
84 | else: | ||
85 | noupdate="1" | ||
86 | noupdate_reason = noupdate_reason.replace(',','') | ||
87 | |||
88 | maintainer = localdata.getVar('RECIPE_MAINTAINER') | ||
89 | rlrd = localdata.getVar('RECIPE_UPSTREAM_DATE') | ||
90 | result = dist_check.compare_in_distro_packages_list(distro_check_dir, localdata) | ||
91 | |||
92 | bb.note("DISTRO: %s,%s,%s,%s,%s,%s,%s,%s,%s\n" % \ | ||
93 | (pname, pdesc, maintainer, plicense, vermatch, pcurver, pupver, noupdate_reason, rstatus)) | ||
94 | line = pn | ||
95 | for i in result: | ||
96 | line = line + "," + i | ||
97 | bb.note("%s\n" % line) | ||
98 | } | ||
99 | do_distrodata_np[vardepsexclude] = "DATETIME" | ||
100 | |||
101 | addtask distrodata | ||
102 | do_distrodata[nostamp] = "1" | ||
103 | python do_distrodata() { | ||
104 | import csv | ||
105 | logpath = d.getVar('LOG_DIR') | ||
106 | bb.utils.mkdirhier(logpath) | ||
107 | logfile = os.path.join(logpath, "distrodata.csv") | ||
108 | |||
109 | import oe.distro_check as dist_check | ||
110 | localdata = bb.data.createCopy(d) | ||
111 | tmpdir = d.getVar('TMPDIR') | ||
112 | distro_check_dir = os.path.join(tmpdir, "distro_check") | ||
113 | datetime = localdata.getVar('DATETIME') | ||
114 | dist_check.update_distro_data(distro_check_dir, datetime, localdata) | ||
115 | |||
116 | pn = d.getVar("PN") | ||
117 | bb.note("Package Name: %s" % pn) | ||
118 | |||
119 | if pn.find("-native") != -1: | ||
120 | pnstripped = pn.split("-native") | ||
121 | bb.note("Native Split: %s" % pnstripped) | ||
122 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
123 | |||
124 | if pn.startswith("nativesdk-"): | ||
125 | pnstripped = pn.replace("nativesdk-", "") | ||
126 | bb.note("NativeSDK Split: %s" % pnstripped) | ||
127 | localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES')) | ||
128 | |||
129 | if pn.find("-cross") != -1: | ||
130 | pnstripped = pn.split("-cross") | ||
131 | bb.note("cross Split: %s" % pnstripped) | ||
132 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
133 | |||
134 | if pn.find("-crosssdk") != -1: | ||
135 | pnstripped = pn.split("-crosssdk") | ||
136 | bb.note("cross Split: %s" % pnstripped) | ||
137 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
138 | |||
139 | if pn.find("-initial") != -1: | ||
140 | pnstripped = pn.split("-initial") | ||
141 | bb.note("initial Split: %s" % pnstripped) | ||
142 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
143 | |||
144 | """generate package information from .bb file""" | ||
145 | pname = localdata.getVar('PN') | ||
146 | pcurver = localdata.getVar('PV') | ||
147 | pdesc = localdata.getVar('DESCRIPTION') | ||
148 | if pdesc is not None: | ||
149 | pdesc = pdesc.replace(',','') | ||
150 | pdesc = pdesc.replace('\n','') | ||
151 | |||
152 | pgrp = localdata.getVar('SECTION') | ||
153 | plicense = localdata.getVar('LICENSE').replace(',','_') | ||
154 | |||
155 | rstatus = localdata.getVar('RECIPE_COLOR') | ||
156 | if rstatus is not None: | ||
157 | rstatus = rstatus.replace(',','') | ||
158 | |||
159 | pupver = localdata.getVar('RECIPE_UPSTREAM_VERSION') | ||
160 | if pcurver == pupver: | ||
161 | vermatch="1" | ||
162 | else: | ||
163 | vermatch="0" | ||
164 | |||
165 | noupdate_reason = localdata.getVar('RECIPE_NO_UPDATE_REASON') | ||
166 | if noupdate_reason is None: | ||
167 | noupdate="0" | ||
168 | else: | ||
169 | noupdate="1" | ||
170 | noupdate_reason = noupdate_reason.replace(',','') | ||
171 | |||
172 | maintainer = localdata.getVar('RECIPE_MAINTAINER') | ||
173 | rlrd = localdata.getVar('RECIPE_UPSTREAM_DATE') | ||
174 | # do the comparison | ||
175 | result = dist_check.compare_in_distro_packages_list(distro_check_dir, localdata) | ||
176 | |||
177 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
178 | with open(logfile, "a") as f: | ||
179 | row = [pname, pdesc, maintainer, plicense, vermatch, pcurver, pupver, noupdate_reason, rstatus] | ||
180 | row.extend(result) | ||
181 | |||
182 | writer = csv.writer(f) | ||
183 | writer.writerow(row) | ||
184 | f.close() | ||
185 | bb.utils.unlockfile(lf) | ||
186 | } | ||
187 | do_distrodata[vardepsexclude] = "DATETIME" | ||
188 | |||
189 | addhandler checkpkg_eventhandler | ||
190 | checkpkg_eventhandler[eventmask] = "bb.event.BuildStarted bb.event.BuildCompleted" | ||
191 | python checkpkg_eventhandler() { | ||
192 | import csv | ||
193 | |||
194 | def parse_csv_file(filename): | ||
195 | package_dict = {} | ||
196 | |||
197 | with open(filename, "r") as f: | ||
198 | reader = csv.reader(f, delimiter='\t') | ||
199 | for row in reader: | ||
200 | pn = row[0] | ||
201 | |||
202 | if reader.line_num == 1: | ||
203 | header = row | ||
204 | continue | ||
205 | |||
206 | if not pn in package_dict.keys(): | ||
207 | package_dict[pn] = row | ||
208 | f.close() | ||
209 | |||
210 | with open(filename, "w") as f: | ||
211 | writer = csv.writer(f, delimiter='\t') | ||
212 | writer.writerow(header) | ||
213 | for pn in package_dict.keys(): | ||
214 | writer.writerow(package_dict[pn]) | ||
215 | f.close() | ||
216 | |||
217 | del package_dict | ||
218 | |||
219 | if bb.event.getName(e) == "BuildStarted": | ||
220 | import oe.distro_check as dc | ||
221 | logfile = dc.create_log_file(e.data, "checkpkg.csv") | ||
222 | |||
223 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
224 | with open(logfile, "a") as f: | ||
225 | writer = csv.writer(f, delimiter='\t') | ||
226 | headers = ['Package', 'Version', 'Upver', 'License', 'Section', | ||
227 | 'Home', 'Release', 'Depends', 'BugTracker', 'PE', 'Description', | ||
228 | 'Status', 'Tracking', 'URI', 'MAINTAINER', 'NoUpReason'] | ||
229 | writer.writerow(headers) | ||
230 | f.close() | ||
231 | bb.utils.unlockfile(lf) | ||
232 | elif bb.event.getName(e) == "BuildCompleted": | ||
233 | import os | ||
234 | filename = "tmp/log/checkpkg.csv" | ||
235 | if os.path.isfile(filename): | ||
236 | lf = bb.utils.lockfile("%s.lock"%filename) | ||
237 | parse_csv_file(filename) | ||
238 | bb.utils.unlockfile(lf) | ||
239 | return | ||
240 | } | ||
241 | |||
242 | addtask checkpkg | ||
243 | do_checkpkg[nostamp] = "1" | ||
244 | python do_checkpkg() { | ||
245 | localdata = bb.data.createCopy(d) | ||
246 | import csv | ||
247 | import re | ||
248 | import tempfile | ||
249 | import subprocess | ||
250 | import oe.recipeutils | ||
251 | from bb.utils import vercmp_string | ||
252 | from bb.fetch2 import FetchError, NoMethodError, decodeurl | ||
253 | |||
254 | def get_upstream_version_and_status(): | ||
255 | |||
256 | # set if the upstream check fails reliably, e.g. absent git tags, or weird version format used on our or on upstream side. | ||
257 | upstream_version_unknown = localdata.getVar('UPSTREAM_VERSION_UNKNOWN') | ||
258 | # set if the upstream check cannot be reliably performed due to transient network failures, or server behaving weirdly. | ||
259 | # This one should be used sparingly, as it completely excludes a recipe from upstream checking. | ||
260 | upstream_check_unreliable = localdata.getVar('UPSTREAM_CHECK_UNRELIABLE') | ||
261 | |||
262 | if upstream_check_unreliable == "1": | ||
263 | return "N/A", "CHECK_IS_UNRELIABLE" | ||
264 | |||
265 | uv = oe.recipeutils.get_recipe_upstream_version(localdata) | ||
266 | pupver = uv['version'] if uv['version'] else "N/A" | ||
267 | pversion = uv['current_version'] | ||
268 | revision = uv['revision'] if uv['revision'] else "N/A" | ||
269 | |||
270 | if pupver == "N/A": | ||
271 | pstatus = "UNKNOWN" if upstream_version_unknown else "UNKNOWN_BROKEN" | ||
272 | else: | ||
273 | cmp = vercmp_string(pversion, pupver) | ||
274 | if cmp == -1: | ||
275 | pstatus = "UPDATE" if not upstream_version_unknown else "KNOWN_BROKEN" | ||
276 | elif cmp == 0: | ||
277 | pstatus = "MATCH" if not upstream_version_unknown else "KNOWN_BROKEN" | ||
278 | else: | ||
279 | pstatus = "UNKNOWN" if upstream_version_unknown else "UNKNOWN_BROKEN" | ||
280 | |||
281 | return pversion, pupver, pstatus, revision | ||
282 | |||
283 | |||
284 | """initialize log files.""" | ||
285 | logpath = d.getVar('LOG_DIR') | ||
286 | bb.utils.mkdirhier(logpath) | ||
287 | logfile = os.path.join(logpath, "checkpkg.csv") | ||
288 | |||
289 | """generate package information from .bb file""" | ||
290 | pname = d.getVar('PN') | ||
291 | |||
292 | if pname.find("-native") != -1: | ||
293 | if d.getVar('BBCLASSEXTEND'): | ||
294 | return | ||
295 | pnstripped = pname.split("-native") | ||
296 | bb.note("Native Split: %s" % pnstripped) | ||
297 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
298 | |||
299 | if pname.startswith("nativesdk-"): | ||
300 | if d.getVar('BBCLASSEXTEND'): | ||
301 | return | ||
302 | pnstripped = pname.replace("nativesdk-", "") | ||
303 | bb.note("NativeSDK Split: %s" % pnstripped) | ||
304 | localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES')) | ||
305 | |||
306 | if pname.find("-cross") != -1: | ||
307 | pnstripped = pname.split("-cross") | ||
308 | bb.note("cross Split: %s" % pnstripped) | ||
309 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
310 | |||
311 | if pname.find("-initial") != -1: | ||
312 | pnstripped = pname.split("-initial") | ||
313 | bb.note("initial Split: %s" % pnstripped) | ||
314 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
315 | |||
316 | pdesc = localdata.getVar('DESCRIPTION') | ||
317 | pgrp = localdata.getVar('SECTION') | ||
318 | plicense = localdata.getVar('LICENSE') | ||
319 | psection = localdata.getVar('SECTION') | ||
320 | phome = localdata.getVar('HOMEPAGE') | ||
321 | prelease = localdata.getVar('PR') | ||
322 | pdepends = localdata.getVar('DEPENDS') | ||
323 | pbugtracker = localdata.getVar('BUGTRACKER') | ||
324 | ppe = localdata.getVar('PE') | ||
325 | psrcuri = localdata.getVar('SRC_URI') | ||
326 | maintainer = localdata.getVar('RECIPE_MAINTAINER') | ||
327 | |||
328 | pversion, pupver, pstatus, prevision = get_upstream_version_and_status() | ||
329 | |||
330 | if psrcuri: | ||
331 | psrcuri = psrcuri.split()[0] | ||
332 | else: | ||
333 | psrcuri = "none" | ||
334 | pdepends = "".join(pdepends.split("\t")) | ||
335 | pdesc = "".join(pdesc.split("\t")) | ||
336 | no_upgr_reason = d.getVar('RECIPE_NO_UPDATE_REASON') | ||
337 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
338 | with open(logfile, "a") as f: | ||
339 | writer = csv.writer(f, delimiter='\t') | ||
340 | writer.writerow([pname, pversion, pupver, plicense, psection, phome, | ||
341 | prelease, pdepends, pbugtracker, ppe, pdesc, pstatus, prevision, | ||
342 | psrcuri, maintainer, no_upgr_reason]) | ||
343 | f.close() | ||
344 | bb.utils.unlockfile(lf) | ||
345 | } | ||
346 | |||
347 | addhandler distro_check_eventhandler | ||
348 | distro_check_eventhandler[eventmask] = "bb.event.BuildStarted" | ||
349 | python distro_check_eventhandler() { | ||
350 | """initialize log files.""" | ||
351 | import oe.distro_check as dc | ||
352 | result_file = dc.create_log_file(e.data, "distrocheck.csv") | ||
353 | return | ||
354 | } | ||
355 | |||
356 | addtask distro_check | ||
357 | do_distro_check[nostamp] = "1" | ||
358 | do_distro_check[vardepsexclude] += "DATETIME" | ||
359 | python do_distro_check() { | ||
360 | """checks if the package is present in other public Linux distros""" | ||
361 | import oe.distro_check as dc | ||
362 | import shutil | ||
363 | if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('sdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('nativesdk',d): | ||
364 | return | ||
365 | |||
366 | localdata = bb.data.createCopy(d) | ||
367 | tmpdir = d.getVar('TMPDIR') | ||
368 | distro_check_dir = os.path.join(tmpdir, "distro_check") | ||
369 | logpath = d.getVar('LOG_DIR') | ||
370 | bb.utils.mkdirhier(logpath) | ||
371 | result_file = os.path.join(logpath, "distrocheck.csv") | ||
372 | datetime = localdata.getVar('DATETIME') | ||
373 | dc.update_distro_data(distro_check_dir, datetime, localdata) | ||
374 | |||
375 | # do the comparison | ||
376 | result = dc.compare_in_distro_packages_list(distro_check_dir, d) | ||
377 | |||
378 | # save the results | ||
379 | dc.save_distro_check_result(result, datetime, result_file, d) | ||
380 | } | ||
381 | |||
382 | # | ||
383 | #Check Missing License Text. | ||
384 | #Use this task to generate the missing license text data for pkg-report system, | ||
385 | #then we can search those recipes which license text isn't exsit in common-licenses directory | ||
386 | # | ||
387 | addhandler checklicense_eventhandler | ||
388 | checklicense_eventhandler[eventmask] = "bb.event.BuildStarted" | ||
389 | python checklicense_eventhandler() { | ||
390 | """initialize log files.""" | ||
391 | import csv | ||
392 | import oe.distro_check as dc | ||
393 | logfile = dc.create_log_file(e.data, "missinglicense.csv") | ||
394 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
395 | with open(logfile, "a") as f: | ||
396 | writer = csv.writer(f, delimiter='\t') | ||
397 | writer.writerow(['Package', 'License', 'MissingLicense']) | ||
398 | f.close() | ||
399 | bb.utils.unlockfile(lf) | ||
400 | return | ||
401 | } | ||
402 | |||
403 | addtask checklicense | ||
404 | do_checklicense[nostamp] = "1" | ||
405 | python do_checklicense() { | ||
406 | import csv | ||
407 | import shutil | ||
408 | logpath = d.getVar('LOG_DIR') | ||
409 | bb.utils.mkdirhier(logpath) | ||
410 | pn = d.getVar('PN') | ||
411 | logfile = os.path.join(logpath, "missinglicense.csv") | ||
412 | generic_directory = d.getVar('COMMON_LICENSE_DIR') | ||
413 | license_types = d.getVar('LICENSE') | ||
414 | for license_type in ((license_types.replace('+', '').replace('|', '&') | ||
415 | .replace('(', '').replace(')', '').replace(';', '') | ||
416 | .replace(',', '').replace(" ", "").split("&"))): | ||
417 | if not os.path.isfile(os.path.join(generic_directory, license_type)): | ||
418 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
419 | with open(logfile, "a") as f: | ||
420 | writer = csv.writer(f, delimiter='\t') | ||
421 | writer.writerow([pn, license_types, license_type]) | ||
422 | f.close() | ||
423 | bb.utils.unlockfile(lf) | ||
424 | return | ||
425 | } | ||