lib/oe/sstatesig.py: add signature data query function
Add a function that can be used from BitBake code which will find signature data (sigdata/siginfo) files based on specified criteria, and hook it into BitBake as bb.siggen.find_siginfo. (From OE-Core rev: 9f0453c29891e32f8038c4bbc22ada28bfbf818a) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
950c85e398
commit
27f842eba5
|
@ -74,3 +74,84 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
|
|||
# Insert these classes into siggen's namespace so it can see and select them
|
||||
bb.siggen.SignatureGeneratorOEBasic = SignatureGeneratorOEBasic
|
||||
bb.siggen.SignatureGeneratorOEBasicHash = SignatureGeneratorOEBasicHash
|
||||
|
||||
|
||||
def find_siginfo(pn, taskname, taskhashlist, d):
|
||||
""" Find signature data files for comparison purposes """
|
||||
|
||||
import fnmatch
|
||||
|
||||
if taskhashlist:
|
||||
hashfiles = {}
|
||||
|
||||
if not taskname:
|
||||
# We have to derive pn and taskname
|
||||
key = pn
|
||||
splitit = key.split('.bb.')
|
||||
taskname = splitit[1]
|
||||
pn = os.path.basename(splitit[0]).split('_')[0]
|
||||
if key.startswith('virtual:native:'):
|
||||
pn = pn + '-native'
|
||||
|
||||
# First search in stamps dir
|
||||
stampdir = d.getVar('TMPDIR', True) + '/stamps'
|
||||
filespec = '%s-*.%s.sigdata.*' % (pn, taskname)
|
||||
filedates = {}
|
||||
foundall = False
|
||||
for root, dirs, files in os.walk(stampdir):
|
||||
for fn in files:
|
||||
if fnmatch.fnmatch(fn, filespec):
|
||||
fullpath = os.path.join(root, fn)
|
||||
match = False
|
||||
if taskhashlist:
|
||||
for taskhash in taskhashlist:
|
||||
if fn.endswith('.%s' % taskhash):
|
||||
hashfiles[taskhash] = fullpath
|
||||
if len(hashfiles) == len(taskhashlist):
|
||||
foundall = True
|
||||
break
|
||||
else:
|
||||
filedates[fullpath] = os.stat(fullpath).st_mtime
|
||||
if foundall:
|
||||
break
|
||||
|
||||
if len(filedates) < 2 and not foundall:
|
||||
# That didn't work, look in sstate-cache
|
||||
hashes = taskhashlist or ['*']
|
||||
localdata = bb.data.createCopy(d)
|
||||
for hashval in hashes:
|
||||
localdata.setVar('PACKAGE_ARCH', '*')
|
||||
localdata.setVar('TARGET_VENDOR', '*')
|
||||
localdata.setVar('TARGET_OS', '*')
|
||||
localdata.setVar('PN', pn)
|
||||
localdata.setVar('PV', '*')
|
||||
localdata.setVar('PR', '*')
|
||||
localdata.setVar('BB_TASKHASH', hashval)
|
||||
if pn.endswith('-native') or pn.endswith('-crosssdk') or pn.endswith('-cross'):
|
||||
localdata.setVar('SSTATE_EXTRAPATH', "${NATIVELSBSTRING}/")
|
||||
sstatename = d.getVarFlag(taskname, "sstate-name")
|
||||
if not sstatename:
|
||||
sstatename = taskname
|
||||
filespec = '%s_%s.*.siginfo' % (localdata.getVar('SSTATE_PKG', True), sstatename)
|
||||
|
||||
if hashval != '*':
|
||||
sstatedir = "%s/%s" % (d.getVar('SSTATE_DIR', True), hashval[:2])
|
||||
else:
|
||||
sstatedir = d.getVar('SSTATE_DIR', True)
|
||||
|
||||
filedates = {}
|
||||
for root, dirs, files in os.walk(sstatedir):
|
||||
for fn in files:
|
||||
fullpath = os.path.join(root, fn)
|
||||
if fnmatch.fnmatch(fullpath, filespec):
|
||||
if taskhashlist:
|
||||
hashfiles[hashval] = fullpath
|
||||
else:
|
||||
filedates[fullpath] = os.stat(fullpath).st_mtime
|
||||
|
||||
if taskhashlist:
|
||||
return hashfiles
|
||||
else:
|
||||
return filedates
|
||||
|
||||
bb.siggen.find_siginfo = find_siginfo
|
||||
|
|
Loading…
Reference in New Issue