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