waf: Allow to only generate lex and yacc.

In some applications, it's usefull if the files generated by lex or yacc
are not build automatically. With that it is for example possible to
create a wrapper source file that sets some defines before the generated
code is parsed.
This commit is contained in:
Christian Mauderer 2018-05-07 10:19:28 +02:00
parent 879eaa7c1a
commit 01855a5acd
2 changed files with 22 additions and 16 deletions

View File

@ -547,15 +547,17 @@ class RouteKeywordsFragmentComposer(BuildSystemFragmentComposer):
class LexFragmentComposer(BuildSystemFragmentComposer): class LexFragmentComposer(BuildSystemFragmentComposer):
def __init__(self, sym, dep, cflags = None, includes = None): def __init__(self, sym, dep, cflags = None, includes = None, build = True):
self.sym = sym self.sym = sym
self.dep = dep self.dep = dep
self.cflags, self.includes = _cflagsIncludes(cflags, includes) self.cflags, self.includes = _cflagsIncludes(cflags, includes)
self.build = build
def compose(self, path): def compose(self, path):
d = { 'file': path, d = { 'file': path,
'sym': self.sym, 'sym': self.sym,
'dep': self.dep } 'dep': self.dep,
'build': self.build }
if None not in self.cflags: if None not in self.cflags:
d['cflags'] = self.cflags d['cflags'] = self.cflags
if None not in self.includes: if None not in self.includes:
@ -564,15 +566,17 @@ class LexFragmentComposer(BuildSystemFragmentComposer):
class YaccFragmentComposer(BuildSystemFragmentComposer): class YaccFragmentComposer(BuildSystemFragmentComposer):
def __init__(self, sym, header, cflags = None, includes = None): def __init__(self, sym, header, cflags = None, includes = None, build = True):
self.sym = sym self.sym = sym
self.header = header self.header = header
self.cflags, self.includes = _cflagsIncludes(cflags, includes) self.cflags, self.includes = _cflagsIncludes(cflags, includes)
self.build = build
def compose(self, path): def compose(self, path):
d = { 'file': path, d = { 'file': path,
'sym': self.sym, 'sym': self.sym,
'header': self.header } 'header': self.header,
'build': self.build }
if None not in self.cflags: if None not in self.cflags:
d['cflags'] = self.cflags d['cflags'] = self.cflags
if None not in self.includes: if None not in self.includes:

View File

@ -361,12 +361,13 @@ class Builder(builder.ModuleManager):
bld(target = lex['file'][:-2]+ '.c', bld(target = lex['file'][:-2]+ '.c',
source = lex['file'], source = lex['file'],
rule = lex_rule) rule = lex_rule)
bld.objects(target = 'lex_%s' % (lex['sym']), if lex['build']:
features = 'c', bld.objects(target = 'lex_%s' % (lex['sym']),
cflags = cflags, features = 'c',
includes = lexIncludes + includes, cflags = cflags,
defines = defines + lexDefines, includes = lexIncludes + includes,
source = lex['file'][:-2] + '.c') defines = defines + lexDefines,
source = lex['file'][:-2] + '.c')
libbsd_use += ['lex_%s' % (lex['sym'])] libbsd_use += ['lex_%s' % (lex['sym'])]
# #
@ -398,12 +399,13 @@ class Builder(builder.ModuleManager):
bld(target = yaccFile[:-2] + '.c', bld(target = yaccFile[:-2] + '.c',
source = yaccFile, source = yaccFile,
rule = yacc_rule) rule = yacc_rule)
bld.objects(target = 'yacc_%s' % (yaccSym), if yacc['build']:
features = 'c', bld.objects(target = 'yacc_%s' % (yaccSym),
cflags = cflags, features = 'c',
includes = yaccIncludes + includes, cflags = cflags,
defines = defines + yaccDefines, includes = yaccIncludes + includes,
source = yaccFile[:-2] + '.c') defines = defines + yaccDefines,
source = yaccFile[:-2] + '.c')
libbsd_use += ['yacc_%s' % (yaccSym)] libbsd_use += ['yacc_%s' % (yaccSym)]
# #