cmake: typed_kwargs for write_basic_package_version_file
This commit is contained in:
parent
a45446b6e5
commit
a755750cae
|
@ -21,6 +21,7 @@ from . import ExtensionModule, ModuleReturnValue, ModuleObject
|
||||||
from .. import build, mesonlib, mlog, dependencies
|
from .. import build, mesonlib, mlog, dependencies
|
||||||
from ..cmake import SingleTargetOptions, TargetOptions, cmake_defines_to_args
|
from ..cmake import SingleTargetOptions, TargetOptions, cmake_defines_to_args
|
||||||
from ..interpreter import SubprojectHolder
|
from ..interpreter import SubprojectHolder
|
||||||
|
from ..interpreter.type_checking import NoneType, in_set_validator
|
||||||
from ..interpreterbase import (
|
from ..interpreterbase import (
|
||||||
FeatureNew,
|
FeatureNew,
|
||||||
FeatureNewKwargs,
|
FeatureNewKwargs,
|
||||||
|
@ -33,8 +34,18 @@ from ..interpreterbase import (
|
||||||
|
|
||||||
InvalidArguments,
|
InvalidArguments,
|
||||||
InterpreterException,
|
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']
|
COMPATIBILITIES = ['AnyNewerVersion', 'SameMajorVersion', 'SameMinorVersion', 'ExactVersion']
|
||||||
|
|
||||||
|
@ -256,31 +267,26 @@ class CmakeModule(ExtensionModule):
|
||||||
self.cmake_detected = True
|
self.cmake_detected = True
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@permittedKwargs({'version', 'name', 'compatibility', 'install_dir'})
|
@noPosargs
|
||||||
def write_basic_package_version_file(self, state, _args, kwargs):
|
@typed_kwargs(
|
||||||
version = kwargs.get('version', None)
|
'cmake.write_basic_package_version_file',
|
||||||
if not isinstance(version, str):
|
KwargInfo('compatibility', str, default='AnyNewerVersion', validator=in_set_validator(set(COMPATIBILITIES))),
|
||||||
raise mesonlib.MesonException('Version must be specified.')
|
KwargInfo('install_dir', (str, NoneType), default=None),
|
||||||
|
KwargInfo('name', str, required=True),
|
||||||
name = kwargs.get('name', None)
|
KwargInfo('version', str, required=True),
|
||||||
if not isinstance(name, str):
|
)
|
||||||
raise mesonlib.MesonException('Name not specified.')
|
def write_basic_package_version_file(self, state, args, kwargs: 'WriteBasicPackageVersionFile'):
|
||||||
|
compatibility = kwargs['compatibility']
|
||||||
compatibility = kwargs.get('compatibility', 'AnyNewerVersion')
|
name = kwargs['name']
|
||||||
if not isinstance(compatibility, str):
|
version = kwargs['version']
|
||||||
raise mesonlib.MesonException('compatibility is not string.')
|
|
||||||
if compatibility not in COMPATIBILITIES:
|
|
||||||
raise mesonlib.MesonException('compatibility must be either AnyNewerVersion, SameMajorVersion or ExactVersion.')
|
|
||||||
|
|
||||||
if not self.detect_cmake(state):
|
if not self.detect_cmake(state):
|
||||||
raise mesonlib.MesonException('Unable to find cmake')
|
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:
|
if pkgroot is None:
|
||||||
pkgroot = os.path.join(state.environment.coredata.get_option(mesonlib.OptionKey('libdir')), 'cmake', name)
|
pkgroot = os.path.join(state.environment.coredata.get_option(mesonlib.OptionKey('libdir')), 'cmake', name)
|
||||||
pkgroot_name = os.path.join('{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')
|
template_file = os.path.join(self.cmake_root, 'Modules', f'BasicConfigVersion-{compatibility}.cmake.in')
|
||||||
if not os.path.exists(template_file):
|
if not os.path.exists(template_file):
|
||||||
|
|
Loading…
Reference in New Issue