The ipk or deb can't depend on file such as "/bin/bash" or "/usr/bin/perl", so it knows nothing about the pkg depends bash or perl, thus there would be dependencies problems when we run "apt-get install/remove <pkg>" on the target, this check can help us find the issues and then fix them manually.
* Basic designs: - Get the pkg's FILERPROVIDES from oe.packagedata.read_subpkgdata() and save to set filerdepends. - Get the each RPDEPENDS' FILERPROVIDES, RPROVIDES and FILERPROVIDESFLIST, and save to set rdep_rprovides. - Do the set "filerdepends -= rdep_rprovides" and QA Issue if filerdepends is not null. [YOCTO #1662] Signed-off-by: Robert Yang <liezhi.y...@windriver.com> --- meta/classes/insane.bbclass | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index 3dd2e7f..f2e9626 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass @@ -29,7 +29,7 @@ QA_SANE = "True" WARN_QA ?= "ldflags useless-rpaths rpaths staticdev libdir xorg-driver-abi \ textrel already-stripped incompatible-license files-invalid \ installed-vs-shipped compile-host-path install-host-path \ - pn-overrides infodir build-deps \ + pn-overrides infodir build-deps file-rdeps \ " ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \ perms dep-cmp pkgvarcheck perm-config perm-line perm-link \ @@ -797,6 +797,41 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, taskdeps, packages, d): error_msg = "%s rdepends on %s, but it isn't a build dependency?" % (pkg, rdepend) sane = package_qa_handle_error("build-deps", error_msg, d) + if "file-rdeps" not in skip: + ignored_file_rdeps = set(['/bin/sh', '/usr/bin/env']) + # For Saving the FILERDEPENDS + filerdepends = set() + rdep_data = oe.packagedata.read_subpkgdata(pkg, d) + for key in rdep_data: + if key.startswith("FILERDEPENDS_"): + for subkey in rdep_data[key].split(): + filerdepends.add(subkey) + filerdepends -= ignored_file_rdeps + if filerdepends: + # Check the rprovides of itself + if pkg not in rdepends: + rdepends.insert(0, pkg) + for rdepend in rdepends: + # For Saving the FILERPROVIDES and RPROVIDES + rdep_rprovides = set() + rdep_data = oe.packagedata.read_subpkgdata(rdepend, d) + for key in rdep_data: + if key.startswith("FILERPROVIDES_") or key.startswith("RPROVIDES_") \ + or key.startswith("FILERPROVIDESFLIST_"): + for subkey in rdep_data[key].split(): + rdep_rprovides.add(subkey) + filerdepends -= rdep_rprovides + if not filerdepends: + # Break if all the file rdepends are met. + break + else: + # Clear it for the next loop + rdep_rprovides.clear() + if filerdepends: + error_msg = "%s requires %s, but no providers in its RDEPENDS" % \ + (pkg, ', '.join(str(e) for e in filerdepends)) + sane = package_qa_handle_error("file-rdeps", error_msg, d) + return sane def package_qa_check_deps(pkg, pkgdest, skip, d): -- 1.7.9.5 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core