aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreter.py
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2022-07-14 12:59:48 -0700
committerEli Schwartz <eschwartz93@gmail.com>2022-08-17 16:25:36 -0400
commit6843f56f6b8e71e75c287de31686913eea5e4a44 (patch)
treea92e933d88d48dd2bfd4a1fc2bb652296f053332 /mesonbuild/interpreter/interpreter.py
parent2801ead6d3a144f3cf7ae03f61bb463c7aeac0a9 (diff)
downloadmeson-6843f56f6b8e71e75c287de31686913eea5e4a44.zip
meson-6843f56f6b8e71e75c287de31686913eea5e4a44.tar.gz
meson-6843f56f6b8e71e75c287de31686913eea5e4a44.tar.bz2
modules: use module level information about new and deprecation
Instead of using FeatureNew/FeatureDeprecated in the module. The goal here is to be able to handle information about modules in a single place, instead of having to handle it separately. Each module simply defines some metadata, and then the interpreter handles the rest.
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r--mesonbuild/interpreter/interpreter.py15
1 files changed, 9 insertions, 6 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index c897494..fef8f4b 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -599,7 +599,7 @@ class Interpreter(InterpreterBase, HoldableObject):
dep = df.lookup(kwargs, force_fallback=True)
self.build.stdlibs[for_machine][l] = dep
- def _import_module(self, modname: str, required: bool) -> NewExtensionModule:
+ def _import_module(self, modname: str, required: bool, node: mparser.BaseNode) -> NewExtensionModule:
if modname in self.modules:
return self.modules[modname]
try:
@@ -607,11 +607,15 @@ class Interpreter(InterpreterBase, HoldableObject):
except ImportError:
if required:
raise InvalidArguments(f'Module "{modname}" does not exist')
- ext_module = NotFoundExtensionModule()
+ ext_module = NotFoundExtensionModule(modname)
else:
ext_module = module.initialize(self)
assert isinstance(ext_module, (ExtensionModule, NewExtensionModule))
self.build.modules.append(modname)
+ if ext_module.INFO.added:
+ FeatureNew.single_use(f'module {ext_module.INFO.name}', ext_module.INFO.added, self.subproject, location=node)
+ if ext_module.INFO.deprecated:
+ FeatureDeprecated.single_use(f'module {ext_module.INFO.name}', ext_module.INFO.deprecated, self.subproject, location=node)
self.modules[modname] = ext_module
return ext_module
@@ -627,20 +631,19 @@ class Interpreter(InterpreterBase, HoldableObject):
modname = args[0]
disabled, required, _ = extract_required_kwarg(kwargs, self.subproject)
if disabled:
- return NotFoundExtensionModule()
+ return NotFoundExtensionModule(modname)
if modname.startswith('unstable-'):
plainname = modname.split('-', 1)[1]
try:
# check if stable module exists
- mod = self._import_module(plainname, required)
- # XXX: this is actually not helpful, since it doesn't do a version check
+ mod = self._import_module(plainname, required, node)
mlog.warning(f'Module {modname} is now stable, please use the {plainname} module instead.')
return mod
except InvalidArguments:
mlog.warning(f'Module {modname} has no backwards or forwards compatibility and might not exist in future releases.', location=node)
modname = 'unstable_' + plainname
- return self._import_module(modname, required)
+ return self._import_module(modname, required, node)
@typed_pos_args('files', varargs=str)
@noKwargs