summaryrefslogtreecommitdiffstats
path: root/meta/lib/oe/sstatesig.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oe/sstatesig.py')
-rw-r--r--meta/lib/oe/sstatesig.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py
index 4188873c20..7b860c5b0d 100644
--- a/meta/lib/oe/sstatesig.py
+++ b/meta/lib/oe/sstatesig.py
@@ -61,6 +61,16 @@ def sstate_rundepfilter(siggen, fn, recipename, task, dep, depname, dataCache):
61 # Default to keep dependencies 61 # Default to keep dependencies
62 return True 62 return True
63 63
64def sstate_lockedsigs(d):
65 sigs = {}
66 lockedsigs = (d.getVar("SIGGEN_LOCKEDSIGS", True) or "").split()
67 for ls in lockedsigs:
68 pn, task, h = ls.split(":", 2)
69 if pn not in sigs:
70 sigs[pn] = {}
71 sigs[pn][task] = h
72 return sigs
73
64class SignatureGeneratorOEBasic(bb.siggen.SignatureGeneratorBasic): 74class SignatureGeneratorOEBasic(bb.siggen.SignatureGeneratorBasic):
65 name = "OEBasic" 75 name = "OEBasic"
66 def init_rundepcheck(self, data): 76 def init_rundepcheck(self, data):
@@ -75,10 +85,74 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
75 def init_rundepcheck(self, data): 85 def init_rundepcheck(self, data):
76 self.abisaferecipes = (data.getVar("SIGGEN_EXCLUDERECIPES_ABISAFE", True) or "").split() 86 self.abisaferecipes = (data.getVar("SIGGEN_EXCLUDERECIPES_ABISAFE", True) or "").split()
77 self.saferecipedeps = (data.getVar("SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS", True) or "").split() 87 self.saferecipedeps = (data.getVar("SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS", True) or "").split()
88 self.lockedsigs = sstate_lockedsigs(data)
89 self.lockedhashes = {}
90 self.lockedpnmap = {}
78 pass 91 pass
79 def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None): 92 def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None):
80 return sstate_rundepfilter(self, fn, recipename, task, dep, depname, dataCache) 93 return sstate_rundepfilter(self, fn, recipename, task, dep, depname, dataCache)
81 94
95 def get_taskdata(self):
96 data = super(bb.siggen.SignatureGeneratorBasicHash, self).get_taskdata()
97 return (data, self.lockedpnmap)
98
99 def set_taskdata(self, data):
100 coredata, self.lockedpnmap = data
101 super(bb.siggen.SignatureGeneratorBasicHash, self).set_taskdata(coredata)
102
103 def dump_sigs(self, dataCache, options):
104 self.dump_lockedsigs()
105 return super(bb.siggen.SignatureGeneratorBasicHash, self).dump_sigs(dataCache, options)
106
107 def get_taskhash(self, fn, task, deps, dataCache):
108 recipename = dataCache.pkg_fn[fn]
109 self.lockedpnmap[fn] = recipename
110 if recipename in self.lockedsigs:
111 if task in self.lockedsigs[recipename]:
112 k = fn + "." + task
113 h = self.lockedsigs[recipename][task]
114 self.lockedhashes[k] = h
115 self.taskhash[k] = h
116 #bb.warn("Using %s %s %s" % (recipename, task, h))
117 return h
118 h = super(bb.siggen.SignatureGeneratorBasicHash, self).get_taskhash(fn, task, deps, dataCache)
119 #bb.warn("%s %s %s" % (recipename, task, h))
120 return h
121
122 def dump_sigtask(self, fn, task, stampbase, runtime):
123 k = fn + "." + task
124 if k in self.lockedhashes:
125 return
126 super(bb.siggen.SignatureGeneratorBasicHash, self).dump_sigtask(fn, task, stampbase, runtime)
127
128 def dump_lockedsigs(self):
129 bb.plain("Writing locked sigs to " + os.getcwd() + "/locked-sigs.inc")
130 with open("locked-sigs.inc", "w") as f:
131 f.write('SIGGEN_LOCKEDSIGS = "\\\n')
132 #for fn in self.taskdeps:
133 for k in self.runtaskdeps:
134 #k = fn + "." + task
135 fn = k.rsplit(".",1)[0]
136 task = k.rsplit(".",1)[1]
137 if k not in self.taskhash:
138 continue
139 f.write(" " + self.lockedpnmap[fn] + ":" + task + ":" + self.taskhash[k] + " \\\n")
140 f.write(' "\n')
141
142 def checkhashes(self, missed, ret, sq_fn, sq_task, sq_hash, sq_hashfn, d):
143 enforce = (d.getVar("SIGGEN_ENFORCE_LOCKEDSIGS", True) or "1") == "1"
144 msgs = []
145 for task in range(len(sq_fn)):
146 if task not in ret:
147 for pn in self.lockedsigs:
148 if sq_hash[task] in self.lockedsigs[pn].itervalues():
149 msgs.append("Locked sig is set for %s:%s (%s) yet not in sstate cache?" % (pn, sq_task[task], sq_hash[task]))
150 if msgs and enforce:
151 bb.fatal("\n".join(msgs))
152 elif msgs:
153 bb.warn("\n".join(msgs))
154
155
82# Insert these classes into siggen's namespace so it can see and select them 156# Insert these classes into siggen's namespace so it can see and select them
83bb.siggen.SignatureGeneratorOEBasic = SignatureGeneratorOEBasic 157bb.siggen.SignatureGeneratorOEBasic = SignatureGeneratorOEBasic
84bb.siggen.SignatureGeneratorOEBasicHash = SignatureGeneratorOEBasicHash 158bb.siggen.SignatureGeneratorOEBasicHash = SignatureGeneratorOEBasicHash