diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-03-11 00:23:20 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-03-11 00:23:20 +0200 |
commit | 9955ca254b313c10475c13bcda2e27b02ee43496 (patch) | |
tree | f0019a720c7843400ad240c1563d82b84687c940 /backends.py | |
parent | 3dadcbc9a73ab9c07ecc8bfd513d6e5ef791dd00 (diff) | |
download | meson-9955ca254b313c10475c13bcda2e27b02ee43496.zip meson-9955ca254b313c10475c13bcda2e27b02ee43496.tar.gz meson-9955ca254b313c10475c13bcda2e27b02ee43496.tar.bz2 |
Can generate a build.ninja for Jave but it does not work yet.
Diffstat (limited to 'backends.py')
-rw-r--r-- | backends.py | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/backends.py b/backends.py index 03be9a5..4d497cd 100644 --- a/backends.py +++ b/backends.py @@ -178,6 +178,10 @@ class Backend(): name = target.get_basename() if name in self.processed_targets: return + if isinstance(target, build.Jar): + self.generate_jar_target(target, outfile) + return + # The following deals with C/C++ compilation. (gen_src_deps, gen_other_deps) = self.process_dep_gens(outfile, target) self.process_target_dependencies(target, outfile) self.generate_custom_generator_rules(target, outfile) @@ -237,6 +241,36 @@ class Backend(): self.generate_shlib_aliases(target, self.get_target_dir(target), outfile, elem) self.processed_targets[name] = True + def generate_jar_target(self, target, outfile): + fname = target.get_filename() + subdir = target.get_subdir() + outname_rel = os.path.join(subdir, fname) + src_list = target.get_sources() + obj_list = [] + compiler = self.get_compiler_for_source(src_list[0]) + assert(compiler.get_language() == 'java') + for src in src_list: + obj_list.append(self.generate_single_java_compile(src, target, compiler, outfile)) + jar_rule = 'JAR_LINK' + commands = ['c'] + elem = NinjaBuildElement(outname_rel, jar_rule, obj_list) + elem.add_item('LINK_FLAGS', commands) + return elem + + def generate_single_java_compile(self, src, target, compiler, outfile): + buildtype = self.environment.coredata.buildtype + args = [] + if buildtype == 'debug': + args += compiler.get_debug_flags() + args += compiler.get_output_flags(self.get_target_dir(target)) + rel_src = os.path.join(self.build_to_src, src) + rel_obj = os.path.join(target.get_subdir(), src[:-4] + 'class') + element = NinjaBuildElement(rel_obj, + compiler.get_language() + '_COMPILER', rel_src) + element.add_item('FLAGS', args) + element.write(outfile) + return rel_obj + def determine_linker(self, target, src): if isinstance(target, build.StaticLibrary): return self.build.static_linker @@ -365,6 +399,7 @@ class NinjaBuildElement(): self.outfilenames = [outfilenames] else: self.outfilenames = outfilenames + assert(isinstance(rule, str)) self.rule = rule if isinstance(infilenames, str): self.infilenames = [infilenames] @@ -401,7 +436,7 @@ class NinjaBuildElement(): line += ' || ' + ' '.join([ninja_quote(x) for x in self.orderdeps]) line += '\n' outfile.write(line) - + for e in self.elems: (name, elems) = e should_quote = True |