gst/parse: define pure-parser depending on bison version
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Mon, 26 Aug 2019 10:48:28 +0000 (12:48 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 5 Nov 2019 15:25:23 +0000 (15:25 +0000)
After release bison 2.5 the declaration %pure-parser was deprecated
in favor of %define api.pure

Nonetheless, until bison 3.4, the declaration was treated as backward
compatibility, but now bison shows a warning:

  warning: deprecated directive, use ‘%define api.pure’

The patch's approach is to handle both directives according with the
used bison's version, by string replacement at source configuration
stage.

gst/parse/grammar.y.in [moved from gst/parse/grammar.y with 99% similarity]
gst/parse/meson.build

similarity index 99%
rename from gst/parse/grammar.y
rename to gst/parse/grammar.y.in
index 1aa77ed..0342324 100644 (file)
@@ -796,7 +796,7 @@ static int yyerror (void *scanner, graph_t *graph, const char *s);
 %lex-param { void *scanner }
 %parse-param { void *scanner }
 %parse-param { graph_t *graph }
-%pure-parser
+@BISON_PURE_PARSER@
 
 %start graph
 %%
index a843398..35ed6f2 100644 (file)
@@ -27,6 +27,7 @@ gen_lex = configure_file(input : 'gen_lex.py.in',
   configuration : flex_cdata)
 
 # Find bison, configure grammar generator
+bison_parser_cdata = configuration_data()
 bison_cdata = configuration_data()
 
 bison_min_version='2.4'
@@ -44,7 +45,15 @@ 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', '')
@@ -61,7 +70,7 @@ parser = custom_target('parselex',
 )
 
 grammar = custom_target('parsegrammar',
-  input : 'grammar.y',
+  input : gen_grammar_file,
   output : ['grammar.tab.c', 'grammar.tab.h'],
   command : [python3, gen_grammar, '@OUTPUT0@', '@OUTPUT1@', '@INPUT@'],
   depends : [parser],