[OE-core] [PATCH V2] insane.bbclass: skip opening symlinks in package_qa_check_libdir
Yi Zhao
yi.zhao at windriver.com
Tue Mar 13 01:33:44 UTC 2018
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.zhao at 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)
More information about the Openembedded-core
mailing list