aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2020-03-27 14:45:43 +0100
committerJussi Pakkanen <jpakkane@gmail.com>2020-03-28 00:56:58 +0200
commit4e52a0f7fd9f6490fe31781809f2871a918be458 (patch)
tree7fc7025fc24e084aa05e041652b340acf5ec9fdd
parent1bfd5e9dd21332e544f7234dda87b8efd02f06d6 (diff)
downloadmeson-4e52a0f7fd9f6490fe31781809f2871a918be458.zip
meson-4e52a0f7fd9f6490fe31781809f2871a918be458.tar.gz
meson-4e52a0f7fd9f6490fe31781809f2871a918be458.tar.bz2
boost: Better python module detection
-rw-r--r--mesonbuild/dependencies/boost.py34
-rw-r--r--test cases/frameworks/1 boost/meson.build18
2 files changed, 35 insertions, 17 deletions
diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py
index ad27d1d..d35069e 100644
--- a/mesonbuild/dependencies/boost.py
+++ b/mesonbuild/dependencies/boost.py
@@ -101,6 +101,11 @@ class BoostIncludeDir():
@functools.total_ordering
class BoostLibraryFile():
+ # Python libraries are special because of the included
+ # minor version in the module name.
+ boost_python_libs = ['boost_python', 'boost_numpy']
+ reg_python_mod_split = re.compile(r'(boost_[a-zA-Z]+)([0-9]*)')
+
reg_abi_tag = re.compile(r'^s?g?y?d?p?n?$')
reg_ver_tag = re.compile(r'^[0-9_]+$')
@@ -218,6 +223,33 @@ class BoostLibraryFile():
def is_boost(self) -> bool:
return any([self.name.startswith(x) for x in ['libboost_', 'boost_']])
+ def is_python_lib(self) -> bool:
+ return any([self.mod_name.startswith(x) for x in BoostLibraryFile.boost_python_libs])
+
+ def mod_name_matches(self, mod_name: str) -> bool:
+ if self.mod_name == mod_name:
+ return True
+ if not self.is_python_lib():
+ return False
+
+ m_cur = BoostLibraryFile.reg_python_mod_split.match(self.mod_name)
+ m_arg = BoostLibraryFile.reg_python_mod_split.match(mod_name)
+
+ if not m_cur or not m_arg:
+ return False
+
+ if m_cur.group(1) != m_arg.group(1):
+ return False
+
+ cur_vers = m_cur.group(2)
+ arg_vers = m_arg.group(2)
+
+ # Always assume python 2 if nothing is specified
+ if not arg_vers:
+ arg_vers = '2'
+
+ return cur_vers.startswith(arg_vers)
+
def version_matches(self, version_lib: str) -> bool:
# If no version tag is present, assume that it fits
if not self.version_lib or not version_lib:
@@ -361,7 +393,7 @@ class BoostDependency(ExternalDependency):
for mod in modules:
found = False
for l in f_libs:
- if l.mod_name == mod:
+ if l.mod_name_matches(mod):
selected_modules += [l]
found = True
break
diff --git a/test cases/frameworks/1 boost/meson.build b/test cases/frameworks/1 boost/meson.build
index ccfaa66..cb8c2df 100644
--- a/test cases/frameworks/1 boost/meson.build
+++ b/test cases/frameworks/1 boost/meson.build
@@ -29,28 +29,14 @@ python3dep = python3.dependency(required: host_machine.system() == 'linux', embe
# compile python 2/3 modules only if we found a corresponding python version
if(python2dep.found() and host_machine.system() == 'linux' and not s)
- if(dep.version().version_compare('>=1.67'))
- # if we have a new version of boost, we need to construct the module name based
- # on the installed version of python (and hope that they match the version boost
- # was compiled against)
- py2version_string = ''.join(python2dep.version().split('.'))
- bpython2dep = dependency('boost', static: s, modules : ['python' + py2version_string], required: false, disabler: true)
- else
- # if we have an older version of boost, we need to use the old module names
- bpython2dep = dependency('boost', static: s, modules : ['python'], required: false, disabler: true)
- endif
+ bpython2dep = dependency('boost', static: s, modules : ['python'], required: false, disabler: true)
else
python2dep = disabler()
bpython2dep = disabler()
endif
if(python3dep.found() and host_machine.system() == 'linux' and not s)
- if(dep.version().version_compare('>=1.67'))
- py3version_string = ''.join(python3dep.version().split('.'))
- bpython3dep = dependency('boost', static: s, modules : ['python' + py3version_string], required: false, disabler: true)
- else
- bpython3dep = dependency('boost', static: s, modules : ['python3'], required: false, disabler: true)
- endif
+ bpython3dep = dependency('boost', static: s, modules : ['python3'], required: false, disabler: true)
else
python3dep = disabler()
bpython3dep = disabler()