diff options
Diffstat (limited to 'meta/classes/insane.bbclass')
-rw-r--r-- | meta/classes/insane.bbclass | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index 6d82e4df88..0c9bde349c 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
@@ -266,6 +266,68 @@ def package_qa_check_buildpaths(path, name, d): | |||
266 | sane = package_qa_handle_error(9, error_msg, name, path, d) | 266 | sane = package_qa_handle_error(9, error_msg, name, path, d) |
267 | return sane | 267 | return sane |
268 | 268 | ||
269 | def package_qa_check_license(workdir, d): | ||
270 | """ | ||
271 | Check for changes in the license files | ||
272 | """ | ||
273 | import tempfile | ||
274 | sane = True | ||
275 | |||
276 | lic_files = bb.data.getVar('LIC_FILES_CHKSUM', d, True) | ||
277 | |||
278 | if not lic_files: | ||
279 | # just throw a warning now. Once licensing data in entered for enough of the recipes, | ||
280 | # this will be converted into error and False will be returned. | ||
281 | bb.warn(" Recipe (.bb) file does not have license file information (LIC_FILES_CHKSUM)") | ||
282 | return True | ||
283 | |||
284 | srcdir = bb.data.getVar('S', d, True) | ||
285 | |||
286 | for url in lic_files.split(): | ||
287 | (type, host, path, user, pswd, parm) = bb.decodeurl(url) | ||
288 | srclicfile = os.path.join(srcdir, path) | ||
289 | |||
290 | if 'md5' not in parm: | ||
291 | bb.error("md5 checksum is not specified for ", url) | ||
292 | return False | ||
293 | beginline, endline = 0, 0 | ||
294 | if 'beginline' in parm: | ||
295 | beginline = int(parm['beginline']) | ||
296 | if 'endline' in parm: | ||
297 | endline = int(parm['endline']) | ||
298 | |||
299 | if (not beginline) and (not endline): | ||
300 | md5chksum = bb.utils.md5_file(srclicfile) | ||
301 | else: | ||
302 | fi = open(srclicfile, 'r') | ||
303 | fo = tempfile.NamedTemporaryFile(mode='wb', prefix='poky.', suffix='.tmp', delete=False) | ||
304 | tmplicfile = fo.name; | ||
305 | lineno = 0 | ||
306 | linesout = 0 | ||
307 | for line in fi: | ||
308 | lineno += 1 | ||
309 | if (lineno >= beginline): | ||
310 | if ((lineno <= endline) or not endline): | ||
311 | fo.write(line) | ||
312 | linesout += 1 | ||
313 | else: | ||
314 | break | ||
315 | fo.flush() | ||
316 | fo.close() | ||
317 | fi.close() | ||
318 | md5chksum = bb.utils.md5_file(tmplicfile) | ||
319 | os.unlink(tmplicfile) | ||
320 | |||
321 | if parm['md5'] == md5chksum: | ||
322 | bb.note ("md5 checksum matched for ", url) | ||
323 | else: | ||
324 | bb.error ("md5 data is not matching for ", url) | ||
325 | bb.note ("The new md5 checksum is ", md5chksum) | ||
326 | bb.note ("Check if the license information has changed, and if it has update the .bb file with correct license") | ||
327 | return False | ||
328 | |||
329 | return sane | ||
330 | |||
269 | def package_qa_check_staged(path,d): | 331 | def package_qa_check_staged(path,d): |
270 | """ | 332 | """ |
271 | Check staged la and pc files for sanity | 333 | Check staged la and pc files for sanity |
@@ -385,7 +447,8 @@ python do_package_qa () { | |||
385 | if not package_qa_check_rdepends(package, workdir, d): | 447 | if not package_qa_check_rdepends(package, workdir, d): |
386 | rdepends_sane = False | 448 | rdepends_sane = False |
387 | 449 | ||
388 | if not walk_sane or not rdepends_sane: | 450 | |
451 | if not walk_sane or not rdepends_sane or not package_qa_check_license(workdir, d): | ||
389 | bb.fatal("QA run found fatal errors. Please consider fixing them.") | 452 | bb.fatal("QA run found fatal errors. Please consider fixing them.") |
390 | bb.note("DONE with PACKAGE QA") | 453 | bb.note("DONE with PACKAGE QA") |
391 | } | 454 | } |