aboutsummaryrefslogtreecommitdiffstats
path: root/conf/collections.inc
diff options
context:
space:
mode:
authorChris Larson <clarson@mvista.com>2009-03-31 13:46:38 -0700
committerChris Larson <clarson@kergoth.com>2009-04-01 10:15:30 -0700
commitde1daef44b490e1efc232c8ec032fd5099c861ff (patch)
tree3e35425441a99af70ea6f0d6c6b7d22bc9a7e486 /conf/collections.inc
parent10b7252b5eec3752768692d29dec24db845d1626 (diff)
downloadopenembedded-de1daef44b490e1efc232c8ec032fd5099c861ff.tar.gz
bitbake.conf, collections.inc: Add COLLECTIONS mechanism w/ a sane default.
Added code which takes a list of directories in COLLECTIONS, in priority order (highest to lowest), and uses those to populate BBFILES, BBFILE_COLLECTIONS, BBFILE_PATTERN_*, and BBFILE_PRIORITY_*. The default COLLECTIONS is based on BBPATH, so you can now specify a sane BBPATH, not bother setting up the collections variables or BBFILES, and still likely be able to do a build. Signed-off-by: Chris Larson <clarson@mvista.com>
Diffstat (limited to 'conf/collections.inc')
-rw-r--r--conf/collections.inc55
1 files changed, 55 insertions, 0 deletions
diff --git a/conf/collections.inc b/conf/collections.inc
new file mode 100644
index 0000000000..9355b00796
--- /dev/null
+++ b/conf/collections.inc
@@ -0,0 +1,55 @@
+# 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_*.
+
+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
+}