diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-08-24 19:31:38 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-08-24 19:31:38 +0300 |
commit | ccf63459c6c9090518ce9164c67bc12de010bc21 (patch) | |
tree | 586be709bf1023e0cadd4d2f488cf4572ac1374f | |
parent | a4d867b8050e18048c9c3f1d21a6f003247a495a (diff) | |
download | meson-ccf63459c6c9090518ce9164c67bc12de010bc21.zip meson-ccf63459c6c9090518ce9164c67bc12de010bc21.tar.gz meson-ccf63459c6c9090518ce9164c67bc12de010bc21.tar.bz2 |
Made generated source depend on all generated headers.
-rw-r--r-- | ninjabackend.py | 27 |
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) |