diff options
author | Nitin A Kamble <nitin.a.kamble@intel.com> | 2010-05-11 16:25:39 -0700 |
---|---|---|
committer | Nitin A Kamble <nitin.a.kamble@intel.com> | 2010-05-11 16:25:39 -0700 |
commit | 2ca1f78a9578d9c2095be548aeda523b61ee840c (patch) | |
tree | cbf1dc64c07aff1347260fee4cfdca3d9fffeb98 /meta/classes/insane.bbclass | |
parent | c89362c767ba3255358f5bf5630bdef8cb3d107d (diff) | |
download | poky-2ca1f78a9578d9c2095be548aeda523b61ee840c.tar.gz |
License Change checking:
Added a new variable in recipe : LIC_FILES_CHKSUM
It is a required field for every recipe.
It describes license text location in the source files. And also stores
md5sum of that license text. Any change in this license text triggers build
error. Which enables developer to review any changes in the license and
update the license fields in the recipe accordingly.
For Example: contents of zlib_1.2.3.bb
LICENSE = "zlib"
LIC_FILES_CHKSUM = "file://README;md5=ae764cfda68da96df20af9fbf9fe49bd \
file://zlib.h;beginline=1;endline=30;md5=6ab03f03a5ee92d06b809797d4d5586d "
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Diffstat (limited to 'meta/classes/insane.bbclass')
-rw-r--r-- | meta/classes/insane.bbclass | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index 6d82e4df88..88e77a75ee 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
@@ -266,6 +266,66 @@ 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 | bb.error(" Recipe (.bb) file does not have license file information (LIC_FILES_CHKSUM)") | ||
280 | return False | ||
281 | |||
282 | srcdir = bb.data.getVar('S', d, True) | ||
283 | |||
284 | for url in lic_files.split(): | ||
285 | (type, host, path, user, pswd, parm) = bb.decodeurl(url) | ||
286 | srclicfile = os.path.join(srcdir, path) | ||
287 | |||
288 | if 'md5' not in parm: | ||
289 | bb.error("md5 checksum is not specified for ", url) | ||
290 | return False | ||
291 | beginline, endline = 0, 0 | ||
292 | if 'beginline' in parm: | ||
293 | beginline = int(parm['beginline']) | ||
294 | if 'endline' in parm: | ||
295 | endline = int(parm['endline']) | ||
296 | |||
297 | if (not beginline) and (not endline): | ||
298 | md5chksum = bb.utils.md5_file(srclicfile) | ||
299 | else: | ||
300 | fi = open(srclicfile, 'r') | ||
301 | fo = tempfile.NamedTemporaryFile(mode='wb', prefix='poky.', suffix='.tmp', delete=False) | ||
302 | tmplicfile = fo.name; | ||
303 | lineno = 0 | ||
304 | linesout = 0 | ||
305 | for line in fi: | ||
306 | lineno += 1 | ||
307 | if (lineno >= beginline): | ||
308 | if ((lineno <= endline) or not endline): | ||
309 | fo.write(line) | ||
310 | linesout += 1 | ||
311 | else: | ||
312 | break | ||
313 | fo.flush() | ||
314 | fo.close() | ||
315 | fi.close() | ||
316 | md5chksum = bb.utils.md5_file(tmplicfile) | ||
317 | os.unlink(tmplicfile) | ||
318 | |||
319 | if parm['md5'] == md5chksum: | ||
320 | bb.note ("md5 checksum matched for ", url) | ||
321 | else: | ||
322 | bb.error ("md5 data is not matching for ", url) | ||
323 | bb.note ("The new md5 checksum is ", md5chksum) | ||
324 | bb.note ("Check if the license information has changed, and if it has update the .bb file with correct license") | ||
325 | return False | ||
326 | |||
327 | return sane | ||
328 | |||
269 | def package_qa_check_staged(path,d): | 329 | def package_qa_check_staged(path,d): |
270 | """ | 330 | """ |
271 | Check staged la and pc files for sanity | 331 | Check staged la and pc files for sanity |
@@ -385,7 +445,8 @@ python do_package_qa () { | |||
385 | if not package_qa_check_rdepends(package, workdir, d): | 445 | if not package_qa_check_rdepends(package, workdir, d): |
386 | rdepends_sane = False | 446 | rdepends_sane = False |
387 | 447 | ||
388 | if not walk_sane or not rdepends_sane: | 448 | |
449 | 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.") | 450 | bb.fatal("QA run found fatal errors. Please consider fixing them.") |
390 | bb.note("DONE with PACKAGE QA") | 451 | bb.note("DONE with PACKAGE QA") |
391 | } | 452 | } |