[OE-core] [poky][meta][PATCH] package_manager.py: handle renamed packages for PACKAGE_EXCLUDE with opkg

Aditya Tayade Aditya.Tayade at kpit.com
Mon Jun 3 16:42:01 UTC 2019


From: Michael Ho <Michael.Ho at bmw.de>

The PACKAGE_EXCLUDE variable is used to pass a list of packages to be
forbidden from installation with opkg. This list however does not account
normally for the renaming of packages which can occur (for example when the
debian bbclass is enabled, packages with libs are renamed from xxx to libxxx)
and so expected excluded packages are not blocked.

Rather than tediously maintaining the PACKAGE_EXCLUDE variable to handle
renamed packages that can dynamically change, move the expansion of the
variable from parsing time to run time so it can use the pkgdata dictionaries
to add automatically any renamed packages.

Upstream-Status: Pending

Signed-off-by: Michael Ho <Michael.Ho at bmw.de>
Signed-off-by: Aditya.Tayade <Aditya.Tayade at kpit.com>
---
 meta/classes/package_ipk.bbclass |  1 -
 meta/lib/oe/package_manager.py   | 15 +++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass
index d1b317b..fa71869 100644
--- a/meta/classes/package_ipk.bbclass
+++ b/meta/classes/package_ipk.bbclass
@@ -12,7 +12,6 @@ OPKGBUILDCMD ??= 'opkg-build -Z xz -a "${XZ_DEFAULTS}"'

 OPKG_ARGS += "--force_postinstall --prefer-arch-to-version"
 OPKG_ARGS += "${@['', '--no-install-recommends'][d.getVar("NO_RECOMMENDATIONS") == "1"]}"
-OPKG_ARGS += "${@['', '--add-exclude ' + ' --add-exclude '.join((d.getVar('PACKAGE_EXCLUDE') or "").split())][(d.getVar("PACKAGE_EXCLUDE") or "").strip() != ""]}"

 OPKGLIBDIR = "${localstatedir}/lib"

diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 06feb4d..ca66bdf 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -1160,6 +1160,21 @@ class OpkgPM(OpkgDpkgPM):
         self.deploy_lock_file = os.path.join(self.deploy_dir, "deploy.lock")
         self.opkg_cmd = bb.utils.which(os.getenv('PATH'), "opkg")
         self.opkg_args = "--volatile-cache -f %s -t %s -o %s " % (self.config_file, self.d.expand('${T}/ipktemp/') ,target_rootfs)
+
+        # Handle excluded packages here rather than at parsing time so we can expand out the
+        # PACKAGE_EXCLUDES at the runtime moment when pkgdata is available
+        def opkg_exclude_args(pkg_excludes):
+            remapped_pkg_excludes = []
+            for pkg in pkg_excludes:
+                pkg_data = oe.packagedata.read_subpkgdata(pkg, d)
+                rename_key = "PKG_{}".format(pkg)
+                if pkg_data and rename_key in pkg_data and pkg_data[rename_key] != pkg:
+                    remapped_pkg_excludes.append(pkg_data[rename_key])
+            pkg_excludes.extend(remapped_pkg_excludes)
+            pkg_excludes.sort()
+            return " --add-exclude " + " --add-exclude ".join(pkg_excludes)
+
+        self.opkg_args += opkg_exclude_args((d.getVar("PACKAGE_EXCLUDE") or "").split())
         self.opkg_args += self.d.getVar("OPKG_ARGS")

         if prepare_index:
--
2.7.4

This message contains information that may be privileged or confidential and is the property of the KPIT Technologies Ltd. It is intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to read, print, retain copy, disseminate, distribute, or use this message or any part thereof. If you receive this message in error, please notify the sender immediately and delete all copies of this message. KPIT Technologies Ltd. does not accept any liability for virus infected mails.


More information about the Openembedded-core mailing list