diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/classes/package_ipk.bbclass | 27 | ||||
-rw-r--r-- | meta/conf/local.conf.sample.extended | 23 |
2 files changed, 49 insertions, 1 deletions
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass index 2949d1d2e0..9586e06b2e 100644 --- a/meta/classes/package_ipk.bbclass +++ b/meta/classes/package_ipk.bbclass @@ -63,7 +63,32 @@ 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, -locale and -locale-* packages + # together. These package suffixes are taken from the definitions of + # PACKAGES and PACKAGES_DYNAMIC in meta/conf/bitbake.conf + if pkgname[-4:] in ('-dbg', '-dev', '-doc'): + pkg_subdir = pkgname[:-4] + elif pkgname.endswith('-staticdev'): + pkg_subdir = pkgname[:-10] + elif pkgname.endswith('-locale'): + pkg_subdir = pkgname[:-7] + 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) diff --git a/meta/conf/local.conf.sample.extended b/meta/conf/local.conf.sample.extended index 1032bdef51..b156319163 100644 --- a/meta/conf/local.conf.sample.extended +++ b/meta/conf/local.conf.sample.extended @@ -308,3 +308,26 @@ #INITRAMFS_IMAGE = "core-image-minimal-initramfs" #INITRAMFS_IMAGE_BUNDLE = "1" +# +# IPK Hierarchical feed +# +# In some cases it may be desirable not to have all package files in the same +# directory. An example would be when package feeds are to be uploaded to a +# shared webhosting service or transferred to a Windows machine which may have +# problems with directories containing multiple thousands of files. +# +# If the IPK_HIERARCHICAL_FEED variable is set to "1", packages will be split +# between subdirectories in a similar way to how Debian package feeds are +# organised. 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 package file name for lib packages (eg, 'l' for less, 'libc' for +# libc6). pkg_subdir is the root of the package file name, discarding the +# version and architecture parts and the common suffixes '-dbg', '-dev', '-doc', +# '-staticdev', '-locale' and '-locale-*' which are listed in +# meta/conf/bitbake.conf. +# +# If IPK_HIERARCHICAL_FEED is unset or set to any other value, the traditional +# feed layout is used where package files are placed in <outdir>/<arch>/. +# +#IPK_HIERARCHICAL_FEED = "1" |