Hi all, I'm wondering if someone can help me debug this problem a little as it's getting into the parts of bitbake I don't know very well, in particular the determination of whether a task needs to re-run or not.
I've attached a patch which adds code to do_package_write_ipk in package_ipk.bbclass to split up the package feed if IPK_HIERARCHICAL_FEED is set to "1". The commit message in the patch explains why I'm doing this and if it all works I'll submit this to master. The attached patch isn't ready for submission yet, it needs more testing first. As expected, if IPK_HIERARCHICAL_FEED is not set in local.conf, the package feed is created in the old way. If IPK_HIERARCHICAL_FEED is set to "1" in local.conf, the package feed is created in my modified way. This was tested by building from scratch in each case, with no sstate or tmp directory present. However if IPK_HIERARCHICAL_FEED is changed in local.conf, the package feed is not recreated. I can force do_write_package_ipk and the new value is taken into account, but if I just do my usual 'bitbake kitchen-sink' where kitchen-sink is a packagegroup which depends on everything I want in the package feed, do_write_package_ipk is not re-ran for any recipe. Am I missing something here? Is it expected that this variable change is detected and the relevant tasks re-executed? I know changing variables like PREFERRED_PROVIDER_* in local.conf causes things to be rebuilt, so why does that work and this not? Cheers, -- Paul Barker Email: [email protected] http://www.paulbarker.me.uk
From 75e80008b2f6bb702bd49c47eca6e61b6a047373 Mon Sep 17 00:00:00 2001 From: Paul Barker <[email protected]> Date: Fri, 2 May 2014 14:51:35 +0000 Subject: [PATCH] package_ipk.bbclass: Support hierarchical feed To: [email protected] This patch allows for an optional new layout for ipk feed directories which I've called a 'hierarchical feed' and is based on how Debian pools package files. It is disabled by default and is enabled by setting IPK_HIERARCHICAL_FEED to "1". In the traditional feed layout, package files are placed in <outdir>/<arch>/. This can lead to several thousand files existing in a single directory which is often a problem if developers want to upload a package feed to a shared web hosting provider. For example, in my case, listing files via FTP only shows the first 2000 files, breaking my scripts which attempt to upload only new and changed files via FTP. In the hierarchical feed, package files are written to <outdir>/<arch>/<pkg_prefix>/<pkg_subdir>, where pkg_prefix is the first letter of the package file name for non-lib packages or "lib" plus the 4th letter of the pacakge file name for lib pacakges (eg, 'l' for less, 'libc' for libc6). pkg_subdir is the root of the pacakge file name, discarding the version and architecture parts and the common suffixes '-dbg', '-dev', '-doc', '-staticdev' and '-locale-*'. This change relies on recent patches to opkg-utils which support hierarchical package feeds. Signed-off-by: Paul Barker <[email protected]> --- meta/classes/package_ipk.bbclass | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass index 2949d1d..680b9bf 100644 --- a/meta/classes/package_ipk.bbclass +++ b/meta/classes/package_ipk.bbclass @@ -63,7 +63,26 @@ python do_package_ipk () { bb.data.update_data(localdata) basedir = os.path.join(os.path.dirname(root)) arch = localdata.getVar('PACKAGE_ARCH', True) - pkgoutdir = "%s/%s" % (outdir, arch) + if localdata.getVar('IPK_HIERARCHICAL_FEED') == "1": + # Spread packages across subdirectories so each isn't too crowded + if pkgname.startswith('lib'): + pkg_prefix = 'lib' + pkgname[3] + else: + pkg_prefix = pkgname[0] + + # Keep -dbg, -dev, -doc, -staticdev and -locale-* packages together + if pkgname[-4:] in ('-dbg', '-dev', '-doc'): + pkg_subdir = pkgname[:-4] + elif pkgname.endswith('-staticdev'): + pkg_subdir = pkgname[:-10] + elif '-locale-' in pkgname: + pkg_subdir = pkgname[:pkgname.find('-locale-')] + else: + pkg_subdir = pkgname + + pkgoutdir = "%s/%s/%s/%s" % (outdir, arch, pkg_prefix, pkg_subdir) + else: + pkgoutdir = "%s/%s" % (outdir, arch) bb.utils.mkdirhier(pkgoutdir) os.chdir(root) cleanupcontrol(root) -- 1.9.2
-- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
