diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-06-27 04:12:17 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-27 04:12:17 -0400 |
commit | 80ebc916f78ad736494ffee49f100134954acc2c (patch) | |
tree | 724f8c7390efd0536fa3a37082414a359ae9fd1f /mesonbuild/modules | |
parent | ee8fcd5f6729c0481c18309d6ad2beb0fdc67792 (diff) | |
parent | 3262be23dc3f01923a1d162a5914ba29f05416b7 (diff) | |
download | meson-80ebc916f78ad736494ffee49f100134954acc2c.zip meson-80ebc916f78ad736494ffee49f100134954acc2c.tar.gz meson-80ebc916f78ad736494ffee49f100134954acc2c.tar.bz2 |
Merge pull request #2001 from mesonbuild/kwcheck
Decorator to check for unknown keyword arguments
Diffstat (limited to 'mesonbuild/modules')
-rw-r--r-- | mesonbuild/modules/__init__.py | 16 | ||||
-rw-r--r-- | mesonbuild/modules/gnome.py | 22 | ||||
-rw-r--r-- | mesonbuild/modules/i18n.py | 4 | ||||
-rw-r--r-- | mesonbuild/modules/modtest.py | 2 | ||||
-rw-r--r-- | mesonbuild/modules/pkgconfig.py | 4 | ||||
-rw-r--r-- | mesonbuild/modules/python3.py | 13 | ||||
-rw-r--r-- | mesonbuild/modules/qt4.py | 2 | ||||
-rw-r--r-- | mesonbuild/modules/qt5.py | 2 | ||||
-rw-r--r-- | mesonbuild/modules/rpm.py | 2 | ||||
-rw-r--r-- | mesonbuild/modules/windows.py | 2 |
10 files changed, 65 insertions, 4 deletions
diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py index fde3b91..9d75525 100644 --- a/mesonbuild/modules/__init__.py +++ b/mesonbuild/modules/__init__.py @@ -2,10 +2,26 @@ import os from .. import build from .. import dependencies +from .. import mlog from ..mesonlib import MesonException +from ..interpreterbase import permittedKwargs, noKwargs + +class permittedSnippetKwargs: + + def __init__(self, permitted): + self.permitted = permitted + + def __call__(self, f): + def wrapped(s, interpreter, state, args, kwargs): + for k in kwargs: + if k not in self.permitted: + 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 _found_programs = {} + class ExtensionModule: def __init__(self): self.snippets = set() # List of methods that operate only on the interpreter. diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index 06a1fad..de66ef9 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -30,6 +30,7 @@ from .. import interpreter from . import GResourceTarget, GResourceHeaderTarget, GirTarget, TypelibTarget, VapiTarget from . import find_program, get_include_args from . import ExtensionModule +from . import noKwargs, permittedKwargs # gresource compilation is broken due to the way @@ -90,6 +91,8 @@ class GnomeModule(ExtensionModule): mlog.bold('https://github.com/mesonbuild/meson/issues/1387')) gdbuswarning_printed = True + @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) @@ -377,6 +380,10 @@ class GnomeModule(ExtensionModule): return cflags, ldflags, gi_includes + @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') @@ -595,6 +602,7 @@ class GnomeModule(ExtensionModule): rv = [scan_target, typelib_target] return ModuleReturnValue(rv, rv) + @noKwargs def compile_schemas(self, state, args, kwargs): if args: raise MesonException('Compile_schemas does not take positional arguments.') @@ -613,6 +621,7 @@ class GnomeModule(ExtensionModule): target_g = build.CustomTarget(targetname, state.subdir, kwargs) return ModuleReturnValue(target_g, [target_g]) + @permittedKwargs({'sources', 'media', 'symlink_media', 'languages'}) def yelp(self, state, args, kwargs): if len(args) < 1: raise MesonException('Yelp requires a project id') @@ -670,6 +679,10 @@ class GnomeModule(ExtensionModule): rv = [inscript, pottarget, potarget] return ModuleReturnValue(None, rv) + @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.') @@ -763,6 +776,7 @@ class GnomeModule(ExtensionModule): return args + @noKwargs def gtkdoc_html_dir(self, state, args, kwargs): if len(args) != 1: raise MesonException('Must have exactly one argument.') @@ -792,6 +806,7 @@ class GnomeModule(ExtensionModule): return [] + @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.') @@ -820,6 +835,9 @@ class GnomeModule(ExtensionModule): ct = build.CustomTarget(target_name, state.subdir, custom_kwargs) return ModuleReturnValue(ct, [ct]) + @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.') @@ -932,6 +950,8 @@ class GnomeModule(ExtensionModule): # https://github.com/mesonbuild/meson/issues/973 absolute_paths=True) + @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( @@ -1070,6 +1090,8 @@ class GnomeModule(ExtensionModule): link_with += self._get_vapi_link_with(dep) return link_with + @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 c4e29cf..d35c7f1 100644 --- a/mesonbuild/modules/i18n.py +++ b/mesonbuild/modules/i18n.py @@ -20,6 +20,7 @@ from .. import coredata, mesonlib, build from ..mesonlib import MesonException from . import ModuleReturnValue from . import ExtensionModule +from . import permittedKwargs PRESET_ARGS = { 'glib': [ @@ -55,6 +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({'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: @@ -78,6 +81,7 @@ class I18nModule(ExtensionModule): ct = build.CustomTarget(kwargs['output'] + '_merge', state.subdir, kwargs) return ModuleReturnValue(ct, [ct]) + @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 3e11b70..dd2f215 100644 --- a/mesonbuild/modules/modtest.py +++ b/mesonbuild/modules/modtest.py @@ -14,9 +14,11 @@ from . import ModuleReturnValue from . import ExtensionModule +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 09c615a..7b0bb83 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -19,6 +19,7 @@ from .. import mesonlib from .. import mlog from . import ModuleReturnValue from . import ExtensionModule +from . import permittedKwargs class PkgConfigModule(ExtensionModule): @@ -114,6 +115,9 @@ class PkgConfigModule(ExtensionModule): processed_libs.append(l) return processed_libs + @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/python3.py b/mesonbuild/modules/python3.py index 9f01043..6431047 100644 --- a/mesonbuild/modules/python3.py +++ b/mesonbuild/modules/python3.py @@ -18,6 +18,11 @@ from .. import mesonlib, dependencies from . import ExtensionModule from mesonbuild.modules import ModuleReturnValue +from . import noKwargs, permittedSnippetKwargs +from ..interpreter import shlib_kwargs + +mod_kwargs = set() +mod_kwargs.update(shlib_kwargs) class Python3Module(ExtensionModule): @@ -25,6 +30,7 @@ class Python3Module(ExtensionModule): super().__init__() self.snippets.add('extension_module') + @permittedSnippetKwargs(mod_kwargs) def extension_module(self, interpreter, state, args, kwargs): if 'name_prefix' in kwargs: raise mesonlib.MesonException('Name_prefix is set automatically, specifying it is forbidden.') @@ -43,20 +49,19 @@ class Python3Module(ExtensionModule): kwargs['name_suffix'] = suffix return interpreter.func_shared_module(None, args, kwargs) + @noKwargs def find_python(self, state, args, kwargs): py3 = dependencies.ExternalProgram('python3', sys.executable, silent=True) return ModuleReturnValue(py3, [py3]) + @noKwargs def language_version(self, state, args, kwargs): - if args or kwargs: - raise mesonlib.MesonException('language_version() takes no arguments.') return ModuleReturnValue(sysconfig.get_python_version(), []) + @noKwargs def sysconfig_path(self, state, args, kwargs): if len(args) != 1: raise mesonlib.MesonException('sysconfig_path() requires passing the name of path to get.') - if kwargs: - raise mesonlib.MesonException('sysconfig_path() does not accept keywords.') path_name = args[0] valid_names = sysconfig.get_path_names() if path_name not in valid_names: diff --git a/mesonbuild/modules/qt4.py b/mesonbuild/modules/qt4.py index 0386291..4056b6d 100644 --- a/mesonbuild/modules/qt4.py +++ b/mesonbuild/modules/qt4.py @@ -20,6 +20,7 @@ from ..dependencies import Qt4Dependency from . import ExtensionModule import xml.etree.ElementTree as ET from . import ModuleReturnValue +from . import permittedKwargs class Qt4Module(ExtensionModule): tools_detected = False @@ -96,6 +97,7 @@ class Qt4Module(ExtensionModule): except Exception: return [] + @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 6497694..6194a23 100644 --- a/mesonbuild/modules/qt5.py +++ b/mesonbuild/modules/qt5.py @@ -20,6 +20,7 @@ from ..dependencies import Qt5Dependency from . import ExtensionModule import xml.etree.ElementTree as ET from . import ModuleReturnValue +from . import permittedKwargs class Qt5Module(ExtensionModule): tools_detected = False @@ -102,6 +103,7 @@ class Qt5Module(ExtensionModule): except Exception: return [] + @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/rpm.py b/mesonbuild/modules/rpm.py index 17396ae..b0a8db9 100644 --- a/mesonbuild/modules/rpm.py +++ b/mesonbuild/modules/rpm.py @@ -22,11 +22,13 @@ from .. import mlog from . import GirTarget, TypelibTarget from . import ModuleReturnValue from . import ExtensionModule +from . import noKwargs import os class RPMModule(ExtensionModule): + @noKwargs def generate_spec_template(self, state, args, kwargs): compiler_deps = set() for compiler in state.compilers.values(): diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py index 3fb0107..6fef5bb 100644 --- a/mesonbuild/modules/windows.py +++ b/mesonbuild/modules/windows.py @@ -20,6 +20,7 @@ from ..mesonlib import MesonException from . import get_include_args from . import ModuleReturnValue from . import ExtensionModule +from . import permittedKwargs class WindowsModule(ExtensionModule): @@ -29,6 +30,7 @@ class WindowsModule(ExtensionModule): return compilers[l] raise MesonException('Resource compilation requires a C or C++ compiler.') + @permittedKwargs({'args', 'include_directories'}) def compile_resources(self, state, args, kwargs): comp = self.detect_compiler(state.compilers) |