[oe] [PATCH] package_ipk.bbclass DON'T PUSH THIS, but PLEASE read it

Martin Jansa martin.jansa at gmail.com
Fri Feb 26 21:15:39 UTC 2010


There is quite common error about non-existent lockfile path

I've seen that everytime when recipe changes ARCH (ie when removed machine specific config)
and package is no longer in tmp/work/om-gta01.. but tmp/work/armv4t.., then whole build works
ok, but in the end it's looking for lockfile in right directory but in wrong arch dir.

Today I've seen similar error from mwester:
18:10:59 < mwester> ERROR: Error, lockfile path does not exist!: /u/slug/slugos/tmp/work/armv5teb-linux-gnueabi/gpsd-2.39-r0/packages-split

So with a bit of debugging (in patch) it's clear that it's broken after executing read_subpackage_metadata function
NOTE: WORKDIR-before /OE/tmpdir-dev-shr/work/armv5te-oe-linux-gnueabi/gpsd-2.90-r4.0
NOTE: WORKDIR-after  /OE/tmpdir-dev-shr/work/armv5te-oe-linux-gnueabi/gpsd-2.90-r0

If I comment-out that last setVar as used in patch it works OK.

I'm not sure why we wan't all those subpkg data with same keys set directly in data. But just grep for values it wants to set I can see

where broken WORKDIR goes from:
bitbake at jama ~/build.dev.shr.spitz $ grep "PR\|PKGR" variables.set.log
NOTE: Setting pkg 'libgps' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'libgps' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'python-pygps' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'python-pygps' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gpsd-udev' subdata key 'PR', value 'r4.0'
NOTE: Setting pkg 'gpsd-udev' subdata key 'PKGR', value 'r4.0.4'
NOTE: Setting pkg 'gpsd-conf' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gpsd-conf' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gpsd-gpsctl' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gpsd-gpsctl' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gps-utils' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gps-utils' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gpsd-dbg' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gpsd-dbg' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gpsd' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gpsd' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gpsd-doc' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gpsd-doc' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gpsd-dev' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gpsd-dev' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gpsd-static' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gpsd-static' subdata key 'PKGR', value 'r0.4'
NOTE: Setting pkg 'gpsd-locale' subdata key 'PR', value 'r0'
NOTE: Setting pkg 'gpsd-locale' subdata key 'PKGR', value 'r0.4'

so the right value is only in gpsd-udev, but that's only because gpsd-udev is new subpackage and wasn't been built before
NOTE: pkg: gpsd-udev
NOTE: pkg: gpsd-udev - /OE/tmpdir-dev-shr/pkgdata/armv5te-oe-linux-gnueabi/runtime/gpsd-udev
while other recipes have both arch
NOTE: pkg: python-pygps
NOTE: pkg: python-pygps - /OE/tmpdir-dev-shr/pkgdata/spitz-oe-linux-gnueabi/runtime/python-pygps
NOTE: pkg: python-pygps - /OE/tmpdir-dev-shr/pkgdata/armv5te-oe-linux-gnueabi/runtime/python-pygps

In this case when I return last arch found, then it works again, but that's only because we're changing app from spitz to armv5te,
when someone adds some machine specific config then, right version will be in spitz and wrong in armv5te

Please someone fix this :).
---
 classes/package_ipk.bbclass |    4 ++++
 classes/packagedata.bbclass |    9 ++++++++-
 2 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass
index 420c892..44241d6 100644
--- a/classes/package_ipk.bbclass
+++ b/classes/package_ipk.bbclass
@@ -320,7 +320,11 @@ python do_package_write_ipk () {
 		bb.debug(1, "No PACKAGES defined, nothing to package")
 		return
 
+	workdir = bb.data.getVar('WORKDIR', d, 1)
+	bb.note("WORKDIR-before %s" % workdir)
 	bb.build.exec_func("read_subpackage_metadata", d)
+	workdir = bb.data.getVar('WORKDIR', d, 1)
+	bb.note("WORKDIR-after %s" % workdir)
 	bb.build.exec_func("do_package_ipk", d)
 }
 do_package_write_ipk[dirs] = "${D}"
diff --git a/classes/packagedata.bbclass b/classes/packagedata.bbclass
index 86f18a9..581c020 100644
--- a/classes/packagedata.bbclass
+++ b/classes/packagedata.bbclass
@@ -27,10 +27,15 @@ def get_subpkgedata_fn(pkg, d):
 	archs.reverse()
 	pkgdata = bb.data.expand('${TMPDIR}/pkgdata/', d)
 	targetdir = bb.data.expand('${TARGET_VENDOR}-${TARGET_OS}/runtime/', d)
+	bb.note("pkg: %s" % pkg)
+	rval = None
 	for arch in archs:
 		fn = pkgdata + arch + targetdir + pkg
 		if os.path.exists(fn):
-			return fn
+			bb.note("pkg: %s - %s" % (pkg, fn))
+			rval = fn
+	if rval != None:
+		return rval
 	return bb.data.expand('${PKGDATA_DIR}/runtime/%s' % pkg, d)
 
 def has_subpkgdata(pkg, d):
@@ -51,11 +56,13 @@ python read_subpackage_metadata () {
 	data = read_pkgdata(bb.data.getVar('PN', d, 1), d)
 
 	for key in data.keys():
+		bb.note("Setting key '%s', value '%s'" % (key, data[key]));
 		bb.data.setVar(key, data[key], d)
 
 	for pkg in bb.data.getVar('PACKAGES', d, 1).split():
 		sdata = read_subpkgdata(pkg, d)
 		for key in sdata.keys():
+			bb.note("Setting pkg '%s' subdata key '%s', value '%s'" % (pkg, key, sdata[key]));
 			bb.data.setVar(key, sdata[key], d)
 }
 
-- 
1.7.0





More information about the Openembedded-devel mailing list