Build Java projects with multiple files and other cleanups.

pull/351/head
Jussi Pakkanen 9 years ago
parent f89023c58b
commit e374b53788
  1. 1
      build.py
  2. 13
      ninjabackend.py
  3. 2
      test cases/java/1 basic/com/mesonbuild/Simple.java
  4. 4
      test cases/java/1 basic/meson.build
  5. 8
      test cases/java/2 subdir/sub/com/mesonbuild/Simple.java
  6. 14
      test cases/java/2 subdir/sub/com/mesonbuild/TextPrinter.java
  7. 7
      test cases/java/2 subdir/sub/com/sourceforge/meson/Simple.java
  8. 7
      test cases/java/2 subdir/sub/meson.build

@ -915,6 +915,7 @@ class Jar(BuildTarget):
if not s.endswith('.java'):
raise InvalidArguments('Jar source %s is not a java file.' % s)
self.filename = self.name + '.jar'
incdirs = kwargs.get('include_directories', [])
def get_main_class(self):
return self.main_class

@ -675,16 +675,18 @@ int dummy;
if main_class != '':
e = 'e'
for src in src_list:
class_list.append(self.generate_single_java_compile(src, target, compiler, outfile))
plain_class_path = self.generate_single_java_compile(src, target, compiler, outfile)
class_list.append(plain_class_path)
class_dep_list = [os.path.join(self.get_target_private_dir(target), i) for i in class_list]
jar_rule = 'java_LINKER'
commands = [c+m+e+f]
if e != '':
commands.append(main_class)
commands.append(self.get_target_filename(target))
commands += ['-C', self.get_target_private_dir(target)]
commands += class_list
for cls in class_list:
commands += ['-C', self.get_target_private_dir(target), cls]
elem = NinjaBuildElement(outname_rel, jar_rule, [])
elem.add_dep([os.path.join(self.get_target_private_dir(target), i) for i in class_list])
elem.add_dep(class_dep_list)
elem.add_item('ARGS', commands)
elem.write(outfile)
self.check_outputs(elem)
@ -750,6 +752,9 @@ int dummy;
args = []
args += compiler.get_buildtype_args(self.environment.coredata.get_builtin_option('buildtype'))
args += compiler.get_output_args(self.get_target_private_dir(target))
for i in target.include_dirs:
for idir in i.get_incdirs():
args += ['-sourcepath', os.path.join(self.build_to_src, i.curdir, idir)]
rel_src = src.rel_to_builddir(self.build_to_src)
plain_class_path = src.fname[:-4] + 'class'
rel_obj = os.path.join(self.get_target_private_dir(target), plain_class_path)

@ -1,4 +1,4 @@
package com.sourceforge.meson;
package com.mesonbuild;
class Simple {
public static void main(String [] args) {

@ -1,5 +1,5 @@
project('simplejava', 'java')
javaprog = jar('myprog', 'com/sourceforge/meson/Simple.java',
main_class : 'com.sourceforge.meson.Simple')
javaprog = jar('myprog', 'com/mesonbuild/Simple.java',
main_class : 'com.mesonbuild.Simple')
test('mytest', javaprog)

@ -0,0 +1,8 @@
package com.mesonbuild;
class Simple {
public static void main(String [] args) {
TextPrinter t = new TextPrinter("Printing from Java.");
t.print();
}
}

@ -0,0 +1,14 @@
package com.mesonbuild;
class TextPrinter {
private String msg;
TextPrinter(String s) {
msg = s;
}
public void print() {
System.out.println(msg);
}
}

@ -1,7 +0,0 @@
package com.sourceforge.meson;
class Simple {
public static void main(String [] args) {
System.out.println("Java is working.\n");
}
}

@ -1,3 +1,6 @@
javaprog = jar('myprog', 'com/sourceforge/meson/Simple.java',
main_class : 'com.sourceforge.meson.Simple')
javaprog = jar('myprog',
'com/mesonbuild/Simple.java',
'com/mesonbuild/TextPrinter.java',
main_class : 'com.mesonbuild.Simple',
include_directories : include_directories('.'))
test('subdirtest', javaprog)

Loading…
Cancel
Save