From 6633c4c95a713bc365f5d87acc4a94621ed50034 Mon Sep 17 00:00:00 2001 From: Otavio Salvador Date: Tue, 23 Jun 2009 11:55:29 -0300 Subject: base.bbclass: add support for machine configuration fallback To avoid duplicating a lot of configurations for similar machines we needed to introduce a new concept of machine fallback. It basically means that when a list is set in MACHINE_FALLBACK variable, following is done: - those machines are added to the override list, after the machine itself; - if any of these machines matches, the package is dealt as machine specific one. Signed-off-by: Otavio Salvador --- classes/base.bbclass | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index bc50c67d4b..7f2e81f139 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1179,10 +1179,11 @@ def base_after_parse(d): override = bb.data.getVar('SRC_URI_OVERRIDES_PACKAGE_ARCH', d, 1) if override != '0': paths = [] - for p in [ "${PF}", "${P}", "${PN}", "files", "" ]: - path = bb.data.expand(os.path.join("${FILE_DIRNAME}", p, "${MACHINE}"), d) - if os.path.isdir(path): - paths.append(path) + for a in [ "${MACHINE}" ] + bb.data.getVar('MACHINE_FALLBACK', d).split(): + for p in [ "${PF}", "${P}", "${PN}", "files", "" ]: + path = bb.data.expand(os.path.join("${FILE_DIRNAME}", p, a), d) + if os.path.isdir(path): + paths.append(path) if len(paths) != 0: for s in srcuri.split(): if not s.startswith("file://"): -- cgit v1.2.3 From 0b207488de111a97eabcaeefa9a904431407ecff Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Fri, 10 Jul 2009 22:11:52 +0100 Subject: Revert "base.bbclass: add support for machine configuration fallback" This reverts commit 6633c4c95a713bc365f5d87acc4a94621ed50034. --- classes/base.bbclass | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 7f2e81f139..bc50c67d4b 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1179,11 +1179,10 @@ def base_after_parse(d): override = bb.data.getVar('SRC_URI_OVERRIDES_PACKAGE_ARCH', d, 1) if override != '0': paths = [] - for a in [ "${MACHINE}" ] + bb.data.getVar('MACHINE_FALLBACK', d).split(): - for p in [ "${PF}", "${P}", "${PN}", "files", "" ]: - path = bb.data.expand(os.path.join("${FILE_DIRNAME}", p, a), d) - if os.path.isdir(path): - paths.append(path) + for p in [ "${PF}", "${P}", "${PN}", "files", "" ]: + path = bb.data.expand(os.path.join("${FILE_DIRNAME}", p, "${MACHINE}"), d) + if os.path.isdir(path): + paths.append(path) if len(paths) != 0: for s in srcuri.split(): if not s.startswith("file://"): -- cgit v1.2.3 From f0d8b8301f8a3c9f8ef73b3d5a876d341b8b3370 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sat, 11 Jul 2009 01:31:06 -0400 Subject: package classes: count dotfiles as non-empty Allow a package to be built that contains only dotfiles or dot directories under '/'. Signed-off-by: Michael Smith --- classes/package.bbclass | 2 +- classes/package_deb.bbclass | 2 +- classes/package_ipk.bbclass | 2 +- classes/package_tar.bbclass | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'classes') diff --git a/classes/package.bbclass b/classes/package.bbclass index 3360dcb2de..f6bd7c5b4a 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -539,7 +539,7 @@ python emit_pkgdata() { allow_empty = bb.data.getVar('ALLOW_EMPTY', d, 1) root = "%s/install/%s" % (workdir, pkg) os.chdir(root) - g = glob('*') + g = glob('*') + glob('.[!.]*') if g or allow_empty == "1": packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg file(packagedfile, 'w').close() diff --git a/classes/package_deb.bbclass b/classes/package_deb.bbclass index 5127d32f33..e5339a9064 100644 --- a/classes/package_deb.bbclass +++ b/classes/package_deb.bbclass @@ -130,7 +130,7 @@ python do_package_deb () { os.chdir(root) from glob import glob - g = glob('*') + g = glob('*') + glob('.[!.]*') try: del g[g.index('DEBIAN')] del g[g.index('./DEBIAN')] diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass index 1f1b5c9a79..e3a7522619 100644 --- a/classes/package_ipk.bbclass +++ b/classes/package_ipk.bbclass @@ -186,7 +186,7 @@ python do_package_ipk () { bb.mkdirhier(pkgoutdir) os.chdir(root) from glob import glob - g = glob('*') + g = glob('*') + glob('.[!.]*') try: del g[g.index('CONTROL')] del g[g.index('./CONTROL')] diff --git a/classes/package_tar.bbclass b/classes/package_tar.bbclass index 76f48ca429..cb70a5fae8 100644 --- a/classes/package_tar.bbclass +++ b/classes/package_tar.bbclass @@ -84,7 +84,7 @@ python do_package_tar () { tarfn = bb.data.getVar('PKGFN', localdata, 1) os.chdir(root) from glob import glob - if not glob('*'): + if not glob('*') + glob('.[!.]*'): bb.note("Not creating empty archive for %s-%s" % (pkg, bb.data.expand('${PV}-${PR}${DISTRO_PR}', d, True))) continue ret = os.system("tar -czf %s %s" % (tarfn, '.')) -- cgit v1.2.3 From f29ab0cc9280a611b16c8b959107140e6f709994 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 14 Jul 2009 22:37:25 +0200 Subject: packagehistory: add another QA class from poky --- classes/packagehistory.bbclass | 102 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 classes/packagehistory.bbclass (limited to 'classes') diff --git a/classes/packagehistory.bbclass b/classes/packagehistory.bbclass new file mode 100644 index 0000000000..fdc47cb9b4 --- /dev/null +++ b/classes/packagehistory.bbclass @@ -0,0 +1,102 @@ +# Must inherit package first before changing PACKAGEFUNCS +inherit package +PACKAGEFUNCS += "emit_pkghistory" + +PKGHIST_DIR = "${TMPDIR}/pkghistory/" + + +# +# Called during do_package to write out metadata about this package +# for comparision when writing future packages +# +python emit_pkghistory() { + packages = bb.data.getVar('PACKAGES', d, True) + pkghistdir = bb.data.getVar('PKGHIST_DIR', d, True) + + + # Should check PACKAGES here to see if anything removed + + def getpkgvar(pkg, var): + val = bb.data.getVar('%s_%s' % (var, pkg), d, 1) + if val: + return val + val = bb.data.getVar('%s' % (var), d, 1) + + return val + + def getlastversion(pkg): + try: + pe = os.path.basename(os.readlink(os.path.join(pkghistdir, pkg, "latest"))) + pv = os.path.basename(os.readlink(os.path.join(pkghistdir, pkg, pe, "latest"))) + pr = os.path.basename(os.readlink(os.path.join(pkghistdir, pkg, pe, pv, "latest"))) + return (pe, pv, pr) + except OSError: + return (None, None, None) + + for pkg in packages.split(): + pe = getpkgvar(pkg, 'PE') or "0" + pv = getpkgvar(pkg, 'PV') + pr = getpkgvar(pkg, 'PR') + destdir = os.path.join(pkghistdir, pkg, pe, pv, pr) + + # + # Find out what the last version was + # Make sure the version did not decrease + # + lastversion = getlastversion(pkg) + (last_pe, last_pv, last_pr) = lastversion + + if last_pe is not None: + r = bb.utils.vercmp((pe, pv, pr), lastversion) + if r < 0: + bb.fatal("Package version for package %s went backwards which would break package feeds from (%s:%s-%s to %s:%s-%s)" % (pkg, last_pe, last_pv, last_pr, pe, pv, pr)) + + write_pkghistory(pkg, pe, pv, pr, d) + + if last_pe is not None: + check_pkghistory(pkg, pe, pv, pr, lastversion) + + write_latestlink(pkg, pe, pv, pr, d) +} + + +def check_pkghistory(pkg, pe, pv, pr, lastversion): + import bb + + (last_pe, last_pv, last_pr) = lastversion + + bb.debug(2, "Checking package history") + # RDEPENDS removed? + # PKG changed? + # Each file list of each package for file removals? + + +def write_pkghistory(pkg, pe, pv, pr, d): + import bb, os + bb.debug(2, "Writing package history") + + pkghistdir = bb.data.getVar('PKGHIST_DIR', d, True) + + verpath = os.path.join(pkghistdir, pkg, pe, pv, pr) + if not os.path.exists(verpath): + os.makedirs(verpath) + +def write_latestlink(pkg, pe, pv, pr, d): + import bb, os + + pkghistdir = bb.data.getVar('PKGHIST_DIR', d, True) + + def rm_link(path): + try: + os.unlink(path) + except OSError: + return + + rm_link(os.path.join(pkghistdir, pkg, "latest")) + rm_link(os.path.join(pkghistdir, pkg, pe, "latest")) + rm_link(os.path.join(pkghistdir, pkg, pe, pv, "latest")) + + os.symlink(os.path.join(pkghistdir, pkg, pe), os.path.join(pkghistdir, pkg, "latest")) + os.symlink(os.path.join(pkghistdir, pkg, pe, pv), os.path.join(pkghistdir, pkg, pe, "latest")) + os.symlink(os.path.join(pkghistdir, pkg, pe, pv, pr), os.path.join(pkghistdir, pkg, pe, pv, "latest")) + -- cgit v1.2.3 From a254c83d5b2d128a6472f54a57ee0f5a22ae6f18 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Thu, 16 Jul 2009 14:31:43 +0100 Subject: angstrom.bbclass : a utility bbclass for angstrom, currently implements a recipe blacklister --- classes/angstrom.bbclass | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 classes/angstrom.bbclass (limited to 'classes') diff --git a/classes/angstrom.bbclass b/classes/angstrom.bbclass new file mode 100644 index 0000000000..4a810a638a --- /dev/null +++ b/classes/angstrom.bbclass @@ -0,0 +1,19 @@ +# anonymous support class for angstrom +# +# Features: +# +# * blacklist handling, set ANGSTROM_BLACKLIST_pn-blah = "message" +# + +python () { + import bb + + blacklist = bb.data.getVar("ANGSTROM_BLACKLIST", d, 1) + pkgnm = bb.data.getVar("PN", d, 1) + + if blacklist: + bb.note("Angstrom DOES NOT support %s because %s" % (pkgnm, blacklist)) + raise bb.parse.SkipPackage("Angstrom DOES NOT support %s because %s" % (pkgnm, blacklist)) + +} + -- cgit v1.2.3 From d08c79150d7c98e43965e788c50fc097b12ce123 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 17 Jul 2009 15:14:24 +0200 Subject: packagehistory bbclass: hotfix from RP to work around the multiple-machine-share-same-kernel problem --- classes/packagehistory.bbclass | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/packagehistory.bbclass b/classes/packagehistory.bbclass index fdc47cb9b4..b435149d22 100644 --- a/classes/packagehistory.bbclass +++ b/classes/packagehistory.bbclass @@ -2,8 +2,7 @@ inherit package PACKAGEFUNCS += "emit_pkghistory" -PKGHIST_DIR = "${TMPDIR}/pkghistory/" - +PKGHIST_DIR = "${TMPDIR}/pkghistory/${BASEPKG_TARGET_SYS}/" # # Called during do_package to write out metadata about this package -- cgit v1.2.3 From 4007d4d622a5b583403986a2e197cdf47b4bd816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jeremy=20Lain=C3=A9?= Date: Wed, 22 Jul 2009 07:48:24 +0200 Subject: oestats-client.bbclass: support arbitrary URLs (Closes: #5283) --- classes/oestats-client.bbclass | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) (limited to 'classes') diff --git a/classes/oestats-client.bbclass b/classes/oestats-client.bbclass index 8922496242..e6b8485385 100644 --- a/classes/oestats-client.bbclass +++ b/classes/oestats-client.bbclass @@ -5,8 +5,9 @@ # To make use of this class, add to your local.conf: # # INHERIT += "oestats-client" -# OESTATS_SERVER = "some.server.org" +# OESTATS_SERVER = "http://some.server.org" # OESTATS_BUILDER = "some_nickname" +# def oestats_setid(d, val): import bb @@ -19,8 +20,8 @@ def oestats_getid(d): return f.read() def oestats_send(d, server, action, vars = {}, files = {}): - import httplib import bb + import urllib2 # build body output = [] @@ -49,21 +50,12 @@ def oestats_send(d, server, action, vars = {}, files = {}): "Content-type": "multipart/form-data; boundary=%s" % bound, "Content-length": str(len(body))} - # send request - proxy = bb.data.getVar('HTTP_PROXY', d, True ) - if (proxy): - if (proxy.endswith('/')): - proxy = proxy[:-1] - if (proxy.startswith('http://')): - proxy = proxy[7:] - conn = httplib.HTTPConnection(proxy) - action = "http://%s%s" %(server, action) - else: - conn = httplib.HTTPConnection(server) - conn.request("POST", action, body, headers) - response = conn.getresponse() + # send request using urllib2, proxies should be auto-detected + actionURL = "%s%s" %(server, action) + req = urllib2.Request(actionURL, body, headers); + response = urllib2.urlopen(req) data = response.read() - conn.close() + return data def oestats_start(server, builder, d): @@ -111,7 +103,7 @@ def oestats_stop(server, d, failures): 'status': status, }) if status == 'Failed': - bb.note("oestats: build failed, see http://%s%s" % (server,response)) + bb.note("oestats: build failed, see %s%s" % (server, response)) except: bb.note("oestats: error stopping build") @@ -169,7 +161,7 @@ def oestats_task(server, d, task, status): try: response = oestats_send(d, server, "/tasks/", vars, files) if status == 'Failed': - bb.note("oestats: task failed, see http://%s%s" % (server, response)) + bb.note("oestats: task failed, see %s%s" % (server, response)) except: bb.note("oestats: error sending task, disabling stats") oestats_setid(d, "") @@ -184,6 +176,8 @@ python oestats_eventhandler () { return NotHandled server = bb.data.getVar('OESTATS_SERVER', e.data, True) + if not server.startswith('http://') and not server.startswith('https://'): + server = "http://%s" %(server) builder = bb.data.getVar('OESTATS_BUILDER', e.data, True) if not server or not builder: return NotHandled -- cgit v1.2.3 From 11f327a4705f281e32b44ebb401f6e6d5ad0211c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 22 Jul 2009 10:28:45 +0200 Subject: base bbclass: try to find the git binaries in PATH instead of BBPATH * Also, how do I get the build banner back? This bug went unnoticed due to it being gone --- classes/base.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index bc50c67d4b..9c51c0a08e 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -885,7 +885,7 @@ def base_get_metadata_svn_revision(path, d): def base_get_metadata_git_branch(path, d): import os - branch = os.popen('cd %s; PATH=%s git symbolic-ref HEAD 2>/dev/null' % (path, d.getVar("BBPATH", 1))).read().rstrip() + branch = os.popen('cd %s; PATH=%s git symbolic-ref HEAD 2>/dev/null' % (path, d.getVar("PATH", 1))).read().rstrip() if len(branch) != 0: return branch.replace("refs/heads/", "") @@ -893,7 +893,7 @@ def base_get_metadata_git_branch(path, d): def base_get_metadata_git_revision(path, d): import os - rev = os.popen("cd %s; PATH=%s git show-ref HEAD 2>/dev/null" % (path, d.getVar("BBPATH", 1))).read().split(" ")[0].rstrip() + rev = os.popen("cd %s; PATH=%s git show-ref HEAD 2>/dev/null" % (path, d.getVar("PATH", 1))).read().split(" ")[0].rstrip() if len(rev) != 0: return rev return "" -- cgit v1.2.3 From 049a7998d0d2d4bbf1c67a3ecc967393cbdec212 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 24 Jul 2009 15:43:53 +0100 Subject: Revert "image.bbclass: reorder do_rootfs" This reverts commit 736c06e8d8efa79d3d2bc512f13a51f0f63412e2 as this change breaks future versions of bitbake. See the OE mailing list, in the "Bitbake runqueue performance improvement" thread for a discussion on why this isn't the best way to solve multi-image problem and that other better solutions exist. --- classes/image.bbclass | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/image.bbclass b/classes/image.bbclass index 864230bc91..385043bfc7 100644 --- a/classes/image.bbclass +++ b/classes/image.bbclass @@ -108,7 +108,6 @@ LINGUAS_INSTALL = "${@" ".join(map(lambda s: "locale-base-%s" % s, bb.data.getVa do_rootfs[nostamp] = "1" do_rootfs[dirs] = "${TOPDIR}" do_build[nostamp] = "1" -do_install[nostamp] = "1" # Must call real_do_rootfs() from inside here, rather than as a separate # task, so that we have a single fakeroot context for the whole process. @@ -274,5 +273,5 @@ fi # export the zap_root_password, create_etc_timestamp and remote_init_link EXPORT_FUNCTIONS zap_root_password create_etc_timestamp remove_init_link do_rootfs make_zimage_symlink_relative set_image_autologin rootfs_update_timestamp install_linguas -addtask rootfs after do_compile before do_install +addtask rootfs before do_build after do_install addtask deploy_to after do_rootfs -- cgit v1.2.3 From 6ab46c6e2d7d71c1c17d114de8d0cc2048ba36da Mon Sep 17 00:00:00 2001 From: Dmitry Eremin-Solenikov Date: Tue, 28 Jul 2009 13:13:37 +0400 Subject: oestats-client: restore support for proxies Signed-off-by: Dmitry Eremin-Solenikov --- classes/oestats-client.bbclass | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/oestats-client.bbclass b/classes/oestats-client.bbclass index e6b8485385..e4e6206ac4 100644 --- a/classes/oestats-client.bbclass +++ b/classes/oestats-client.bbclass @@ -50,7 +50,12 @@ def oestats_send(d, server, action, vars = {}, files = {}): "Content-type": "multipart/form-data; boundary=%s" % bound, "Content-length": str(len(body))} - # send request using urllib2, proxies should be auto-detected + proxy = bb.data.getVar('HTTP_PROXY', d, True ) + if (proxy): + phl = urllib2.ProxyHandler({'http' : proxy}) + opener = urllib2.build_opener(phl) + urllib2.install_opener(opener) + actionURL = "%s%s" %(server, action) req = urllib2.Request(actionURL, body, headers); response = urllib2.urlopen(req) -- cgit v1.2.3 From 6664caa93967e81bfeefe8a87a265565b8e32abb Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 29 Jul 2009 10:17:20 +0200 Subject: qt4x11 bbclass: only match first 12 chars in automagical dependency adder --- classes/qt4x11.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/qt4x11.bbclass b/classes/qt4x11.bbclass index 923717f8af..aa2e2a174e 100644 --- a/classes/qt4x11.bbclass +++ b/classes/qt4x11.bbclass @@ -1,4 +1,4 @@ -DEPENDS_prepend = "${@["qt4x11 ", ""][(bb.data.getVar('PN', d, 1) == 'qt4-x11-free')]}" +DEPENDS_prepend = "${@["qt4x11 ", ""][(bb.data.getVar('PN', d, 1)[:12] == 'qt4-x11-free')]}" inherit qmake2 -- cgit v1.2.3