aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorAlexis Jeandet <alexis.jeandet@member.fsf.org>2017-08-29 22:21:11 +0200
committerAlexis Jeandet <alexis.jeandet@member.fsf.org>2017-09-18 22:21:22 +0200
commitbf64cf569b6ecf90db0f2bb181edb8f0ff0c9a3b (patch)
treea8af035a5f74383528e1b28d8e16b6d545364347 /mesonbuild
parent55975f852e502137e3d78d6af204f1bc58a98551 (diff)
downloadmeson-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.py4
-rw-r--r--mesonbuild/modules/gnome.py61
-rw-r--r--mesonbuild/modules/pkgconfig.py3
-rw-r--r--mesonbuild/modules/qt4.py19
-rw-r--r--mesonbuild/modules/qt5.py19
-rw-r--r--mesonbuild/modules/windows.py6
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().')