<div dir="ltr">The following changes since commit 5f248526ae5f15a2e6f3a6da88a96aba976bb28e:<br><br>  providers.py: Add support for preferred runtime item (2015-07-23 17:28:31 -0400)<br><br>are available in the git repository at:<br><br>  <a href="https://jatedev@github.com/jatedev/poky">https://jatedev@github.com/jatedev/poky</a> preferred-provider-runtime-3<br><br>for you to fetch changes up to 6ade6807288ad318355bb77e43df87dfc15a9e90:<br><br>  image.bbclass: Add support for runtime PREFERRED_PROVIDER (2015-07-23 17:29:04 -0400)<br><br>----------------------------------------------------------------<br>Jate Sujjavanich (1):<br>      image.bbclass: Add support for runtime PREFERRED_PROVIDER<br><br> meta/classes/image.bbclass |   49 ++++++++++++++++++++++++++++++++++++++++++++<br> 1 file changed, 49 insertions(+)<br><br>diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass<br>index 01f8b3f..2276897 100644<br>--- a/meta/classes/image.bbclass<br>+++ b/meta/classes/image.bbclass<br>@@ -132,6 +132,25 @@ inherit ${IMAGE_TYPE_live}<br> IMAGE_TYPE_vmdk = &#39;${@bb.utils.contains(&quot;IMAGE_FSTYPES&quot;, &quot;vmdk&quot;, &quot;image-vmdk&quot;, &quot;&quot;, d)}&#39;<br> inherit ${IMAGE_TYPE_vmdk}<br> <br>+def packageinfo(d):<br>+    import oe.packagedata<br>+    pkginfolist = []<br>+<br>+    pkgdata_dir = d.getVar(&quot;PKGDATA_DIR&quot;, True) + &#39;/runtime/&#39;<br>+    if os.path.exists(pkgdata_dir):<br>+        for root, dirs, files in os.walk(pkgdata_dir):<br>+            for pkgname in files:<br>+                if pkgname.endswith(&#39;.packaged&#39;):<br>+                    pkgname = pkgname[:-9]<br>+                    pkgdatafile = root + pkgname<br>+                    try:<br>+                        sdata = oe.packagedata.read_pkgdatafile(pkgdatafile)<br>+                        sdata[&#39;PKG&#39;] = pkgname<br>+                        pkginfolist.append(sdata)<br>+                    except Exception as e:<br>+                        bb.warn(&quot;Failed to read pkgdata file %s: %s: %s&quot; % (pkgdatafile, e.__class__, str(e)))<br>+    return pkginfolist<br>+<br> python () {<br>     deps = &quot; &quot; + imagetypes_getdepends(d)<br>     d.appendVarFlag(&#39;do_rootfs&#39;, &#39;depends&#39;, deps)<br>@@ -283,6 +302,36 @@ python rootfs_process_ignore() {<br> }<br> do_rootfs[prefuncs] += &quot;rootfs_process_ignore&quot;<br> <br>+python rootfs_process_prefer() {<br>+    packageinfolist = packageinfo(d)<br>+<br>+    inst_pkgs = d.getVar(&quot;PACKAGE_INSTALL&quot;, True).split()<br>+    pref_pkgs = list()<br>+    for pkg in inst_pkgs:<br>+        prefer_var = d.getVar(&quot;PREFERRED_PROVIDER_%s&quot; % pkg, True)<br>+        if prefer_var:<br>+            bb.note(&quot;%s rprovided by recipe %s&quot; % (pkg, prefer_var))<br>+            # Find preferred package which provides item<br>+            for p in packageinfolist:<br>+                # First Look for PN and RPROVIDES_${PN}<br>+                if p[&#39;PN&#39;] == prefer_var:<br>+                    var = &#39;RPROVIDES_%s&#39; % p[&#39;PKG&#39;]<br>+                    try:<br>+                        val = p[var]<br>+                    except KeyError:<br>+                        continue<br>+                    rprovides_split = val.split(&#39; &#39;)<br>+                    if pkg in rprovides_split:<br>+                        bb.note(&#39;%s in %s. Will substitute in PACKAGE_INSTALL&#39; % (pkg, var))<br>+                        inst_pkgs.remove(pkg)<br>+                        pref_pkgs.append(p[&#39;PKG&#39;])<br>+            inst_pkgs.extend(pref_pkgs)<br>+            for p in inst_pkgs:<br>+                bb.note(&quot;%s &quot; % p)<br>+            d.setVar(&quot;PACKAGE_INSTALL&quot;, &#39; &#39;.join(inst_pkgs))<br>+}<br>+do_rootfs[prefuncs] += &quot;rootfs_process_prefer&quot;<br>+<br> # We have to delay the runtime_mapping_rename until just before rootfs runs<br> # otherwise, the multilib renaming could step in and squash any fixups that<br> # may have occurred.<br><br></div>