aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-06-27 04:12:17 -0400
committerGitHub <noreply@github.com>2017-06-27 04:12:17 -0400
commit80ebc916f78ad736494ffee49f100134954acc2c (patch)
tree724f8c7390efd0536fa3a37082414a359ae9fd1f /mesonbuild/modules
parentee8fcd5f6729c0481c18309d6ad2beb0fdc67792 (diff)
parent3262be23dc3f01923a1d162a5914ba29f05416b7 (diff)
downloadmeson-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__.py16
-rw-r--r--mesonbuild/modules/gnome.py22
-rw-r--r--mesonbuild/modules/i18n.py4
-rw-r--r--mesonbuild/modules/modtest.py2
-rw-r--r--mesonbuild/modules/pkgconfig.py4
-rw-r--r--mesonbuild/modules/python3.py13
-rw-r--r--mesonbuild/modules/qt4.py2
-rw-r--r--mesonbuild/modules/qt5.py2
-rw-r--r--mesonbuild/modules/rpm.py2
-rw-r--r--mesonbuild/modules/windows.py2
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)