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] 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. 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]) return listify(*[dict_object.get(key, []) for key in keys])

@ -98,17 +98,12 @@ class GnomeModule(ExtensionModule):
cmd = ['glib-compile-resources', '@INPUT@'] cmd = ['glib-compile-resources', '@INPUT@']
source_dirs = kwargs.pop('source_dir', []) source_dirs, dependencies = mesonlib.extract_as_list(kwargs, 'source_dir', 'dependencies', pop=True)
if not isinstance(source_dirs, list):
source_dirs = [source_dirs]
if len(args) < 2: if len(args) < 2:
raise MesonException('Not enough arguments; the name of the resource ' raise MesonException('Not enough arguments; the name of the resource '
'and the path to the XML file are required') 'and the path to the XML file are required')
dependencies = kwargs.pop('dependencies', [])
if not isinstance(dependencies, list):
dependencies = [dependencies]
# Validate dependencies # Validate dependencies
for (ii, dep) in enumerate(dependencies): for (ii, dep) in enumerate(dependencies):
if hasattr(dep, 'held_object'): if hasattr(dep, 'held_object'):
@ -328,8 +323,7 @@ class GnomeModule(ExtensionModule):
cflags = OrderedSet() cflags = OrderedSet()
ldflags = OrderedSet() ldflags = OrderedSet()
gi_includes = OrderedSet() gi_includes = OrderedSet()
if not isinstance(deps, list): deps = mesonlib.listify(deps)
deps = [deps]
for dep in deps: for dep in deps:
if hasattr(dep, 'held_object'): if hasattr(dep, 'held_object'):
@ -464,17 +458,14 @@ class GnomeModule(ExtensionModule):
scan_command += ['--filelist=' + gir_filelist_filename] scan_command += ['--filelist=' + gir_filelist_filename]
if 'link_with' in kwargs: if 'link_with' in kwargs:
link_with = kwargs.pop('link_with') link_with = mesonlib.extract_as_list(kwargs, 'link_with', pop = True)
if not isinstance(link_with, list):
link_with = [link_with]
for link in link_with: for link in link_with:
scan_command += self._get_link_args(state, link.held_object, depends, scan_command += self._get_link_args(state, link.held_object, depends,
use_gir_args=True) use_gir_args=True)
if 'includes' in kwargs: if 'includes' in kwargs:
includes = kwargs.pop('includes') includes = mesonlib.extract_as_list(kwargs, 'includes', pop = True)
if not isinstance(includes, list):
includes = [includes]
for inc in includes: for inc in includes:
if hasattr(inc, 'held_object'): if hasattr(inc, 'held_object'):
inc = 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 # 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 # does not understand -f LDFLAGS. https://bugzilla.gnome.org/show_bug.cgi?id=783892
# ldflags += compilers.sanitizer_link_args(sanitize) # ldflags += compilers.sanitizer_link_args(sanitize)
if kwargs.get('symbol_prefix'): if 'symbol_prefix' in kwargs:
sym_prefix = kwargs.pop('symbol_prefix') sym_prefix = kwargs.pop('symbol_prefix')
if not isinstance(sym_prefix, str): if not isinstance(sym_prefix, str):
raise MesonException('Gir symbol prefix must be str') raise MesonException('Gir symbol prefix must be str')
scan_command += ['--symbol-prefix=%s' % sym_prefix] scan_command += ['--symbol-prefix=%s' % sym_prefix]
if kwargs.get('identifier_prefix'): if 'identifier_prefix' in kwargs:
identifier_prefix = kwargs.pop('identifier_prefix') identifier_prefix = kwargs.pop('identifier_prefix')
if not isinstance(identifier_prefix, str): if not isinstance(identifier_prefix, str):
raise MesonException('Gir identifier prefix must be str') raise MesonException('Gir identifier prefix must be str')
scan_command += ['--identifier-prefix=%s' % identifier_prefix] scan_command += ['--identifier-prefix=%s' % identifier_prefix]
if kwargs.get('export_packages'): if 'export_packages' in kwargs:
pkgs = kwargs.pop('export_packages') pkgs = kwargs.pop('export_packages')
if isinstance(pkgs, str): if isinstance(pkgs, str):
scan_command += ['--pkg-export=%s' % pkgs] scan_command += ['--pkg-export=%s' % pkgs]
@ -534,9 +525,7 @@ class GnomeModule(ExtensionModule):
else: else:
raise MesonException('Gir export packages must be str or list') raise MesonException('Gir export packages must be str or list')
deps = kwargs.pop('dependencies', []) deps = mesonlib.extract_as_list(kwargs, 'dependencies', pop = True)
if not isinstance(deps, list):
deps = [deps]
deps = (girtarget.get_all_link_deps() + girtarget.get_external_deps() + deps = (girtarget.get_all_link_deps() + girtarget.get_external_deps() +
deps) deps)
# Need to recursively add deps on GirTarget sources from our # Need to recursively add deps on GirTarget sources from our
@ -593,9 +582,7 @@ class GnomeModule(ExtensionModule):
for i in gi_includes: for i in gi_includes:
scan_command += ['--add-include-path=%s' % i] scan_command += ['--add-include-path=%s' % i]
inc_dirs = kwargs.pop('include_directories', []) inc_dirs = mesonlib.extract_as_list(kwargs, 'include_directories', pop = True)
if not isinstance(inc_dirs, list):
inc_dirs = [inc_dirs]
for incd in inc_dirs: for incd in inc_dirs:
if not isinstance(incd.held_object, (str, build.IncludeDirs)): if not isinstance(incd.held_object, (str, build.IncludeDirs)):
raise MesonException( raise MesonException(
@ -618,7 +605,7 @@ class GnomeModule(ExtensionModule):
scankwargs = {'output': girfile, scankwargs = {'output': girfile,
'command': scan_command, 'command': scan_command,
'depends': depends} 'depends': depends}
if kwargs.get('install'): if 'install' in kwargs:
scankwargs['install'] = kwargs['install'] scankwargs['install'] = kwargs['install']
scankwargs['install_dir'] = kwargs.get('install_dir_gir', scankwargs['install_dir'] = kwargs.get('install_dir_gir',
os.path.join(state.environment.get_datadir(), 'gir-1.0')) os.path.join(state.environment.get_datadir(), 'gir-1.0'))
@ -636,7 +623,7 @@ class GnomeModule(ExtensionModule):
'output': typelib_output, 'output': typelib_output,
'command': typelib_cmd, 'command': typelib_cmd,
} }
if kwargs.get('install'): if 'install' in kwargs:
typelib_kwargs['install'] = kwargs['install'] typelib_kwargs['install'] = kwargs['install']
typelib_kwargs['install_dir'] = kwargs.get('install_dir_typelib', typelib_kwargs['install_dir'] = kwargs.get('install_dir_typelib',
os.path.join(state.environment.get_libdir(), 'girepository-1.0')) 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: if mode not in VALID_MODES:
raise MesonException('gtkdoc: Mode {} is not a valid mode: {}'.format(mode, VALID_MODES)) raise MesonException('gtkdoc: Mode {} is not a valid mode: {}'.format(mode, VALID_MODES))
src_dirs = kwargs['src_dir'] src_dirs = mesonlib.extract_as_list(kwargs, 'src_dir')
if not isinstance(src_dirs, list):
src_dirs = [src_dirs]
header_dirs = [] header_dirs = []
for src_dir in src_dirs: for src_dir in src_dirs:
if hasattr(src_dir, 'held_object'): 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): def _get_build_args(self, kwargs, state):
args = [] args = []
cflags, ldflags, gi_includes = self._get_dependencies_flags(kwargs.get('dependencies', []), state, include_rpath=True) cflags, ldflags, gi_includes = self._get_dependencies_flags(kwargs.get('dependencies', []), state, include_rpath=True)
inc_dirs = kwargs.get('include_directories', []) inc_dirs = mesonlib.extract_as_list(kwargs, 'include_directories')
if not isinstance(inc_dirs, list):
inc_dirs = [inc_dirs]
for incd in inc_dirs: for incd in inc_dirs:
if not isinstance(incd.held_object, (str, build.IncludeDirs)): if not isinstance(incd.held_object, (str, build.IncludeDirs)):
raise MesonException( raise MesonException(
@ -839,9 +822,7 @@ This will become a hard error in the future.''')
if kwarg_name not in kwargs: if kwarg_name not in kwargs:
return [] return []
new_args = kwargs[kwarg_name] new_args = mesonlib.extract_as_list(kwargs, kwarg_name)
if not isinstance(new_args, list):
new_args = [new_args]
args = [] args = []
for i in new_args: for i in new_args:
if expend_file_state and isinstance(i, mesonlib.File): if expend_file_state and isinstance(i, mesonlib.File):
@ -1200,12 +1181,8 @@ G_END_DECLS'''
@staticmethod @staticmethod
def _vapi_args_to_command(prefix, variable, kwargs, accept_vapi=False): def _vapi_args_to_command(prefix, variable, kwargs, accept_vapi=False):
arg_list = kwargs.get(variable) arg_list = mesonlib.extract_as_list(kwargs, variable)
if not arg_list:
return []
ret = [] ret = []
if not isinstance(arg_list, list):
arg_list = [arg_list]
for arg in arg_list: for arg in arg_list:
if not isinstance(arg, str): if not isinstance(arg, str):
types = 'strings' + ' or InternalDependencys' if accept_vapi else '' types = 'strings' + ' or InternalDependencys' if accept_vapi else ''
@ -1300,12 +1277,10 @@ G_END_DECLS'''
cmd += pkg_cmd cmd += pkg_cmd
cmd += ['--metadatadir=' + source_dir] cmd += ['--metadatadir=' + source_dir]
inputs = kwargs.get('sources') if 'sources' not in kwargs:
if not inputs:
raise MesonException('sources are required to generate the vapi file') raise MesonException('sources are required to generate the vapi file')
if not isinstance(inputs, list): inputs = mesonlib.extract_as_list(kwargs, 'sources')
inputs = [inputs]
link_with = [] link_with = []
for i in inputs: for i in inputs:

@ -108,8 +108,7 @@ class PkgConfigModule(ExtensionModule):
ofile.write('\n') ofile.write('\n')
def process_libs(self, libs): def process_libs(self, libs):
if not isinstance(libs, list): libs = mesonlib.listify(libs)
libs = [libs]
processed_libs = [] processed_libs = []
for l in libs: for l in libs:
if hasattr(l, 'held_object'): if hasattr(l, 'held_object'):

@ -15,7 +15,7 @@
import os import os
from .. import mlog from .. import mlog
from .. import build from .. import build
from ..mesonlib import MesonException, Popen_safe from ..mesonlib import MesonException, Popen_safe, extract_as_list
from ..dependencies import Qt4Dependency from ..dependencies import Qt4Dependency
from . import ExtensionModule from . import ExtensionModule
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
@ -99,21 +99,8 @@ class Qt4Module(ExtensionModule):
@permittedKwargs({'moc_headers', 'moc_sources', 'ui_files', 'qresources', 'method'}) @permittedKwargs({'moc_headers', 'moc_sources', 'ui_files', 'qresources', 'method'})
def preprocess(self, state, args, kwargs): def preprocess(self, state, args, kwargs):
rcc_files = kwargs.pop('qresources', []) rcc_files, ui_files, moc_headers, moc_sources, sources \
if not isinstance(rcc_files, list): = extract_as_list(kwargs, 'qresources', 'ui_files', 'moc_headers', 'moc_sources', 'sources', pop = True)
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]
sources += args[1:] sources += args[1:]
method = kwargs.get('method', 'auto') method = kwargs.get('method', 'auto')
self._detect_tools(state.environment, method) self._detect_tools(state.environment, method)

@ -15,7 +15,7 @@
import os import os
from .. import mlog from .. import mlog
from .. import build from .. import build
from ..mesonlib import MesonException, Popen_safe from ..mesonlib import MesonException, Popen_safe, extract_as_list
from ..dependencies import Qt5Dependency from ..dependencies import Qt5Dependency
from . import ExtensionModule from . import ExtensionModule
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
@ -105,21 +105,8 @@ class Qt5Module(ExtensionModule):
@permittedKwargs({'moc_headers', 'moc_sources', 'ui_files', 'qresources', 'method'}) @permittedKwargs({'moc_headers', 'moc_sources', 'ui_files', 'qresources', 'method'})
def preprocess(self, state, args, kwargs): def preprocess(self, state, args, kwargs):
rcc_files = kwargs.pop('qresources', []) rcc_files, ui_files, moc_headers, moc_sources, sources \
if not isinstance(rcc_files, list): = extract_as_list(kwargs, 'qresources', 'ui_files', 'moc_headers', 'moc_sources', 'sources', pop = True)
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]
sources += args[1:] sources += args[1:]
method = kwargs.get('method', 'auto') method = kwargs.get('method', 'auto')
self._detect_tools(state.environment, method) self._detect_tools(state.environment, method)

@ -16,7 +16,7 @@ import os
from .. import mlog from .. import mlog
from .. import mesonlib, dependencies, build from .. import mesonlib, dependencies, build
from ..mesonlib import MesonException from ..mesonlib import MesonException, extract_as_list
from . import get_include_args from . import get_include_args
from . import ModuleReturnValue from . import ModuleReturnValue
from . import ExtensionModule from . import ExtensionModule
@ -35,9 +35,7 @@ class WindowsModule(ExtensionModule):
comp = self.detect_compiler(state.compilers) comp = self.detect_compiler(state.compilers)
extra_args = mesonlib.stringlistify(kwargs.get('args', [])) extra_args = mesonlib.stringlistify(kwargs.get('args', []))
inc_dirs = kwargs.pop('include_directories', []) inc_dirs = extract_as_list(kwargs, 'include_directories', pop = True)
if not isinstance(inc_dirs, list):
inc_dirs = [inc_dirs]
for incd in inc_dirs: for incd in inc_dirs:
if not isinstance(incd.held_object, (str, build.IncludeDirs)): if not isinstance(incd.held_object, (str, build.IncludeDirs)):
raise MesonException('Resource include dirs should be include_directories().') raise MesonException('Resource include dirs should be include_directories().')

Loading…
Cancel
Save