<br><br>On Sunday, December 18, 2011, Dmitry Eremin-Solenikov <<a href="mailto:dbaryshkov@gmail.com">dbaryshkov@gmail.com</a>> wrote:<br>> Checking that all installed files are shipped is in reality a QA check.<br>
> It would benefit from mechanisms like ERROR_QA/WARNING_QA. So move it<br>> into insane.bbclass. If some of the files are installed but should not<br>> be shipped for some reasons, one can add them to the variable<br>
> IGNORE_UNSHIPPED_FILES.<br>><br><br>This needs to be documented somewhere too and may be added to sample.conf.extended<br><br>> Signed-off-by: Dmitry Eremin-Solenikov <<a href="mailto:dbaryshkov@gmail.com">dbaryshkov@gmail.com</a>><br>
> ---<br>> meta/classes/insane.bbclass | 50 ++++++++++++++++++++++++++++++++++++++++-<br>> meta/classes/package.bbclass | 15 ------------<br>> 2 files changed, 48 insertions(+), 17 deletions(-)<br>><br>
> diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass<br>> index 5726e69..41b815c 100644<br>> --- a/meta/classes/insane.bbclass<br>> +++ b/meta/classes/insane.bbclass<br>> @@ -100,7 +100,7 @@ def package_qa_get_machine_dict():<br>
><br>><br>> # Currently not being used by default "desktop"<br>> -WARN_QA ?= "ldflags useless-rpaths rpaths"<br>> +WARN_QA ?= "ldflags useless-rpaths rpaths unshipped"<br>> ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch la2 pkgconfig la perms"<br>
><br>> def package_qa_clean_path(path,d):<br>> @@ -485,6 +485,49 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, d):<br>><br>> return sane<br>><br>> +IGNORE_UNSHIPPED_FILES ??= ""<br>
> +<br>> +def packages_qa_unshipped_files(d):<br>> + warn = (d.getVar('WARN_QA', True) or "").split()<br>> + err = (d.getVar('ERROR_QA', True) or "").split()<br>> + if not "unshipped" in warn + err:<br>
> + return True<br>> +<br>> + seen = d.getVar('IGNORE_UNSHIPPED_FILES', True).split()<br>> + unshipped = []<br>> + dvar = d.getVar('PKGD', True)<br>> + destvar = d.getVar('PKGDEST', True)<br>
> + packages = d.getVar('PACKAGES', True).split()<br>> + for p in packages:<br>> + pdir = os.path.join(destvar, p)<br>> + for root, dirs, files in os.walk(pdir):<br>> + dir = root[len(pdir):]<br>
> + if not dir:<br>> + dir = os.sep<br>> + for f in (files + dirs):<br>> + path = os.path.join(dir, f)<br>> + if path not in seen<br>> + seen.append(path)<br>
> +<br>> + for root, dirs, files in os.walk(dvar):<br>> + dir = root[len(dvar):]<br>> + if not dir:<br>> + dir = os.sep<br>> + for f in (files + dirs):<br>> + path = os.path.join(dir, f)<br>
> + if path not in seen:<br>> + unshipped.append(path)<br>> +<br>> + pn = d.getVar('PN', True)<br>> +<br>> + if unshipped == []:<br>> + return True<br>> +<br>
> + ret = package_qa_handle_error("unshipped", "For recipe %s, the following files/directories were installed but not shipped in any package:" % pn, d)<br>> + for f in unshipped:<br>> + package_qa_handle_error("unshipped", f, d)<br>
> + return ret<br>> +<br>> # The PACKAGE FUNC to scan each package<br>> python do_package_qa () {<br>> bb.note("DO PACKAGE QA")<br>> @@ -522,6 +565,7 @@ python do_package_qa () {<br>> g = globals()<br>
> walk_sane = True<br>> rdepends_sane = True<br>> + shipped_sane = True<br>> for package in packages.split():<br>> skip = (d.getVar('INSANE_SKIP_' + package, True) or "").split()<br>
> if skip:<br>> @@ -546,8 +590,10 @@ python do_package_qa () {<br>> if not package_qa_check_rdepends(package, pkgdest, skip, d):<br>> rdepends_sane = False<br>><br>> + if not packages_qa_unshipped_files(d):<br>
> + shipped_sane = False<br>><br>> - if not walk_sane or not rdepends_sane:<br>> + if not walk_sane or not rdepends_sane or not shipped_sane:<br>> bb.fatal("QA run found fatal errors. Please consider fixing them.")<br>
> bb.note("DONE with PACKAGE QA")<br>> }<br>> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass<br>> index 39c1d4b..fbea9c6 100644<br>> --- a/meta/classes/package.bbclass<br>
> +++ b/meta/classes/package.bbclass<br>> @@ -957,21 +957,6 @@ python populate_packages () {<br>> del localdata<br>> os.chdir(workdir)<br>><br>> - unshipped = []<br>> - for root, dirs, files in os.walk(dvar):<br>
> - dir = root[len(dvar):]<br>> - if not dir:<br>> - dir = os.sep<br>> - for f in (files + dirs):<br>> - path = os.path.join(dir, f)<br>
> - if ('.' + path) not in seen:<br>> - unshipped.append(path)<br>> -<br>> - if unshipped != []:<br>> - bb.warn("For recipe %s, the following files/directories were installed but not shipped in any package:" % pn)<br>
> - for f in unshipped:<br>> - bb.warn(" " + f)<br>> -<br>> bb.build.exec_func("package_name_hook", d)<br>><br>> for pkg in package_list:<br>
> --<br>> 1.7.7.3<br>><br>><br>> _______________________________________________<br>> Openembedded-core mailing list<br>> <a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.openembedded.org</a><br>
> <a href="http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core">http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core</a><br>>