Skip to contentSkip to conversation

A couple more fixes for the libdir QA check

PATCH New Paul Eggleton 1 participant 3 messages Jul 15, 2013

lore
Share & tools
lore
#0 lore raw

cover A couple more fixes for the libdir QA check

The following changes since commit 43c28375f97161e618fa54349c65be2058c33c53:

distrodata.bbaclass: change in git and svn package reporting (2013-07-12 10:12:13 -0700)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib paule/libdir2
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/libdir2

Paul Eggleton (2):
classes/insane: fix regression in libdir QA regex classes/insane: allow libdir QA check to be skipped using INSANE_SKIP

 meta/classes/insane.bbclass | 40 +++++++++++++++++++++++++---------------
 1 file changed, 25 insertions(+), 15 deletions(-)
Signature · 1 line
1.8.1.2
#1 lore raw

PATCH 1/2 classes/insane: fix regression in libdir QA regex

There was a slight mistake in the recent change to the lib_re regex - it still needs to begin with a /.

---
 meta/classes/insane.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
meta/classes/insane.bbclass +1 -1
index 1023092..b875ac0 100644
@@ -265,7 +265,7 @@ def package_qa_check_libdir(d):
             full_path = os.path.join(root,file)
             my_files.append(full_path[len(pkgd):])
 
-    lib_re = re.compile("^lib.+\.so(\..+)?$")
+    lib_re = re.compile("^/lib.+\.so(\..+)?$")
     exec_re = re.compile("^%s.*/lib.+\.so(\..+)?$" % exec_prefix)
 
     for file in my_files:
Signature · 1 line
1.8.1.2
#2 lore raw

PATCH 2/2 classes/insane: allow libdir QA check to be skipped using INSANE_SKIP

In reply to Paul Eggleton

This path check isn't handled in the normal way where a QA check function is called for every file (there's some minor setup that we want to avoid doing for every file) so we need to check INSANE_SKIP explicitly.

In the process, change the code structure a little bit so that we can report the package that contains the errant file.

Fixes [YOCTO #4822].

---
 meta/classes/insane.bbclass | 38 ++++++++++++++++++++++++--------------
 1 file changed, 24 insertions(+), 14 deletions(-)
meta/classes/insane.bbclass +24 -14
index b875ac0..75bd2e2 100644
@@ -252,29 +252,39 @@ def package_qa_check_libdir(d):
     """
     import re
 
-    pkgd = d.getVar('PKGD', True)
+    pkgdest = d.getVar('PKGDEST', True)
     base_libdir = d.getVar("base_libdir",True) + os.sep
     libdir = d.getVar("libdir", True) + os.sep
     exec_prefix = d.getVar("exec_prefix", True) + os.sep
 
     messages = []
-    my_files = []
-
-    for root, dirs, files in os.walk(pkgd):
-        for file in files:
-            full_path = os.path.join(root,file)
-            my_files.append(full_path[len(pkgd):])
 
     lib_re = re.compile("^/lib.+\.so(\..+)?$")
     exec_re = re.compile("^%s.*/lib.+\.so(\..+)?$" % exec_prefix)
 
-    for file in my_files:
-        if lib_re.match(file):
-            if base_libdir not in file:
-                messages.append("Found library in wrong location: %s" % file)
-        if exec_re.match(file):
-            if libdir not in file:
-                messages.append("Found library in wrong location: %s" % file)
+    for root, dirs, files in os.walk(pkgdest):
+        if root == pkgdest:
+            # Skip subdirectories for any packages with libdir in INSANE_SKIP
+            skippackages = []
+            for package in dirs:
+                if 'libdir' in (d.getVar('INSANE_SKIP_' + package, True) or "").split():
+                    bb.note("Package %s skipping libdir QA test" % (package))
+                    skippackages.append(package)
+            for package in skippackages:
+                dirs.remove(package)
+        for file in files:
+            full_path = os.path.join(root, file)
+            rel_path = os.path.relpath(full_path, pkgdest)
+            if os.sep in rel_path:
+                package, rel_path = rel_path.split(os.sep, 1)
+                rel_path = os.sep + rel_path
+                if lib_re.match(rel_path):
+                    if base_libdir not in rel_path:
+                        messages.append("%s: found library in wrong location: %s" % (package, rel_path))
+                if exec_re.match(rel_path):
+                    if libdir not in rel_path:
+                        messages.append("%s: found library in wrong location: %s" % (package, rel_path))
+
     if messages:
         package_qa_handle_error("libdir", "\n".join(messages), d)
 
Signature · 1 line
1.8.1.2