2014-04-13 48 views
1

如何从另一个调用不同任务类的任务中启动任务。waf在执行任务中创建任务

@feature('unites') 
@after_method('apply_link') 
def make_test_unites(self): 
    if getattr(self, 'link_task', None): 
     tsk = self.create_task('unites', self.link_task.outputs) 
     tsk.a = [] 

@feature('gtester') 
@after_method('apply_link') 
def make_test_gtester(self): 
    if getattr(self, 'link_task', None): 
     tsk = self.create_task('gtester', self.link_task.outputs) 

class unites (Task.Task): 
    def runnable_status(self): 
     ### print("Never reached!") 
     ... 

    def run(self): 
     ... 
     ### print("Never reached!") 
     ... 


class gtester (Task.Task): 
    def runnable_status(self): 
     //works as expected 

    def run(self): 
     ... 
     bld = self.generator.bld 
     ... 
     #utask = unites(env=bld.env) 
     utask = self.generator.create_task ('unites') 
     assert (utask) 
     utask.set_inputs(self.generator.link_task.outputs) 
     utask.a = ["some foo extra stuff"] 
     #bld.add_to_group (utask) 

     ### print ("this is definitily reached") 

因此,代码不会崩溃,但是当我使用./waf --zones=task_gen,tasks我得到的是一个任务,为gtester,但没有为unites

这是它是如何在实践中使用:

test = bld.program(
    features = ['c', 'glib2', 'gtester'], 
      ..., 
      ... 
      ) 

有过深入探讨the waf book和API文档,但也没有得到任何有用的东西。

那么如何从一个已经运行的任务中调度一个任务(或者任意数量的任务)呢?

回答

2

的解决方案是使用

tsk = self.generator.create_task('unites') 
bld.producer.outstanding.insert(0, tsk) 
bld.producer.total += 1 

而且./waf --zones=tasks显示的额外任务。


./waf/playground/dynamic_headers/wscript


一件事就是WAF svn的灵感来自提:在[M/N]任务计数每一行的盈方会突然跳起来时gtester进行处理,这是由于事实上,总数在Task结束时得到更新,所以waf在此之前无法知道总数。