diff options
Diffstat (limited to 'classes/package_deb.bbclass')
-rw-r--r-- | classes/package_deb.bbclass | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/classes/package_deb.bbclass b/classes/package_deb.bbclass index c322af1f15..b85ffe254f 100644 --- a/classes/package_deb.bbclass +++ b/classes/package_deb.bbclass @@ -4,13 +4,18 @@ inherit package -PACKAGE_EXTRA_DEPENDS += "dpkg-native fakeroot-native" - BOOTSTRAP_EXTRA_RDEPENDS += "dpkg" DISTRO_EXTRA_RDEPENDS += "dpkg" -PACKAGE_WRITE_FUNCS += "do_package_deb" IMAGE_PKGTYPE ?= "deb" +# Map TARGET_ARCH to Debian's ideas about architectures +DPKG_ARCH ?= "${TARGET_ARCH}" +DPKG_ARCH_x86 ?= "i386" +DPKG_ARCH_i486 ?= "i386" +DPKG_ARCH_i586 ?= "i386" +DPKG_ARCH_i686 ?= "i386" +DPKG_ARCH_pentium ?= "i386" + python package_deb_fn () { from bb import data bb.data.setVar('PKGFN', bb.data.getVar('PKG',d), d) @@ -41,7 +46,7 @@ python do_package_deb_install () { if (exitstatus != 0 ): raise bb.build.FuncFailed(output) - f = open(os.path.join(tmpdir, "stamps", "do_packages"), "w") + f = open(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN"), "w") f.close() # NOTE: this env stuff is racy at best, we need something more capable @@ -64,9 +69,7 @@ python do_package_deb_install () { } python do_package_deb () { - import copy # to back up env data - import sys - import re + import sys, re, fcntl, copy workdir = bb.data.getVar('WORKDIR', d, 1) if not workdir: @@ -91,18 +94,29 @@ python do_package_deb () { return tmpdir = bb.data.getVar('TMPDIR', d, 1) - # Invalidate the packages file - if os.access(os.path.join(tmpdir, "stamps", "do_packages"),os.R_OK): - os.unlink(os.path.join(tmpdir, "stamps", "do_packages")) + + if os.access(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN"),os.R_OK): + os.unlink(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN")) if packages == []: bb.debug(1, "No packages; nothing to do") return + def lockfile(name): + lf = open(name, "a+") + fcntl.flock(lf.fileno(), fcntl.LOCK_EX) + return lf + + def unlockfile(lf): + fcntl.flock(lf.fileno(), fcntl.LOCK_UN) + lf.close + for pkg in packages.split(): localdata = bb.data.createCopy(d) root = "%s/install/%s" % (workdir, pkg) + lf = lockfile(root + ".lock") + bb.data.setVar('ROOT', '', localdata) bb.data.setVar('ROOT_%s' % pkg, root, localdata) pkgname = bb.data.getVar('PKG_%s' % pkg, localdata, 1) @@ -133,7 +147,9 @@ python do_package_deb () { if not g and bb.data.getVar('ALLOW_EMPTY', localdata) != "1": from bb import note note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1))) + unlockfile(lf) continue + controldir = os.path.join(root, 'DEBIAN') bb.mkdirhier(controldir) os.chmod(controldir, 0755) @@ -154,7 +170,7 @@ python do_package_deb () { fields.append(["Section: %s\n", ['SECTION']]) fields.append(["Priority: %s\n", ['PRIORITY']]) fields.append(["Maintainer: %s\n", ['MAINTAINER']]) - fields.append(["Architecture: %s\n", ['TARGET_ARCH']]) + fields.append(["Architecture: %s\n", ['DPKG_ARCH']]) fields.append(["OE: %s\n", ['PN']]) fields.append(["Homepage: %s\n", ['HOMEPAGE']]) @@ -168,7 +184,7 @@ python do_package_deb () { data = bb.data.getVar(i, d, 1) if data is None: raise KeyError(f) - if i == 'TARGET_ARCH' and bb.data.getVar('PACKAGE_ARCH', d, 1) == 'all': + if i == 'DPKG_ARCH' and bb.data.getVar('PACKAGE_ARCH', d, 1) == 'all': data = 'all' l2.append(data) return l2 @@ -246,5 +262,20 @@ python do_package_deb () { os.rmdir(controldir) except OSError: pass - del localdata + + unlockfile(lf) +} + +python () { + import bb + if bb.data.getVar('PACKAGES', d, True) != '': + bb.data.setVarFlag('do_package_write_deb', 'depends', 'dpkg-native:do_populate_staging fakeroot-native:do_populate_staging', d) } + +python do_package_write_deb () { + bb.build.exec_func("read_subpackage_metadata", d) + bb.build.exec_func("do_package_deb", d) +} +do_package_write_deb[dirs] = "${D}" +addtask package_write_deb before do_package_write after do_package + |