aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-02-23 22:27:47 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-02-23 22:27:47 +0200
commit15aa29bf158c65a70d555c0d5b507ccfc6e84cca (patch)
treed5bd2e90e7cc4c69c0ddee4e71b85d0bd42827c2
parent1e66faac5f15a5c213d1c30a057f0bd767332a71 (diff)
downloadmeson-15aa29bf158c65a70d555c0d5b507ccfc6e84cca.zip
meson-15aa29bf158c65a70d555c0d5b507ccfc6e84cca.tar.gz
meson-15aa29bf158c65a70d555c0d5b507ccfc6e84cca.tar.bz2
Generate compile commands for generated sources.
-rwxr-xr-xbackends.py23
-rwxr-xr-xinterpreter.py16
2 files changed, 19 insertions, 20 deletions
diff --git a/backends.py b/backends.py
index dfee4c1..1cf7778 100755
--- a/backends.py
+++ b/backends.py
@@ -91,6 +91,9 @@ class Backend():
self.generate_pch(target, outfile)
for src in target.get_sources():
obj_list.append(self.generate_single_compile(target, outfile, src))
+ for genlist in target.get_generated_sources():
+ for src in genlist.get_outfilelist():
+ obj_list.append(self.generate_single_compile(target, outfile, src, True))
self.generate_link(target, outfile, outname, obj_list)
self.generate_shlib_aliases(target, self.get_target_dir(target), outfile)
self.processed_targets[name] = True
@@ -344,10 +347,13 @@ class NinjaBackend(Backend):
outfile.write('\n')
outfile.write('\n')
- def generate_single_compile(self, target, outfile, src):
+ def generate_single_compile(self, target, outfile, src, is_generated=False):
compiler = self.get_compiler_for_source(src)
commands = self.generate_basic_compiler_flags(target, compiler)
- abs_src = os.path.join(self.build_to_src, target.get_source_subdir(), src)
+ if is_generated:
+ abs_src = src
+ else:
+ abs_src = os.path.join(self.build_to_src, target.get_source_subdir(), src)
abs_obj = os.path.join(self.get_target_private_dir(target), src)
abs_obj += '.' + self.environment.get_object_suffix()
dep_file = abs_obj + '.' + compiler.get_depfile_suffix()
@@ -705,16 +711,3 @@ echo Run compile.sh before this or bad things will happen.
aliasfile = os.path.join(outdir, alias)
cmd = ['ln', '-s', '-f', basename, aliasfile]
outfile.write(' '.join(shell_quote(cmd)) + '|| exit\n')
-
-if __name__ == '__main__':
- code = """
- project('simple generator')
- language('c')
- executable('prog', 'prog.c', 'dep.c')
- """
- import environment
- os.chdir(os.path.split(__file__)[0])
- envir = environment.Environment('.', 'work area')
- intpr = interpreter.Interpreter(code, envir)
- g = ShellBackend(intpr, envir)
- g.generate()
diff --git a/interpreter.py b/interpreter.py
index 37e378f..67ee6a3 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -73,7 +73,7 @@ class Generator(InterpreterObject):
self.name_rule = rule
def get_base_outname(self, inname):
- base = os.path.split()[1]
+ base = os.path.split(inname)[1]
return self.name_rule.replace('@BASENAME@', base)
def process_method(self, args, kwargs):
@@ -94,13 +94,18 @@ class GeneratedList(InterpreterObject):
def __init__(self, generator):
InterpreterObject.__init__(self)
self.generator = generator
- self.filelist = []
+ self.infilelist = []
+ self.outfilelist = []
def add_file(self, newfile):
- self.filelist.append(newfile)
+ self.infilelist.append(newfile)
+ self.outfilelist.append(self.generator.get_base_outname(newfile))
- def get_filelist(self):
- return self.filelist
+ def get_infilelist(self):
+ return self.infilelist
+
+ def get_outfilelist(self):
+ return self.outfilelist
def get_generator(self):
return self.generator
@@ -326,6 +331,7 @@ class BuildTarget(InterpreterObject):
for g in genlist:
if not(isinstance(g, GeneratedList)):
raise InvalidArguments('Generated source argument is not the output of a generator.')
+ self.generated.append(g)
def add_pch(self, pchlist):
for a in pchlist: