summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2024-12-06 12:47:56 -0800
committerDylan Baker <dylan@pnwbakers.com>2025-10-20 15:15:53 -0700
commit8f21b6ea7f92ece7b59334bd9e762d57aac778ad (patch)
tree1e44f77ace976f8ba959ede162483019778e35b1
parent8b1c5c9944ba0b28524d11a8d274f81733e4149b (diff)
downloadmeson-8f21b6ea7f92ece7b59334bd9e762d57aac778ad.tar.gz
interpreter: port dependency language to typed_kwargs
-rw-r--r--mesonbuild/dependencies/base.py1
-rw-r--r--mesonbuild/dependencies/detect.py4
-rw-r--r--mesonbuild/dependencies/hdf5.py2
-rw-r--r--mesonbuild/dependencies/misc.py4
-rw-r--r--mesonbuild/dependencies/mpi.py2
-rw-r--r--mesonbuild/interpreter/kwargs.py1
-rw-r--r--mesonbuild/interpreter/type_checking.py2
7 files changed, 10 insertions, 6 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 96ec78159..50cb470ed 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -47,6 +47,7 @@ if T.TYPE_CHECKING:
cmake_package_version: str
components: T.List[str]
include_type: IncludeType
+ language: T.Optional[str]
_MissingCompilerBase = Compiler
else:
diff --git a/mesonbuild/dependencies/detect.py b/mesonbuild/dependencies/detect.py
index 6dc0299ca..92ee0c137 100644
--- a/mesonbuild/dependencies/detect.py
+++ b/mesonbuild/dependencies/detect.py
@@ -93,7 +93,7 @@ def find_external_dependency(name: str, env: 'Environment', kwargs: DependencyOb
if not isinstance(kwargs.get('method', ''), str):
raise DependencyException('Keyword "method" must be a string.')
lname = name.lower()
- if lname not in _packages_accept_language and 'language' in kwargs:
+ 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.')
@@ -130,7 +130,7 @@ def find_external_dependency(name: str, env: 'Environment', kwargs: DependencyOb
details = d.log_details()
if details:
details = '(' + details + ') '
- if 'language' in kwargs:
+ if kwargs.get('language') is not None:
details += 'for ' + d.language + ' '
# if the dependency was found
diff --git a/mesonbuild/dependencies/hdf5.py b/mesonbuild/dependencies/hdf5.py
index 2bb31807f..3d868bf30 100644
--- a/mesonbuild/dependencies/hdf5.py
+++ b/mesonbuild/dependencies/hdf5.py
@@ -146,7 +146,7 @@ class HDF5ConfigToolDependency(ConfigToolDependency):
@factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL})
def hdf5_factory(env: 'Environment', for_machine: 'MachineChoice',
kwargs: DependencyObjectKWs, methods: T.List[DependencyMethods]) -> T.List['DependencyGenerator']:
- language = T.cast('T.Optional[str]', kwargs.get('language'))
+ language = kwargs.get('language')
candidates: T.List['DependencyGenerator'] = []
if DependencyMethods.PKGCONFIG in methods:
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py
index 9f6746328..2b1871311 100644
--- a/mesonbuild/dependencies/misc.py
+++ b/mesonbuild/dependencies/misc.py
@@ -30,7 +30,7 @@ def netcdf_factory(env: 'Environment',
for_machine: 'mesonlib.MachineChoice',
kwargs: DependencyObjectKWs,
methods: T.List[DependencyMethods]) -> T.List['DependencyGenerator']:
- language = T.cast('T.Optional[str]', kwargs.get('language'))
+ language = kwargs.get('language')
if language is None:
language = 'c'
if language not in ('c', 'cpp', 'fortran'):
@@ -113,7 +113,7 @@ class OpenMPDependency(SystemDependency):
}
def __init__(self, environment: 'Environment', kwargs: DependencyObjectKWs) -> None:
- language = T.cast('T.Optional[str]', kwargs.get('language'))
+ language = kwargs.get('language')
super().__init__('openmp', environment, kwargs, language=language)
self.is_found = False
if self.clib_compiler.get_id() == 'nagfor':
diff --git a/mesonbuild/dependencies/mpi.py b/mesonbuild/dependencies/mpi.py
index 8d8ead86d..ce497372a 100644
--- a/mesonbuild/dependencies/mpi.py
+++ b/mesonbuild/dependencies/mpi.py
@@ -28,7 +28,7 @@ def mpi_factory(env: 'Environment',
for_machine: 'MachineChoice',
kwargs: DependencyObjectKWs,
methods: T.List[DependencyMethods]) -> T.List['DependencyGenerator']:
- language = T.cast('T.Optional[str]', kwargs.get('language'))
+ language = kwargs.get('language')
if language is None:
language = 'c'
if language not in {'c', 'cpp', 'fortran'}:
diff --git a/mesonbuild/interpreter/kwargs.py b/mesonbuild/interpreter/kwargs.py
index 6e524885d..dcdd39cb1 100644
--- a/mesonbuild/interpreter/kwargs.py
+++ b/mesonbuild/interpreter/kwargs.py
@@ -501,3 +501,4 @@ class FuncDependency(TypedDict):
default_options: T.Dict[OptionKey, options.ElementaryOptionValues]
fallback: T.Union[str, T.List[str], None]
include_type: IncludeType
+ language: T.Optional[str]
diff --git a/mesonbuild/interpreter/type_checking.py b/mesonbuild/interpreter/type_checking.py
index 20fa7c04d..e8752d55a 100644
--- a/mesonbuild/interpreter/type_checking.py
+++ b/mesonbuild/interpreter/type_checking.py
@@ -912,4 +912,6 @@ DEPENDENCY_KWS: T.List[KwargInfo] = [
KwargInfo('cmake_package_version', str, default='', since='0.57.0'),
KwargInfo('components', ContainerTypeInfo(list, str), listify=True, default=[], since='0.54.0'),
KwargInfo('fallback', (ContainerTypeInfo(list, str), str, NoneType), since='0.54.0'),
+ KwargInfo('language', (str, NoneType), convertor=lambda x: x.lower() if x is not None else x,
+ validator=lambda x: 'Must be a valid language if set' if (x is not None and x not in compilers.all_languages) else None),
]