package: Fix license exclusion packaging errors

Currently the license exclusion code removes packages from PACKAGES
pre population of the package directories. This means that the FILES
entries for some packages are not seen and invariably results in
packaging errors.

Instead, remove the packages from PACKAGES post population of the packages
so the usual FILES entries work as expected but the file are not placed
into any packages and no packages containing embargoed licenses are generated.

This avoids errors from gcc-runtime with GPLv3 exclusion like:

ERROR: QA Issue: gcc-runtime: Files/directories were installed but not shipped in any package:
  /usr/share
  /usr/src
  /usr/share/gcc-4.9.2
  /usr/share/gcc-4.9.2/python
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install. [installed-vs-shipped]

(From OE-Core rev: 09c3d648c95fe88197c15d656bda1c9303aa2079)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2015-04-29 14:23:14 +01:00
parent 24609d9b60
commit bae7794112

View File

@@ -1041,14 +1041,11 @@ python populate_packages () {
bb.utils.mkdirhier(outdir)
os.chdir(dvar)
# Sanity check PACKAGES for duplicates and for LICENSE_EXCLUSION
# Sanity check PACKAGES for duplicates
# Sanity should be moved to sanity.bbclass once we have the infrastucture
package_list = []
for pkg in packages.split():
if d.getVar('LICENSE_EXCLUSION-' + pkg, True):
msg = "%s has an incompatible license. Excluding from packaging." % pkg
package_qa_handle_error("incompatible-license", msg, d)
if pkg in package_list:
msg = "%s is listed in PACKAGES multiple times, this leads to packaging errors." % pkg
package_qa_handle_error("packages-list", msg, d)
@@ -1082,9 +1079,6 @@ python populate_packages () {
continue
seen.append(file)
if d.getVar('LICENSE_EXCLUSION-' + pkg, True):
continue
def mkdir(src, dest, p):
src = os.path.join(src, p)
dest = os.path.join(dest, p)
@@ -1125,6 +1119,16 @@ python populate_packages () {
os.umask(oldumask)
os.chdir(workdir)
# Handle LICENSE_EXCLUSION
package_list = []
for pkg in packages.split():
if d.getVar('LICENSE_EXCLUSION-' + pkg, True):
msg = "%s has an incompatible license. Excluding from packaging." % pkg
package_qa_handle_error("incompatible-license", msg, d)
else:
package_list.append(pkg)
d.setVar('PACKAGES', ' '.join(package_list))
unshipped = []
for root, dirs, files in cpath.walk(dvar):
dir = root[len(dvar):]