Gnome, pkgconfig, Qt4, Qt5 and windows modules slightly refactored.

Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>
pull/2264/head
Alexis Jeandet 8 years ago
parent 55975f852e
commit bf64cf569b
  1. 4
      mesonbuild/mesonlib.py
  2. 61
      mesonbuild/modules/gnome.py
  3. 3
      mesonbuild/modules/pkgconfig.py
  4. 19
      mesonbuild/modules/qt4.py
  5. 19
      mesonbuild/modules/qt5.py
  6. 6
      mesonbuild/modules/windows.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])

@ -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:

@ -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'):

@ -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)

@ -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)

@ -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().')

Loading…
Cancel
Save