fakecc.py (1285B)
1 #! /usr/bin/env python 2 # encoding: utf-8 3 # DC 2008 4 # Thomas Nagy 2010 (ita) 5 6 import re 7 8 from waflib import Utils, Task, TaskGen, Logs 9 from TaskGen import feature, before, after, extension 10 from waflib.Tools import ccroot 11 12 IS_MODULE_R = re.compile('module ([a-z]*)') 13 USE_MODULE_R = re.compile('use ([a-z]*)') 14 15 @extension('.a') 16 def hook(self, node): 17 self.create_compiled_task('fakecc', node) 18 19 def ismodule(node): 20 deps = [] 21 for l in node.read().splitlines(): 22 m = IS_MODULE_R.match(l) 23 if m: 24 deps.append(m.group(1) + '.mod') 25 return deps 26 27 def usemodule(node): 28 deps = [] 29 for l in node.read().splitlines(): 30 m = USE_MODULE_R.match(l) 31 if m: 32 deps.append(m.group(1) + '.mod') 33 return deps 34 35 def compile(tsk): 36 tsk.outputs[0].write('compiled') 37 m = ismodule(tsk.inputs[0]) 38 if m: 39 print("%s declares module %s" % (tsk.inputs[0], m[0])) 40 t2 = open(m[0], 'w') 41 try: 42 t2.write('module compiled') 43 finally: 44 t2.close() 45 46 class fakecc(Task.Task): 47 color = 'YELLOW' 48 def run(self): 49 cmd = [] 50 if not len(self.outputs) == len(self.inputs) == 1: 51 pass 52 53 bnodes = self.outputs 54 m = usemodule(self.inputs[0]) 55 if m: 56 print("%s requires module %s" % (self.inputs[0].abspath(), m[0])) 57 #bnodes.append(self.generator.bld.bldnode.exclusive_build_node(m[0])) 58 59 compile(self) 60