[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