Re: [OE-core] [PATCH] insane.bbclass: skip opening invalid symlinks in package_qa_check_libdir

2018-03-05 Thread ChenQi
We need to make sure the .so symlinks which are in wrong location are 
also reported.
For example libfoo.so.1 is in under /lib and is correct, but for some 
reason libfoo.so which is a symlink to libfoo.so.1 is under /lib32, and 
this should be reported.

I guess the correct fix should be:
If it's a symlink, report it directly.
If it's not symlink, check if it's ELF and report it accordingly.

Best Regards,
Chen Qi

On 03/06/2018 09:11 AM, Yi Zhao wrote:

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: 
  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'

Add checking before open file to skip the invalid sysmlinks.

[YOCTO #11862]

Signed-off-by: Yi Zhao 
---
  meta/classes/insane.bbclass | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 7407b29..28c9eee 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -357,7 +357,7 @@ def package_qa_check_libdir(d):
  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:
+if base_libdir not in rel_path and 
os.path.exists(full_path):
  # make sure it's an actual ELF file
  elf = oe.qa.ELFFile(full_path)
  try:
@@ -366,7 +366,7 @@ def package_qa_check_libdir(d):
  except (oe.qa.NotELFFileError):
  pass
  if exec_re.match(rel_path):
-if libdir not in rel_path and libexecdir not in rel_path:
+if libdir not in rel_path and libexecdir not in rel_path 
and os.path.exists(full_path):
  # make sure it's an actual ELF file
  elf = oe.qa.ELFFile(full_path)
  try:



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


[OE-core] [PATCH] insane.bbclass: skip opening invalid symlinks in package_qa_check_libdir

2018-03-05 Thread 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: 
 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'

Add checking before open file to skip the invalid sysmlinks.

[YOCTO #11862]

Signed-off-by: Yi Zhao 
---
 meta/classes/insane.bbclass | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 7407b29..28c9eee 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -357,7 +357,7 @@ def package_qa_check_libdir(d):
 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:
+if base_libdir not in rel_path and 
os.path.exists(full_path):
 # make sure it's an actual ELF file
 elf = oe.qa.ELFFile(full_path)
 try:
@@ -366,7 +366,7 @@ def package_qa_check_libdir(d):
 except (oe.qa.NotELFFileError):
 pass
 if exec_re.match(rel_path):
-if libdir not in rel_path and libexecdir not in rel_path:
+if libdir not in rel_path and libexecdir not in rel_path 
and os.path.exists(full_path):
 # make sure it's an actual ELF file
 elf = oe.qa.ELFFile(full_path)
 try:
-- 
2.7.4

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