aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2021-06-17 00:26:50 +0200
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-06-18 23:48:33 +0200
commit34c28dc92cb4f28e32e633297e4b8a737228aae5 (patch)
treedbe99c4d0d76eca3b08797a751d1b81ce05fd928 /mesonbuild/modules
parent84a3e459a8618956eb3364900d2bd522a70b7fe7 (diff)
downloadmeson-34c28dc92cb4f28e32e633297e4b8a737228aae5.zip
meson-34c28dc92cb4f28e32e633297e4b8a737228aae5.tar.gz
meson-34c28dc92cb4f28e32e633297e4b8a737228aae5.tar.bz2
holders: remove unholder
Diffstat (limited to 'mesonbuild/modules')
-rw-r--r--mesonbuild/modules/__init__.py18
-rw-r--r--mesonbuild/modules/cmake.py17
-rw-r--r--mesonbuild/modules/gnome.py70
-rw-r--r--mesonbuild/modules/hotdoc.py11
-rw-r--r--mesonbuild/modules/i18n.py3
-rw-r--r--mesonbuild/modules/pkgconfig.py15
-rw-r--r--mesonbuild/modules/sourceset.py1
-rw-r--r--mesonbuild/modules/unstable_cuda.py11
-rw-r--r--mesonbuild/modules/unstable_rust.py11
-rw-r--r--mesonbuild/modules/unstable_simd.py4
-rw-r--r--mesonbuild/modules/windows.py12
11 files changed, 85 insertions, 88 deletions
diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py
index 69bb552..2b53de5 100644
--- a/mesonbuild/modules/__init__.py
+++ b/mesonbuild/modules/__init__.py
@@ -18,13 +18,12 @@
import os
from .. import build
-from ..mesonlib import unholder, relpath
+from ..mesonlib import relpath, HoldableObject
import typing as T
if T.TYPE_CHECKING:
from ..interpreter import Interpreter
- from ..interpreter.interpreterobjects import IncludeDirsHolder, ExternalProgramHolder
- from ..interpreterbase import TYPE_var, TYPE_nvar, TYPE_nkwargs
+ from ..interpreterbase import TYPE_var, TYPE_kwargs
from ..programs import ExternalProgram
class ModuleState:
@@ -61,7 +60,7 @@ class ModuleState:
self.target_machine = interpreter.builtin['target_machine'].held_object
self.current_node = interpreter.current_node
- def get_include_args(self, include_dirs: T.Iterable[T.Union[str, 'IncludeDirsHolder']], prefix: str = '-I') -> T.List[str]:
+ def get_include_args(self, include_dirs: T.Iterable[T.Union[str, build.IncludeDirs]], prefix: str = '-I') -> T.List[str]:
if not include_dirs:
return []
@@ -69,7 +68,7 @@ class ModuleState:
builddir = self.environment.get_build_dir()
dirs_str: T.List[str] = []
- for dirs in unholder(include_dirs):
+ for dirs in include_dirs:
if isinstance(dirs, str):
dirs_str += [f'{prefix}{dirs}']
continue
@@ -89,14 +88,17 @@ class ModuleState:
def find_program(self, prog: T.Union[str, T.List[str]], required: bool = True,
version_func: T.Optional[T.Callable[['ExternalProgram'], str]] = None,
- wanted: T.Optional[str] = None) -> 'ExternalProgramHolder':
+ wanted: T.Optional[str] = None) -> 'ExternalProgram':
return self._interpreter.find_program_impl(prog, required=required, version_func=version_func, wanted=wanted)
-class ModuleObject:
+class ModuleObject(HoldableObject):
"""Base class for all objects returned by modules
"""
def __init__(self) -> None:
- self.methods = {} # type: T.Dict[str, T.Callable[[ModuleState, T.List[TYPE_nvar], TYPE_nkwargs], T.Union[ModuleReturnValue, TYPE_var]]]
+ self.methods: T.Dict[
+ str,
+ T.Callable[[ModuleState, T.List[TYPE_var], TYPE_kwargs], T.Union[ModuleReturnValue, TYPE_var]]
+ ] = {}
class MutableModuleObject(ModuleObject):
pass
diff --git a/mesonbuild/modules/cmake.py b/mesonbuild/modules/cmake.py
index fac3b24..cb37edc 100644
--- a/mesonbuild/modules/cmake.py
+++ b/mesonbuild/modules/cmake.py
@@ -18,9 +18,9 @@ import typing as T
from . import ExtensionModule, ModuleReturnValue, ModuleObject
-from .. import build, mesonlib, mlog
+from .. import build, mesonlib, mlog, dependencies
from ..cmake import SingleTargetOptions, TargetOptions, cmake_defines_to_args
-from ..interpreter import ConfigurationDataHolder, SubprojectHolder, DependencyHolder
+from ..interpreter import ConfigurationDataObject, SubprojectHolder
from ..interpreterbase import (
FeatureNew,
FeatureNewKwargs,
@@ -32,6 +32,7 @@ from ..interpreterbase import (
noKwargs,
InvalidArguments,
+ InterpreterException,
)
from ..programs import ExternalProgram
@@ -109,11 +110,11 @@ class CMakeSubproject(ModuleObject):
def dependency(self, state, args, kwargs):
info = self._args_to_info(args)
orig = self.get_variable(state, [info['dep']], {})
- assert isinstance(orig, DependencyHolder)
- actual = orig.include_type_method([], {})
+ assert isinstance(orig, dependencies.Dependency)
+ actual = orig.include_type
if 'include_type' in kwargs and kwargs['include_type'] != actual:
mlog.debug('Current include type is {}. Converting to requested {}'.format(actual, kwargs['include_type']))
- return orig.as_system_method([kwargs['include_type']], {})
+ return orig.generate_system_dependency(kwargs['include_type'])
return orig
@noKwargs
@@ -351,7 +352,7 @@ class CmakeModule(ExtensionModule):
if 'configuration' not in kwargs:
raise mesonlib.MesonException('"configuration" not specified.')
conf = kwargs['configuration']
- if not isinstance(conf, ConfigurationDataHolder):
+ if not isinstance(conf, ConfigurationDataObject):
raise mesonlib.MesonException('Argument "configuration" is not of type configuration_data')
prefix = state.environment.coredata.get_option(mesonlib.OptionKey('prefix'))
@@ -365,7 +366,7 @@ class CmakeModule(ExtensionModule):
extra = PACKAGE_INIT_EXT.replace('@absInstallDir@', abs_install_dir)
extra = extra.replace('@installPrefix@', prefix)
- self.create_package_file(ifile_abs, ofile_abs, PACKAGE_RELATIVE_PATH, extra, conf.held_object)
+ self.create_package_file(ifile_abs, ofile_abs, PACKAGE_RELATIVE_PATH, extra, conf.conf_data)
conf.mark_used()
conffile = os.path.normpath(inputfile.relative_name())
@@ -389,7 +390,7 @@ class CmakeModule(ExtensionModule):
raise InterpreterException('"options" cannot be used together with "cmake_options"')
dirname = args[0]
subp = self.interpreter.do_subproject(dirname, 'cmake', kwargs)
- if not subp.held_object:
+ if not subp.found():
return subp
return CMakeSubproject(subp, dirname)
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index 0a72ad6..0ae1c70 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -30,7 +30,7 @@ from . import ExtensionModule
from . import ModuleReturnValue
from ..mesonlib import (
MachineChoice, MesonException, OrderedSet, Popen_safe, extract_as_list,
- join_args, unholder,
+ join_args, HoldableObject
)
from ..dependencies import Dependency, PkgConfigDependency, InternalDependency
from ..interpreterbase import noPosargs, noKwargs, permittedKwargs, FeatureNew, FeatureNewKwargs, FeatureDeprecatedKwargs
@@ -39,6 +39,7 @@ from ..build import CustomTarget, CustomTargetIndex, GeneratedList
if T.TYPE_CHECKING:
from ..compilers import Compiler
+ from ..interpreter import Interpreter
# gresource compilation is broken due to the way
# the resource compiler and Ninja clash about it
@@ -103,14 +104,13 @@ class GnomeModule(ExtensionModule):
def _get_dep(self, state, depname, native=False, required=True):
kwargs = {'native': native, 'required': required}
- holder = self.interpreter.func_dependency(state.current_node, [depname], kwargs)
- return holder.held_object
+ return self.interpreter.func_dependency(state.current_node, [depname], kwargs)
def _get_native_binary(self, state, name, depname, varname, required=True):
# Look in overrides in case glib/gtk/etc are built as subproject
prog = self.interpreter.program_from_overrides([name], [])
if prog is not None:
- return unholder(prog)
+ return prog
# Look in machine file
prog = state.environment.lookup_binary_entry(MachineChoice.HOST, name)
@@ -125,7 +125,7 @@ class GnomeModule(ExtensionModule):
return ExternalProgram(name, value)
# Normal program lookup
- return unholder(state.find_program(name, required=required))
+ return state.find_program(name, required=required)
@permittedKwargs({'glib_compile_schemas', 'gio_querymodules', 'gtk_update_icon_cache'})
@noPosargs
@@ -179,7 +179,7 @@ class GnomeModule(ExtensionModule):
# Validate dependencies
subdirs = []
depends = []
- for (ii, dep) in enumerate(unholder(dependencies)):
+ for (ii, dep) in enumerate(dependencies):
if isinstance(dep, mesonlib.File):
subdirs.append(dep.subdir)
elif isinstance(dep, (build.CustomTarget, build.CustomTargetIndex)):
@@ -323,7 +323,7 @@ class GnomeModule(ExtensionModule):
subdirs = []
for resfile in dep_files[:]:
resbasename = os.path.basename(resfile)
- for dep in unholder(dependencies):
+ for dep in dependencies:
if isinstance(dep, mesonlib.File):
if dep.fname != resbasename:
continue
@@ -399,7 +399,7 @@ class GnomeModule(ExtensionModule):
# require two args in order, such as -framework AVFoundation
external_ldflags_nodedup = []
gi_includes = OrderedSet()
- deps = mesonlib.unholder(mesonlib.listify(deps))
+ deps = mesonlib.listify(deps)
for dep in deps:
if isinstance(dep, Dependency):
@@ -409,7 +409,7 @@ class GnomeModule(ExtensionModule):
if isinstance(dep, InternalDependency):
cflags.update(dep.get_compile_args())
cflags.update(state.get_include_args(dep.include_directories))
- for lib in unholder(dep.libraries):
+ for lib in dep.libraries:
if isinstance(lib, build.SharedLibrary):
internal_ldflags.update(self._get_link_args(state, lib, depends, include_rpath))
libdepflags = self._get_dependencies_flags(lib.get_external_deps(), state, depends, include_rpath,
@@ -426,7 +426,7 @@ class GnomeModule(ExtensionModule):
external_ldflags.update(extdepflags[2])
external_ldflags_nodedup += extdepflags[3]
gi_includes.update(extdepflags[4])
- for source in unholder(dep.sources):
+ for source in dep.sources:
if isinstance(source, GirTarget):
gi_includes.update([os.path.join(state.environment.get_build_dir(),
source.get_subdir())])
@@ -480,9 +480,6 @@ class GnomeModule(ExtensionModule):
return cflags, internal_ldflags, external_ldflags, external_ldflags_nodedup, gi_includes
def _unwrap_gir_target(self, girtarget, state):
- while hasattr(girtarget, 'held_object'):
- girtarget = girtarget.held_object
-
if not isinstance(girtarget, (build.Executable, build.SharedLibrary,
build.StaticLibrary)):
raise MesonException('Gir target must be an executable or library')
@@ -512,8 +509,6 @@ class GnomeModule(ExtensionModule):
@functools.lru_cache(maxsize=None)
def _gir_has_option(self, option) -> bool:
exe = self.giscanner
- if hasattr(exe, 'held_object'):
- exe = exe.held_object
if isinstance(exe, OverrideProgram):
# Handle overridden g-ir-scanner
assert option in ['--extra-library', '--sources-top-dirs']
@@ -539,7 +534,7 @@ class GnomeModule(ExtensionModule):
link_with = mesonlib.extract_as_list(kwargs, 'link_with', pop = True)
for link in link_with:
- ret += self._get_link_args(state, link.held_object, depends,
+ ret += self._get_link_args(state, link, depends,
use_gir_args=True)
return ret
@@ -549,7 +544,7 @@ class GnomeModule(ExtensionModule):
if 'includes' in kwargs:
includes = mesonlib.extract_as_list(kwargs, 'includes', pop = True)
- for inc in unholder(includes):
+ for inc in includes:
if isinstance(inc, str):
ret += [f'--include={inc}']
elif isinstance(inc, GirTarget):
@@ -605,7 +600,7 @@ class GnomeModule(ExtensionModule):
def _scan_inc_dirs(self, kwargs):
ret = mesonlib.extract_as_list(kwargs, 'include_directories', pop = True)
for incd in ret:
- if not isinstance(incd.held_object, (str, build.IncludeDirs)):
+ if not isinstance(incd, (str, build.IncludeDirs)):
raise MesonException(
'Gir include dirs should be include_directories().')
return ret
@@ -708,7 +703,7 @@ class GnomeModule(ExtensionModule):
gir_filelist_filename = os.path.join(gir_filelist_dir, f'{ns}_{nsversion}_gir_filelist')
with open(gir_filelist_filename, 'w', encoding='utf-8') as gir_filelist:
- for s in unholder(libsources):
+ for s in libsources:
if isinstance(s, (build.CustomTarget, build.CustomTargetIndex)):
for custom_output in s.get_outputs():
gir_filelist.write(os.path.join(state.environment.get_build_dir(),
@@ -763,11 +758,11 @@ class GnomeModule(ExtensionModule):
# dependencies and also find the include directories needed for the
# typelib generation custom target below.
typelib_includes = []
- for dep in unholder(deps):
+ for dep in deps:
# Add a dependency on each GirTarget listed in dependencies and add
# the directory where it will be generated to the typelib includes
if isinstance(dep, InternalDependency):
- for source in unholder(dep.sources):
+ for source in dep.sources:
if isinstance(source, GirTarget) and source not in depends:
depends.append(source)
subdir = os.path.join(state.environment.get_build_dir(),
@@ -846,7 +841,7 @@ class GnomeModule(ExtensionModule):
langs_compilers = self._get_girtargets_langs_compilers(girtargets)
cflags, internal_ldflags, external_ldflags = self._get_langs_compilers_flags(state, langs_compilers)
deps = self._get_gir_targets_deps(girtargets)
- deps += mesonlib.unholder(extract_as_list(kwargs, 'dependencies', pop=True))
+ deps += extract_as_list(kwargs, 'dependencies', pop=True)
deps += [gir_dep]
typelib_includes = self._gather_typelib_includes_and_update_depends(state, deps, depends)
# ldflags will be misinterpreted by gir scanner (showing
@@ -898,7 +893,7 @@ class GnomeModule(ExtensionModule):
if fatal_warnings:
scan_command.append('--warn-error')
- generated_files = [unholder(f) for f in libsources if isinstance(unholder(f), (GeneratedList, CustomTarget, CustomTargetIndex))]
+ generated_files = [f for f in libsources if isinstance(f, (GeneratedList, CustomTarget, CustomTargetIndex))]
scan_target = self._make_gir_target(state, girfile, scan_command, generated_files, depends, kwargs)
@@ -1044,8 +1039,7 @@ class GnomeModule(ExtensionModule):
src_dirs = mesonlib.extract_as_list(kwargs, 'src_dir')
header_dirs = []
for src_dir in src_dirs:
- if hasattr(src_dir, 'held_object'):
- src_dir = src_dir.held_object
+ if isinstance(src_dir, HoldableObject):
if not isinstance(src_dir, build.IncludeDirs):
raise MesonException('Invalid keyword argument for src_dir.')
for inc_dir in src_dir.get_incdirs():
@@ -1068,7 +1062,7 @@ class GnomeModule(ExtensionModule):
for tool in ['scan', 'scangobj', 'mkdb', 'mkhtml', 'fixxref']:
program_name = 'gtkdoc-' + tool
program = state.find_program(program_name)
- path = program.held_object.get_path()
+ path = program.get_path()
args.append(f'--{program_name}={path}')
if namespace:
args.append('--namespace=' + namespace)
@@ -1082,7 +1076,7 @@ class GnomeModule(ExtensionModule):
depends = []
content_files = []
- for s in unholder(mesonlib.extract_as_list(kwargs, 'content_files')):
+ for s in mesonlib.extract_as_list(kwargs, 'content_files'):
if isinstance(s, (build.CustomTarget, build.CustomTargetIndex)):
depends.append(s)
for o in s.get_outputs():
@@ -1134,14 +1128,14 @@ class GnomeModule(ExtensionModule):
def _get_build_args(self, kwargs, state, depends):
args = []
- deps = mesonlib.unholder(extract_as_list(kwargs, 'dependencies'))
+ deps = extract_as_list(kwargs, 'dependencies')
cflags = []
cflags.extend(mesonlib.stringlistify(kwargs.pop('c_args', [])))
deps_cflags, internal_ldflags, external_ldflags, gi_includes = \
self._get_dependencies_flags(deps, state, depends, include_rpath=True)
inc_dirs = mesonlib.extract_as_list(kwargs, 'include_directories')
for incd in inc_dirs:
- if not isinstance(incd.held_object, (str, build.IncludeDirs)):
+ if not isinstance(incd, (str, build.IncludeDirs)):
raise MesonException(
'Gir include dirs should be include_directories().')
@@ -1678,7 +1672,7 @@ G_END_DECLS'''
vapi_includes = []
ret = []
remaining_args = []
- for arg in unholder(arg_list):
+ for arg in arg_list:
if isinstance(arg, InternalDependency):
targets = [t for t in arg.sources if isinstance(t, VapiTarget)]
for target in targets:
@@ -1752,11 +1746,11 @@ G_END_DECLS'''
for i in inputs:
if isinstance(i, str):
cmd.append(os.path.join(source_dir, i))
- elif hasattr(i, 'held_object') and isinstance(i.held_object, GirTarget):
- link_with += self._get_vapi_link_with(i.held_object)
+ elif isinstance(i, GirTarget):
+ link_with += self._get_vapi_link_with(i)
subdir = os.path.join(state.environment.get_build_dir(),
- i.held_object.get_subdir())
- gir_file = os.path.join(subdir, i.held_object.get_outputs()[0])
+ i.get_subdir())
+ gir_file = os.path.join(subdir, i.get_outputs()[0])
cmd.append(gir_file)
else:
raise MesonException('Input must be a str or GirTarget')
@@ -1791,4 +1785,10 @@ G_END_DECLS'''
return ModuleReturnValue(rv, created_values)
def initialize(*args, **kwargs):
- return GnomeModule(*args, **kwargs)
+ mod = GnomeModule(*args, **kwargs)
+ mod.interpreter.append_holder_map(GResourceTarget, interpreter.CustomTargetHolder)
+ mod.interpreter.append_holder_map(GResourceHeaderTarget, interpreter.CustomTargetHolder)
+ mod.interpreter.append_holder_map(GirTarget, interpreter.CustomTargetHolder)
+ mod.interpreter.append_holder_map(TypelibTarget, interpreter.CustomTargetHolder)
+ mod.interpreter.append_holder_map(VapiTarget, interpreter.CustomTargetHolder)
+ return mod
diff --git a/mesonbuild/modules/hotdoc.py b/mesonbuild/modules/hotdoc.py
index 90635e6..26026fb 100644
--- a/mesonbuild/modules/hotdoc.py
+++ b/mesonbuild/modules/hotdoc.py
@@ -105,7 +105,6 @@ class HotdocTargetBuilder:
self.cmd.extend([option, value])
def check_extra_arg_type(self, arg, value):
- value = getattr(value, 'held_object', value)
if isinstance(value, list):
for v in value:
self.check_extra_arg_type(arg, v)
@@ -188,7 +187,6 @@ class HotdocTargetBuilder:
def process_dependencies(self, deps):
cflags = set()
for dep in mesonlib.listify(ensure_list(deps)):
- dep = getattr(dep, "held_object", dep)
if isinstance(dep, InternalDependency):
inc_args = self.state.get_include_args(dep.include_directories)
cflags.update([self.replace_dirs_in_string(x)
@@ -232,7 +230,6 @@ class HotdocTargetBuilder:
def flatten_config_command(self):
cmd = []
for arg in mesonlib.listify(self.cmd, flatten=True):
- arg = getattr(arg, 'held_object', arg)
if isinstance(arg, mesonlib.File):
arg = arg.absolute_path(self.state.environment.get_source_dir(),
self.state.environment.get_build_dir())
@@ -371,7 +368,7 @@ class HotdocTargetHolder(CustomTargetHolder):
def config_path_method(self, *args, **kwargs):
conf = self.held_object.hotdoc_conf.absolute_path(self.interpreter.environment.source_dir,
self.interpreter.environment.build_dir)
- return self.interpreter.holderify(conf)
+ return conf
class HotdocTarget(build.CustomTarget):
@@ -422,7 +419,7 @@ class HotDocModule(ExtensionModule):
project_name = args[0]
builder = HotdocTargetBuilder(project_name, state, self.hotdoc, self.interpreter, kwargs)
target, install_script = builder.make_targets()
- targets = [HotdocTargetHolder(target, self.interpreter)]
+ targets = [target]
if install_script:
targets.append(install_script)
@@ -430,4 +427,6 @@ class HotDocModule(ExtensionModule):
def initialize(interpreter):
- return HotDocModule(interpreter)
+ mod = HotDocModule(interpreter)
+ mod.interpreter.append_holder_map(HotdocTarget, HotdocTargetHolder)
+ return mod
diff --git a/mesonbuild/modules/i18n.py b/mesonbuild/modules/i18n.py
index 98a8b0d..f10fdbe 100644
--- a/mesonbuild/modules/i18n.py
+++ b/mesonbuild/modules/i18n.py
@@ -108,7 +108,8 @@ class I18nModule(ExtensionModule):
kwargs['command'] = command
inputfile = kwargs['input']
- if hasattr(inputfile, 'held_object'):
+ # I have no idea why/how this if isinstance(inputfile, mesonlib.HoldableObject) works / used to work...
+ if isinstance(inputfile, mesonlib.HoldableObject):
ct = build.CustomTarget(kwargs['output'] + '_merge', state.subdir, state.subproject, kwargs)
else:
if isinstance(inputfile, list):
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py
index 13af3a6..f42c1e6 100644
--- a/mesonbuild/modules/pkgconfig.py
+++ b/mesonbuild/modules/pkgconfig.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import os, types
+import os
from pathlib import PurePath
from .. import build
@@ -22,7 +22,9 @@ from .. import mesonlib
from .. import mlog
from . import ModuleReturnValue
from . import ExtensionModule
-from ..interpreterbase import permittedKwargs, FeatureNew, FeatureNewKwargs
+from ..interpreterbase import permittedKwargs, FeatureNew, FeatureNewKwargs, TYPE_var, TYPE_kwargs
+
+import typing as T
already_warned_objs = set()
@@ -75,7 +77,7 @@ class DependenciesHelper:
def _process_reqs(self, reqs):
'''Returns string names of requirements'''
processed_reqs = []
- for obj in mesonlib.unholder(mesonlib.listify(reqs)):
+ for obj in mesonlib.listify(reqs):
if not isinstance(obj, str):
FeatureNew.single_use('pkgconfig.generate requirement from non-string object', '0.46.0', self.state.subproject)
if hasattr(obj, 'generated_pc'):
@@ -108,14 +110,13 @@ class DependenciesHelper:
def add_cflags(self, cflags):
self.cflags += mesonlib.stringlistify(cflags)
- def _process_libs(self, libs, public):
- libs = mesonlib.unholder(mesonlib.listify(libs))
+ def _process_libs(self, libs, public: bool):
+ libs = mesonlib.listify(libs)
libs = [x.get_preferred_library() if isinstance(x, build.BothLibraries) else x for x in libs]
processed_libs = []
processed_reqs = []
processed_cflags = []
for obj in libs:
- shared_library_only = getattr(obj, 'shared_library_only', False)
if hasattr(obj, 'pcdep'):
pcdeps = mesonlib.listify(obj.pcdep)
for d in pcdeps:
@@ -488,7 +489,7 @@ class PkgConfigModule(ExtensionModule):
FeatureNew.single_use('pkgconfig.generate implicit version keyword', '0.46.0', state.subproject)
elif len(args) == 1:
FeatureNew.single_use('pkgconfig.generate optional positional argument', '0.46.0', state.subproject)
- mainlib = getattr(args[0], 'held_object', args[0])
+ mainlib = args[0]
if not isinstance(mainlib, (build.StaticLibrary, build.SharedLibrary)):
raise mesonlib.MesonException('Pkgconfig_gen first positional argument must be a library object')
default_name = mainlib.name
diff --git a/mesonbuild/modules/sourceset.py b/mesonbuild/modules/sourceset.py
index e413e32..eea3dbd 100644
--- a/mesonbuild/modules/sourceset.py
+++ b/mesonbuild/modules/sourceset.py
@@ -101,7 +101,6 @@ class SourceSet(MutableModuleObject):
if_true = args
elif args:
raise InterpreterException('add_all called with both positional and keyword arguments')
- if_true = mesonlib.unholder(if_true)
keys, dependencies = self.check_conditions(when)
for s in if_true:
if not isinstance(s, SourceSet):
diff --git a/mesonbuild/modules/unstable_cuda.py b/mesonbuild/modules/unstable_cuda.py
index af65af3..a80f9ca 100644
--- a/mesonbuild/modules/unstable_cuda.py
+++ b/mesonbuild/modules/unstable_cuda.py
@@ -16,8 +16,7 @@ import typing as T
import re
from ..mesonlib import version_compare
-from ..interpreter import CompilerHolder
-from ..compilers import CudaCompiler
+from ..compilers import CudaCompiler, Compiler
from . import ModuleObject
@@ -83,7 +82,7 @@ class CudaModule(ModuleObject):
@permittedKwargs(['detected'])
def nvcc_arch_flags(self, state: 'ModuleState',
- args: T.Tuple[T.Union[CompilerHolder, CudaCompiler, str]],
+ args: T.Tuple[T.Union[Compiler, CudaCompiler, str]],
kwargs: T.Dict[str, T.Any]) -> T.List[str]:
nvcc_arch_args = self._validate_nvcc_arch_args(args, kwargs)
ret = self._nvcc_arch_flags(*nvcc_arch_args)[0]
@@ -91,7 +90,7 @@ class CudaModule(ModuleObject):
@permittedKwargs(['detected'])
def nvcc_arch_readable(self, state: 'ModuleState',
- args: T.Tuple[T.Union[CompilerHolder, CudaCompiler, str]],
+ args: T.Tuple[T.Union[Compiler, CudaCompiler, str]],
kwargs: T.Dict[str, T.Any]) -> T.List[str]:
nvcc_arch_args = self._validate_nvcc_arch_args(args, kwargs)
ret = self._nvcc_arch_flags(*nvcc_arch_args)[1]
@@ -105,16 +104,12 @@ class CudaModule(ModuleObject):
@staticmethod
def _detected_cc_from_compiler(c):
- if isinstance(c, CompilerHolder):
- c = c.compiler
if isinstance(c, CudaCompiler):
return c.detected_cc
return ''
@staticmethod
def _version_from_compiler(c):
- if isinstance(c, CompilerHolder):
- c = c.compiler
if isinstance(c, CudaCompiler):
return c.version
if isinstance(c, str):
diff --git a/mesonbuild/modules/unstable_rust.py b/mesonbuild/modules/unstable_rust.py
index f602e09..e5af2d7 100644
--- a/mesonbuild/modules/unstable_rust.py
+++ b/mesonbuild/modules/unstable_rust.py
@@ -109,7 +109,7 @@ class RustModule(ExtensionModule):
```
"""
name = args[0]
- base_target: BuildTarget = unholder(args[1])
+ base_target: BuildTarget = args[1]
if not base_target.uses_rust():
raise InterpreterException('Second positional argument to rustmod.test() must be a rust based target')
extra_args = kwargs['args']
@@ -129,7 +129,7 @@ class RustModule(ExtensionModule):
del extra_args[i]
break
- dependencies = [d.held_object for d in kwargs['dependencies']]
+ dependencies = [d for d in kwargs['dependencies']]
# We need to cast here, as currently these don't have protocol in them, but test itself does.
tkwargs = T.cast('_kwargs.FuncTest', kwargs.copy())
@@ -168,7 +168,7 @@ class RustModule(ExtensionModule):
header: 'SourceOutputs'
_deps: T.Sequence['SourceOutputs']
try:
- header, *_deps = unholder(self.interpreter.source_strings_to_files(listify(kwargs['input'])))
+ header, *_deps = self.interpreter.source_strings_to_files(listify(kwargs['input']))
except KeyError:
raise InvalidArguments('rustmod.bindgen() `input` argument must have at least one element.')
@@ -179,7 +179,7 @@ class RustModule(ExtensionModule):
if not isinstance(output, str):
raise InvalidArguments('rustmod.bindgen() `output` argument must be a string.')
- include_dirs: T.List[IncludeDirs] = typeslistify(unholder(listify(kwargs.get('include_directories', []))), IncludeDirs)
+ include_dirs: T.List[IncludeDirs] = typeslistify(listify(kwargs.get('include_directories', [])), IncludeDirs)
c_args: T.List[str] = stringlistify(listify(kwargs.get('c_args', [])))
bind_args: T.List[str] = stringlistify(listify(kwargs.get('args', [])))
@@ -198,8 +198,7 @@ class RustModule(ExtensionModule):
inc_strs.extend([f'-I{x}' for x in i.to_string_list(state.environment.get_source_dir())])
if self._bindgen_bin is None:
- # there's some bugs in the interpreter typeing.
- self._bindgen_bin = state.find_program('bindgen').held_object
+ self._bindgen_bin = state.find_program('bindgen')
name: str
if isinstance(header, File):
diff --git a/mesonbuild/modules/unstable_simd.py b/mesonbuild/modules/unstable_simd.py
index df5faa1..3339cea 100644
--- a/mesonbuild/modules/unstable_simd.py
+++ b/mesonbuild/modules/unstable_simd.py
@@ -54,11 +54,11 @@ class SimdModule(ExtensionModule):
for key, value in kwargs.items():
if key not in self.isets and key != 'compiler':
basic_kwargs[key] = value
- compiler = kwargs['compiler'].compiler
+ compiler = kwargs['compiler']
if not isinstance(compiler, compilers.compilers.Compiler):
raise mesonlib.MesonException('Compiler argument must be a compiler object.')
cdata = self.interpreter.func_configuration_data(None, [], {})
- conf = cdata.held_object
+ conf = cdata.conf_data
for iset in self.isets:
if iset not in kwargs:
continue
diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py
index 441fb9f..d322833 100644
--- a/mesonbuild/modules/windows.py
+++ b/mesonbuild/modules/windows.py
@@ -18,10 +18,9 @@ import re
from .. import mlog
from .. import mesonlib, build
-from ..mesonlib import MachineChoice, MesonException, extract_as_list, unholder
+from ..mesonlib import MachineChoice, MesonException, extract_as_list
from . import ModuleReturnValue
from . import ExtensionModule
-from ..interpreter import CustomTargetHolder
from ..interpreterbase import permittedKwargs, FeatureNewKwargs, flatten
from ..programs import ExternalProgram
@@ -86,11 +85,13 @@ class WindowsModule(ExtensionModule):
wrc_depend_files = extract_as_list(kwargs, 'depend_files', pop = True)
wrc_depends = extract_as_list(kwargs, 'depends', pop = True)
for d in wrc_depends:
- if isinstance(d, CustomTargetHolder):
- extra_args += state.get_include_args([d.outdir_include()])
+ if isinstance(d, build.CustomTarget):
+ extra_args += state.get_include_args([
+ build.IncludeDirs('', [], False, [os.path.join('@BUILD_ROOT@', self.interpreter.backend.get_target_dir(d))])
+ ])
inc_dirs = extract_as_list(kwargs, 'include_directories', pop = True)
for incd in inc_dirs:
- if not isinstance(incd.held_object, (str, build.IncludeDirs)):
+ if not isinstance(incd, (str, build.IncludeDirs)):
raise MesonException('Resource include dirs should be include_directories().')
extra_args += state.get_include_args(inc_dirs)
@@ -120,7 +121,6 @@ class WindowsModule(ExtensionModule):
for subsrc in src:
add_target(subsrc)
return
- src = unholder(src)
if isinstance(src, str):
name_formatted = src