]> code.ossystems Code Review - openembedded-core.git/commitdiff
License Change checking:
authorNitin A Kamble <nitin.a.kamble@intel.com>
Tue, 11 May 2010 23:25:39 +0000 (16:25 -0700)
committerNitin A Kamble <nitin.a.kamble@intel.com>
Tue, 11 May 2010 23:25:39 +0000 (16:25 -0700)
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>
meta/classes/insane.bbclass
meta/packages/zlib/zlib_1.2.3.bb

index 6d82e4df8891fa870805485d46af746ed558a602..88e77a75ee805be88380ba61c85df12c7901d02e 100644 (file)
@@ -266,6 +266,66 @@ def package_qa_check_buildpaths(path, name, d):
         sane = package_qa_handle_error(9, error_msg, name, path, d)
     return sane
 
+def package_qa_check_license(workdir, d):
+    """
+    Check for changes in the license files 
+    """
+    import tempfile
+    sane = True
+
+    lic_files = bb.data.getVar('LIC_FILES_CHKSUM', d, True)
+
+    if not lic_files:
+        bb.error(" Recipe (.bb) file does not have license file information (LIC_FILES_CHKSUM)")
+        return False
+
+    srcdir = bb.data.getVar('S', d, True)
+
+    for url in lic_files.split():
+        (type, host, path, user, pswd, parm) = bb.decodeurl(url)
+        srclicfile = os.path.join(srcdir, path)
+
+        if 'md5' not in parm:
+            bb.error("md5 checksum is not specified for ", url)
+            return False
+        beginline, endline = 0, 0
+        if 'beginline' in parm:
+            beginline = int(parm['beginline'])
+        if 'endline' in parm:
+            endline = int(parm['endline'])
+
+        if (not beginline) and (not endline):
+            md5chksum = bb.utils.md5_file(srclicfile)
+        else:
+            fi = open(srclicfile, 'r')
+            fo = tempfile.NamedTemporaryFile(mode='wb', prefix='poky.', suffix='.tmp', delete=False)
+            tmplicfile = fo.name;
+            lineno = 0
+            linesout = 0
+            for line in fi:
+                lineno += 1
+                if (lineno >= beginline): 
+                    if ((lineno <= endline) or not endline):
+                        fo.write(line)
+                        linesout += 1
+                    else:
+                        break
+            fo.flush()
+            fo.close()
+            fi.close()
+            md5chksum = bb.utils.md5_file(tmplicfile)
+            os.unlink(tmplicfile)
+
+        if parm['md5'] == md5chksum:
+            bb.note ("md5 checksum matched for ", url)
+        else:
+            bb.error ("md5 data is not matching for ", url)
+            bb.note ("The new md5 checksum is ", md5chksum)
+            bb.note ("Check if the license information has changed, and if it has update the .bb file with correct license")
+            return False
+
+    return sane
+
 def package_qa_check_staged(path,d):
     """
     Check staged la and pc files for sanity
@@ -385,7 +445,8 @@ python do_package_qa () {
         if not package_qa_check_rdepends(package, workdir, d):
             rdepends_sane = False
 
-    if not walk_sane or not rdepends_sane:
+
+    if not walk_sane or not rdepends_sane or not package_qa_check_license(workdir, d):
         bb.fatal("QA run found fatal errors. Please consider fixing them.")
     bb.note("DONE with PACKAGE QA")
 }
index 97d0be5d5e6daf8c5be942cc21d3b6c12d6ce694..c58d5f2d25626f7a624fda972000b6efd8eaf4c4 100644 (file)
@@ -3,6 +3,8 @@ SECTION = "libs"
 PRIORITY = "required"
 HOMEPAGE = "http://www.gzip.org/zlib/"
 LICENSE = "zlib"
+LIC_FILES_CHKSUM = "file://README;md5=ae764cfda68da96df20af9fbf9fe49bd \
+                       file://zlib.h;beginline=1;endline=30;md5=6ab03f03a5ee92d06b809797d4d5586d "
 PR = "r7"
 
 SRC_URI = "http://www.zlib.net/zlib-1.2.3.tar.bz2 \