|
Packit Service |
fa3ceb |
#! /usr/bin/env python
|
|
Packit Service |
fa3ceb |
# encoding: utf-8
|
|
Packit Service |
fa3ceb |
# Thomas Nagy, 2010 (ita)
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
"""
|
|
Packit Service |
fa3ceb |
This tool modifies the task signature scheme to store and obtain
|
|
Packit Service |
fa3ceb |
information about the task execution (why it must run, etc)::
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
def configure(conf):
|
|
Packit Service |
fa3ceb |
conf.load('why')
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
After adding the tool, a full rebuild is necessary:
|
|
Packit Service |
fa3ceb |
waf clean build --zones=task
|
|
Packit Service |
fa3ceb |
"""
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
from waflib import Task, Utils, Logs, Errors
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
def signature(self):
|
|
Packit Service |
fa3ceb |
# compute the result one time, and suppose the scan_signature will give the good result
|
|
Packit Service |
fa3ceb |
try:
|
|
Packit Service |
fa3ceb |
return self.cache_sig
|
|
Packit Service |
fa3ceb |
except AttributeError:
|
|
Packit Service |
fa3ceb |
pass
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
self.m = Utils.md5()
|
|
Packit Service |
fa3ceb |
self.m.update(self.hcode)
|
|
Packit Service |
fa3ceb |
id_sig = self.m.digest()
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
# explicit deps
|
|
Packit Service |
fa3ceb |
self.m = Utils.md5()
|
|
Packit Service |
fa3ceb |
self.sig_explicit_deps()
|
|
Packit Service |
fa3ceb |
exp_sig = self.m.digest()
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
# env vars
|
|
Packit Service |
fa3ceb |
self.m = Utils.md5()
|
|
Packit Service |
fa3ceb |
self.sig_vars()
|
|
Packit Service |
fa3ceb |
var_sig = self.m.digest()
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
# implicit deps / scanner results
|
|
Packit Service |
fa3ceb |
self.m = Utils.md5()
|
|
Packit Service |
fa3ceb |
if self.scan:
|
|
Packit Service |
fa3ceb |
try:
|
|
Packit Service |
fa3ceb |
self.sig_implicit_deps()
|
|
Packit Service |
fa3ceb |
except Errors.TaskRescan:
|
|
Packit Service |
fa3ceb |
return self.signature()
|
|
Packit Service |
fa3ceb |
impl_sig = self.m.digest()
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
ret = self.cache_sig = impl_sig + id_sig + exp_sig + var_sig
|
|
Packit Service |
fa3ceb |
return ret
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
Task.Task.signature = signature
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
old = Task.Task.runnable_status
|
|
Packit Service |
fa3ceb |
def runnable_status(self):
|
|
Packit Service |
fa3ceb |
ret = old(self)
|
|
Packit Service |
fa3ceb |
if ret == Task.RUN_ME:
|
|
Packit Service |
fa3ceb |
try:
|
|
Packit Service |
fa3ceb |
old_sigs = self.generator.bld.task_sigs[self.uid()]
|
|
Packit Service |
fa3ceb |
except (KeyError, AttributeError):
|
|
Packit Service |
fa3ceb |
Logs.debug("task: task must run as no previous signature exists")
|
|
Packit Service |
fa3ceb |
else:
|
|
Packit Service |
fa3ceb |
new_sigs = self.cache_sig
|
|
Packit Service |
fa3ceb |
def v(x):
|
|
Packit Service |
fa3ceb |
return Utils.to_hex(x)
|
|
Packit Service |
fa3ceb |
|
|
Packit Service |
fa3ceb |
Logs.debug('Task %r', self)
|
|
Packit Service |
fa3ceb |
msgs = ['* Implicit or scanner dependency', '* Task code', '* Source file, explicit or manual dependency', '* Configuration data variable']
|
|
Packit Service |
fa3ceb |
tmp = 'task: -> %s: %s %s'
|
|
Packit Service |
fa3ceb |
for x in range(len(msgs)):
|
|
Packit Service |
fa3ceb |
l = len(Utils.SIG_NIL)
|
|
Packit Service |
fa3ceb |
a = new_sigs[x*l : (x+1)*l]
|
|
Packit Service |
fa3ceb |
b = old_sigs[x*l : (x+1)*l]
|
|
Packit Service |
fa3ceb |
if (a != b):
|
|
Packit Service |
fa3ceb |
Logs.debug(tmp, msgs[x].ljust(35), v(a), v(b))
|
|
Packit Service |
fa3ceb |
return ret
|
|
Packit Service |
fa3ceb |
Task.Task.runnable_status = runnable_status
|
|
Packit Service |
fa3ceb |
|