2014-04-13 89 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在此之前無法知道總數。