[2/3] packageinfo.bbclass: add a new bbclass to pass package information

Submitted by Dongxiao Xu on Jan. 13, 2012, 11:38 a.m.

Details

Message ID bc6335972ec83f47469f18ac973f057b3323b46d.1326454446.git.dongxiao.xu@intel.com
State New
Headers show

Commit Message

Dongxiao Xu Jan. 13, 2012, 11:38 a.m.
packageinfo.bbclass is to pass the accurate package information to
clients (e.g. Hob), including PN, PV, RDEPENDS, PKGSIZE, etc.

Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
---
 meta/classes/packageinfo.bbclass |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)
 create mode 100644 meta/classes/packageinfo.bbclass

Patch hide | download patch | download mbox

diff --git a/meta/classes/packageinfo.bbclass b/meta/classes/packageinfo.bbclass
new file mode 100644
index 0000000..53551c4
--- /dev/null
+++ b/meta/classes/packageinfo.bbclass
@@ -0,0 +1,30 @@ 
+python packageinfo_handler () {
+    if isinstance(e, bb.event.RequestPackageInfo):
+        import oe.packagedata
+        pkginfolist = []
+        tmpdir = e.data.getVar('TMPDIR', True)
+        target_vendor = e.data.getVar('TARGET_VENDOR', True)
+        target_os = e.data.getVar('TARGET_OS', True)
+        package_archs = e.data.getVar('PACKAGE_ARCHS', True)
+        packaging = e.data.getVar('PACKAGE_CLASSES', True).split()[0].split('_')[1]
+        deploy_dir = e.data.getVar('DEPLOY_DIR', True) + '/' + packaging
+        for arch in package_archs.split():
+            pkgdata_dir = tmpdir + '/pkgdata/' + arch + target_vendor + '-' + target_os + '/runtime/'
+            if os.path.exists(pkgdata_dir):
+                for root, dirs, files in os.walk(pkgdata_dir):
+                    for pkgname in files:
+                        if pkgname.endswith('.packaged'):
+                            continue
+                        sdata = oe.packagedata.read_pkgdatafile(root + pkgname)
+                        sdata['PKG'] = pkgname
+                        pkgrename = sdata['PKG_%s' % pkgname]
+                        pkgv = sdata['PKGV']
+                        pkgr = sdata['PKGR']
+                        pkgname_path = deploy_dir + '/' + arch + '/' + pkgname + '-' + pkgv + '-' + pkgr + '.' + arch + '.' + packaging
+                        pkgrename_path = deploy_dir + '/' + arch + '/' + pkgrename + '-' + pkgv + '-' + pkgr + '.' + arch + '.' + packaging
+                        if os.path.exists(pkgname_path) or os.path.exists(pkgrename_path):
+                            pkginfolist.append(sdata)
+        bb.event.fire(bb.event.PackageInfo(pkginfolist), e.data)
+}
+
+addhandler packageinfo_handler

Comments

Koen Kooi Jan. 13, 2012, 12:05 p.m.
Op 13 jan. 2012, om 12:38 heeft Dongxiao Xu het volgende geschreven:

> packageinfo.bbclass is to pass the accurate package information to
> clients (e.g. Hob), including PN, PV, RDEPENDS, PKGSIZE, etc.

How many classes for package/recipe info do we actually need?
Richard Purdie Jan. 13, 2012, 3:11 p.m.
On Fri, 2012-01-13 at 13:05 +0100, Koen Kooi wrote:
> Op 13 jan. 2012, om 12:38 heeft Dongxiao Xu het volgende geschreven:
> 
> > packageinfo.bbclass is to pass the accurate package information to
> > clients (e.g. Hob), including PN, PV, RDEPENDS, PKGSIZE, etc.
> 
> How many classes for package/recipe info do we actually need?

I appreciate that the number of emails on the list on this topic make it
look like we have a lot of overlap.

If you look carefully at this patch you'll see that what this code does
is pull together information and generate a bitbake event containing
that information.

This is not something any other existing code does. It takes the data
from an existing data store and does not create any new one.

This is IMO a vast improvement over some of the earlier versions of
these patches so I'm planning to take this one.

Longer term we do need to reconcile buildhistory and packagedata as two
stores of very similar data but this patch doesn't complicate that
issue.

Cheers,

Richard