diff options
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/cookerdata.py | 2 | ||||
-rw-r--r-- | bitbake/lib/bb/event.py | 26 | ||||
-rw-r--r-- | bitbake/lib/bb/parse/ast.py | 2 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 4 |
4 files changed, 28 insertions, 6 deletions
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py index c39b568130..1c1e008c6b 100644 --- a/bitbake/lib/bb/cookerdata.py +++ b/bitbake/lib/bb/cookerdata.py | |||
@@ -429,7 +429,7 @@ class CookerDataBuilder(object): | |||
429 | parselog.critical("Undefined event handler function '%s'" % var) | 429 | parselog.critical("Undefined event handler function '%s'" % var) |
430 | raise bb.BBHandledException() | 430 | raise bb.BBHandledException() |
431 | handlerln = int(data.getVarFlag(var, "lineno", False)) | 431 | handlerln = int(data.getVarFlag(var, "lineno", False)) |
432 | bb.event.register(var, data.getVar(var, False), (data.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln) | 432 | bb.event.register(var, data.getVar(var, False), (data.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln, data) |
433 | 433 | ||
434 | data.setVar('BBINCLUDED',bb.parse.get_file_depends(data)) | 434 | data.setVar('BBINCLUDED',bb.parse.get_file_depends(data)) |
435 | 435 | ||
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index 694b470520..ff89959460 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py | |||
@@ -118,6 +118,8 @@ def fire_class_handlers(event, d): | |||
118 | if _eventfilter: | 118 | if _eventfilter: |
119 | if not _eventfilter(name, handler, event, d): | 119 | if not _eventfilter(name, handler, event, d): |
120 | continue | 120 | continue |
121 | if d and not name in (d.getVar("__BBHANDLERS_MC") or []): | ||
122 | continue | ||
121 | execute_handler(name, handler, event, d) | 123 | execute_handler(name, handler, event, d) |
122 | 124 | ||
123 | ui_queue = [] | 125 | ui_queue = [] |
@@ -227,9 +229,13 @@ def fire_from_worker(event, d): | |||
227 | fire_ui_handlers(event, d) | 229 | fire_ui_handlers(event, d) |
228 | 230 | ||
229 | noop = lambda _: None | 231 | noop = lambda _: None |
230 | def register(name, handler, mask=None, filename=None, lineno=None): | 232 | def register(name, handler, mask=None, filename=None, lineno=None, data=None): |
231 | """Register an Event handler""" | 233 | """Register an Event handler""" |
232 | 234 | ||
235 | if data and data.getVar("BB_CURRENT_MC"): | ||
236 | mc = data.getVar("BB_CURRENT_MC") | ||
237 | name = '%s%s' % (mc, name) | ||
238 | |||
233 | # already registered | 239 | # already registered |
234 | if name in _handlers: | 240 | if name in _handlers: |
235 | return AlreadyRegistered | 241 | return AlreadyRegistered |
@@ -268,10 +274,20 @@ def register(name, handler, mask=None, filename=None, lineno=None): | |||
268 | _event_handler_map[m] = {} | 274 | _event_handler_map[m] = {} |
269 | _event_handler_map[m][name] = True | 275 | _event_handler_map[m][name] = True |
270 | 276 | ||
277 | if data: | ||
278 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or []) | ||
279 | bbhands_mc.append(name) | ||
280 | data.setVar("__BBHANDLERS_MC", bbhands_mc) | ||
281 | |||
271 | return Registered | 282 | return Registered |
272 | 283 | ||
273 | def remove(name, handler): | 284 | def remove(name, handler, data=None): |
274 | """Remove an Event handler""" | 285 | """Remove an Event handler""" |
286 | if data: | ||
287 | if data.getVar("BB_CURRENT_MC"): | ||
288 | mc = data.getVar("BB_CURRENT_MC") | ||
289 | name = '%s%s' % (mc, name) | ||
290 | |||
275 | _handlers.pop(name) | 291 | _handlers.pop(name) |
276 | if name in _catchall_handlers: | 292 | if name in _catchall_handlers: |
277 | _catchall_handlers.pop(name) | 293 | _catchall_handlers.pop(name) |
@@ -279,6 +295,12 @@ def remove(name, handler): | |||
279 | if name in _event_handler_map[event]: | 295 | if name in _event_handler_map[event]: |
280 | _event_handler_map[event].pop(name) | 296 | _event_handler_map[event].pop(name) |
281 | 297 | ||
298 | if data: | ||
299 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or []) | ||
300 | if name in bbhands_mc: | ||
301 | bbhands_mc.remove(name) | ||
302 | data.setVar("__BBHANDLERS_MC", bbhands_mc) | ||
303 | |||
282 | def get_handlers(): | 304 | def get_handlers(): |
283 | return _handlers | 305 | return _handlers |
284 | 306 | ||
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py index 0596993d01..50a88f7da7 100644 --- a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py | |||
@@ -335,7 +335,7 @@ def finalize(fn, d, variant = None): | |||
335 | if not handlerfn: | 335 | if not handlerfn: |
336 | bb.fatal("Undefined event handler function '%s'" % var) | 336 | bb.fatal("Undefined event handler function '%s'" % var) |
337 | handlerln = int(d.getVarFlag(var, "lineno", False)) | 337 | handlerln = int(d.getVarFlag(var, "lineno", False)) |
338 | bb.event.register(var, d.getVar(var, False), (d.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln) | 338 | bb.event.register(var, d.getVar(var, False), (d.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln, data=d) |
339 | 339 | ||
340 | bb.event.fire(bb.event.RecipePreFinalise(fn), d) | 340 | bb.event.fire(bb.event.RecipePreFinalise(fn), d) |
341 | 341 | ||
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 2f521e5a14..b8b217c64a 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1466,7 +1466,7 @@ class RunQueue: | |||
1466 | if not self.dm_event_handler_registered: | 1466 | if not self.dm_event_handler_registered: |
1467 | res = bb.event.register(self.dm_event_handler_name, | 1467 | res = bb.event.register(self.dm_event_handler_name, |
1468 | lambda x: self.dm.check(self) if self.state in [runQueueRunning, runQueueCleanUp] else False, | 1468 | lambda x: self.dm.check(self) if self.state in [runQueueRunning, runQueueCleanUp] else False, |
1469 | ('bb.event.HeartbeatEvent',)) | 1469 | ('bb.event.HeartbeatEvent',), data=self.cfgData) |
1470 | self.dm_event_handler_registered = True | 1470 | self.dm_event_handler_registered = True |
1471 | 1471 | ||
1472 | dump = self.cooker.configuration.dump_signatures | 1472 | dump = self.cooker.configuration.dump_signatures |
@@ -1505,7 +1505,7 @@ class RunQueue: | |||
1505 | build_done = self.state is runQueueComplete or self.state is runQueueFailed | 1505 | build_done = self.state is runQueueComplete or self.state is runQueueFailed |
1506 | 1506 | ||
1507 | if build_done and self.dm_event_handler_registered: | 1507 | if build_done and self.dm_event_handler_registered: |
1508 | bb.event.remove(self.dm_event_handler_name, None) | 1508 | bb.event.remove(self.dm_event_handler_name, None, data=self.cfgData) |
1509 | self.dm_event_handler_registered = False | 1509 | self.dm_event_handler_registered = False |
1510 | 1510 | ||
1511 | if build_done and self.rqexe: | 1511 | if build_done and self.rqexe: |