meson: Extract flex version using a regex inside a script
authorNirbheek Chauhan <nirbheek@centricular.com>
Fri, 8 Feb 2019 11:12:43 +0000 (16:42 +0530)
committerNirbheek Chauhan <nirbheek@centricular.com>
Fri, 8 Feb 2019 11:24:10 +0000 (16:54 +0530)
Different builds of Flex on different platforms output different strings
in --version. For example:

macOS:
flex 2.5.35 Apple(flex-31)

Windows:
win_flex.exe 2.6.4
C:\Program Files (x86)\GnuWin32\bin\flex.EXE version 2.5.4

We need to look for a string that looks like a version, which means
a regex till https://github.com/mesonbuild/meson/issues/1609 is fixed.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/356

gst/parse/get_flex_version.py [new file with mode: 0644]
gst/parse/meson.build

diff --git a/gst/parse/get_flex_version.py b/gst/parse/get_flex_version.py
new file mode 100644 (file)
index 0000000..643c01c
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+
+import re
+import sys
+import subprocess
+
+flex = sys.argv[1]
+
+out = subprocess.check_output([flex, '--version'], universal_newlines=True,
+                              stderr=subprocess.STDOUT, stdin=subprocess.DEVNULL)
+print(re.search(r'(\d+\.\d+(\.\d+)?)', out).group())
index ac3b34d..a843398 100644 (file)
@@ -6,12 +6,9 @@ flex_cdata = configuration_data()
 flex_min_version='2.5.31'
 flex = find_program('flex', 'win_flex')
 
-flexversion_res = run_command([flex, '--version'])
-if flexversion_res.returncode() != 0
-  error('Could not get flex version (@0@)'.format(flexversion_res.stderr()))
-endif
-
-flexversion = flexversion_res.stdout().split('\n')[0].split(' ')[-1].strip()
+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