1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-30 12:29:55 +00:00

bitbake-dev: Add BBCLASSEXTEND support

This commit is contained in:
Richard Purdie
2009-01-03 16:33:11 +00:00
parent ee0faf1346
commit 772ec7db08
4 changed files with 79 additions and 15 deletions
+61 -7
View File
@@ -125,30 +125,59 @@ class Cache:
self.depends_cache[fn][var] = result self.depends_cache[fn][var] = result
return result return result
def setData(self, fn, data): def setData(self, virtualfn, fn, data):
""" """
Called to prime bb_cache ready to learn which variables to cache. Called to prime bb_cache ready to learn which variables to cache.
Will be followed by calls to self.getVar which aren't cached Will be followed by calls to self.getVar which aren't cached
but can be fulfilled from self.data. but can be fulfilled from self.data.
""" """
self.data_fn = fn self.data_fn = virtualfn
self.data = data self.data = data
# Make sure __depends makes the depends_cache # Make sure __depends makes the depends_cache
self.getVar("__depends", fn, True) self.getVar("__depends", virtualfn, True)
self.depends_cache[fn]["CACHETIMESTAMP"] = bb.parse.cached_mtime(fn) self.depends_cache[virtualfn]["CACHETIMESTAMP"] = bb.parse.cached_mtime(fn)
def loadDataFull(self, fn, cfgData): def virtualfn2realfn(self, virtualfn):
"""
Convert a virtual file name to a real one + the associated subclass keyword
"""
fn = virtualfn
cls = ""
if virtualfn.startswith('virtual:'):
cls = virtualfn.split(':', 2)[1]
fn = virtualfn.replace('virtual:' + cls + ':', '')
#bb.msg.debug(2, bb.msg.domain.Cache, "virtualfn2realfn %s to %s %s" % (virtualfn, fn, cls))
return (fn, cls)
def realfn2virtual(self, realfn, cls):
"""
Convert a real filename + the associated subclass keyword to a virtual filename
"""
if cls == "":
#bb.msg.debug(2, bb.msg.domain.Cache, "realfn2virtual %s and '%s' to %s" % (realfn, cls, realfn))
return realfn
#bb.msg.debug(2, bb.msg.domain.Cache, "realfn2virtual %s and %s to %s" % (realfn, cls, "virtual:" + cls + ":" + realfn))
return "virtual:" + cls + ":" + realfn
def loadDataFull(self, virtualfn, cfgData):
""" """
Return a complete set of data for fn. Return a complete set of data for fn.
To do this, we need to parse the file. To do this, we need to parse the file.
""" """
(fn, cls) = self.virtualfn2realfn(virtualfn)
bb.msg.debug(1, bb.msg.domain.Cache, "Parsing %s (full)" % fn) bb.msg.debug(1, bb.msg.domain.Cache, "Parsing %s (full)" % fn)
bb_data, skipped = self.load_bbfile(fn, cfgData) bb_data, skipped = self.load_bbfile(fn, cfgData)
if isinstance(bb_data, dict):
return bb_data[cls]
return bb_data return bb_data
def loadData(self, fn, cfgData): def loadData(self, fn, cfgData, cacheData):
""" """
Load a subset of data for fn. Load a subset of data for fn.
If the cached data is valid we do nothing, If the cached data is valid we do nothing,
@@ -161,12 +190,36 @@ class Cache:
if self.cacheValid(fn): if self.cacheValid(fn):
if "SKIPPED" in self.depends_cache[fn]: if "SKIPPED" in self.depends_cache[fn]:
return True, True return True, True
self.handle_data(fn, cacheData)
multi = self.getVar('BBCLASSEXTEND', fn, True)
if multi:
for cls in multi.split():
virtualfn = self.realfn2virtual(fn, cls)
# Pretend we're clean so getVar works
self.clean[virtualfn] = ""
self.handle_data(virtualfn, cacheData)
return True, False return True, False
bb.msg.debug(1, bb.msg.domain.Cache, "Parsing %s" % fn) bb.msg.debug(1, bb.msg.domain.Cache, "Parsing %s" % fn)
bb_data, skipped = self.load_bbfile(fn, cfgData) bb_data, skipped = self.load_bbfile(fn, cfgData)
self.setData(fn, bb_data)
if skipped:
if isinstance(bb_data, dict):
self.setData(fn, fn, bb_data[""])
else:
self.setData(fn, fn, bb_data)
return False, skipped
if isinstance(bb_data, dict):
for data in bb_data:
virtualfn = self.realfn2virtual(fn, data)
self.setData(virtualfn, fn, bb_data[data])
self.handle_data(virtualfn, cacheData)
return False, skipped
self.setData(fn, fn, bb_data)
self.handle_data(fn, cacheData)
return False, skipped return False, skipped
def cacheValid(self, fn): def cacheValid(self, fn):
@@ -384,6 +437,7 @@ class Cache:
# Touch this to make sure its in the cache # Touch this to make sure its in the cache
self.getVar('__BB_DONT_CACHE', file_name, True) self.getVar('__BB_DONT_CACHE', file_name, True)
self.getVar('BBCLASSEXTEND', file_name, True)
def load_bbfile( self, bbfile , config): def load_bbfile( self, bbfile , config):
""" """
+1 -4
View File
@@ -868,7 +868,7 @@ class BBCooker:
# read a file's metadata # read a file's metadata
try: try:
fromCache, skip = self.bb_cache.loadData(f, self.configuration.data) fromCache, skip = self.bb_cache.loadData(f, self.configuration.data, self.status)
if skip: if skip:
skipped += 1 skipped += 1
bb.msg.debug(2, bb.msg.domain.Collection, "skipping %s" % f) bb.msg.debug(2, bb.msg.domain.Collection, "skipping %s" % f)
@@ -876,7 +876,6 @@ class BBCooker:
continue continue
elif fromCache: cached += 1 elif fromCache: cached += 1
else: parsed += 1 else: parsed += 1
deps = None
# Disabled by RP as was no longer functional # Disabled by RP as was no longer functional
# allow metadata files to add items to BBFILES # allow metadata files to add items to BBFILES
@@ -889,8 +888,6 @@ class BBCooker:
# aof = os.path.join(os.path.dirname(f),aof) # aof = os.path.join(os.path.dirname(f),aof)
# files.append(aof) # files.append(aof)
self.bb_cache.handle_data(f, self.status)
except IOError, e: except IOError, e:
error += 1 error += 1
self.bb_cache.remove(f) self.bb_cache.remove(f)
+15 -2
View File
@@ -181,8 +181,21 @@ def handle(fn, d, include = 0):
classes.remove(__classname__) classes.remove(__classname__)
else: else:
if include == 0: if include == 0:
finalise(fn, d) multi = data.getVar('BBCLASSEXTEND', d, 1)
if multi:
based = bb.data.createCopy(d)
finalise(fn, based)
darray = {"": based}
for cls in multi.split():
pn = data.getVar('PN', d, True)
based = bb.data.createCopy(d)
data.setVar('PN', pn + '-' + cls, based)
inherit([cls], based)
finalise(fn, based)
darray[cls] = based
return darray
else:
finalise(fn, d)
bbpath.pop(0) bbpath.pop(0)
if oldfile: if oldfile:
bb.data.setVar("FILE", oldfile, d) bb.data.setVar("FILE", oldfile, d)
+1 -1
View File
@@ -268,7 +268,7 @@ class BitBakeShellCommands:
print "SHELL: Parsing '%s'" % bbfile print "SHELL: Parsing '%s'" % bbfile
parse.update_mtime( bbfile ) parse.update_mtime( bbfile )
cooker.bb_cache.cacheValidUpdate(bbfile) cooker.bb_cache.cacheValidUpdate(bbfile)
fromCache = cooker.bb_cache.loadData(bbfile, cooker.configuration.data) fromCache = cooker.bb_cache.loadData(bbfile, cooker.configuration.data, cooker.status)
cooker.bb_cache.sync() cooker.bb_cache.sync()
if False: #fromCache: if False: #fromCache:
print "SHELL: File has not been updated, not reparsing" print "SHELL: File has not been updated, not reparsing"