diff options
author | Alexis Jeandet <alexis.jeandet@member.fsf.org> | 2017-08-29 22:21:11 +0200 |
---|---|---|
committer | Alexis Jeandet <alexis.jeandet@member.fsf.org> | 2017-09-18 22:21:22 +0200 |
commit | bf64cf569b6ecf90db0f2bb181edb8f0ff0c9a3b (patch) | |
tree | a8af035a5f74383528e1b28d8e16b6d545364347 /mesonbuild | |
parent | 55975f852e502137e3d78d6af204f1bc58a98551 (diff) | |
download | meson-bf64cf569b6ecf90db0f2bb181edb8f0ff0c9a3b.zip meson-bf64cf569b6ecf90db0f2bb181edb8f0ff0c9a3b.tar.gz meson-bf64cf569b6ecf90db0f2bb181edb8f0ff0c9a3b.tar.bz2 |
Gnome, pkgconfig, Qt4, Qt5 and windows modules slightly refactored.
Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/mesonlib.py | 4 | ||||
-rw-r--r-- | mesonbuild/modules/gnome.py | 61 | ||||
-rw-r--r-- | mesonbuild/modules/pkgconfig.py | 3 | ||||
-rw-r--r-- | mesonbuild/modules/qt4.py | 19 | ||||
-rw-r--r-- | mesonbuild/modules/qt5.py | 19 | ||||
-rw-r--r-- | mesonbuild/modules/windows.py | 6 |
6 files changed, 30 insertions, 82 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 7f16512..b5a6318 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -484,10 +484,12 @@ def listify(*args): return [item if type(item) is list else [item] for item in args] -def extract_as_list(dict_object, *keys): +def extract_as_list(dict_object, *keys, pop = False): ''' Extracts all values from given dict_object and listifies them. ''' + if pop: + return listify(*[dict_object.pop(key, []) for key in keys]) return listify(*[dict_object.get(key, []) for key in keys]) diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index fcdd193..972c8f0 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -98,17 +98,12 @@ class GnomeModule(ExtensionModule): cmd = ['glib-compile-resources', '@INPUT@'] - source_dirs = kwargs.pop('source_dir', []) - if not isinstance(source_dirs, list): - source_dirs = [source_dirs] + source_dirs, dependencies = mesonlib.extract_as_list(kwargs, 'source_dir', 'dependencies', pop=True) if len(args) < 2: raise MesonException('Not enough arguments; the name of the resource ' 'and the path to the XML file are required') - dependencies = kwargs.pop('dependencies', []) - if not isinstance(dependencies, list): - dependencies = [dependencies] # Validate dependencies for (ii, dep) in enumerate(dependencies): if hasattr(dep, 'held_object'): @@ -328,8 +323,7 @@ class GnomeModule(ExtensionModule): cflags = OrderedSet() ldflags = OrderedSet() gi_includes = OrderedSet() - if not isinstance(deps, list): - deps = [deps] + deps = mesonlib.listify(deps) for dep in deps: if hasattr(dep, 'held_object'): @@ -464,17 +458,14 @@ class GnomeModule(ExtensionModule): scan_command += ['--filelist=' + gir_filelist_filename] if 'link_with' in kwargs: - link_with = kwargs.pop('link_with') - if not isinstance(link_with, list): - link_with = [link_with] + link_with = mesonlib.extract_as_list(kwargs, 'link_with', pop = True) + for link in link_with: scan_command += self._get_link_args(state, link.held_object, depends, use_gir_args=True) if 'includes' in kwargs: - includes = kwargs.pop('includes') - if not isinstance(includes, list): - includes = [includes] + includes = mesonlib.extract_as_list(kwargs, 'includes', pop = True) for inc in includes: if hasattr(inc, 'held_object'): inc = inc.held_object @@ -515,17 +506,17 @@ class GnomeModule(ExtensionModule): # FIXME: Linking directly to libasan is not recommended but g-ir-scanner # does not understand -f LDFLAGS. https://bugzilla.gnome.org/show_bug.cgi?id=783892 # ldflags += compilers.sanitizer_link_args(sanitize) - if kwargs.get('symbol_prefix'): + if 'symbol_prefix' in kwargs: sym_prefix = kwargs.pop('symbol_prefix') if not isinstance(sym_prefix, str): raise MesonException('Gir symbol prefix must be str') scan_command += ['--symbol-prefix=%s' % sym_prefix] - if kwargs.get('identifier_prefix'): + if 'identifier_prefix' in kwargs: identifier_prefix = kwargs.pop('identifier_prefix') if not isinstance(identifier_prefix, str): raise MesonException('Gir identifier prefix must be str') scan_command += ['--identifier-prefix=%s' % identifier_prefix] - if kwargs.get('export_packages'): + if 'export_packages' in kwargs: pkgs = kwargs.pop('export_packages') if isinstance(pkgs, str): scan_command += ['--pkg-export=%s' % pkgs] @@ -534,9 +525,7 @@ class GnomeModule(ExtensionModule): else: raise MesonException('Gir export packages must be str or list') - deps = kwargs.pop('dependencies', []) - if not isinstance(deps, list): - deps = [deps] + deps = mesonlib.extract_as_list(kwargs, 'dependencies', pop = True) deps = (girtarget.get_all_link_deps() + girtarget.get_external_deps() + deps) # Need to recursively add deps on GirTarget sources from our @@ -593,9 +582,7 @@ class GnomeModule(ExtensionModule): for i in gi_includes: scan_command += ['--add-include-path=%s' % i] - inc_dirs = kwargs.pop('include_directories', []) - if not isinstance(inc_dirs, list): - inc_dirs = [inc_dirs] + inc_dirs = mesonlib.extract_as_list(kwargs, 'include_directories', pop = True) for incd in inc_dirs: if not isinstance(incd.held_object, (str, build.IncludeDirs)): raise MesonException( @@ -618,7 +605,7 @@ class GnomeModule(ExtensionModule): scankwargs = {'output': girfile, 'command': scan_command, 'depends': depends} - if kwargs.get('install'): + if 'install' in kwargs: scankwargs['install'] = kwargs['install'] scankwargs['install_dir'] = kwargs.get('install_dir_gir', os.path.join(state.environment.get_datadir(), 'gir-1.0')) @@ -636,7 +623,7 @@ class GnomeModule(ExtensionModule): 'output': typelib_output, 'command': typelib_cmd, } - if kwargs.get('install'): + if 'install' in kwargs: typelib_kwargs['install'] = kwargs['install'] typelib_kwargs['install_dir'] = kwargs.get('install_dir_typelib', os.path.join(state.environment.get_libdir(), 'girepository-1.0')) @@ -759,9 +746,7 @@ This will become a hard error in the future.''') if mode not in VALID_MODES: raise MesonException('gtkdoc: Mode {} is not a valid mode: {}'.format(mode, VALID_MODES)) - src_dirs = kwargs['src_dir'] - if not isinstance(src_dirs, list): - src_dirs = [src_dirs] + src_dirs = mesonlib.extract_as_list(kwargs, 'src_dir') header_dirs = [] for src_dir in src_dirs: if hasattr(src_dir, 'held_object'): @@ -806,9 +791,7 @@ This will become a hard error in the future.''') def _get_build_args(self, kwargs, state): args = [] cflags, ldflags, gi_includes = self._get_dependencies_flags(kwargs.get('dependencies', []), state, include_rpath=True) - inc_dirs = kwargs.get('include_directories', []) - if not isinstance(inc_dirs, list): - inc_dirs = [inc_dirs] + inc_dirs = mesonlib.extract_as_list(kwargs, 'include_directories') for incd in inc_dirs: if not isinstance(incd.held_object, (str, build.IncludeDirs)): raise MesonException( @@ -839,9 +822,7 @@ This will become a hard error in the future.''') if kwarg_name not in kwargs: return [] - new_args = kwargs[kwarg_name] - if not isinstance(new_args, list): - new_args = [new_args] + new_args = mesonlib.extract_as_list(kwargs, kwarg_name) args = [] for i in new_args: if expend_file_state and isinstance(i, mesonlib.File): @@ -1200,12 +1181,8 @@ G_END_DECLS''' @staticmethod def _vapi_args_to_command(prefix, variable, kwargs, accept_vapi=False): - arg_list = kwargs.get(variable) - if not arg_list: - return [] + arg_list = mesonlib.extract_as_list(kwargs, variable) ret = [] - if not isinstance(arg_list, list): - arg_list = [arg_list] for arg in arg_list: if not isinstance(arg, str): types = 'strings' + ' or InternalDependencys' if accept_vapi else '' @@ -1300,12 +1277,10 @@ G_END_DECLS''' cmd += pkg_cmd cmd += ['--metadatadir=' + source_dir] - inputs = kwargs.get('sources') - if not inputs: + if 'sources' not in kwargs: raise MesonException('sources are required to generate the vapi file') - if not isinstance(inputs, list): - inputs = [inputs] + inputs = mesonlib.extract_as_list(kwargs, 'sources') link_with = [] for i in inputs: diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py index a7a35d5..824ba78 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -108,8 +108,7 @@ class PkgConfigModule(ExtensionModule): ofile.write('\n') def process_libs(self, libs): - if not isinstance(libs, list): - libs = [libs] + libs = mesonlib.listify(libs) processed_libs = [] for l in libs: if hasattr(l, 'held_object'): diff --git a/mesonbuild/modules/qt4.py b/mesonbuild/modules/qt4.py index 4056b6d..37e630b 100644 --- a/mesonbuild/modules/qt4.py +++ b/mesonbuild/modules/qt4.py @@ -15,7 +15,7 @@ import os from .. import mlog from .. import build -from ..mesonlib import MesonException, Popen_safe +from ..mesonlib import MesonException, Popen_safe, extract_as_list from ..dependencies import Qt4Dependency from . import ExtensionModule import xml.etree.ElementTree as ET @@ -99,21 +99,8 @@ class Qt4Module(ExtensionModule): @permittedKwargs({'moc_headers', 'moc_sources', 'ui_files', 'qresources', 'method'}) def preprocess(self, state, args, kwargs): - rcc_files = kwargs.pop('qresources', []) - if not isinstance(rcc_files, list): - rcc_files = [rcc_files] - ui_files = kwargs.pop('ui_files', []) - if not isinstance(ui_files, list): - ui_files = [ui_files] - moc_headers = kwargs.pop('moc_headers', []) - if not isinstance(moc_headers, list): - moc_headers = [moc_headers] - moc_sources = kwargs.pop('moc_sources', []) - if not isinstance(moc_sources, list): - moc_sources = [moc_sources] - sources = kwargs.pop('sources', []) - if not isinstance(sources, list): - sources = [sources] + rcc_files, ui_files, moc_headers, moc_sources, sources \ + = extract_as_list(kwargs, 'qresources', 'ui_files', 'moc_headers', 'moc_sources', 'sources', pop = True) sources += args[1:] method = kwargs.get('method', 'auto') self._detect_tools(state.environment, method) diff --git a/mesonbuild/modules/qt5.py b/mesonbuild/modules/qt5.py index 6194a23..ef3d52f 100644 --- a/mesonbuild/modules/qt5.py +++ b/mesonbuild/modules/qt5.py @@ -15,7 +15,7 @@ import os from .. import mlog from .. import build -from ..mesonlib import MesonException, Popen_safe +from ..mesonlib import MesonException, Popen_safe, extract_as_list from ..dependencies import Qt5Dependency from . import ExtensionModule import xml.etree.ElementTree as ET @@ -105,21 +105,8 @@ class Qt5Module(ExtensionModule): @permittedKwargs({'moc_headers', 'moc_sources', 'ui_files', 'qresources', 'method'}) def preprocess(self, state, args, kwargs): - rcc_files = kwargs.pop('qresources', []) - if not isinstance(rcc_files, list): - rcc_files = [rcc_files] - ui_files = kwargs.pop('ui_files', []) - if not isinstance(ui_files, list): - ui_files = [ui_files] - moc_headers = kwargs.pop('moc_headers', []) - if not isinstance(moc_headers, list): - moc_headers = [moc_headers] - moc_sources = kwargs.pop('moc_sources', []) - if not isinstance(moc_sources, list): - moc_sources = [moc_sources] - sources = kwargs.pop('sources', []) - if not isinstance(sources, list): - sources = [sources] + rcc_files, ui_files, moc_headers, moc_sources, sources \ + = extract_as_list(kwargs, 'qresources', 'ui_files', 'moc_headers', 'moc_sources', 'sources', pop = True) sources += args[1:] method = kwargs.get('method', 'auto') self._detect_tools(state.environment, method) diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py index 6fef5bb..ab215dc 100644 --- a/mesonbuild/modules/windows.py +++ b/mesonbuild/modules/windows.py @@ -16,7 +16,7 @@ import os from .. import mlog from .. import mesonlib, dependencies, build -from ..mesonlib import MesonException +from ..mesonlib import MesonException, extract_as_list from . import get_include_args from . import ModuleReturnValue from . import ExtensionModule @@ -35,9 +35,7 @@ class WindowsModule(ExtensionModule): comp = self.detect_compiler(state.compilers) extra_args = mesonlib.stringlistify(kwargs.get('args', [])) - inc_dirs = kwargs.pop('include_directories', []) - if not isinstance(inc_dirs, list): - inc_dirs = [inc_dirs] + inc_dirs = extract_as_list(kwargs, 'include_directories', pop = True) for incd in inc_dirs: if not isinstance(incd.held_object, (str, build.IncludeDirs)): raise MesonException('Resource include dirs should be include_directories().') |