diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2015-03-04 23:53:35 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2015-03-04 23:53:35 +0200 |
commit | ec491e200ba82f6f6d0df2f10ae4a607efeb3657 (patch) | |
tree | fab7d7f7fd904510399cd71d6575128bb103def8 /interpreter.py | |
parent | 4745b07e9924ad5dd48d23766833be0ba5749a99 (diff) | |
download | meson-ec491e200ba82f6f6d0df2f10ae4a607efeb3657.zip meson-ec491e200ba82f6f6d0df2f10ae4a607efeb3657.tar.gz meson-ec491e200ba82f6f6d0df2f10ae4a607efeb3657.tar.bz2 |
A very simple module implementation to get things going.
Diffstat (limited to 'interpreter.py')
-rw-r--r-- | interpreter.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/interpreter.py b/interpreter.py index ffbee6d..c8947c2 100644 --- a/interpreter.py +++ b/interpreter.py @@ -22,6 +22,7 @@ import optinterpreter import wrap import mesonlib import os, sys, platform, subprocess, shutil, uuid, re +import importlib class InterpreterException(coredata.MesonException): pass @@ -592,6 +593,19 @@ class CompilerHolder(InterpreterObject): mlog.log('Has header "%s":' % string, h) return haz +class ModuleHolder(InterpreterObject): + def __init__(self, modname): + InterpreterObject.__init__(self) + self.modname = modname + self.m = importlib.import_module('modules.' + modname) + + def method_call(self, method_name, args, kwargs): + try: + fn = getattr(self.m, method_name) + except AttributeError: + raise InvalidArguments('Module %s does not have method %s.' % (self.modname, method_name)) + fn(args, kwargs) + class MesonMain(InterpreterObject): def __init__(self, build, interpreter): InterpreterObject.__init__(self) @@ -708,6 +722,7 @@ class Interpreter(): self.global_args_frozen = False self.subprojects = {} self.subproject_stack = [] + self.modules = {} def build_func_dict(self): self.funcs = {'project' : self.func_project, @@ -741,6 +756,7 @@ class Interpreter(): 'pkgconfig_gen' : self.func_pkgconfig_gen, 'vcs_tag' : self.func_vcs_tag, 'set_variable' : self.func_set_variable, + 'import' : self.func_import, } def get_build_def_files(self): @@ -798,6 +814,16 @@ class Interpreter(): value = self.to_native(args[1]) self.set_variable(varname, value) + def func_import(self, node, args, kwargs): + if len(args) != 1: + raise InvalidCode('Import takes one argument.') + modname = args[0] + if not isinstance(modname, str): + raise InvalidCode('Argument to import was not a string') + if not modname in self.modules: + self.modules[modname] = ModuleHolder(modname) + return self.modules[modname] + def set_variable(self, varname, variable): if variable is None: raise InvalidCode('Can not assign None to variable.') |