aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/Release-notes-for-0.42.0.md4
-rw-r--r--mesonbuild/interpreter.py60
-rw-r--r--mesonbuild/interpreterbase.py2
-rw-r--r--mesonbuild/modules/__init__.py3
-rw-r--r--mesonbuild/modules/gnome.py38
-rw-r--r--mesonbuild/modules/i18n.py6
-rw-r--r--mesonbuild/modules/modtest.py1
-rw-r--r--mesonbuild/modules/pkgconfig.py6
-rw-r--r--mesonbuild/modules/qt4.py2
-rw-r--r--mesonbuild/modules/qt5.py2
-rw-r--r--mesonbuild/modules/windows.py2
11 files changed, 64 insertions, 62 deletions
diff --git a/docs/markdown/Release-notes-for-0.42.0.md b/docs/markdown/Release-notes-for-0.42.0.md
index 112d16f..7c66870 100644
--- a/docs/markdown/Release-notes-for-0.42.0.md
+++ b/docs/markdown/Release-notes-for-0.42.0.md
@@ -15,4 +15,6 @@ Mercurial. As before, this remains possible only with the Ninja backend.
## Keyword argument verification
Meson will now check the keyword arguments used when calling any function
-and error out if any of keyword arguments is not known.
+and print a warning if any of the keyword arguments is not known. In the
+future this will become a hard error.
+
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 91d1653..f7df18a 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1252,20 +1252,18 @@ buildtarget_kwargs = set(['build_by_default',
'vs_module_defs',
])
-build_target_common_kwargs = set()
-build_target_common_kwargs.update(buildtarget_kwargs)
-build_target_common_kwargs.update(lang_arg_kwargs)
-build_target_common_kwargs.update(pch_kwargs)
-build_target_common_kwargs.update(vala_kwargs)
-build_target_common_kwargs.update(rust_kwargs)
-build_target_common_kwargs.update(cs_kwargs)
+build_target_common_kwargs = (
+ buildtarget_kwargs |
+ lang_arg_kwargs |
+ pch_kwargs |
+ vala_kwargs |
+ rust_kwargs |
+ cs_kwargs)
exe_kwargs = set()
exe_kwargs.update(build_target_common_kwargs)
-shlib_kwargs = set()
-shlib_kwargs.update(build_target_common_kwargs)
-shlib_kwargs.update(['version', 'soversion'])
+shlib_kwargs = (build_target_common_kwargs) | {'version', 'soversion'}
shmod_kwargs = shlib_kwargs
stlib_kwargs = shlib_kwargs
@@ -1275,33 +1273,33 @@ jar_kwargs.update(['main_class'])
build_target_kwargs = exe_kwargs.copy()
build_target_kwargs.update(['target_type'])
-permitted_kwargs = {'add_global_arguments': set(['language']),
- 'add_languages': set(['required']),
- 'add_project_arguments': set(['language']),
- 'add_test_setup': set(['exe_wrapper', 'gdb', 'timeout_multiplier', 'env']),
- 'benchmark': set(['args', 'env', 'should_fail', 'timeout', 'workdir', 'suite']),
+permitted_kwargs = {'add_global_arguments': {'language'},
+ 'add_languages': {'required'},
+ 'add_project_arguments': {'language'},
+ 'add_test_setup': {'exe_wrapper', 'gdb', 'timeout_multiplier', 'env'},
+ 'benchmark': {'args', 'env', 'should_fail', 'timeout', 'workdir', 'suite'},
'build_target': build_target_kwargs,
- 'configure_file': set(['input', 'output', 'configuration', 'command', 'install_dir', 'capture', 'install']),
- 'custom_target': set(['input', 'output', 'command', 'install', 'install_dir', 'build_always', 'capture', 'depends', 'depend_files', 'depfile', 'build_by_default']),
- 'declare_dependency': set(['include_directories', 'link_with', 'sources', 'dependencies', 'compile_args', 'link_args', 'version']),
+ 'configure_file': {'input', 'output', 'configuration', 'command', 'install_dir', 'capture', 'install'},
+ 'custom_target': {'input', 'output', 'command', 'install', 'install_dir', 'build_always', 'capture', 'depends', 'depend_files', 'depfile', 'build_by_default'},
+ 'declare_dependency': {'include_directories', 'link_with', 'sources', 'dependencies', 'compile_args', 'link_args', 'version'},
'executable': exe_kwargs,
- 'find_program': set(['required',]),
- 'generator': set(['arguments', 'output', 'depfile']),
- 'include_directories': set(['is_system']),
- 'install_data': set(['install_dir', 'install_mode', 'sources']),
- 'install_headers': set(['install_dir', 'subdir']),
- 'install_man': set(['install_dir']),
- 'install_subdir': set(['install_dir', 'install_mode']),
+ 'find_program': {'required'},
+ 'generator': {'arguments', 'output', 'depfile'},
+ 'include_directories': {'is_system'},
+ 'install_data': {'install_dir', 'install_mode', 'sources'},
+ 'install_headers': {'install_dir', 'subdir'},
+ 'install_man': {'install_dir'},
+ 'install_subdir': {'install_dir', 'install_mode'},
'jar': jar_kwargs,
- 'project': set(['version', 'meson_version', 'default_options', 'license', 'subproject_dir']),
- 'run_target': set(['command', 'depends']),
+ 'project': {'version', 'meson_version', 'default_options', 'license', 'subproject_dir'},
+ 'run_target': {'command', 'depends'},
'shared_library': shlib_kwargs,
'shared_module': shmod_kwargs,
'static_library': stlib_kwargs,
- 'subproject': set(['version', 'default_options']),
- 'test': set(['args', 'env', 'is_parallel', 'should_fail', 'timeout', 'workdir', 'suite']),
- 'vcs_tag': set(['input', 'output', 'fallback', 'command', 'replace_string']),
-}
+ 'subproject': {'version', 'default_options'},
+ 'test': {'args', 'env', 'is_parallel', 'should_fail', 'timeout', 'workdir', 'suite'},
+ 'vcs_tag': {'input', 'output', 'fallback', 'command', 'replace_string'},
+ }
class Interpreter(InterpreterBase):
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index d57cb24..d44f71b 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -64,7 +64,7 @@ class permittedKwargs:
def wrapped(s, node, args, kwargs):
for k in kwargs:
if k not in self.permitted:
- raise InvalidArguments('Invalid keyword argument %s.' % k)
+ mlog.warning('Passed invalid keyword argument %s. This will become a hard error in the future.' % k)
return f(s, node, args, kwargs)
return wrapped
diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py
index 1f2b342..9d75525 100644
--- a/mesonbuild/modules/__init__.py
+++ b/mesonbuild/modules/__init__.py
@@ -2,6 +2,7 @@ import os
from .. import build
from .. import dependencies
+from .. import mlog
from ..mesonlib import MesonException
from ..interpreterbase import permittedKwargs, noKwargs
@@ -14,7 +15,7 @@ class permittedSnippetKwargs:
def wrapped(s, interpreter, state, args, kwargs):
for k in kwargs:
if k not in self.permitted:
- raise InvalidArguments('Invalid keyword argument %s.' % k)
+ mlog.warning('Passed invalid keyword argument %s. This will become a hard error in the future.' % k)
return f(s, interpreter, state, args, kwargs)
return wrapped
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index 47a50f0..de66ef9 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -91,8 +91,8 @@ class GnomeModule(ExtensionModule):
mlog.bold('https://github.com/mesonbuild/meson/issues/1387'))
gdbuswarning_printed = True
- @permittedKwargs(set(['source_dir', 'c_name', 'dependencies', 'export', 'gresource_bundle', 'install_header',
- 'install', 'install_dir', 'extra_args']))
+ @permittedKwargs({'source_dir', 'c_name', 'dependencies', 'export', 'gresource_bundle', 'install_header',
+ 'install', 'install_dir', 'extra_args'})
def compile_resources(self, state, args, kwargs):
self.__print_gresources_warning(state)
glib_version = self._get_native_glib_version(state)
@@ -380,10 +380,10 @@ class GnomeModule(ExtensionModule):
return cflags, ldflags, gi_includes
- @permittedKwargs(set(['sources', 'nsversion', 'namespace', 'symbol_prefix', 'identifier_prefix',
- 'export_packagse', 'includes', 'dependencies', 'link_with', 'include_directories',
- 'install', 'install_dir_gir', 'install_dir_typelib', 'extra_args',
- 'packages']))
+ @permittedKwargs({'sources', 'nsversion', 'namespace', 'symbol_prefix', 'identifier_prefix',
+ 'export_packagse', 'includes', 'dependencies', 'link_with', 'include_directories',
+ 'install', 'install_dir_gir', 'install_dir_typelib', 'extra_args',
+ 'packages'})
def generate_gir(self, state, args, kwargs):
if len(args) != 1:
raise MesonException('Gir takes one argument')
@@ -621,7 +621,7 @@ class GnomeModule(ExtensionModule):
target_g = build.CustomTarget(targetname, state.subdir, kwargs)
return ModuleReturnValue(target_g, [target_g])
- @permittedKwargs(set(['sources', 'media', 'symlink_media', 'languages']))
+ @permittedKwargs({'sources', 'media', 'symlink_media', 'languages'})
def yelp(self, state, args, kwargs):
if len(args) < 1:
raise MesonException('Yelp requires a project id')
@@ -679,10 +679,10 @@ class GnomeModule(ExtensionModule):
rv = [inscript, pottarget, potarget]
return ModuleReturnValue(None, rv)
- @permittedKwargs(set(['main_xml', 'main_sgml', 'src_dir', 'dependencies', 'install',
- 'install_dir', 'scan_args', 'scanobjs_args', 'gobject_typesfile',
- 'fixxref_args', 'html_args', 'html_assets', 'content_files',
- 'mkdb_args']))
+ @permittedKwargs({'main_xml', 'main_sgml', 'src_dir', 'dependencies', 'install',
+ 'install_dir', 'scan_args', 'scanobjs_args', 'gobject_typesfile',
+ 'fixxref_args', 'html_args', 'html_assets', 'content_files',
+ 'mkdb_args'})
def gtkdoc(self, state, args, kwargs):
if len(args) != 1:
raise MesonException('Gtkdoc must have one positional argument.')
@@ -806,7 +806,7 @@ class GnomeModule(ExtensionModule):
return []
- @permittedKwargs(set(['interface_prefix', 'namespace', 'object_manager']))
+ @permittedKwargs({'interface_prefix', 'namespace', 'object_manager'})
def gdbus_codegen(self, state, args, kwargs):
if len(args) != 2:
raise MesonException('Gdbus_codegen takes two arguments, name and xml file.')
@@ -835,9 +835,9 @@ class GnomeModule(ExtensionModule):
ct = build.CustomTarget(target_name, state.subdir, custom_kwargs)
return ModuleReturnValue(ct, [ct])
- @permittedKwargs(set(['sources', 'c_template', 'h_template', 'install_header', 'install_dir',
- 'comments', 'identifier_prefix', 'symbol_prefix', 'eprod', 'vprod',
- 'fhead', 'fprod', 'ftail', 'vhead', 'vtail', 'depends']))
+ @permittedKwargs({'sources', 'c_template', 'h_template', 'install_header', 'install_dir',
+ 'comments', 'identifier_prefix', 'symbol_prefix', 'eprod', 'vprod',
+ 'fhead', 'fprod', 'ftail', 'vhead', 'vtail', 'depends'})
def mkenums(self, state, args, kwargs):
if len(args) != 1:
raise MesonException('Mkenums requires one positional argument.')
@@ -950,8 +950,8 @@ class GnomeModule(ExtensionModule):
# https://github.com/mesonbuild/meson/issues/973
absolute_paths=True)
- @permittedKwargs(set(['sources', 'prefix', 'install_header', 'install_dir', 'stdinc',
- 'nostdinc', 'internal', 'skip_source', 'valist_marshallers']))
+ @permittedKwargs({'sources', 'prefix', 'install_header', 'install_dir', 'stdinc',
+ 'nostdinc', 'internal', 'skip_source', 'valist_marshallers'})
def genmarshal(self, state, args, kwargs):
if len(args) != 1:
raise MesonException(
@@ -1090,8 +1090,8 @@ class GnomeModule(ExtensionModule):
link_with += self._get_vapi_link_with(dep)
return link_with
- @permittedKwargs(set(['sources', 'packages', 'metadata_dirs', 'gir_dirs',
- 'vapi_dirs', 'install', 'install_dir']))
+ @permittedKwargs({'sources', 'packages', 'metadata_dirs', 'gir_dirs',
+ 'vapi_dirs', 'install', 'install_dir'})
def generate_vapi(self, state, args, kwargs):
if len(args) != 1:
raise MesonException('The library name is required')
diff --git a/mesonbuild/modules/i18n.py b/mesonbuild/modules/i18n.py
index 3cea189..d35c7f1 100644
--- a/mesonbuild/modules/i18n.py
+++ b/mesonbuild/modules/i18n.py
@@ -56,8 +56,8 @@ class I18nModule(ExtensionModule):
src_dir = path.join(state.environment.get_source_dir(), state.subdir)
return [path.join(src_dir, d) for d in dirs]
- @permittedKwargs(set(['languages', 'data_dirs', 'preset', 'args', 'po_dir', 'type',
- 'input', 'output', 'install', 'install_dir']))
+ @permittedKwargs({'languages', 'data_dirs', 'preset', 'args', 'po_dir', 'type',
+ 'input', 'output', 'install', 'install_dir'})
def merge_file(self, state, args, kwargs):
podir = kwargs.pop('po_dir', None)
if not podir:
@@ -81,7 +81,7 @@ class I18nModule(ExtensionModule):
ct = build.CustomTarget(kwargs['output'] + '_merge', state.subdir, kwargs)
return ModuleReturnValue(ct, [ct])
- @permittedKwargs(set(['po_dir', 'data_dirs', 'type', 'languages']))
+ @permittedKwargs({'po_dir', 'data_dirs', 'type', 'languages'})
def gettext(self, state, args, kwargs):
if len(args) != 1:
raise coredata.MesonException('Gettext requires one positional argument (package name).')
diff --git a/mesonbuild/modules/modtest.py b/mesonbuild/modules/modtest.py
index dd6cae3..dd2f215 100644
--- a/mesonbuild/modules/modtest.py
+++ b/mesonbuild/modules/modtest.py
@@ -18,6 +18,7 @@ from . import noKwargs
class TestModule(ExtensionModule):
+ @noKwargs
def print_hello(self, state, args, kwargs):
print('Hello from a Meson module')
rv = ModuleReturnValue(None, [])
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py
index 50dacdd..7b0bb83 100644
--- a/mesonbuild/modules/pkgconfig.py
+++ b/mesonbuild/modules/pkgconfig.py
@@ -115,9 +115,9 @@ class PkgConfigModule(ExtensionModule):
processed_libs.append(l)
return processed_libs
- @permittedKwargs(set(['libraries', 'version', 'name', 'description', 'filebase',
- 'subdirs', 'requires', 'requires_private', 'libraries_private',
- 'install_dir', 'variables']))
+ @permittedKwargs({'libraries', 'version', 'name', 'description', 'filebase',
+ 'subdirs', 'requires', 'requires_private', 'libraries_private',
+ 'install_dir', 'variables'})
def generate(self, state, args, kwargs):
if len(args) > 0:
raise mesonlib.MesonException('Pkgconfig_gen takes no positional arguments.')
diff --git a/mesonbuild/modules/qt4.py b/mesonbuild/modules/qt4.py
index f5b1070..4056b6d 100644
--- a/mesonbuild/modules/qt4.py
+++ b/mesonbuild/modules/qt4.py
@@ -97,7 +97,7 @@ class Qt4Module(ExtensionModule):
except Exception:
return []
- @permittedKwargs(set(['moc_headers', 'moc_sources', 'ui_files', 'qresources', 'method']))
+ @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):
diff --git a/mesonbuild/modules/qt5.py b/mesonbuild/modules/qt5.py
index 4688ed0..6194a23 100644
--- a/mesonbuild/modules/qt5.py
+++ b/mesonbuild/modules/qt5.py
@@ -103,7 +103,7 @@ class Qt5Module(ExtensionModule):
except Exception:
return []
- @permittedKwargs(set(['moc_headers', 'moc_sources', 'ui_files', 'qresources', 'method']))
+ @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):
diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py
index af6f458..6fef5bb 100644
--- a/mesonbuild/modules/windows.py
+++ b/mesonbuild/modules/windows.py
@@ -30,7 +30,7 @@ class WindowsModule(ExtensionModule):
return compilers[l]
raise MesonException('Resource compilation requires a C or C++ compiler.')
- @permittedKwargs(set(['args', 'include_directories']))
+ @permittedKwargs({'args', 'include_directories'})
def compile_resources(self, state, args, kwargs):
comp = self.detect_compiler(state.compilers)