Re: [OE-core] [PATCH V2] insane.bbclass: skip opening symlinks in package_qa_check_libdir
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: 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--- 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
[OE-core] [PATCH V2] insane.bbclass: skip opening symlinks in package_qa_check_libdir
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' For .so sysmlinks, we don't need to open it and report it directly. [YOCTO #11862] Signed-off-by: Yi Zhao--- 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) -- 2.7.4 -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core