meson: Extract flex version using a regex inside a script

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
This commit is contained in:
Nirbheek Chauhan 2019-02-08 16:42:43 +05:30
parent febfabb39f
commit c164b88ac1
2 changed files with 14 additions and 6 deletions

View file

@ -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())

View file

@ -6,12 +6,9 @@ flex_cdata = configuration_data()
flex_min_version='2.5.31' flex_min_version='2.5.31'
flex = find_program('flex', 'win_flex') flex = find_program('flex', 'win_flex')
flexversion_res = run_command([flex, '--version']) get_flex_version = find_program('get_flex_version.py')
if flexversion_res.returncode() != 0 flexversion_res = run_command([get_flex_version, flex], check: true)
error('Could not get flex version (@0@)'.format(flexversion_res.stderr())) flexversion = flexversion_res.stdout().strip()
endif
flexversion = flexversion_res.stdout().split('\n')[0].split(' ')[-1].strip()
if flexversion.version_compare('<' + flex_min_version) if flexversion.version_compare('<' + flex_min_version)
error('flex version @0@ >= @1@: NO'.format(flexversion, flex_min_version)) error('flex version @0@ >= @1@: NO'.format(flexversion, flex_min_version))
else else