diff options
Diffstat (limited to 'conf/collections.inc')
-rw-r--r-- | conf/collections.inc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/conf/collections.inc b/conf/collections.inc new file mode 100644 index 0000000000..986a5f6424 --- /dev/null +++ b/conf/collections.inc @@ -0,0 +1,56 @@ +# Take a list of directories in COLLECTIONS, in priority order (highest to +# lowest), and use those to populate BBFILES, BBFILE_COLLECTIONS, +# BBFILE_PATTERN_*, and BBFILE_PRIORITY_*. By default, COLLECTIONS is +# prepopulated with the locations the user specified in their BBPATH. + +COLLECTIONS = "${@' '.join(d.getVar('BBPATH', 1).split(':'))}" + +def collections_setup(d): + """ Populate collection and bbfiles metadata from the COLLECTIONS var. """ + import bb + import os + from itertools import izip, chain + from glob import glob + + def setifunset(k, v): + if d.getVar(k, 0) is None: + d.setVar(k, v) + + collections = d.getVar("COLLECTIONS", 1) + if not collections: + return + globbed = (glob(path) for path in collections.split()) + collections = list(chain(*globbed)) + + collectionmap = {} + namemap = {} + for collection in collections: + basename = os.path.basename(collection).split(os.path.extsep)[0] + if namemap.get(basename): + basename = "%s-%s" % (basename, hash(collection)) + namemap[basename] = collection + collectionmap[collection] = basename + + for (collection, priority) in izip(collections, xrange(len(collections), 0, -1)): + if not os.path.exists(collection): + bb.fatal("Collection %s does not exist" % collection) + + name = collectionmap[collection] + if not name: + bb.fatal("Unable to determine collection name for %s" % collection) + + setifunset("BBFILE_PATTERN_%s" % name, "^%s/" % collection) + setifunset("BBFILE_PRIORITY_%s" % name, str(priority)) + + setifunset("BBFILE_COLLECTIONS", " ".join(collectionmap.values())) + setifunset("BBFILES", " ".join(collectionmap.keys())) + +addhandler collections_eh +python collections_eh () { + from bb.event import getName + + if getName(e) == "ConfigParsed": + collections_setup(e.data) + + return NotHandled +} |