diff options
author | Andrea Pappacoda <andrea@pappacoda.it> | 2022-02-01 15:58:04 +0100 |
---|---|---|
committer | Eli Schwartz <eschwartz93@gmail.com> | 2022-02-01 23:48:17 -0500 |
commit | a755750caefad4ba04b4d9c0d0ad0fbf356349a2 (patch) | |
tree | ff2dba2e2fe07883f3dcd99f70e4b4940d7128c1 | |
parent | a45446b6e583811545dbe001074397d66640101d (diff) | |
download | meson-a755750caefad4ba04b4d9c0d0ad0fbf356349a2.zip meson-a755750caefad4ba04b4d9c0d0ad0fbf356349a2.tar.gz meson-a755750caefad4ba04b4d9c0d0ad0fbf356349a2.tar.bz2 |
cmake: typed_kwargs for write_basic_package_version_file
-rw-r--r-- | mesonbuild/modules/cmake.py | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/mesonbuild/modules/cmake.py b/mesonbuild/modules/cmake.py index 0f325f5..e4c85a5 100644 --- a/mesonbuild/modules/cmake.py +++ b/mesonbuild/modules/cmake.py @@ -21,6 +21,7 @@ from . import ExtensionModule, ModuleReturnValue, ModuleObject from .. import build, mesonlib, mlog, dependencies from ..cmake import SingleTargetOptions, TargetOptions, cmake_defines_to_args from ..interpreter import SubprojectHolder +from ..interpreter.type_checking import NoneType, in_set_validator from ..interpreterbase import ( FeatureNew, FeatureNewKwargs, @@ -33,8 +34,18 @@ from ..interpreterbase import ( InvalidArguments, InterpreterException, + + typed_kwargs, + KwargInfo, ) +if T.TYPE_CHECKING: + class WriteBasicPackageVersionFile(T.TypedDict): + + compatibility: str + install_dir: T.Optional[str] + name: str + version: str COMPATIBILITIES = ['AnyNewerVersion', 'SameMajorVersion', 'SameMinorVersion', 'ExactVersion'] @@ -256,31 +267,26 @@ class CmakeModule(ExtensionModule): self.cmake_detected = True return True - @permittedKwargs({'version', 'name', 'compatibility', 'install_dir'}) - def write_basic_package_version_file(self, state, _args, kwargs): - version = kwargs.get('version', None) - if not isinstance(version, str): - raise mesonlib.MesonException('Version must be specified.') - - name = kwargs.get('name', None) - if not isinstance(name, str): - raise mesonlib.MesonException('Name not specified.') - - compatibility = kwargs.get('compatibility', 'AnyNewerVersion') - if not isinstance(compatibility, str): - raise mesonlib.MesonException('compatibility is not string.') - if compatibility not in COMPATIBILITIES: - raise mesonlib.MesonException('compatibility must be either AnyNewerVersion, SameMajorVersion or ExactVersion.') + @noPosargs + @typed_kwargs( + 'cmake.write_basic_package_version_file', + KwargInfo('compatibility', str, default='AnyNewerVersion', validator=in_set_validator(set(COMPATIBILITIES))), + KwargInfo('install_dir', (str, NoneType), default=None), + KwargInfo('name', str, required=True), + KwargInfo('version', str, required=True), + ) + def write_basic_package_version_file(self, state, args, kwargs: 'WriteBasicPackageVersionFile'): + compatibility = kwargs['compatibility'] + name = kwargs['name'] + version = kwargs['version'] if not self.detect_cmake(state): raise mesonlib.MesonException('Unable to find cmake') - pkgroot = pkgroot_name = kwargs.get('install_dir', None) + pkgroot = pkgroot_name = kwargs['install_dir'] if pkgroot is None: pkgroot = os.path.join(state.environment.coredata.get_option(mesonlib.OptionKey('libdir')), 'cmake', name) pkgroot_name = os.path.join('{libdir}', 'cmake', name) - if not isinstance(pkgroot, str): - raise mesonlib.MesonException('Install_dir must be a string.') template_file = os.path.join(self.cmake_root, 'Modules', f'BasicConfigVersion-{compatibility}.cmake.in') if not os.path.exists(template_file): |