summaryrefslogtreecommitdiff
path: root/gst/parse/meson.build
blob: 35ed6f2f40ca622e7d6ffe50ce52ee9d777ed9a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
cc = meson.get_compiler('c')

# Find flex, configure lex generator
flex_cdata = configuration_data()

flex_min_version='2.5.31'
flex = find_program('flex', 'win_flex')

get_flex_version = find_program('get_flex_version.py')
flexversion_res = run_command([get_flex_version, flex], check: true)
flexversion = flexversion_res.stdout().strip()
if flexversion.version_compare('<' + flex_min_version)
  error('flex version @0@ >= @1@: NO'.format(flexversion, flex_min_version))
else
  message('flex version @0@ >= @1@: YES'.format(flexversion, flex_min_version))
endif

flex_cdata.set('FLEX', flex.path())
if cc.get_id() == 'msvc'
  flex_cdata.set('FLEX_ARGS', '--nounistd')
else
  flex_cdata.set('FLEX_ARGS', '')
endif

gen_lex = configure_file(input : 'gen_lex.py.in',
  output : 'gen_lex.py',
  configuration : flex_cdata)

# Find bison, configure grammar generator
bison_parser_cdata = configuration_data()
bison_cdata = configuration_data()

bison_min_version='2.4'
bison = find_program('bison', 'win_bison')

bversion_res = run_command([bison, '--version'])
if bversion_res.returncode() != 0
  error('Could not get bison version (@0@)'.format(bversion_res.stderr()))
endif

bversion = bversion_res.stdout().split('\n')[0].split(' ')[-1].strip()
if bversion.version_compare('<' + bison_min_version)
  error('bison version @0@ >= @1@: NO'.format(bversion, bison_min_version))
else
  message('bison version @0@ >= @1@: YES'.format(bversion, bison_min_version))
endif

if bversion.version_compare('>' + '2.5')
  bison_parser_cdata.set('BISON_PURE_PARSER', '%define api.pure full')
else
  bison_parser_cdata.set('BISON_PURE_PARSER', '%pure-parser')
endif

gen_grammar_file = configure_file(input : 'grammar.y.in',
  output : 'grammar.y',
  configuration : bison_parser_cdata)

bison_cdata.set('BISON', bison.path())
bison_cdata.set('BISON_ARGS', '')

gen_grammar = configure_file(input : 'gen_grammar.py.in',
  output : 'gen_grammar.py',
  configuration : bison_cdata)

# Custom targets
parser = custom_target('parselex',
  input : 'parse.l',
  output : ['lex.priv_gst_parse_yy.c', 'parse_lex.h'],
  command : [python3, gen_lex, '@OUTPUT0@', '@OUTPUT1@', '@INPUT@', 'DUMMY']
)

grammar = custom_target('parsegrammar',
  input : gen_grammar_file,
  output : ['grammar.tab.c', 'grammar.tab.h'],
  command : [python3, gen_grammar, '@OUTPUT0@', '@OUTPUT1@', '@INPUT@'],
  depends : [parser],
)

gst_parse_sources += [parser, grammar]