diff options
-rw-r--r-- | meta/classes/insane.bbclass | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index b26216e8b4..53942365ab 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 \ | 32 | pn-overrides infodir build-deps \ |
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 \ |
@@ -755,7 +755,7 @@ def package_qa_walk(path, warnfuncs, errorfuncs, skip, package, d): | |||
755 | 755 | ||
756 | return len(errors) == 0 | 756 | return len(errors) == 0 |
757 | 757 | ||
758 | def package_qa_check_rdepends(pkg, pkgdest, skip, d): | 758 | def package_qa_check_rdepends(pkg, pkgdest, skip, taskdeps, packages, d): |
759 | # Don't do this check for kernel/module recipes, there aren't too many debug/development | 759 | # Don't do this check for kernel/module recipes, there aren't too many debug/development |
760 | # packages and you can get false positives e.g. on kernel-module-lirc-dev | 760 | # packages and you can get false positives e.g. on kernel-module-lirc-dev |
761 | if bb.data.inherits_class("kernel", d) or bb.data.inherits_class("module-base", d): | 761 | if bb.data.inherits_class("kernel", d) or bb.data.inherits_class("module-base", d): |
@@ -778,6 +778,24 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, d): | |||
778 | if (not "-dev" in pkg and not "-staticdev" in pkg) and rdepend.endswith("-dev") and "dev-deps" not in skip: | 778 | if (not "-dev" in pkg and not "-staticdev" in pkg) and rdepend.endswith("-dev") and "dev-deps" not in skip: |
779 | error_msg = "%s rdepends on %s" % (pkg, rdepend) | 779 | error_msg = "%s rdepends on %s" % (pkg, rdepend) |
780 | sane = package_qa_handle_error("dev-deps", error_msg, d) | 780 | sane = package_qa_handle_error("dev-deps", error_msg, d) |
781 | if rdepend not in packages: | ||
782 | rdep_data = oe.packagedata.read_subpkgdata(rdepend, d) | ||
783 | if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps: | ||
784 | continue | ||
785 | if not rdep_data or not 'PN' in rdep_data: | ||
786 | pkgdata_dir = d.getVar("PKGDATA_DIR", True) | ||
787 | try: | ||
788 | possibles = os.listdir("%s/runtime-rprovides/%s/" % (pkgdata_dir, rdepend)) | ||
789 | except OSError: | ||
790 | possibles = [] | ||
791 | for p in possibles: | ||
792 | rdep_data = oe.packagedata.read_subpkgdata(p, d) | ||
793 | if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps: | ||
794 | break | ||
795 | if rdep_data and 'PN' in rdep_data and rdep_data['PN'] in taskdeps: | ||
796 | continue | ||
797 | error_msg = "%s rdepends on %s but its not a build dependency?" % (pkg, rdepend) | ||
798 | sane = package_qa_handle_error("build-deps", error_msg, d) | ||
781 | 799 | ||
782 | return sane | 800 | return sane |
783 | 801 | ||
@@ -820,6 +838,7 @@ def package_qa_check_deps(pkg, pkgdest, skip, d): | |||
820 | # The PACKAGE FUNC to scan each package | 838 | # The PACKAGE FUNC to scan each package |
821 | python do_package_qa () { | 839 | python do_package_qa () { |
822 | import subprocess | 840 | import subprocess |
841 | import oe.packagedata | ||
823 | 842 | ||
824 | bb.note("DO PACKAGE QA") | 843 | bb.note("DO PACKAGE QA") |
825 | 844 | ||
@@ -870,6 +889,11 @@ python do_package_qa () { | |||
870 | # The package name matches the [a-z0-9.+-]+ regular expression | 889 | # The package name matches the [a-z0-9.+-]+ regular expression |
871 | pkgname_pattern = re.compile("^[a-z0-9.+-]+$") | 890 | pkgname_pattern = re.compile("^[a-z0-9.+-]+$") |
872 | 891 | ||
892 | taskdepdata = d.getVar("BB_TASKDEPDATA", False) | ||
893 | taskdeps = set() | ||
894 | for dep in taskdepdata: | ||
895 | taskdeps.add(taskdepdata[dep][0]) | ||
896 | |||
873 | g = globals() | 897 | g = globals() |
874 | walk_sane = True | 898 | walk_sane = True |
875 | rdepends_sane = True | 899 | rdepends_sane = True |
@@ -900,7 +924,7 @@ python do_package_qa () { | |||
900 | path = "%s/%s" % (pkgdest, package) | 924 | path = "%s/%s" % (pkgdest, package) |
901 | if not package_qa_walk(path, warnchecks, errorchecks, skip, package, d): | 925 | if not package_qa_walk(path, warnchecks, errorchecks, skip, package, d): |
902 | walk_sane = False | 926 | walk_sane = False |
903 | if not package_qa_check_rdepends(package, pkgdest, skip, d): | 927 | if not package_qa_check_rdepends(package, pkgdest, skip, taskdeps, packages, d): |
904 | rdepends_sane = False | 928 | rdepends_sane = False |
905 | if not package_qa_check_deps(package, pkgdest, skip, d): | 929 | if not package_qa_check_deps(package, pkgdest, skip, d): |
906 | deps_sane = False | 930 | deps_sane = False |
@@ -915,6 +939,7 @@ python do_package_qa () { | |||
915 | bb.note("DONE with PACKAGE QA") | 939 | bb.note("DONE with PACKAGE QA") |
916 | } | 940 | } |
917 | 941 | ||
942 | do_package_qa[rdeptask] = "do_packagedata" | ||
918 | addtask do_package_qa after do_packagedata do_package before do_build | 943 | addtask do_package_qa after do_packagedata do_package before do_build |
919 | 944 | ||
920 | SSTATETASKS += "do_package_qa" | 945 | SSTATETASKS += "do_package_qa" |
@@ -1038,6 +1063,8 @@ python () { | |||
1038 | for var in 'RDEPENDS', 'RRECOMMENDS', 'RSUGGESTS', 'RCONFLICTS', 'RPROVIDES', 'RREPLACES', 'FILES', 'pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm', 'ALLOW_EMPTY': | 1063 | for var in 'RDEPENDS', 'RRECOMMENDS', 'RSUGGESTS', 'RCONFLICTS', 'RPROVIDES', 'RREPLACES', 'FILES', 'pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm', 'ALLOW_EMPTY': |
1039 | if d.getVar(var): | 1064 | if d.getVar(var): |
1040 | issues.append(var) | 1065 | issues.append(var) |
1066 | else: | ||
1067 | d.setVarFlag('do_package_qa', 'rdeptask', '') | ||
1041 | for i in issues: | 1068 | for i in issues: |
1042 | package_qa_handle_error("pkgvarcheck", "%s: Variable %s is set as not being package specific, please fix this." % (d.getVar("FILE", True), i), d) | 1069 | package_qa_handle_error("pkgvarcheck", "%s: Variable %s is set as not being package specific, please fix this." % (d.getVar("FILE", True), i), d) |
1043 | } | 1070 | } |