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

login
register
mail settings
Submitter Dongxiao Xu
Date Jan. 13, 2012, 11:38 a.m.
Message ID <bc6335972ec83f47469f18ac973f057b3323b46d.1326454446.git.dongxiao.xu@intel.com>
Download mbox | patch
Permalink /patch/19297/
State New
Headers show

Comments

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
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

Patch

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