26 lines
813 B
Python
26 lines
813 B
Python
#! /usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
import Task
|
|
from TaskGen import extension
|
|
bison='${BISON} ${BISONFLAGS} ${SRC[0].abspath()} -o ${TGT[0].name}'
|
|
cls=Task.simple_task_type('bison',bison,'GREEN',ext_in='.yc .y .yy',ext_out='.c .cxx .h .l',shell=False)
|
|
def big_bison(self,node):
|
|
has_h='-d'in self.env['BISONFLAGS']
|
|
outs=[]
|
|
if node.name.endswith('.yc'):
|
|
outs.append(node.change_ext('.tab.cc'))
|
|
if has_h:
|
|
outs.append(node.change_ext('.tab.hh'))
|
|
else:
|
|
outs.append(node.change_ext('.tab.c'))
|
|
if has_h:
|
|
outs.append(node.change_ext('.tab.h'))
|
|
tsk=self.create_task('bison',node,outs)
|
|
tsk.cwd=node.bld_dir(tsk.env)
|
|
self.allnodes.append(outs[0])
|
|
def detect(conf):
|
|
bison=conf.find_program('bison',var='BISON',mandatory=True)
|
|
conf.env['BISONFLAGS']='-d'
|
|
|
|
extension(['.y','.yc','.yy'])(big_bison)
|