diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-02-08 23:31:07 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-02-08 23:31:07 +0200 |
commit | b0515379bf562fe7c728cd443e843e8b839146fc (patch) | |
tree | eb563f67cd6582c97c14d6058a767de709c1e3d6 /generators.py | |
parent | e2bc8517351b02da10c16a5a75448b146580eb5f (diff) | |
download | meson-b0515379bf562fe7c728cd443e843e8b839146fc.zip meson-b0515379bf562fe7c728cd443e843e8b839146fc.tar.gz meson-b0515379bf562fe7c728cd443e843e8b839146fc.tar.bz2 |
Generate pch files with Ninja.
Diffstat (limited to 'generators.py')
-rwxr-xr-x | generators.py | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/generators.py b/generators.py index 97b9541..eb8d1d6 100755 --- a/generators.py +++ b/generators.py @@ -299,6 +299,17 @@ class NinjaGenerator(Generator): 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() + pchlist = target.get_pch() + if len(pchlist) == 0: + pch_dep = '' + else: + arr = [] + for pch in pchlist: + i = os.path.join(self.get_target_private_dir(target), + os.path.split(pch)[-1] + '.' + compiler.get_pch_suffix()) + arr.append(i) + pch_dep = '|| ' + ' '.join([ninja_quote(i) for i in arr]) + for i in target.get_include_dirs(): basedir = i.get_curdir() for d in i.get_incdirs(): @@ -310,13 +321,31 @@ class NinjaGenerator(Generator): commands.append(sarg) commands += self.get_pch_include_args(compiler, target) compiler_name = '%s_COMPILER' % compiler.get_language() - build = 'build %s: %s %s\n' % \ - (ninja_quote(abs_obj), compiler_name, ninja_quote(abs_src)) + build = 'build %s: %s %s %s\n' % \ + (ninja_quote(abs_obj), compiler_name, ninja_quote(abs_src), + pch_dep) flags = ' FLAGS = %s\n\n' % ' '.join([ninja_quote(t) for t in commands]) outfile.write(build) outfile.write(flags) return abs_obj + def generate_pch(self, target, outfile): + for pch in target.get_pch(): + if '/' not in pch: + raise interpreter.InvalidArguments('Precompiled header of "%s" must not be in the same direcotory as source, please put it in a subdirectory.' % target.get_basename()) + compiler = self.get_compiler_for_source(pch) + commands = [] + commands += self.generate_basic_compiler_flags(target, compiler) + src = os.path.join(self.build_to_src, target.get_source_subdir(), pch) + dst = os.path.join(self.get_target_private_dir(target), + os.path.split(pch)[-1] + '.' + compiler.get_pch_suffix()) + build = 'build %s: %s %s\n' % (ninja_quote(dst), + ninja_quote(compiler.get_language() + '_COMPILER'), + ninja_quote(src)) + flags = ' FLAGS = %s\n\n' % ' '.join([ninja_quote(t) for t in commands]) + outfile.write(build) + outfile.write(flags) + def generate_link(self, target, outfile, outname, obj_list): if isinstance(target, interpreter.StaticLibrary): linker = self.build.static_linker @@ -342,7 +371,7 @@ class NinjaGenerator(Generator): if len(dependencies) == 0: dep_targets = '' else: - dep_targets = '| ' + ' '.join([self.get_target_filename(t) for t in dependencies]) + dep_targets = '| ' + ' '.join([ninja_quote(self.get_target_filename(t)) for t in dependencies]) build = 'build %s: %s %s %s\n' % \ (ninja_quote(outname), linker_rule, ' '.join([ninja_quote(i) for i in obj_list]), dep_targets) |