4
EXT_C=['.c','.cc','.cpp','.cxx']
6
import TaskGen,Task,ccroot,Build
7
from TaskGen import extension
9
class TaskMaster(Task.Task):
10
def __init__(self,action_name,env,normal=1,master=None):
11
Task.Task.__init__(self,env,normal=normal)
15
def add_slave(self,slave):
16
self.slaves.append(slave)
17
self.set_run_after(slave)
18
def runnable_status(self):
19
for t in self.run_after:
20
if not t.hasrun:return ASK_LATER
22
self.inputs.append(t.inputs[0])
23
self.outputs.append(t.outputs[0])
25
self.inputs2.append(t.inputs[0])
26
self.outputs2.append(t.outputs[0])
27
return Task.Task.runnable_status(self)
30
self.inputs=self.inputs2
31
tmpoutputs=self.outputs
32
self.outputs=self.outputs2
33
ret=self.action.run(self)
35
rootdir=Build.bld.srcnode.abspath(env)
36
for i in self.outputs:
38
if name[-1]=="s":name=name[:-1]
39
shutil.move(name,i.bldpath(env))
41
self.outputs=tmpoutputs
43
class TaskSlave(Task.Task):
44
def __init__(self,action_name,env,normal=1,master=None):
45
Task.Task.__init__(self,env,normal)
48
self.display="* skipping "+self.inputs[0].name
49
def update_stat(self):
51
def runnable_status(self):
52
self.must_run=Task.Task.must_run(self)
56
def can_retrieve_cache(self,sig):
58
def create_task_cxx_new(self,node):
61
except AttributeError:
62
mm=TaskMaster("all_"+self.type_initials,self.env)
64
task=TaskSlave(self.type_initials,self.env,40,master=mm)
65
self.tasks.append(task)
68
task.set_outputs(node.change_ext('.o'))
69
self.compiled_tasks.append(task)
70
cc_str='${CC} ${CCFLAGS} ${CPPFLAGS} ${_CCINCFLAGS} ${_CCDEFFLAGS} -c ${SRC}'
71
Task.simple_task_type('all_cc',cc_str,'GREEN')
72
cpp_str='${CXX} ${CXXFLAGS} ${CPPFLAGS} ${_CXXINCFLAGS} ${_CXXDEFFLAGS} -c ${SRC}'
73
Task.simple_task_type('all_cpp',cpp_str,color='GREEN')
75
extension(EXT_C)(create_task_cxx_new)