aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDongxiao Xu <dongxiao.xu@intel.com>2011-01-18 16:18:18 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-02-21 13:23:23 +0000
commit1a32c01490abf1e90e6733901cb08a1829e0ec59 (patch)
treed599d87efc55f256ddefa8495d8396491298517a /lib
parent3c6caab8bc1b104e7db680e2d8bfab51642cad32 (diff)
downloadbitbake-1a32c01490abf1e90e6733901cb08a1829e0ec59.tar.gz
Introduce stamp-extra-info task flag into stamp filenames
For certain tasks, we need additional information in build stamp file other than the task name and file name. stamp-extra-info is introduced as a task flag which is appended to the stamp file name. [Code simplifcations/tweaks from Richard] (From Poky rev: 80cf3e405c923ed95dd09936739e816dbdd92299) Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/bb/build.py12
-rw-r--r--lib/bb/cache.py11
-rw-r--r--lib/bb/runqueue.py12
-rw-r--r--lib/bb/siggen.py8
4 files changed, 29 insertions, 14 deletions
diff --git a/lib/bb/build.py b/lib/bb/build.py
index 1855e3299..4418563cd 100644
--- a/lib/bb/build.py
+++ b/lib/bb/build.py
@@ -312,14 +312,16 @@ def stamp_internal(taskname, d, file_name):
"""
if file_name:
stamp = d.stamp[file_name]
+ extrainfo = d.stamp_extrainfo[file_name].get(taskname) or ""
else:
stamp = d.getVar('STAMP', True)
file_name = d.getVar('BB_FILENAME', True)
+ extrainfo = d.getVarFlag(taskname, 'stamp-extra-info', True) or ""
if not stamp:
return
- stamp = bb.parse.siggen.stampfile(stamp, file_name, taskname)
+ stamp = bb.parse.siggen.stampfile(stamp, file_name, taskname, extrainfo)
bb.utils.mkdirhier(os.path.dirname(stamp))
@@ -346,8 +348,12 @@ def del_stamp(task, d, file_name = None):
stamp = stamp_internal(task, d, file_name)
bb.utils.remove(stamp)
-def stampfile(taskname, d):
- return stamp_internal(taskname, d, None)
+def stampfile(taskname, d, file_name = None):
+ """
+ Return the stamp for a given task
+ (d can be a data dict or dataCache)
+ """
+ return stamp_internal(taskname, d, file_name)
def add_tasks(tasklist, d):
task_deps = data.getVar('_task_deps', d)
diff --git a/lib/bb/cache.py b/lib/bb/cache.py
index 21fa621c1..9e504ae25 100644
--- a/lib/bb/cache.py
+++ b/lib/bb/cache.py
@@ -43,7 +43,7 @@ except ImportError:
logger.info("Importing cPickle failed. "
"Falling back to a very slow implementation.")
-__cache_version__ = "134"
+__cache_version__ = "135"
recipe_fields = (
'pn',
@@ -55,6 +55,7 @@ recipe_fields = (
'provides',
'task_deps',
'stamp',
+ 'stamp_extrainfo',
'broken',
'not_world',
'skipped',
@@ -102,6 +103,11 @@ class RecipeInfo(namedtuple('RecipeInfo', recipe_fields)):
for task in tasks)
@classmethod
+ def flaglist(cls, flag, varlist, metadata):
+ return dict((var, metadata.getVarFlag(flag, var, True))
+ for var in varlist)
+
+ @classmethod
def getvar(cls, var, metadata):
return metadata.getVar(var, True) or ''
@@ -148,6 +154,7 @@ class RecipeInfo(namedtuple('RecipeInfo', recipe_fields)):
broken = cls.getvar('BROKEN', metadata),
not_world = cls.getvar('EXCLUDE_FROM_WORLD', metadata),
stamp = cls.getvar('STAMP', metadata),
+ stamp_extrainfo = cls.flaglist('stamp-extra-info', tasks, metadata),
packages_dynamic = cls.listvar('PACKAGES_DYNAMIC', metadata),
depends = cls.depvar('DEPENDS', metadata),
provides = cls.depvar('PROVIDES', metadata),
@@ -560,6 +567,7 @@ class CacheData(object):
self.task_queues = {}
self.task_deps = {}
self.stamp = {}
+ self.stamp_extrainfo = {}
self.preferred = {}
self.tasks = {}
self.basetaskhash = {}
@@ -578,6 +586,7 @@ class CacheData(object):
self.pkg_pepvpr[fn] = (info.pe, info.pv, info.pr)
self.pkg_dp[fn] = info.defaultpref
self.stamp[fn] = info.stamp
+ self.stamp_extrainfo[fn] = info.stamp_extrainfo
provides = [info.pn]
for provide in info.provides:
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index 3b85de568..9f397f6f3 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -799,7 +799,7 @@ class RunQueue:
continue
fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]]
taskname = self.rqdata.runq_task[task]
- stampfile = bb.parse.siggen.stampfile(self.rqdata.dataCache.stamp[fn], fn, taskname)
+ stampfile = bb.build.stampfile(taskname, self.rqdata.dataCache, fn)
# If the stamp is missing its not current
if not os.access(stampfile, os.F_OK):
del unchecked[task]
@@ -820,7 +820,7 @@ class RunQueue:
if task in unchecked:
fn = self.taskData.fn_index[self.rqdata.runq_fnid[task]]
taskname = self.rqdata.runq_task[task]
- stampfile = bb.parse.siggen.stampfile(self.rqdata.dataCache.stamp[fn], fn, taskname)
+ stampfile = bb.build.stampfile(taskname, self.rqdata.dataCache, fn)
iscurrent = True
t1 = os.stat(stampfile)[stat.ST_MTIME]
@@ -828,7 +828,7 @@ class RunQueue:
if iscurrent:
fn2 = self.taskData.fn_index[self.rqdata.runq_fnid[dep]]
taskname2 = self.rqdata.runq_task[dep]
- stampfile2 = bb.parse.siggen.stampfile(self.rqdata.dataCache.stamp[fn2], fn2, taskname2)
+ stampfile2 = bb.build.stampfile(taskname2, self.rqdata.dataCache, fn2)
if fn == fn2 or (fulldeptree and fn2 not in stampwhitelist):
if dep in notcurrent:
iscurrent = False
@@ -880,7 +880,7 @@ class RunQueue:
if taskname is None:
taskname = self.rqdata.runq_task[task]
- stampfile = bb.parse.siggen.stampfile(self.rqdata.dataCache.stamp[fn], fn, taskname)
+ stampfile = bb.build.stampfile(taskname, self.rqdata.dataCache, fn)
# If the stamp is missing its not current
if not os.access(stampfile, os.F_OK):
@@ -901,8 +901,8 @@ class RunQueue:
if iscurrent:
fn2 = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[dep]]
taskname2 = self.rqdata.runq_task[dep]
- stampfile2 = bb.parse.siggen.stampfile(self.rqdata.dataCache.stamp[fn2], fn2, taskname2)
- stampfile3 = bb.parse.siggen.stampfile(self.rqdata.dataCache.stamp[fn2], fn2, taskname2 + "_setscene")
+ stampfile2 = bb.build.stampfile(taskname2, self.rqdata.dataCache, fn2)
+ stampfile3 = bb.build.stampfile(taskname2 + "_setscene", self.rqdata.dataCache, fn2)
t2 = get_timestamp(stampfile2)
t3 = get_timestamp(stampfile3)
if t3 and t3 > t2:
diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py
index 3bd3becc6..15b5228cd 100644
--- a/lib/bb/siggen.py
+++ b/lib/bb/siggen.py
@@ -43,8 +43,8 @@ class SignatureGenerator(object):
def set_taskdata(self, hashes, deps):
return
- def stampfile(self, stampbase, file_name, taskname):
- return "%s.%s" % (stampbase, taskname)
+ def stampfile(self, stampbase, file_name, taskname, extrainfo):
+ return ("%s.%s.%s" % (stampbase, taskname, extrainfo)).rstrip('.')
class SignatureGeneratorBasic(SignatureGenerator):
"""
@@ -197,13 +197,13 @@ class SignatureGeneratorBasic(SignatureGenerator):
class SignatureGeneratorBasicHash(SignatureGeneratorBasic):
name = "basichash"
- def stampfile(self, stampbase, fn, taskname):
+ def stampfile(self, stampbase, fn, taskname, extrainfo):
if taskname != "do_setscene" and taskname.endswith("_setscene"):
k = fn + "." + taskname[:-9]
else:
k = fn + "." + taskname
h = self.taskhash[k]
- return "%s.%s.%s" % (stampbase, taskname, h)
+ return ("%s.%s.%s.%s" % (stampbase, taskname, h, extrainfo)).rstrip('.')
def dump_this_task(outfile, d):
import bb.parse