diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/classes/insane.bbclass | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index 3dd2e7fb6a..c6dea22618 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
@@ -29,7 +29,7 @@ QA_SANE = "True" | |||
29 | WARN_QA ?= "ldflags useless-rpaths rpaths staticdev libdir xorg-driver-abi \ | 29 | WARN_QA ?= "ldflags useless-rpaths rpaths staticdev libdir xorg-driver-abi \ |
30 | textrel already-stripped incompatible-license files-invalid \ | 30 | textrel already-stripped incompatible-license files-invalid \ |
31 | installed-vs-shipped compile-host-path install-host-path \ | 31 | installed-vs-shipped compile-host-path install-host-path \ |
32 | pn-overrides infodir build-deps \ | 32 | pn-overrides infodir build-deps file-rdeps \ |
33 | " | 33 | " |
34 | ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \ | 34 | ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \ |
35 | perms dep-cmp pkgvarcheck perm-config perm-line perm-link \ | 35 | perms dep-cmp pkgvarcheck perm-config perm-line perm-link \ |
@@ -797,6 +797,76 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, taskdeps, packages, d): | |||
797 | error_msg = "%s rdepends on %s, but it isn't a build dependency?" % (pkg, rdepend) | 797 | error_msg = "%s rdepends on %s, but it isn't a build dependency?" % (pkg, rdepend) |
798 | sane = package_qa_handle_error("build-deps", error_msg, d) | 798 | sane = package_qa_handle_error("build-deps", error_msg, d) |
799 | 799 | ||
800 | if "file-rdeps" not in skip: | ||
801 | ignored_file_rdeps = set(['/bin/sh', '/usr/bin/env', 'rtld(GNU_HASH)']) | ||
802 | if bb.data.inherits_class('nativesdk', d): | ||
803 | ignored_file_rdeps |= set(['/bin/bash', '/usr/bin/perl']) | ||
804 | # For Saving the FILERDEPENDS | ||
805 | filerdepends = set() | ||
806 | rdep_data = oe.packagedata.read_subpkgdata(pkg, d) | ||
807 | for key in rdep_data: | ||
808 | if key.startswith("FILERDEPENDS_"): | ||
809 | for subkey in rdep_data[key].split(): | ||
810 | filerdepends.add(subkey) | ||
811 | filerdepends -= ignored_file_rdeps | ||
812 | |||
813 | if filerdepends: | ||
814 | next = rdepends | ||
815 | done = rdepends[:] | ||
816 | # Find all the rdepends on the dependency chain | ||
817 | while next: | ||
818 | new = [] | ||
819 | for rdep in next: | ||
820 | rdep_data = oe.packagedata.read_subpkgdata(rdep, d) | ||
821 | sub_rdeps = rdep_data.get("RDEPENDS_" + rdep) | ||
822 | if not sub_rdeps: | ||
823 | continue | ||
824 | for sub_rdep in sub_rdeps.split(): | ||
825 | if sub_rdep in done: | ||
826 | continue | ||
827 | if not sub_rdep.startswith('(') and \ | ||
828 | oe.packagedata.has_subpkgdata(sub_rdep, d): | ||
829 | # It's a new rdep | ||
830 | done.append(sub_rdep) | ||
831 | new.append(sub_rdep) | ||
832 | next = new | ||
833 | |||
834 | # Add the rprovides of itself | ||
835 | if pkg not in done: | ||
836 | done.insert(0, pkg) | ||
837 | |||
838 | # The python is not a package, but python-core provides it, so | ||
839 | # skip checking /usr/bin/python if python is in the rdeps, in | ||
840 | # case there is a RDEPENDS_pkg = "python" in the recipe. | ||
841 | for py in [ d.getVar('MLPREFIX', True) + "python", "python" ]: | ||
842 | if py in done: | ||
843 | filerdepends.discard("/usr/bin/python") | ||
844 | done.remove(py) | ||
845 | for rdep in done: | ||
846 | # For Saving the FILERPROVIDES, RPROVIDES and FILES_INFO | ||
847 | rdep_rprovides = set() | ||
848 | rdep_data = oe.packagedata.read_subpkgdata(rdep, d) | ||
849 | for key in rdep_data: | ||
850 | if key.startswith("FILERPROVIDES_") or key.startswith("RPROVIDES_"): | ||
851 | for subkey in rdep_data[key].split(): | ||
852 | rdep_rprovides.add(subkey) | ||
853 | # Add the files list to the rprovides | ||
854 | if key == "FILES_INFO": | ||
855 | # Use eval() to make it as a dict | ||
856 | for subkey in eval(rdep_data[key]): | ||
857 | rdep_rprovides.add(subkey) | ||
858 | filerdepends -= rdep_rprovides | ||
859 | if not filerdepends: | ||
860 | # Break if all the file rdepends are met | ||
861 | break | ||
862 | else: | ||
863 | # Clear it for the next loop | ||
864 | rdep_rprovides.clear() | ||
865 | if filerdepends: | ||
866 | error_msg = "%s requires %s, but no providers in its RDEPENDS" % \ | ||
867 | (pkg, ', '.join(str(e) for e in filerdepends)) | ||
868 | sane = package_qa_handle_error("file-rdeps", error_msg, d) | ||
869 | |||
800 | return sane | 870 | return sane |
801 | 871 | ||
802 | def package_qa_check_deps(pkg, pkgdest, skip, d): | 872 | def package_qa_check_deps(pkg, pkgdest, skip, d): |