aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbparser.py2
-rwxr-xr-xenvironment.py2
-rwxr-xr-xgenerators.py6
-rwxr-xr-xinterpreter.py21
-rw-r--r--test cases/29 external dep/builder.txt8
-rw-r--r--test cases/29 external dep/prog.c8
6 files changed, 33 insertions, 14 deletions
diff --git a/bparser.py b/bparser.py
index 31aa2cf..1f4bdc2 100755
--- a/bparser.py
+++ b/bparser.py
@@ -54,7 +54,7 @@ t_LBRACKET = '\['
t_RBRACKET = '\]'
t_LBRACE = '\{'
t_RBRACE = '\}'
-t_COMMENT = '\#[^\n]*'
+t_ignore_COMMENT = '\\#.*?(?=\\n)'
t_COMMA = ','
t_DOT = '\.'
t_COLON = ':'
diff --git a/environment.py b/environment.py
index efd4949..699274a 100755
--- a/environment.py
+++ b/environment.py
@@ -337,7 +337,7 @@ class PkgConfigDependency(Dependency):
PkgConfigDependency.pkgconfig_found = True
# Fixme, move to environment.
-def find_external_dependency(name):
+def find_external_dependency(name, kwargs):
# Add detectors for non-pkg-config deps (e.g. Boost) etc here.
return PkgConfigDependency(name)
diff --git a/generators.py b/generators.py
index f23ec20..edc3176 100755
--- a/generators.py
+++ b/generators.py
@@ -596,6 +596,9 @@ echo Run compile.sh before this or bad things will happen.
linker = self.build.compilers[0] # Fixme.
commands = []
commands += linker.get_exelist()
+ commands += linker.get_output_flags()
+ commands.append(outname)
+ commands += obj_list
if isinstance(target, interpreter.Executable):
commands += linker.get_std_exe_link_flags()
elif isinstance(target, interpreter.SharedLibrary):
@@ -607,9 +610,6 @@ echo Run compile.sh before this or bad things will happen.
raise RuntimeError('Unknown build target type.')
for dep in target.get_external_deps():
commands += dep.get_link_flags()
- commands += linker.get_output_flags()
- commands.append(outname)
- commands += obj_list
commands += self.build_target_link_arguments(target.get_dependencies())
quoted = shell_quote(commands)
outfile.write('\necho Linking \\"%s\\".\n' % target.get_basename())
diff --git a/interpreter.py b/interpreter.py
index 6454dd4..c353dbe 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -156,8 +156,6 @@ class BuildTarget(InterpreterObject):
self.sources = sources
self.external_deps = []
self.include_dirs = []
- self.methods.update({'add_dep': self.add_dep_method,
- })
self.link_targets = []
self.filename = 'no_name'
self.need_install = False
@@ -192,6 +190,10 @@ class BuildTarget(InterpreterObject):
if not isinstance(inclist, list):
inclist = [inclist]
self.add_include_dirs(inclist)
+ deplist = kwargs.get('deps', [])
+ if not isinstance(deplist, list):
+ deplist = [deplist]
+ self.add_external_deps(deplist)
def get_subdir(self):
return self.subdir
@@ -226,15 +228,16 @@ class BuildTarget(InterpreterObject):
def get_include_dirs(self):
return self.include_dirs
- def add_external_dep(self, dep):
- if not isinstance(dep, environment.PkgConfigDependency):
- raise InvalidArguments('Argument is not an external dependency')
- self.external_deps.append(dep)
+ def add_external_deps(self, deps):
+ for dep in deps:
+ if not isinstance(dep, environment.Dependency):
+ raise InvalidArguments('Argument is not an external dependency')
+ self.external_deps.append(dep)
def get_external_deps(self):
return self.external_deps
- def add_dep_method(self, args):
+ def add_dep(self, args):
[self.add_external_dep(dep) for dep in args]
def link(self, target):
@@ -464,10 +467,10 @@ class Interpreter():
comp.sanity_check(self.environment.get_scratch_dir())
self.build.compilers.append(comp)
- def func_find_dep(self, node, args):
+ def func_find_dep(self, node, args, kwargs):
self.validate_arguments(args, 1, [str])
name = args[0]
- dep = environment.find_external_dependency(name)
+ dep = environment.find_external_dependency(name, kwargs)
return dep
def func_executable(self, node, args, kwargs):
diff --git a/test cases/29 external dep/builder.txt b/test cases/29 external dep/builder.txt
new file mode 100644
index 0000000..6f60698
--- /dev/null
+++ b/test cases/29 external dep/builder.txt
@@ -0,0 +1,8 @@
+project('external dependency', 'c')
+
+# Zlib is probably on all dev machines.
+
+dep = find_dep('zlib', required : true)
+exe = executable('zlibprog', 'prog.c', deps : dep)
+
+add_test('zlibtest', exe)
diff --git a/test cases/29 external dep/prog.c b/test cases/29 external dep/prog.c
new file mode 100644
index 0000000..cea986d
--- /dev/null
+++ b/test cases/29 external dep/prog.c
@@ -0,0 +1,8 @@
+#include<zlib.h>
+
+int main(int argc, char **argv) {
+ void * something = deflate;
+ if(something != 0)
+ return 0;
+ return 1;
+}