summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-04-01 10:09:03 -0700
committerEli Schwartz <eschwartz93@gmail.com>2025-04-02 12:40:51 -0400
commit1f4bb37372e39003e1aa0e3ec5739fb04f495c4f (patch)
treed9767ad4c435da302ea161c2abdf2863a007a0bc
parent5c3bde3eb817d1d8ca41ef97969072d92242d515 (diff)
downloadmeson-1f4bb37372e39003e1aa0e3ec5739fb04f495c4f.tar.gz
modules/cmake: Make fully type safe
Mostly this was just adding a few asserts for options, and one bug fix from the option refactor
-rw-r--r--mesonbuild/modules/cmake.py23
-rwxr-xr-xrun_mypy.py1
2 files changed, 17 insertions, 7 deletions
diff --git a/mesonbuild/modules/cmake.py b/mesonbuild/modules/cmake.py
index 1802584cb..e3154b05e 100644
--- a/mesonbuild/modules/cmake.py
+++ b/mesonbuild/modules/cmake.py
@@ -156,13 +156,17 @@ class CMakeSubproject(ModuleObject):
@typed_pos_args('cmake.subproject.include_directories', str)
def include_directories(self, state: ModuleState, args: T.Tuple[str], kwargs: TYPE_kwargs) -> build.IncludeDirs:
info = self._args_to_info(args[0])
- return self.get_variable(state, [info['inc']], kwargs)
+ inc = self.get_variable(state, [info['inc']], kwargs)
+ assert isinstance(inc, build.IncludeDirs), 'for mypy'
+ return inc
@noKwargs
@typed_pos_args('cmake.subproject.target', str)
def target(self, state: ModuleState, args: T.Tuple[str], kwargs: TYPE_kwargs) -> build.Target:
info = self._args_to_info(args[0])
- return self.get_variable(state, [info['tgt']], kwargs)
+ tgt = self.get_variable(state, [info['tgt']], kwargs)
+ assert isinstance(tgt, build.Target), 'for mypy'
+ return tgt
@noKwargs
@typed_pos_args('cmake.subproject.target_type', str)
@@ -305,7 +309,9 @@ class CmakeModule(ExtensionModule):
pkgroot = pkgroot_name = kwargs['install_dir']
if pkgroot is None:
- pkgroot = os.path.join(state.environment.coredata.optstore.get_value_for(OptionKey('libdir')), 'cmake', name)
+ libdir = state.environment.coredata.optstore.get_value_for(OptionKey('libdir'))
+ assert isinstance(libdir, str), 'for mypy'
+ pkgroot = os.path.join(libdir, 'cmake', name)
pkgroot_name = os.path.join('{libdir}', 'cmake', name)
template_file = os.path.join(self.cmake_root, 'Modules', f'BasicConfigVersion-{compatibility}.cmake.in')
@@ -376,7 +382,9 @@ class CmakeModule(ExtensionModule):
install_dir = kwargs['install_dir']
if install_dir is None:
- install_dir = os.path.join(state.environment.coredata.optstore.get_value_for(OptionKey('libdir')), 'cmake', name)
+ libdir = state.environment.coredata.optstore.get_value_for(OptionKey('libdir'))
+ assert isinstance(libdir, str), 'for mypy'
+ install_dir = os.path.join(libdir, 'cmake', name)
conf = kwargs['configuration']
if isinstance(conf, dict):
@@ -384,6 +392,7 @@ class CmakeModule(ExtensionModule):
conf = build.ConfigurationData(conf)
prefix = state.environment.coredata.optstore.get_value_for(OptionKey('prefix'))
+ assert isinstance(prefix, str), 'for mypy'
abs_install_dir = install_dir
if not os.path.isabs(abs_install_dir):
abs_install_dir = os.path.join(prefix, install_dir)
@@ -429,7 +438,7 @@ class CmakeModule(ExtensionModule):
'required': kwargs_['required'],
'options': kwargs_['options'],
'cmake_options': kwargs_['cmake_options'],
- 'default_options': {},
+ 'default_options': [],
'version': [],
}
subp = self.interpreter.do_subproject(dirname, kw, force_method='cmake')
@@ -443,5 +452,5 @@ class CmakeModule(ExtensionModule):
def subproject_options(self, state: ModuleState, args: TYPE_var, kwargs: TYPE_kwargs) -> CMakeSubprojectOptions:
return CMakeSubprojectOptions()
-def initialize(*args: T.Any, **kwargs: T.Any) -> CmakeModule:
- return CmakeModule(*args, **kwargs)
+def initialize(interp: Interpreter) -> CmakeModule:
+ return CmakeModule(interp)
diff --git a/run_mypy.py b/run_mypy.py
index afa5531cd..975232a48 100755
--- a/run_mypy.py
+++ b/run_mypy.py
@@ -57,6 +57,7 @@ modules = [
'mesonbuild/mlog.py',
'mesonbuild/msubprojects.py',
'mesonbuild/modules/__init__.py',
+ 'mesonbuild/modules/cmake.py',
'mesonbuild/modules/cuda.py',
'mesonbuild/modules/external_project.py',
'mesonbuild/modules/fs.py',