aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.py5
-rw-r--r--mesonlib.py11
-rw-r--r--ninjabackend.py14
3 files changed, 27 insertions, 3 deletions
diff --git a/build.py b/build.py
index 4b233b8..c6fe7e8 100644
--- a/build.py
+++ b/build.py
@@ -17,7 +17,7 @@ import environment
import dependencies
import mlog
import copy, os
-from mesonlib import File
+from mesonlib import File, flatten
known_basic_kwargs = {'install' : True,
'c_pch' : True,
@@ -476,8 +476,9 @@ class BuildTarget():
self.include_dirs += ids
def add_compiler_args(self, language, args):
+ args = flatten(args)
for a in args:
- if not isinstance(a, str):
+ if not isinstance(a, (str, File)):
raise InvalidArguments('A non-string passed to compiler args.')
if language in self.extra_args:
self.extra_args[language] += args
diff --git a/mesonlib.py b/mesonlib.py
index c04e7af..fc51380 100644
--- a/mesonlib.py
+++ b/mesonlib.py
@@ -58,6 +58,17 @@ class File:
def __hash__(self):
return hash((self.fname, self.subdir, self.is_built))
+def flatten(item):
+ if not isinstance(item, list):
+ return item
+ result = []
+ for i in item:
+ if isinstance(i, list):
+ result += flatten(i)
+ else:
+ result.append(i)
+ return result
+
def is_osx():
return platform.system().lower() == 'darwin'
diff --git a/ninjabackend.py b/ninjabackend.py
index c929238..04ee778 100644
--- a/ninjabackend.py
+++ b/ninjabackend.py
@@ -689,6 +689,7 @@ class NinjaBackend(backends.Backend):
generated_c = []
(src, vapi_src) = self.split_vala_sources(target.get_sources())
vapi_src = [x.rel_to_builddir(self.build_to_src) for x in vapi_src]
+ extra_dep_files = []
for s in src:
if not s.endswith('.vala'):
continue
@@ -714,11 +715,22 @@ class NinjaBackend(backends.Backend):
args += ['--target-glib', d.version_requirement[2:]]
args += ['--pkg', d.name]
args += vapi_src
- args += target.extra_args.get('vala', [])
+ extra_args = []
+
+ for a in target.extra_args.get('vala', []):
+ if isinstance(a, File):
+ relname = a.rel_to_builddir(self.build_to_src)
+ extra_dep_files.append(relname)
+ extra_args.append(relname)
+ else:
+ extra_args.append(a)
+ print(extra_args)
+ args += extra_args
generated_c += [relsc]
element = NinjaBuildElement(relsc, valac.get_language() + '_COMPILER', rel_s)
element.add_item('ARGS', args)
element.add_orderdep(vapi_order_deps)
+ element.add_dep(extra_dep_files)
element.write(outfile)
return generated_c