aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-03-09 22:42:01 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-03-09 22:42:01 +0200
commit347c2634311f8a70f2db5251358eace9f0e0eb38 (patch)
treefde6ff91a100199f1b3ed62b35f7dde6082227b8 /interpreter.py
parent68b50bd7328dc3fc7f9826d2f261e3a9116e5be9 (diff)
downloadmeson-347c2634311f8a70f2db5251358eace9f0e0eb38.zip
meson-347c2634311f8a70f2db5251358eace9f0e0eb38.tar.gz
meson-347c2634311f8a70f2db5251358eace9f0e0eb38.tar.bz2
Find and use external libraries.
Diffstat (limited to 'interpreter.py')
-rwxr-xr-xinterpreter.py41
1 files changed, 39 insertions, 2 deletions
diff --git a/interpreter.py b/interpreter.py
index 1191d59..f9c566a 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -40,11 +40,11 @@ class InterpreterObject():
raise InvalidCode('Unknown method "%s" in object.' % method_name)
class ExternalProgram(InterpreterObject):
-
def __init__(self, name, fullpath=None):
InterpreterObject.__init__(self)
self.name = name
self.fullpath = fullpath
+ #self.methods.update({'found': self.found_method})
def found(self):
return self.fullpath is not None
@@ -58,6 +58,25 @@ class ExternalProgram(InterpreterObject):
def get_name(self):
return self.name
+class ExternalLibrary(InterpreterObject):
+ def __init__(self, name, fullpath=None):
+ InterpreterObject.__init__(self)
+ self.name = name
+ self.fullpath = fullpath
+ #self.methods.update({'found': self.found_method})
+
+ def found(self):
+ return self.fullpath is not None
+
+ def found_method(self, args, kwargs):
+ return self.found()
+
+ def get_filename(self):
+ return self.fullpath
+
+ def get_name(self):
+ return self.name
+
class Generator(InterpreterObject):
def __init__(self, args, kwargs):
@@ -349,7 +368,8 @@ class BuildTarget(InterpreterObject):
def add_external_deps(self, deps):
for dep in deps:
- if not isinstance(dep, environment.Dependency):
+ if not isinstance(dep, environment.Dependency) and\
+ not isinstance(dep, ExternalLibrary):
raise InvalidArguments('Argument is not an external dependency')
self.external_deps.append(dep)
@@ -496,6 +516,7 @@ class Interpreter():
'include_directories' : self.func_include_directories,
'add_global_arguments' : self.func_add_global_arguments,
'find_program' : self.func_find_program,
+ 'find_library' : self.func_find_library,
}
def get_build_def_files(self):
@@ -625,6 +646,22 @@ class Interpreter():
raise InvalidArguments('Line %d: program "%s" not found.' % (node.lineno(), exename))
return progobj
+ def func_find_library(self, node, args, kwargs):
+ self.validate_arguments(args, 1, [str])
+ required = kwargs.get('required', False)
+ if not isinstance(required, bool):
+ raise InvalidArguments('Line %d: "required" argument must be a boolean.' % node.lineno())
+ libname = args[0]
+ if libname in self.coredata.ext_libs and\
+ self.coredata.ext_libs[libname].found():
+ return self.coredata.ext_progs[libname]
+ result = self.environment.find_library(libname)
+ libobj = ExternalLibrary(libname, result)
+ self.coredata.ext_libs[libname] = libobj
+ if required and not libobj.found():
+ raise InvalidArguments('Line %d: external library "%s" not found.' % (node.lineno(), libname))
+ return libobj
+
def func_find_dep(self, node, args, kwargs):
self.validate_arguments(args, 1, [str])
name = args[0]