aboutsummaryrefslogtreecommitdiff
path: root/backends.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-04-01 19:04:19 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-04-01 19:04:19 +0300
commit9abf5ec89af92d0046a2c1bd5cea07c7717f70f5 (patch)
treea571569405b0388e1cf1a6e84ff6247561eb30b4 /backends.py
parent6cf0182037ffd2cfdd8a4797deee73938b839592 (diff)
downloadmeson-9abf5ec89af92d0046a2c1bd5cea07c7717f70f5.zip
meson-9abf5ec89af92d0046a2c1bd5cea07c7717f70f5.tar.gz
meson-9abf5ec89af92d0046a2c1bd5cea07c7717f70f5.tar.bz2
Add generated files as dependencies to targets.
Diffstat (limited to 'backends.py')
-rwxr-xr-xbackends.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/backends.py b/backends.py
index ebbc983..8d59c77 100755
--- a/backends.py
+++ b/backends.py
@@ -126,7 +126,7 @@ class Backend():
name = target.get_basename()
if name in self.processed_targets:
return
- self.process_dep_gens(outfile, target)
+ (gen_src_deps, gen_other_deps) = self.process_dep_gens(outfile, target)
self.process_target_dependencies(target, outfile)
print('Generating target', name)
self.generate_custom_generator_rules(target, outfile)
@@ -134,13 +134,15 @@ class Backend():
obj_list = []
if target.has_pch():
self.generate_pch(target, outfile)
- header_deps = []
+ header_deps = gen_other_deps
for genlist in target.get_generated_sources():
for src in genlist.get_outfilelist():
if not self.environment.is_header(src):
obj_list.append(self.generate_single_compile(target, outfile, src, True))
else:
header_deps.append(src)
+ for src in gen_src_deps:
+ obj_list.append(self.generate_single_compile(target, outfile, src, True, []))
for src in target.get_sources():
if not self.environment.is_header(src):
obj_list.append(self.generate_single_compile(target, outfile, src, False, header_deps))
@@ -651,7 +653,18 @@ class NinjaBackend(Backend):
gcda_elem.add_item('description', 'Deleting gcda files')
gcda_elem.write(outfile)
+ def is_compilable_file(self, filename):
+ if filename.endswith('.cpp') or\
+ filename.endswith('.c') or\
+ filename.endswith('.cxx') or\
+ filename.endswith('.cc') or\
+ filename.endswith('.C'):
+ return True
+ return False
+
def process_dep_gens(self, outfile, target):
+ src_deps = []
+ other_deps = []
for rule in self.dep_rules.values():
srcs = target.get_original_kwargs().get(rule.src_keyword, [])
if isinstance(srcs, str):
@@ -665,6 +678,11 @@ class NinjaBackend(Backend):
rule = rule.name
elem = NinjaBuildElement(outfilename, rule, infilename)
elem.write(outfile)
+ if self.is_compilable_file(outfilename):
+ src_deps.append(outfilename)
+ else:
+ other_deps.append(outfilename)
+ return (src_deps, other_deps)
def generate_ending(self, outfile):
targetlist = [self.get_target_filename(t) for t in self.build.get_targets().values()]