summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2024-12-06 13:03:16 -0800
committerDylan Baker <dylan@pnwbakers.com>2025-10-20 15:15:53 -0700
commitac49d7e2a8183d4e68c9b006318c4ed4c2efabae (patch)
tree35ddf374d40aed3de187f940a23944f0cc56e9ac /mesonbuild
parentb7d2e1778c24057b4c20d87996568f6a72a46d73 (diff)
downloadmeson-ac49d7e2a8183d4e68c9b006318c4ed4c2efabae.tar.gz
interpreter: port dependency version to typed_kwargs
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/dependencies/base.py6
-rw-r--r--mesonbuild/dependencies/configtool.py8
-rw-r--r--mesonbuild/dependencies/detect.py2
-rw-r--r--mesonbuild/dependencies/dev.py9
-rw-r--r--mesonbuild/dependencies/misc.py2
-rw-r--r--mesonbuild/dependencies/qt.py4
-rw-r--r--mesonbuild/interpreter/kwargs.py1
-rw-r--r--mesonbuild/interpreter/type_checking.py1
-rw-r--r--mesonbuild/mdevenv.py2
9 files changed, 12 insertions, 23 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 58a40bd38..547beb61e 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -56,6 +56,7 @@ if T.TYPE_CHECKING:
private_headers: bool
required: bool
static: T.Optional[bool]
+ version: T.List[str]
_MissingCompilerBase = Compiler
else:
@@ -407,10 +408,7 @@ class ExternalDependency(Dependency):
self.name = type_name # default
self.is_found = False
self.language = language
- version_reqs = kwargs.get('version', None)
- if isinstance(version_reqs, str):
- version_reqs = [version_reqs]
- self.version_reqs = T.cast('T.Optional[T.List[str]]', version_reqs)
+ self.version_reqs = kwargs.get('version', [])
self.required = kwargs.get('required', True)
self.silent = T.cast('bool', kwargs.get('silent', False))
static = kwargs.get('static')
diff --git a/mesonbuild/dependencies/configtool.py b/mesonbuild/dependencies/configtool.py
index dca9e8c04..2761bfb5d 100644
--- a/mesonbuild/dependencies/configtool.py
+++ b/mesonbuild/dependencies/configtool.py
@@ -10,8 +10,6 @@ from .. import mlog
import re
import typing as T
-from mesonbuild import mesonlib
-
if T.TYPE_CHECKING:
from ..environment import Environment
from ..interpreter.type_checking import PkgConfigDefineType
@@ -49,11 +47,7 @@ class ConfigToolDependency(ExternalDependency):
if 'version_arg' in kwargs:
self.version_arg = kwargs['version_arg'] # type: ignore[typeddict-item]
- req_version_raw = kwargs.get('version', None)
- if req_version_raw is not None:
- req_version = mesonlib.stringlistify(req_version_raw)
- else:
- req_version = []
+ req_version = kwargs.get('version', [])
tool, version = self.find_config(req_version, kwargs.get('returncode_value', 0), exclude_paths=exclude_paths) # type: ignore[arg-type]
self.config = tool
self.is_found = self.report_config(version, req_version)
diff --git a/mesonbuild/dependencies/detect.py b/mesonbuild/dependencies/detect.py
index c1d335c3b..6095dd5a3 100644
--- a/mesonbuild/dependencies/detect.py
+++ b/mesonbuild/dependencies/detect.py
@@ -95,8 +95,6 @@ def find_external_dependency(name: str, env: 'Environment', kwargs: DependencyOb
lname = name.lower()
if lname not in _packages_accept_language and kwargs.get('language') is not None:
raise DependencyException(f'{name} dependency does not accept "language" keyword argument')
- if not isinstance(kwargs.get('version', ''), (str, list)):
- raise DependencyException('Keyword "Version" must be string or list.')
# display the dependency name with correct casing
display_name = display_name_map.get(lname, lname)
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index 62583880f..d9f8fb1ee 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -33,9 +33,6 @@ if T.TYPE_CHECKING:
from ..interpreter.type_checking import PkgConfigDefineType
from .base import DependencyObjectKWs
- class JNISystemDependencyKW(DependencyObjectKWs):
- version: T.Optional[str]
-
def get_shared_library_suffix(environment: 'Environment', for_machine: MachineChoice) -> str:
"""This is only guaranteed to work for languages that compile to machine
@@ -557,7 +554,7 @@ class ZlibSystemDependency(SystemDependency):
class JNISystemDependency(SystemDependency):
- def __init__(self, environment: 'Environment', kwargs: JNISystemDependencyKW):
+ def __init__(self, environment: 'Environment', kwargs: DependencyObjectKWs):
super().__init__('jni', environment, kwargs)
self.feature_since = ('0.62.0', '')
@@ -580,7 +577,7 @@ class JNISystemDependency(SystemDependency):
self.is_found = False
return
- if 'version' in kwargs and not version_compare_many(self.version, kwargs['version'])[0]:
+ if kwargs.get('version') and not version_compare_many(self.version, kwargs['version'])[0]:
mlog.error(f'Incorrect JDK version found ({self.version}), wanted {kwargs["version"]}')
self.is_found = False
return
@@ -685,7 +682,7 @@ packages['jni'] = JNISystemDependency
class JDKSystemDependency(JNISystemDependency):
- def __init__(self, environment: 'Environment', kwargs: JNISystemDependencyKW):
+ def __init__(self, environment: 'Environment', kwargs: DependencyObjectKWs):
super().__init__(environment, kwargs)
self.feature_since = ('0.59.0', '')
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py
index 672f58ae2..96337e0be 100644
--- a/mesonbuild/dependencies/misc.py
+++ b/mesonbuild/dependencies/misc.py
@@ -390,7 +390,7 @@ class CursesSystemDependency(SystemDependency):
self.version = f'{v_major}.{v_minor}'
# Check the version if possible, emit a warning if we can't
- req = T.cast('T.Iterable[str]', kwargs.get('version'))
+ req = kwargs.get('version', [])
if req:
if self.version:
self.is_found, *_ = mesonlib.version_compare_many(self.version, req)
diff --git a/mesonbuild/dependencies/qt.py b/mesonbuild/dependencies/qt.py
index 4ef430bca..9aef02ef4 100644
--- a/mesonbuild/dependencies/qt.py
+++ b/mesonbuild/dependencies/qt.py
@@ -261,9 +261,9 @@ class QmakeQtDependency(_QtBase, ConfigToolDependency, metaclass=abc.ABCMeta):
# is requested, add "">= 5, < 6", but if the user has ">= 5.6", don't
# lose that.
kwargs = kwargs.copy()
- _vers = mesonlib.listify(kwargs.get('version', []))
+ _vers = kwargs.get('version', [])
_vers.extend([f'>= {self.qtver}', f'< {int(self.qtver) + 1}'])
- kwargs['version'] = _vers # type: ignore[typeddict-unknown-key]
+ kwargs['version'] = _vers
ConfigToolDependency.__init__(self, name, env, kwargs)
if not self.found():
diff --git a/mesonbuild/interpreter/kwargs.py b/mesonbuild/interpreter/kwargs.py
index 2a0d1f867..5332067fd 100644
--- a/mesonbuild/interpreter/kwargs.py
+++ b/mesonbuild/interpreter/kwargs.py
@@ -510,3 +510,4 @@ class FuncDependency(ExtractRequired):
optional_modules: T.List[str]
private_headers: bool
static: T.Optional[bool]
+ version: T.List[str]
diff --git a/mesonbuild/interpreter/type_checking.py b/mesonbuild/interpreter/type_checking.py
index 6a7cfb86f..1ac0eb9ed 100644
--- a/mesonbuild/interpreter/type_checking.py
+++ b/mesonbuild/interpreter/type_checking.py
@@ -952,4 +952,5 @@ DEPENDENCY_KWS: T.List[KwargInfo] = [
KwargInfo('optional_modules', ContainerTypeInfo(list, str), listify=True, default=[]),
KwargInfo('private_headers', bool, default=False),
KwargInfo('static', (bool, NoneType)),
+ KwargInfo('version', ContainerTypeInfo(list, str), listify=True, default=[]),
]
diff --git a/mesonbuild/mdevenv.py b/mesonbuild/mdevenv.py
index 7298e846c..4ef87a700 100644
--- a/mesonbuild/mdevenv.py
+++ b/mesonbuild/mdevenv.py
@@ -84,7 +84,7 @@ def bash_completion_files(b: build.Build, install_data: 'InstallData') -> T.List
from .dependencies.pkgconfig import PkgConfigDependency
result = []
dep = PkgConfigDependency('bash-completion', b.environment,
- {'required': False, 'silent': True, 'version': '>=2.10'}) # type: ignore[typeddict-unknown-key]
+ {'required': False, 'silent': True, 'version': ['>=2.10']}) # type: ignore[typeddict-unknown-key]
if dep.found():
prefix = b.environment.coredata.optstore.get_value_for(OptionKey('prefix'))
assert isinstance(prefix, str), 'for mypy'