aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2015-03-04 23:53:35 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2015-03-04 23:53:35 +0200
commitec491e200ba82f6f6d0df2f10ae4a607efeb3657 (patch)
treefab7d7f7fd904510399cd71d6575128bb103def8 /interpreter.py
parent4745b07e9924ad5dd48d23766833be0ba5749a99 (diff)
downloadmeson-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.py26
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.')