diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2016-11-29 00:57:01 +0530 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2016-12-03 21:46:20 +0200 |
commit | e1c9d94708fe4b13986fa61aa3fa308f3b6e8a70 (patch) | |
tree | 6f6e57749addb4f687c6aba3f39a68f35a5c6e34 /mesonbuild/dependencies.py | |
parent | 2f804e9074f391e8efbf4a2deb9f1cc3ebaaaf2e (diff) | |
download | meson-e1c9d94708fe4b13986fa61aa3fa308f3b6e8a70.zip meson-e1c9d94708fe4b13986fa61aa3fa308f3b6e8a70.tar.gz meson-e1c9d94708fe4b13986fa61aa3fa308f3b6e8a70.tar.bz2 |
Allow many version conditions for pkg-config deps
Sometimes we want to restrict the acceptable versions to a list of
versions, or a smallest-version + largest-version, or both. For
instance, GStreamer's opencv plugin is only compatible with
3.1.0 >= opencv >= 2.3.0
Diffstat (limited to 'mesonbuild/dependencies.py')
-rw-r--r-- | mesonbuild/dependencies.py | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py index 4e87e4e..a092732 100644 --- a/mesonbuild/dependencies.py +++ b/mesonbuild/dependencies.py @@ -23,7 +23,7 @@ import re import os, stat, glob, subprocess, shutil import sysconfig from collections import OrderedDict -from . mesonlib import MesonException +from . mesonlib import MesonException, version_compare, version_compare_many from . import mlog from . import mesonlib from .environment import detect_cpu_family, for_windows @@ -135,22 +135,27 @@ class PkgConfigDependency(Dependency): self.modversion = 'none' return found_msg = ['%s dependency' % self.type_string, mlog.bold(name), 'found:'] - self.version_requirement = kwargs.get('version', None) - if self.version_requirement is None: + self.version_reqs = kwargs.get('version', None) + if self.version_reqs is None: self.is_found = True else: - if not isinstance(self.version_requirement, str): - raise DependencyException('Version argument must be string.') - self.is_found = mesonlib.version_compare(self.modversion, self.version_requirement) + if not isinstance(self.version_reqs, (str, list)): + raise DependencyException('Version argument must be string or list.') + (self.is_found, not_found, found) = \ + version_compare_many(self.modversion, self.version_reqs) if not self.is_found: - found_msg += [mlog.red('NO'), 'found {!r}'.format(self.modversion), - 'but need {!r}'.format(self.version_requirement)] + found_msg += [mlog.red('NO'), + 'found {!r} but need:'.format(self.modversion), + ', '.join(["'{}'".format(e) for e in not_found])] + if found: + found_msg += ['; matched:', + ', '.join(["'{}'".format(e) for e in found])] if not self.silent: mlog.log(*found_msg) if self.required: raise DependencyException( 'Invalid version of a dependency, needed %s %s found %s.' % - (name, self.version_requirement, self.modversion)) + (name, not_found, self.modversion)) return found_msg += [mlog.green('YES'), self.modversion] if not self.silent: @@ -301,7 +306,7 @@ class WxDependency(Dependency): self.modversion = out.decode().strip() version_req = kwargs.get('version', None) if version_req is not None: - if not mesonlib.version_compare(self.modversion, version_req): + if not version_compare(self.modversion, version_req, strict=True): mlog.log('Wxwidgets version %s does not fullfill requirement %s' %\ (self.modversion, version_req)) return |