aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/modules/gnome.py100
1 files changed, 57 insertions, 43 deletions
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index e17a50d..08ea2ad 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -31,9 +31,9 @@ from .. import mesonlib
from .. import mlog
from ..build import CustomTarget, CustomTargetIndex, GeneratedList, InvalidArguments
from ..dependencies import Dependency, PkgConfigDependency, InternalDependency
-from ..interpreter.type_checking import DEPEND_FILES_KW, INSTALL_KW, NoneType, in_set_validator
-from ..interpreterbase import noPosargs, noKwargs, permittedKwargs, FeatureNew, FeatureDeprecatedKwargs
-from ..interpreterbase import typed_kwargs, KwargInfo, ContainerTypeInfo, FeatureDeprecated
+from ..interpreter.type_checking import DEPENDS_KW, DEPEND_FILES_KW, INSTALL_KW, NoneType, in_set_validator
+from ..interpreterbase import noPosargs, noKwargs, permittedKwargs, FeatureNew, FeatureDeprecated
+from ..interpreterbase import typed_kwargs, KwargInfo, ContainerTypeInfo
from ..interpreterbase.decorators import typed_pos_args
from ..mesonlib import (
MachineChoice, MesonException, OrderedSet, Popen_safe, join_args,
@@ -139,6 +139,23 @@ if T.TYPE_CHECKING:
docbook: T.Optional[str]
autocleanup: Literal['all', 'none', 'objects', 'default']
+ class GenMarshal(TypedDict):
+
+ build_always: T.Optional[str]
+ build_always_stale: T.Optional[bool]
+ build_by_default: T.Optional[bool]
+ depend_files: T.List[mesonlib.File]
+ extra_args: T.List[str]
+ install_dir: T.List[T.Union[str, bool]]
+ install_header: bool
+ internal: T.Optional[str]
+ nostdinc: T.Optional[str]
+ prefix: T.Optional[str]
+ skip_source: T.Optional[str]
+ sources: T.List[str]
+ stdinc: T.Optional[str]
+ valist_marshallers: T.Optional[str]
+
# Differs from the CustomTarget version in that it straight defaults to True
_BUILD_BY_DEFAULT: KwargInfo[bool] = KwargInfo(
'build_by_default', bool, default=True,
@@ -1690,50 +1707,51 @@ class GnomeModule(ExtensionModule):
# https://github.com/mesonbuild/meson/issues/973
absolute_paths=True)
- @permittedKwargs({'sources', 'prefix', 'install_header', 'install_dir', 'stdinc',
- 'nostdinc', 'internal', 'skip_source', 'valist_marshallers',
- 'extra_args', 'depends', 'depend_files'})
@typed_pos_args('gnome.genmarshal', str)
- def genmarshal(self, state: 'ModuleState', args: T.Tuple[str], kwargs) -> ModuleReturnValue:
+ @typed_kwargs(
+ 'gnome.genmarshal',
+ DEPEND_FILES_KW.evolve(since='0.61.0'),
+ DEPENDS_KW.evolve(since='0.61.0'),
+ INSTALL_KW.evolve(name='install_header'),
+ KwargInfo('extra_args', ContainerTypeInfo(list, str), listify=True),
+ KwargInfo('install_dir', (str, NoneType)),
+ KwargInfo('internal', (str, NoneType)),
+ KwargInfo('nostdinc', (str, NoneType)),
+ KwargInfo('prefix', (str, NoneType)),
+ KwargInfo('skip_source', (str, NoneType)),
+ KwargInfo('sources', ContainerTypeInfo(list, str, allow_empty=False), listify=True, required=True),
+ KwargInfo('stdinc', (str, NoneType)),
+ KwargInfo('valist_marshallers', (str, NoneType)),
+ )
+ def genmarshal(self, state: 'ModuleState', args: T.Tuple[str], kwargs: 'GenMarshal') -> ModuleReturnValue:
output = args[0]
-
- if 'sources' not in kwargs:
- raise MesonException('Missing keyword argument "sources".')
- sources = kwargs.pop('sources')
- if isinstance(sources, str):
- sources = [sources]
- elif not isinstance(sources, list):
- raise MesonException(
- 'Sources keyword argument must be a string or array.')
+ sources = kwargs['sources']
new_genmarshal = mesonlib.version_compare(self._get_native_glib_version(state), '>= 2.53.3')
- cmd = [state.find_program('glib-genmarshal')]
- known_kwargs = ['internal', 'nostdinc', 'skip_source', 'stdinc',
- 'valist_marshallers', 'extra_args']
- known_custom_target_kwargs = ['build_always', 'depends',
- 'depend_files', 'install_dir',
- 'install_header']
- for arg, value in kwargs.items():
- if arg == 'prefix':
- cmd += ['--prefix', value]
- elif arg == 'extra_args':
- if new_genmarshal:
- cmd += mesonlib.stringlistify(value)
- else:
- mlog.warning('The current version of GLib does not support extra arguments \n'
- 'for glib-genmarshal. You need at least GLib 2.53.3. See ',
- mlog.bold('https://github.com/mesonbuild/meson/pull/2049'))
- elif arg in known_kwargs and value:
- cmd += ['--' + arg.replace('_', '-')]
- elif arg not in known_custom_target_kwargs:
- raise MesonException(f'Genmarshal does not take a {arg} keyword argument.')
+ cmd: T.List[T.Union['ExternalProgram', str]] = [state.find_program('glib-genmarshal')]
+ if kwargs['prefix']:
+ cmd.extend(['--prefix', kwargs['prefix']])
+ if kwargs['extra_args']:
+ if new_genmarshal:
+ cmd.extend(kwargs['extra_args'])
+ else:
+ mlog.warning('The current version of GLib does not support extra arguments \n'
+ 'for glib-genmarshal. You need at least GLib 2.53.3. See ',
+ mlog.bold('https://github.com/mesonbuild/meson/pull/2049'))
+ for k in ['internal', 'nostdinc', 'skip_source', 'stdinc', 'valist_marshallers']:
+ # Mypy can't figure out that this is correct
+ if kwargs[k]: # type: ignore
+ cmd.extend([f'--{k.replace("_", "-")}', kwargs[k]]) # type: ignore
- install_header = kwargs.pop('install_header', False)
- install_dir = kwargs.pop('install_dir', [])
+ install_header = kwargs['install_header']
+ install_dir = kwargs['install_dir']
- custom_kwargs = {
+
+ custom_kwargs: T.Dict[str, T.Any] = {
'input': sources,
+ 'depend_files': kwargs['depend_files'],
+ 'install_dir': kwargs['install_dir'],
}
# https://github.com/GNOME/glib/commit/0fbc98097fac4d3e647684f344e508abae109fdf
@@ -1742,10 +1760,6 @@ class GnomeModule(ExtensionModule):
else:
custom_kwargs['capture'] = True
- for arg in known_custom_target_kwargs:
- if arg in kwargs:
- custom_kwargs[arg] = kwargs[arg]
-
header_file = output + '.h'
custom_kwargs['command'] = cmd + ['--body', '@INPUT@']
if mesonlib.version_compare(self._get_native_glib_version(state), '>= 2.53.4'):