Ping

//Yi



在 2018年03月07日 08:15, Yi Zhao 写道:
If the library is installed in a non-standard location and don't set
INSANE_SKIP, e.g. libfoo.so is installed in /usr/local/lib. The
package_qa_check_libdir will cause a traceback because it will try to
open the .so link in package-dev to check if it's an ELF:
The stack trace of python calls that resulted in this exception/failure
was:
File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
      0001:
  *** 0002:do_package_qa(d)
      [snip]
      0048:    def open(self):
  *** 0049:        with open(self.name, "rb") as f:
      0050:            try:
      0051:                self.data = mmap.mmap(f.fileno(), 0, 
access=mmap.ACCESS_READ)
      0052:            except ValueError:
      0053:                # This means the file is empty
Exception: FileNotFoundError: [Errno 2] No such file or directory:
'/buildarea1/build/tmp/work/i586-poky-linux/foo/1.0-r0/packages-split/foo-dev/usr/local/lib/libfoo.so'

For .so sysmlinks, we don't need to open it and report it directly.

[YOCTO #11862]

Signed-off-by: Yi Zhao <yi.z...@windriver.com>
---
  meta/classes/insane.bbclass | 30 ++++++++++++++++++------------
  1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 7407b29..b5689b7 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -358,22 +358,28 @@ def package_qa_check_libdir(d):
                  rel_path = os.sep + rel_path
                  if lib_re.match(rel_path):
                      if base_libdir not in rel_path:
-                        # make sure it's an actual ELF file
-                        elf = oe.qa.ELFFile(full_path)
-                        try:
-                            elf.open()
+                        if os.path.islink(full_path):
                              messages.append("%s: found library in wrong location: 
%s" % (package, rel_path))
-                        except (oe.qa.NotELFFileError):
-                            pass
+                        else:
+                            # make sure it's an actual ELF file
+                            elf = oe.qa.ELFFile(full_path)
+                            try:
+                                elf.open()
+                                messages.append("%s: found library in wrong 
location: %s" % (package, rel_path))
+                            except (oe.qa.NotELFFileError):
+                                pass
                  if exec_re.match(rel_path):
                      if libdir not in rel_path and libexecdir not in rel_path:
-                        # make sure it's an actual ELF file
-                        elf = oe.qa.ELFFile(full_path)
-                        try:
-                            elf.open()
+                        if os.path.islink(full_path):
                              messages.append("%s: found library in wrong location: 
%s" % (package, rel_path))
-                        except (oe.qa.NotELFFileError):
-                            pass
+                        else:
+                            # make sure it's an actual ELF file
+                            elf = oe.qa.ELFFile(full_path)
+                            try:
+                                elf.open()
+                                messages.append("%s: found library in wrong 
location: %s" % (package, rel_path))
+                            except (oe.qa.NotELFFileError):
+                                pass
if messages:
          package_qa_handle_error("libdir", "\n".join(messages), d)

--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to