[OE-core] [PATCH v3][2/2] image.bbclass: Add support for runtime PREFERRED_PROVIDER

Jate Sujjavanich jatedev at gmail.com
Thu Jul 23 21:32:29 UTC 2015


The following changes since commit 5f248526ae5f15a2e6f3a6da88a96aba976bb28e:

  providers.py: Add support for preferred runtime item (2015-07-23 17:28:31
-0400)

are available in the git repository at:

  https://jatedev@github.com/jatedev/poky preferred-provider-runtime-3

for you to fetch changes up to 6ade6807288ad318355bb77e43df87dfc15a9e90:

  image.bbclass: Add support for runtime PREFERRED_PROVIDER (2015-07-23
17:29:04 -0400)

----------------------------------------------------------------
Jate Sujjavanich (1):
      image.bbclass: Add support for runtime PREFERRED_PROVIDER

 meta/classes/image.bbclass |   49
++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 01f8b3f..2276897 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -132,6 +132,25 @@ inherit ${IMAGE_TYPE_live}
 IMAGE_TYPE_vmdk = '${@bb.utils.contains("IMAGE_FSTYPES", "vmdk",
"image-vmdk", "", d)}'
 inherit ${IMAGE_TYPE_vmdk}

+def packageinfo(d):
+    import oe.packagedata
+    pkginfolist = []
+
+    pkgdata_dir = d.getVar("PKGDATA_DIR", True) + '/runtime/'
+    if os.path.exists(pkgdata_dir):
+        for root, dirs, files in os.walk(pkgdata_dir):
+            for pkgname in files:
+                if pkgname.endswith('.packaged'):
+                    pkgname = pkgname[:-9]
+                    pkgdatafile = root + pkgname
+                    try:
+                        sdata =
oe.packagedata.read_pkgdatafile(pkgdatafile)
+                        sdata['PKG'] = pkgname
+                        pkginfolist.append(sdata)
+                    except Exception as e:
+                        bb.warn("Failed to read pkgdata file %s: %s: %s" %
(pkgdatafile, e.__class__, str(e)))
+    return pkginfolist
+
 python () {
     deps = " " + imagetypes_getdepends(d)
     d.appendVarFlag('do_rootfs', 'depends', deps)
@@ -283,6 +302,36 @@ python rootfs_process_ignore() {
 }
 do_rootfs[prefuncs] += "rootfs_process_ignore"

+python rootfs_process_prefer() {
+    packageinfolist = packageinfo(d)
+
+    inst_pkgs = d.getVar("PACKAGE_INSTALL", True).split()
+    pref_pkgs = list()
+    for pkg in inst_pkgs:
+        prefer_var = d.getVar("PREFERRED_PROVIDER_%s" % pkg, True)
+        if prefer_var:
+            bb.note("%s rprovided by recipe %s" % (pkg, prefer_var))
+            # Find preferred package which provides item
+            for p in packageinfolist:
+                # First Look for PN and RPROVIDES_${PN}
+                if p['PN'] == prefer_var:
+                    var = 'RPROVIDES_%s' % p['PKG']
+                    try:
+                        val = p[var]
+                    except KeyError:
+                        continue
+                    rprovides_split = val.split(' ')
+                    if pkg in rprovides_split:
+                        bb.note('%s in %s. Will substitute in
PACKAGE_INSTALL' % (pkg, var))
+                        inst_pkgs.remove(pkg)
+                        pref_pkgs.append(p['PKG'])
+            inst_pkgs.extend(pref_pkgs)
+            for p in inst_pkgs:
+                bb.note("%s " % p)
+            d.setVar("PACKAGE_INSTALL", ' '.join(inst_pkgs))
+}
+do_rootfs[prefuncs] += "rootfs_process_prefer"
+
 # We have to delay the runtime_mapping_rename until just before rootfs runs
 # otherwise, the multilib renaming could step in and squash any fixups that
 # may have occurred.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20150723/498e2918/attachment-0002.html>


More information about the Openembedded-core mailing list