summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-08-02 17:51:14 -0700
committerDylan Baker <dylan@pnwbakers.com>2025-10-20 15:15:53 -0700
commita85514edffaf1bb23fa6b04e98d957f31d42c946 (patch)
tree5c9f3d1ddfad2568d298b1c3a7f3731d3e9761a4 /mesonbuild
parent820c7e36b1aa2390fe83a2c4b48b7e8647597c45 (diff)
downloadmeson-a85514edffaf1bb23fa6b04e98d957f31d42c946.tar.gz
interpreter: port dependency native to typed_kwargs
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/dependencies/base.py12
-rw-r--r--mesonbuild/dependencies/cmake.py10
-rw-r--r--mesonbuild/dependencies/cuda.py2
-rw-r--r--mesonbuild/dependencies/detect.py3
-rw-r--r--mesonbuild/dependencies/dev.py9
-rw-r--r--mesonbuild/dependencies/hdf5.py5
-rw-r--r--mesonbuild/interpreter/dependencyfallbacks.py7
-rw-r--r--mesonbuild/interpreter/interpreter.py3
-rw-r--r--mesonbuild/interpreter/kwargs.py1
-rw-r--r--mesonbuild/interpreter/type_checking.py1
-rw-r--r--mesonbuild/modules/gnome.py2
-rw-r--r--mesonbuild/modules/python.py2
12 files changed, 22 insertions, 35 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 425edd398..4705d699f 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -51,6 +51,7 @@ if T.TYPE_CHECKING:
main: bool
method: DependencyMethods
modules: T.List[str]
+ native: MachineChoice
_MissingCompilerBase = Compiler
else:
@@ -395,14 +396,7 @@ class InternalDependency(Dependency):
new_dep.ext_deps = [dep.get_as_shared(True) for dep in self.ext_deps]
return new_dep
-class HasNativeKwarg:
- def __init__(self, kwargs: DependencyObjectKWs):
- self.for_machine = self.get_for_machine_from_kwargs(kwargs)
-
- def get_for_machine_from_kwargs(self, kwargs: DependencyObjectKWs) -> MachineChoice:
- return MachineChoice.BUILD if kwargs.get('native', False) else MachineChoice.HOST
-
-class ExternalDependency(Dependency, HasNativeKwarg):
+class ExternalDependency(Dependency):
def __init__(self, type_name: DependencyTypeName, environment: 'Environment', kwargs: DependencyObjectKWs, language: T.Optional[str] = None):
Dependency.__init__(self, type_name, kwargs)
self.env = environment
@@ -420,7 +414,7 @@ class ExternalDependency(Dependency, HasNativeKwarg):
if not isinstance(self.static, bool):
raise DependencyException('Static keyword must be boolean')
# Is this dependency to be run on the build platform?
- HasNativeKwarg.__init__(self, kwargs)
+ self.for_machine = kwargs.get('native', MachineChoice.HOST)
self.clib_compiler = detect_compiler(self.name, environment, self.for_machine, self.language)
def get_compiler(self) -> T.Union['MissingCompiler', 'Compiler']:
diff --git a/mesonbuild/dependencies/cmake.py b/mesonbuild/dependencies/cmake.py
index e1bd6861c..94a1b1d04 100644
--- a/mesonbuild/dependencies/cmake.py
+++ b/mesonbuild/dependencies/cmake.py
@@ -4,7 +4,7 @@
from __future__ import annotations
from .base import ExternalDependency, DependencyException, DependencyTypeName
-from ..mesonlib import is_windows, MesonException, PerMachine, stringlistify, extract_as_list
+from ..mesonlib import is_windows, MesonException, PerMachine, stringlistify, extract_as_list, MachineChoice
from ..cmake import CMakeExecutor, CMakeTraceParser, CMakeException, CMakeToolchain, CMakeExecScope, check_cmake_args, resolve_cmake_trace_targets, cmake_is_debug
from .. import mlog
import importlib.resources
@@ -74,12 +74,8 @@ class CMakeDependency(ExternalDependency):
# Gather a list of all languages to support
self.language_list: T.List[str] = []
if language is None or force_use_global_compilers:
- compilers = None
- if kwargs.get('native', False):
- compilers = environment.coredata.compilers.build
- else:
- compilers = environment.coredata.compilers.host
-
+ for_machine = kwargs.get('native', MachineChoice.HOST)
+ compilers = environment.coredata.compilers[for_machine]
candidates = ['c', 'cpp', 'fortran', 'objc', 'objcxx']
self.language_list += [x for x in candidates if x in compilers]
else:
diff --git a/mesonbuild/dependencies/cuda.py b/mesonbuild/dependencies/cuda.py
index 317e1124d..ddfb2ea48 100644
--- a/mesonbuild/dependencies/cuda.py
+++ b/mesonbuild/dependencies/cuda.py
@@ -29,7 +29,7 @@ class CudaDependency(SystemDependency):
targets_dir = 'targets' # Directory containing CUDA targets.
def __init__(self, environment: 'Environment', kwargs: DependencyObjectKWs) -> None:
- for_machine = self.get_for_machine_from_kwargs(kwargs)
+ for_machine = kwargs.get('native', mesonlib.MachineChoice.HOST)
compilers = environment.coredata.compilers[for_machine]
machine = environment.machines[for_machine]
language = self._detect_language(compilers)
diff --git a/mesonbuild/dependencies/detect.py b/mesonbuild/dependencies/detect.py
index db5afeb82..1b5cf7996 100644
--- a/mesonbuild/dependencies/detect.py
+++ b/mesonbuild/dependencies/detect.py
@@ -103,8 +103,7 @@ def find_external_dependency(name: str, env: 'Environment', kwargs: DependencyOb
# display the dependency name with correct casing
display_name = display_name_map.get(lname, lname)
- for_machine = MachineChoice.BUILD if kwargs.get('native', False) else MachineChoice.HOST
-
+ for_machine = kwargs.get('native', MachineChoice.HOST)
type_text = PerMachine('Build-time', 'Run-time')[for_machine] + ' dependency'
# build a list of dependency methods to try
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index bc692ef42..4dcd5eb70 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -197,7 +197,7 @@ class LLVMDependencyConfigTool(ConfigToolDependency):
# of bits in the isa that llvm targets, for example, on x86_64
# and aarch64 the name will be llvm-config-64, on x86 and arm
# it will be llvm-config-32.
- if environment.machines[self.get_for_machine_from_kwargs(kwargs)].is_64_bit:
+ if environment.machines[kwargs.get('native', mesonlib.MachineChoice.HOST)].is_64_bit:
self.tools.append('llvm-config-64')
else:
self.tools.append('llvm-config-32')
@@ -389,11 +389,8 @@ class LLVMDependencyCMake(CMakeDependency):
self.llvm_modules = kwargs.get('modules', [])
self.llvm_opt_modules = stringlistify(extract_as_list(kwargs, 'optional_modules')) # type: ignore[arg-type]
- compilers = None
- if kwargs.get('native', False):
- compilers = env.coredata.compilers.build
- else:
- compilers = env.coredata.compilers.host
+ for_machine = kwargs.get('native', mesonlib.MachineChoice.HOST)
+ compilers = env.coredata.compilers[for_machine]
if not compilers or not {'c', 'cpp'}.issubset(compilers):
# Initialize basic variables
ExternalDependency.__init__(self, DependencyTypeName('cmake'), env, kwargs)
diff --git a/mesonbuild/dependencies/hdf5.py b/mesonbuild/dependencies/hdf5.py
index 3d868bf30..be58b6db8 100644
--- a/mesonbuild/dependencies/hdf5.py
+++ b/mesonbuild/dependencies/hdf5.py
@@ -9,7 +9,7 @@ import os
import re
from pathlib import Path
-from ..mesonlib import OrderedSet, join_args
+from ..mesonlib import OrderedSet, join_args, MachineChoice
from .base import DependencyException, DependencyMethods
from .configtool import ConfigToolDependency
from .detect import packages
@@ -20,7 +20,6 @@ import typing as T
if T.TYPE_CHECKING:
from .factory import DependencyGenerator
from ..environment import Environment
- from ..mesonlib import MachineChoice
from .base import DependencyObjectKWs
@@ -100,7 +99,7 @@ class HDF5ConfigToolDependency(ConfigToolDependency):
raise DependencyException('How did you get here?')
# We need this before we call super()
- for_machine = self.get_for_machine_from_kwargs(kwargs)
+ for_machine = kwargs.get('native', MachineChoice.HOST)
nkwargs = kwargs.copy()
nkwargs['tools'] = tools # type: ignore[typeddict-unknown-key]
diff --git a/mesonbuild/interpreter/dependencyfallbacks.py b/mesonbuild/interpreter/dependencyfallbacks.py
index f980ef111..c9b762b0c 100644
--- a/mesonbuild/interpreter/dependencyfallbacks.py
+++ b/mesonbuild/interpreter/dependencyfallbacks.py
@@ -19,6 +19,7 @@ import typing as T
if T.TYPE_CHECKING:
from .interpreter import Interpreter
from ..interpreterbase import TYPE_nkwargs, TYPE_nvar
+ from ..mesonlib import MachineChoice
from .interpreterobjects import SubprojectHolder
@@ -94,7 +95,7 @@ class DependencyFallbacksHolder(MesonInterpreterObject):
self._handle_featurenew_dependencies(name)
dep = dependencies.find_external_dependency(name, self.environment, kwargs)
if dep.found():
- for_machine = self.interpreter.machine_from_native_kwarg(kwargs)
+ for_machine = T.cast('MachineChoice', kwargs['native'])
identifier = dependencies.get_dep_identifier(name, kwargs)
self.coredata.deps[for_machine].put(identifier, dep)
return dep
@@ -209,7 +210,7 @@ class DependencyFallbacksHolder(MesonInterpreterObject):
# of None in the case the dependency is cached as not-found, or if cached
# version does not match. In that case we don't want to continue with
# other candidates.
- for_machine = self.interpreter.machine_from_native_kwarg(kwargs)
+ for_machine = T.cast('MachineChoice', kwargs['native'])
identifier = dependencies.get_dep_identifier(name, kwargs)
wanted_vers = stringlistify(kwargs.get('version', []))
@@ -361,7 +362,7 @@ class DependencyFallbacksHolder(MesonInterpreterObject):
# Override this dependency to have consistent results in subsequent
# dependency lookups.
for name in self.names:
- for_machine = self.interpreter.machine_from_native_kwarg(kwargs)
+ for_machine = T.cast('MachineChoice', kwargs['native'])
identifier = dependencies.get_dep_identifier(name, kwargs)
if identifier not in self.build.dependency_overrides[for_machine]:
self.build.dependency_overrides[for_machine][identifier] = \
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 8d349a4ac..211af2b2e 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -592,8 +592,7 @@ class Interpreter(InterpreterBase, HoldableObject):
continue
if len(di) == 1:
FeatureNew.single_use('stdlib without variable name', '0.56.0', self.subproject, location=self.current_node)
- kwargs = {'native': for_machine is MachineChoice.BUILD,
- }
+ kwargs: dependencies.base.DependencyObjectKWs = {'native': for_machine}
name = l + '_stdlib'
df = DependencyFallbacksHolder(self, [name])
df.set_fallback(di)
diff --git a/mesonbuild/interpreter/kwargs.py b/mesonbuild/interpreter/kwargs.py
index 5892a79b5..b82a3eec5 100644
--- a/mesonbuild/interpreter/kwargs.py
+++ b/mesonbuild/interpreter/kwargs.py
@@ -505,3 +505,4 @@ class FuncDependency(TypedDict):
main: bool
method: DependencyMethods
modules: T.List[str]
+ native: MachineChoice
diff --git a/mesonbuild/interpreter/type_checking.py b/mesonbuild/interpreter/type_checking.py
index cba97e64c..8e20b7e4f 100644
--- a/mesonbuild/interpreter/type_checking.py
+++ b/mesonbuild/interpreter/type_checking.py
@@ -936,6 +936,7 @@ DEPENDENCY_KWS: T.List[KwargInfo] = [
DEFAULT_OPTIONS.evolve(since='0.38.0'),
DEPENDENCY_METHOD_KW,
INCLUDE_TYPE,
+ NATIVE_KW,
KwargInfo('allow_fallback', (bool, NoneType), since='0.56.0'),
KwargInfo('cmake_args', ContainerTypeInfo(list, str), listify=True, default=[], since='0.50.0'),
KwargInfo('cmake_module_path', ContainerTypeInfo(list, str), listify=True, default=[], since='0.50.0'),
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index b1fe250da..fff859c0f 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -283,7 +283,7 @@ class GnomeModule(ExtensionModule):
def _get_native_glib_version(self, state: 'ModuleState') -> str:
if self.native_glib_version is None:
glib_dep = PkgConfigDependency('glib-2.0', state.environment,
- {'native': True, 'required': False}) # type: ignore[typeddict-unknown-key]
+ {'native': MachineChoice.BUILD, 'required': False}) # type: ignore[typeddict-unknown-key]
if glib_dep.found():
self.native_glib_version = glib_dep.get_version()
else:
diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
index 1bf02fe76..3cebdb33c 100644
--- a/mesonbuild/modules/python.py
+++ b/mesonbuild/modules/python.py
@@ -247,7 +247,7 @@ class PythonInstallation(_ExternalProgramHolder['PythonExternalProgram']):
return '0x{:02x}{:02x}0000'.format(major, minor)
def _dependency_method_impl(self, kwargs: DependencyObjectKWs) -> Dependency:
- for_machine = self.interpreter.machine_from_native_kwarg(kwargs)
+ for_machine = kwargs.get('native', MachineChoice.HOST)
identifier = get_dep_identifier(self._full_path(), kwargs)
dep = self.interpreter.coredata.deps[for_machine].get(identifier)