summaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreterobjects.py
diff options
context:
space:
mode:
authorAndrew McNulty <amcn102@gmail.com>2024-09-07 13:19:01 +0100
committerEli Schwartz <eschwartz93@gmail.com>2024-09-15 19:24:46 -0400
commit74dd77ed81c90e3655b3dff5bfe98410a85dd4f0 (patch)
treeda4bdd98f4db2ae70d6a87584ced877ebab5c8d6 /mesonbuild/interpreter/interpreterobjects.py
parent050b788ed8065901e57f7422a42921bc40ebac8f (diff)
downloadmeson-74dd77ed81c90e3655b3dff5bfe98410a85dd4f0.tar.gz
Prevent raw exception during project()
If a user imports a module and invokes a method on it, a raw Python exception is raised to the user. This commit adds a check to ensure that in this case an appropriate exception is raised instead. A test has been added to ensure that this exception is in fact raised on offending code. Fixes: #11393, #5134
Diffstat (limited to 'mesonbuild/interpreter/interpreterobjects.py')
-rw-r--r--mesonbuild/interpreter/interpreterobjects.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py
index 2cd55321b..1d6028285 100644
--- a/mesonbuild/interpreter/interpreterobjects.py
+++ b/mesonbuild/interpreter/interpreterobjects.py
@@ -12,7 +12,7 @@ from .. import options
from .. import build
from .. import mlog
-from ..modules import ModuleReturnValue, ModuleObject, ModuleState, ExtensionModule
+from ..modules import ModuleReturnValue, ModuleObject, ModuleState, ExtensionModule, NewExtensionModule
from ..backend.backends import TestProtocol
from ..interpreterbase import (
ContainerTypeInfo, KwargInfo, MesonOperator,
@@ -872,6 +872,10 @@ class ModuleObjectHolder(ObjectHolder[ModuleObject]):
args = flatten(args)
if not getattr(method, 'no-second-level-holder-flattening', False):
args, kwargs = resolve_second_level_holders(args, kwargs)
+ if not self.interpreter.active_projectname:
+ assert isinstance(modobj, (ExtensionModule, NewExtensionModule)), 'for mypy'
+ full_method_name = f'{modobj.INFO.name}.{method_name}'
+ raise mesonlib.MesonException(f'Module methods ({full_method_name}) cannot be invoked during project declaration.')
state = ModuleState(self.interpreter)
# Many modules do for example self.interpreter.find_program_impl(),
# so we have to ensure they use the current interpreter and not the one