aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-02-23 21:13:01 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-02-23 21:13:01 +0200
commit1e66faac5f15a5c213d1c30a057f0bd767332a71 (patch)
treea2a44cb48d6d10e9ebff9ed8af0f8f34155f10f3
parent8ca67c283c1dc8ccd634caad324bfff9ddcd0002 (diff)
downloadmeson-1e66faac5f15a5c213d1c30a057f0bd767332a71.zip
meson-1e66faac5f15a5c213d1c30a057f0bd767332a71.tar.gz
meson-1e66faac5f15a5c213d1c30a057f0bd767332a71.tar.bz2
Store generation info in build state.
-rwxr-xr-xinterpreter.py41
1 files changed, 40 insertions, 1 deletions
diff --git a/interpreter.py b/interpreter.py
index 570def3..37e378f 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -77,7 +77,33 @@ class Generator(InterpreterObject):
return self.name_rule.replace('@BASENAME@', base)
def process_method(self, args, kwargs):
- return self
+ if len(kwargs) > 0:
+ raise InvalidArguments('Process does not take keyword arguments.')
+ if isinstance(args, str):
+ args = [args]
+ if not isinstance(args, list):
+ raise InvalidArguments('Argument to "process" must be a string or a list of strings.')
+ for a in args:
+ if not isinstance(a, str):
+ raise InvalidArguments('A non-string object in "process" arguments.')
+ gl = GeneratedList(self)
+ [gl.add_file(a) for a in args]
+ return gl
+
+class GeneratedList(InterpreterObject):
+ def __init__(self, generator):
+ InterpreterObject.__init__(self)
+ self.generator = generator
+ self.filelist = []
+
+ def add_file(self, newfile):
+ self.filelist.append(newfile)
+
+ def get_filelist(self):
+ return self.filelist
+
+ def get_generator(self):
+ return self.generator
# This currently returns data for the current environment.
# It should return info for the target host.
@@ -202,6 +228,7 @@ class BuildTarget(InterpreterObject):
self.need_install = False
self.pch = []
self.extra_args = {}
+ self.generated = []
self.process_kwargs(kwargs)
def process_kwargs(self, kwargs):
@@ -235,6 +262,10 @@ class BuildTarget(InterpreterObject):
if not isinstance(deplist, list):
deplist = [deplist]
self.add_external_deps(deplist)
+ genlist = kwargs.get('gen_src', [])
+ if not isinstance(genlist, list):
+ genlist = [genlist]
+ self.set_generated(genlist)
def get_subdir(self):
return self.subdir
@@ -257,6 +288,9 @@ class BuildTarget(InterpreterObject):
def get_sources(self):
return self.sources
+ def get_generated_sources(self):
+ return self.generated
+
def should_install(self):
return self.need_install
@@ -288,6 +322,11 @@ class BuildTarget(InterpreterObject):
raise InvalidArguments('Link target is not library.')
self.link_targets.append(target)
+ def set_generated(self, genlist):
+ for g in genlist:
+ if not(isinstance(g, GeneratedList)):
+ raise InvalidArguments('Generated source argument is not the output of a generator.')
+
def add_pch(self, pchlist):
for a in pchlist:
self.pch.append(a)