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 | } |
