diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-03-09 22:42:01 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-03-09 22:42:01 +0200 |
commit | 347c2634311f8a70f2db5251358eace9f0e0eb38 (patch) | |
tree | fde6ff91a100199f1b3ed62b35f7dde6082227b8 /interpreter.py | |
parent | 68b50bd7328dc3fc7f9826d2f261e3a9116e5be9 (diff) | |
download | meson-347c2634311f8a70f2db5251358eace9f0e0eb38.zip meson-347c2634311f8a70f2db5251358eace9f0e0eb38.tar.gz meson-347c2634311f8a70f2db5251358eace9f0e0eb38.tar.bz2 |
Find and use external libraries.
Diffstat (limited to 'interpreter.py')
-rwxr-xr-x | interpreter.py | 41 |
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] |