summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Jeandet <alexis.jeandet@member.fsf.org>2017-09-18 22:19:12 +0200
committerAlexis Jeandet <alexis.jeandet@member.fsf.org>2017-09-18 22:25:34 +0200
commite553d0807bad5db8290e26954ce7634bc0e181fd (patch)
tree3fb5c9c681bf7071c0765c0f2d55d067a27d70ce
parentbf64cf569b6ecf90db0f2bb181edb8f0ff0c9a3b (diff)
downloadmeson-e553d0807bad5db8290e26954ce7634bc0e181fd.tar.gz
Last round with listify function refactoring.
Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>
-rw-r--r--mesonbuild/build.py24
-rw-r--r--mesonbuild/compilers/c.py5
-rw-r--r--mesonbuild/dependencies/base.py7
-rw-r--r--mesonbuild/dependencies/misc.py6
-rw-r--r--mesonbuild/dependencies/ui.py9
-rw-r--r--mesonbuild/interpreter.py70
-rw-r--r--mesonbuild/modules/gnome.py4
-rw-r--r--mesonbuild/modules/unstable_simd.py4
8 files changed, 37 insertions, 92 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 99827423c..281b060bb 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -787,8 +787,7 @@ This will become a hard error in a future Meson release.''')
return self.include_dirs
def add_deps(self, deps):
- if not isinstance(deps, list):
- deps = [deps]
+ deps = listify(deps)
for dep in deps:
if hasattr(dep, 'held_object'):
dep = dep.held_object
@@ -1016,9 +1015,7 @@ class Generator:
self.arglist = args
if 'output' not in kwargs:
raise InvalidArguments('Generator must have "output" keyword argument.')
- outputs = kwargs['output']
- if not isinstance(outputs, list):
- outputs = [outputs]
+ outputs = listify(kwargs['output'])
for rule in outputs:
if not isinstance(rule, str):
raise InvalidArguments('"output" may only contain strings.')
@@ -1514,8 +1511,7 @@ class CustomTarget(Target):
return deps
def flatten_command(self, cmd):
- if not isinstance(cmd, list):
- cmd = [cmd]
+ cmd = listify(cmd)
final_cmd = []
for c in cmd:
if hasattr(c, 'held_object'):
@@ -1550,9 +1546,7 @@ class CustomTarget(Target):
self.sources.append(s)
if 'output' not in kwargs:
raise InvalidArguments('Missing keyword argument "output".')
- self.outputs = kwargs['output']
- if not isinstance(self.outputs, list):
- self.outputs = [self.outputs]
+ self.outputs = listify(kwargs['output'])
# This will substitute values from the input into output and return it.
inputs = get_sources_string_names(self.sources)
values = get_filenames_templates_dict(inputs, [])
@@ -1606,18 +1600,13 @@ class CustomTarget(Target):
self.build_always = kwargs.get('build_always', False)
if not isinstance(self.build_always, bool):
raise InvalidArguments('Argument build_always must be a boolean.')
- extra_deps = kwargs.get('depends', [])
- if not isinstance(extra_deps, list):
- extra_deps = [extra_deps]
+ extra_deps, depend_files = extract_as_list(kwargs, 'depends', 'depend_files', pop = False)
for ed in extra_deps:
while hasattr(ed, 'held_object'):
ed = ed.held_object
if not isinstance(ed, (CustomTarget, BuildTarget)):
raise InvalidArguments('Can only depend on toplevel targets: custom_target or build_target (executable or a library)')
self.extra_depends.append(ed)
- depend_files = kwargs.get('depend_files', [])
- if not isinstance(depend_files, list):
- depend_files = [depend_files]
for i in depend_files:
if isinstance(i, (File, str)):
self.depend_files.append(i)
@@ -1767,8 +1756,7 @@ class Data:
self.sources = sources
self.install_dir = install_dir
self.install_mode = install_mode
- if not isinstance(self.sources, list):
- self.sources = [self.sources]
+ self.sources = listify(self.sources)
for s in self.sources:
assert(isinstance(s, File))
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index ec1613497..255a50637 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -16,7 +16,7 @@ import subprocess, os.path, tempfile
from .. import mlog
from .. import coredata
-from ..mesonlib import EnvironmentException, version_compare, Popen_safe
+from ..mesonlib import EnvironmentException, version_compare, Popen_safe, listify
from .compilers import (
GCC_MINGW,
@@ -1013,8 +1013,7 @@ class VisualStudioCCompiler(CCompiler):
def get_link_whole_for(self, args):
# Only since VS2015
- if not isinstance(args, list):
- args = [args]
+ args = listify(args)
return ['/WHOLEARCHIVE:' + x for x in args]
def get_instruction_set_args(self, instruction_set):
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index cc4837ad7..7c7f986f0 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -23,7 +23,7 @@ from enum import Enum
from .. import mlog
from .. import mesonlib
-from ..mesonlib import MesonException, Popen_safe, flatten, version_compare_many
+from ..mesonlib import MesonException, Popen_safe, flatten, version_compare_many, listify
# These must be defined in this file to avoid cyclical references.
@@ -374,10 +374,7 @@ class ExternalProgram:
def __init__(self, name, command=None, silent=False, search_dir=None):
self.name = name
if command is not None:
- if not isinstance(command, list):
- self.command = [command]
- else:
- self.command = command
+ self.command = listify(command)
else:
self.command = self._search(name, search_dir)
if not silent:
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py
index 12e0239dc..c0ac5a801 100644
--- a/mesonbuild/dependencies/misc.py
+++ b/mesonbuild/dependencies/misc.py
@@ -24,7 +24,7 @@ import sysconfig
from .. import mlog
from .. import mesonlib
-from ..mesonlib import Popen_safe
+from ..mesonlib import Popen_safe, extract_as_list
from ..environment import detect_cpu_family
from .base import DependencyException, DependencyMethods
@@ -132,9 +132,7 @@ class BoostDependency(ExternalDependency):
return args
def get_requested(self, kwargs):
- candidates = kwargs.get('modules', [])
- if not isinstance(candidates, list):
- candidates = [candidates]
+ candidates = extract_as_list(kwargs, 'modules')
for c in candidates:
if not isinstance(c, str):
raise DependencyException('Boost module argument is not a string.')
diff --git a/mesonbuild/dependencies/ui.py b/mesonbuild/dependencies/ui.py
index 99e017b38..8f183e54d 100644
--- a/mesonbuild/dependencies/ui.py
+++ b/mesonbuild/dependencies/ui.py
@@ -23,7 +23,7 @@ from collections import OrderedDict
from .. import mlog
from .. import mesonlib
-from ..mesonlib import MesonException, Popen_safe, version_compare
+from ..mesonlib import MesonException, Popen_safe, version_compare, extract_as_list
from ..environment import for_windows, detect_cpu
from .base import DependencyException, DependencyMethods
@@ -468,12 +468,9 @@ class WxDependency(ExternalDependency):
self.link_args = out.split()
def get_requested(self, kwargs):
- modules = 'modules'
- if modules not in kwargs:
+ if 'modules' not in kwargs:
return []
- candidates = kwargs[modules]
- if not isinstance(candidates, list):
- candidates = [candidates]
+ candidates = extract_as_list(kwargs, 'modules')
for c in candidates:
if not isinstance(c, str):
raise DependencyException('wxwidgets module argument is not a string')
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index fc0e4eef0..6e37dc2c9 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -21,7 +21,7 @@ from . import optinterpreter
from . import compilers
from .wrap import wrap, WrapMode
from . import mesonlib
-from .mesonlib import FileMode, Popen_safe
+from .mesonlib import FileMode, Popen_safe, listify, extract_as_list
from .dependencies import ExternalProgram
from .dependencies import InternalDependency, Dependency, DependencyException
from .interpreterbase import InterpreterBase
@@ -264,8 +264,7 @@ class DependencyHolder(InterpreterObject):
return self.held_object.get_version()
def pkgconfig_method(self, args, kwargs):
- if not isinstance(args, list):
- args = [args]
+ args = listify(args)
if len(args) != 1:
raise InterpreterException('get_pkgconfig_variable takes exactly one argument.')
varname = args[0]
@@ -669,9 +668,7 @@ class CompilerHolder(InterpreterObject):
if not isinstance(nobuiltins, bool):
raise InterpreterException('Type of no_builtin_args not a boolean.')
args = []
- incdirs = kwargs.get('include_directories', [])
- if not isinstance(incdirs, list):
- incdirs = [incdirs]
+ incdirs = extract_as_list(kwargs, 'include_directories')
for i in incdirs:
if not isinstance(i, IncludeDirsHolder):
raise InterpreterException('Include directories argument must be an include_directories object.')
@@ -688,8 +685,7 @@ class CompilerHolder(InterpreterObject):
def determine_dependencies(self, kwargs):
deps = kwargs.get('dependencies', None)
if deps is not None:
- if not isinstance(deps, list):
- deps = [deps]
+ deps = listify(deps)
final_deps = []
for d in deps:
try:
@@ -1460,8 +1456,7 @@ class Interpreter(InterpreterBase):
raise InterpreterException('Module returned a value of unknown type.')
def process_new_values(self, invalues):
- if not isinstance(invalues, list):
- invalues = [invalues]
+ invalues = listify(invalues)
for v in invalues:
if isinstance(v, (build.BuildTarget, build.CustomTarget, build.RunTarget)):
self.add_target(v.name, v)
@@ -1541,19 +1536,12 @@ class Interpreter(InterpreterBase):
version = kwargs.get('version', self.project_version)
if not isinstance(version, str):
raise InterpreterException('Version must be a string.')
- incs = kwargs.get('include_directories', [])
- if not isinstance(incs, list):
- incs = [incs]
- libs = kwargs.get('link_with', [])
- if not isinstance(libs, list):
- libs = [libs]
- sources = kwargs.get('sources', [])
- if not isinstance(sources, list):
- sources = [sources]
+ incs = extract_as_list(kwargs, 'include_directories')
+ libs = extract_as_list(kwargs, 'link_with')
+ sources = extract_as_list(kwargs, 'sources')
sources = self.source_strings_to_files(self.flatten(sources))
deps = self.flatten(kwargs.get('dependencies', []))
- if not isinstance(deps, list):
- deps = [deps]
+ deps = listify(deps)
compile_args = mesonlib.stringlistify(kwargs.get('compile_args', []))
link_args = mesonlib.stringlistify(kwargs.get('link_args', []))
final_deps = []
@@ -1741,8 +1729,7 @@ class Interpreter(InterpreterBase):
return ConfigurationDataHolder()
def parse_default_options(self, default_options):
- if not isinstance(default_options, list):
- default_options = [default_options]
+ default_options = listify(default_options)
for option in default_options:
if not isinstance(option, str):
mlog.debug(option)
@@ -2288,12 +2275,8 @@ class Interpreter(InterpreterBase):
elif len(args) == 1:
if 'command' not in kwargs:
raise InterpreterException('Missing "command" keyword argument')
- all_args = kwargs['command']
- if not isinstance(all_args, list):
- all_args = [all_args]
- deps = kwargs.get('depends', [])
- if not isinstance(deps, list):
- deps = [deps]
+ all_args = extract_as_list(kwargs, 'command')
+ deps = extract_as_list(kwargs, 'depends')
else:
raise InterpreterException('Run_target needs at least one positional argument.')
@@ -2344,8 +2327,7 @@ class Interpreter(InterpreterBase):
if isinstance(envlist, EnvironmentVariablesHolder):
env = envlist.held_object
else:
- if not isinstance(envlist, list):
- envlist = [envlist]
+ envlist = listify(envlist)
# Convert from array to environment object
env = EnvironmentVariablesHolder()
for e in envlist:
@@ -2374,9 +2356,7 @@ class Interpreter(InterpreterBase):
par = kwargs.get('is_parallel', True)
if not isinstance(par, bool):
raise InterpreterException('Keyword argument is_parallel must be a boolean.')
- cmd_args = kwargs.get('args', [])
- if not isinstance(cmd_args, list):
- cmd_args = [cmd_args]
+ cmd_args = extract_as_list(kwargs, 'args')
for i in cmd_args:
if not isinstance(i, (str, mesonlib.File, TargetHolder)):
raise InterpreterException('Command line arguments must be strings, files or targets.')
@@ -2515,9 +2495,7 @@ class Interpreter(InterpreterBase):
if not isinstance(install_dir, str):
raise InvalidArguments('Keyword argument install_dir not a string.')
if 'exclude_files' in kwargs:
- exclude = kwargs['exclude_files']
- if not isinstance(exclude, list):
- exclude = [exclude]
+ exclude = extract_as_list(kwargs, 'exclude_files')
for f in exclude:
if not isinstance(f, str):
raise InvalidArguments('Exclude argument not a string.')
@@ -2527,9 +2505,7 @@ class Interpreter(InterpreterBase):
else:
exclude_files = set()
if 'exclude_directories' in kwargs:
- exclude = kwargs['exclude_directories']
- if not isinstance(exclude, list):
- exclude = [exclude]
+ exclude = extract_as_list(kwargs, 'exclude_directories')
for d in exclude:
if not isinstance(d, str):
raise InvalidArguments('Exclude argument not a string.')
@@ -2692,9 +2668,7 @@ different subdirectory.
if re.fullmatch('[_a-zA-Z][_0-9a-zA-Z]*', setup_name) is None:
raise InterpreterException('Setup name may only contain alphanumeric characters.')
try:
- inp = kwargs.get('exe_wrapper', [])
- if not isinstance(inp, list):
- inp = [inp]
+ inp = extract_as_list(kwargs, 'exe_wrapper')
exe_wrapper = []
for i in inp:
if hasattr(i, 'held_object'):
@@ -2836,8 +2810,7 @@ different subdirectory.
is_cross = False
try:
kw_src = self.flatten(kwargs['sources'])
- if not isinstance(kw_src, list):
- kw_src = [kw_src]
+ kw_src = listify(kw_src)
except KeyError:
kw_src = []
sources += kw_src
@@ -2845,12 +2818,9 @@ different subdirectory.
objs = self.flatten(kwargs.get('objects', []))
kwargs['dependencies'] = self.flatten(kwargs.get('dependencies', []))
if 'extra_files' in kwargs:
- ef = kwargs['extra_files']
- if not isinstance(ef, list):
- ef = [ef]
+ ef = extract_as_list(kwargs, 'extra_files')
kwargs['extra_files'] = self.source_strings_to_files(ef)
- if not isinstance(objs, list):
- objs = [objs]
+ objs = listify(objs)
self.check_sources_exist(os.path.join(self.source_root, self.subdir), sources)
if targetholder is ExecutableHolder:
targetclass = build.Executable
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index 972c8f0c0..137d380a5 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -1201,9 +1201,7 @@ G_END_DECLS'''
arg_list = kwargs.get('packages')
if not arg_list:
return [], [], [], []
- if not isinstance(arg_list, list):
- arg_list = [arg_list]
-
+ arg_list = mesonlib.listify(arg_list)
vapi_depends = []
vapi_packages = []
vapi_includes = []
diff --git a/mesonbuild/modules/unstable_simd.py b/mesonbuild/modules/unstable_simd.py
index 828afecf1..b774cff18 100644
--- a/mesonbuild/modules/unstable_simd.py
+++ b/mesonbuild/modules/unstable_simd.py
@@ -73,9 +73,7 @@ class SimdModule(ExtensionModule):
}
lib_kwargs.update(basic_kwargs)
langarg_key = compiler.get_language() + '_args'
- old_lang_args = lib_kwargs.get(langarg_key, [])
- if not isinstance(old_lang_args, list):
- old_lang_args = [old_lang_args]
+ old_lang_args = mesonlib.extract_as_list(lib_kwargs, langarg_key)
all_lang_args = old_lang_args + args
lib_kwargs[langarg_key] = all_lang_args
result.append(interpreter.func_static_lib(None, [libname], lib_kwargs))