diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2020-03-04 13:04:24 -0800 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2020-03-05 09:58:52 -0800 |
commit | 581d69a8d3a726dea06e8bf0cd18bb901692b56f (patch) | |
tree | a35887377e1967b4d9fb2f9280e8d3bd410e4cb1 /mesonbuild | |
parent | b231ff36df8e5cb21fa41a6380516c6cf5bf9c4e (diff) | |
download | meson-581d69a8d3a726dea06e8bf0cd18bb901692b56f.zip meson-581d69a8d3a726dea06e8bf0cd18bb901692b56f.tar.gz meson-581d69a8d3a726dea06e8bf0cd18bb901692b56f.tar.bz2 |
remove ability to pass multiple keys to extract_as_list
This makes the typing annotations basically impossible to get right, but
if we only have one key then it's easy. Fortunately python provides
comprehensions, so we don't even need the ability to pass multiple keys,
we can just [extract_as_list(kwargs, c) for c in ('a', 'b', 'c')] and
get the same result.
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/build.py | 5 | ||||
-rw-r--r-- | mesonbuild/dependencies/boost.py | 2 | ||||
-rw-r--r-- | mesonbuild/mesonlib.py | 11 | ||||
-rw-r--r-- | mesonbuild/modules/gnome.py | 2 | ||||
-rw-r--r-- | mesonbuild/modules/qt.py | 4 |
5 files changed, 8 insertions, 16 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 770e851..fcd1622 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -827,8 +827,7 @@ just like those detected with the dependency() function.''') self.link_whole(linktarget) c_pchlist, cpp_pchlist, clist, cpplist, cudalist, cslist, valalist, objclist, objcpplist, fortranlist, rustlist \ - = extract_as_list(kwargs, 'c_pch', 'cpp_pch', 'c_args', 'cpp_args', 'cuda_args', 'cs_args', 'vala_args', 'objc_args', - 'objcpp_args', 'fortran_args', 'rust_args') + = [extract_as_list(kwargs, c) for c in ['c_pch', 'cpp_pch', 'c_args', 'cpp_args', 'cuda_args', 'cs_args', 'vala_args', 'objc_args', 'objcpp_args', 'fortran_args', 'rust_args']] self.add_pch('c', c_pchlist) self.add_pch('cpp', cpp_pchlist) @@ -2161,7 +2160,7 @@ class CustomTarget(Target): self.build_always_stale = kwargs['build_always_stale'] if not isinstance(self.build_always_stale, bool): raise InvalidArguments('Argument build_always_stale must be a boolean.') - extra_deps, depend_files = extract_as_list(kwargs, 'depends', 'depend_files', pop = False) + extra_deps, depend_files = [extract_as_list(kwargs, c, pop=False) for c in ['depends', 'depend_files']] for ed in extra_deps: while hasattr(ed, 'held_object'): ed = ed.held_object diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py index 53a0cfb..b07f3ac 100644 --- a/mesonbuild/dependencies/boost.py +++ b/mesonbuild/dependencies/boost.py @@ -272,7 +272,7 @@ class BoostDependency(ExternalDependency): self.boost_root = None # Extract and validate modules - self.modules = mesonlib.extract_as_list(kwargs, 'modules') + self.modules = mesonlib.extract_as_list(kwargs, 'modules') # type: T.List[str] for i in self.modules: if not isinstance(i, str): raise DependencyException('Boost module argument is not a string.') diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index e93b66f..e215dcd 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -1075,22 +1075,15 @@ def listify(item: T.Any, flatten: bool = True) -> T.List[T.Any]: return result -def extract_as_list(dict_object: T.Dict[_T, _U], *keys: _T, pop: bool = False, - flatten: bool = True) -> T.List[T.Union[_U, T.List[_U]]]: +def extract_as_list(dict_object: T.Dict[_T, _U], key: _T, pop: bool = False) -> T.List[_U]: ''' Extracts all values from given dict_object and listifies them. ''' - result = [] # type: T.List[T.Union[_U, T.List[_U]]] fetch = dict_object.get if pop: fetch = dict_object.pop # If there's only one key, we don't return a list with one element - if len(keys) == 1: - return listify(fetch(keys[0], []), flatten=True) - # Return a list of values corresponding to *keys - for key in keys: - result.append(listify(fetch(key, []), flatten=True)) - return result + return listify(fetch(key, []), flatten=True) def typeslistify(item: 'T.Union[_T, T.Sequence[_T]]', diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index ec8935e..e087bcd 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -98,7 +98,7 @@ class GnomeModule(ExtensionModule): cmd = ['glib-compile-resources', '@INPUT@'] - source_dirs, dependencies = mesonlib.extract_as_list(kwargs, 'source_dir', 'dependencies', pop=True) + source_dirs, dependencies = [mesonlib.extract_as_list(kwargs, c, pop=True) for c in ['source_dir', 'dependencies']] if len(args) < 2: raise MesonException('Not enough arguments; the name of the resource ' diff --git a/mesonbuild/modules/qt.py b/mesonbuild/modules/qt.py index 6887bc7..b4f3a49 100644 --- a/mesonbuild/modules/qt.py +++ b/mesonbuild/modules/qt.py @@ -123,7 +123,7 @@ class QtBaseModule(ExtensionModule): @permittedKwargs({'moc_headers', 'moc_sources', 'uic_extra_arguments', 'moc_extra_arguments', 'rcc_extra_arguments', 'include_directories', 'dependencies', 'ui_files', 'qresources', 'method'}) def preprocess(self, state, args, kwargs): rcc_files, ui_files, moc_headers, moc_sources, uic_extra_arguments, moc_extra_arguments, rcc_extra_arguments, sources, include_directories, dependencies \ - = extract_as_list(kwargs, 'qresources', 'ui_files', 'moc_headers', 'moc_sources', 'uic_extra_arguments', 'moc_extra_arguments', 'rcc_extra_arguments', 'sources', 'include_directories', 'dependencies', pop = True) + = [extract_as_list(kwargs, c, pop=True) for c in ['qresources', 'ui_files', 'moc_headers', 'moc_sources', 'uic_extra_arguments', 'moc_extra_arguments', 'rcc_extra_arguments', 'sources', 'include_directories', 'dependencies']] sources += args[1:] method = kwargs.get('method', 'auto') self._detect_tools(state.environment, method) @@ -202,7 +202,7 @@ class QtBaseModule(ExtensionModule): @FeatureNew('qt.compile_translations', '0.44.0') @permittedKwargs({'ts_files', 'install', 'install_dir', 'build_by_default', 'method'}) def compile_translations(self, state, args, kwargs): - ts_files, install_dir = extract_as_list(kwargs, 'ts_files', 'install_dir', pop=True) + ts_files, install_dir = [extract_as_list(kwargs, c, pop=True) for c in ['ts_files', 'install_dir']] self._detect_tools(state.environment, kwargs.get('method', 'auto')) translations = [] for ts in ts_files: |