aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2014-08-24 19:31:38 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2014-08-24 19:31:38 +0300
commitccf63459c6c9090518ce9164c67bc12de010bc21 (patch)
tree586be709bf1023e0cadd4d2f488cf4572ac1374f
parenta4d867b8050e18048c9c3f1d21a6f003247a495a (diff)
downloadmeson-ccf63459c6c9090518ce9164c67bc12de010bc21.zip
meson-ccf63459c6c9090518ce9164c67bc12de010bc21.tar.gz
meson-ccf63459c6c9090518ce9164c67bc12de010bc21.tar.bz2
Made generated source depend on all generated headers.
-rw-r--r--ninjabackend.py27
1 files changed, 22 insertions, 5 deletions
diff --git a/ninjabackend.py b/ninjabackend.py
index 362d4b2..8659729 100644
--- a/ninjabackend.py
+++ b/ninjabackend.py
@@ -146,6 +146,18 @@ class NinjaBackend(backends.Backend):
outfile.close()
os.replace(tempfilename, outfilename)
+ # Get all generated headers. Any source file might need them so
+ # we need to add an order dependency to them.
+ def get_generated_headers(self, target):
+ header_deps = []
+ for gensource in target.get_generated_sources():
+ if isinstance(gensource, build.CustomTarget):
+ continue
+ for src in gensource.get_outfilelist():
+ if self.environment.is_header(src):
+ header_deps.append(src)
+ return header_deps
+
def generate_target(self, target, outfile):
if isinstance(target, build.CustomTarget):
self.generate_custom_target(target, outfile)
@@ -183,17 +195,19 @@ class NinjaBackend(backends.Backend):
header_deps = gen_other_deps
unity_src = []
unity_deps = [] # Generated sources that must be built before compiling a Unity target.
+ header_deps += self.get_generated_headers(target)
for gensource in target.get_generated_sources():
if isinstance(gensource, build.CustomTarget):
for src in gensource.output:
src = os.path.join(gensource.subdir, src)
if self.environment.is_header(src):
header_deps.append(RawFilename(src))
- elif self.environment.is_source(src):
+ if self.environment.is_source(src) and not self.environment.is_header(src):
if is_unity:
unity_deps.append(os.path.join(self.environment.get_build_dir(), RawFilename(src)))
else:
- obj_list.append(self.generate_single_compile(target, outfile, RawFilename(src), True))
+ obj_list.append(self.generate_single_compile(target, outfile, RawFilename(src), True,
+ header_deps))
else:
pass # perhaps print warning about the unknown file?
break # just to cut down on indentation size
@@ -210,9 +224,8 @@ class NinjaBackend(backends.Backend):
abs_src = os.path.join(self.environment.get_build_dir(), rel_src)
unity_src.append(abs_src)
else:
- obj_list.append(self.generate_single_compile(target, outfile, src, True))
- else:
- header_deps.append(src)
+ obj_list.append(self.generate_single_compile(target, outfile, src, True,
+ header_deps=header_deps))
src_list = []
for src in gen_src_deps:
src_list.append(src)
@@ -1042,6 +1055,10 @@ rule FORTRAN_DEP_HACK
return mod_files
def generate_single_compile(self, target, outfile, src, is_generated=False, header_deps=[], order_deps=[]):
+ if(isinstance(src, str) and src.endswith('.h')):
+ raise RuntimeError('Fug')
+ if isinstance(src, RawFilename) and src.fname.endswith('.h'):
+ raise RuntimeError('Fug')
extra_orderdeps = []
compiler = self.get_compiler_for_source(src)
commands = self.generate_basic_compiler_args(target, compiler)