aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/ninjabackend.py6
-rw-r--r--test cases/java/2 subdir/sub/meson.build3
-rw-r--r--test cases/java/5 includedirs/com/mesonbuild/Simple.java8
-rw-r--r--test cases/java/5 includedirs/com/mesonbuild/TextPrinter.java14
-rw-r--r--test cases/java/5 includedirs/meson.build14
-rw-r--r--test cases/java/6 codegen/com/mesonbuild/Config.java.in5
-rw-r--r--test cases/java/6 codegen/com/mesonbuild/Simple.java12
-rw-r--r--test cases/java/6 codegen/com/mesonbuild/TextPrinter.java14
-rw-r--r--test cases/java/6 codegen/com/mesonbuild/meson.build6
-rw-r--r--test cases/java/6 codegen/meson.build15
10 files changed, 94 insertions, 3 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index c508cec..c7e194e 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1029,9 +1029,13 @@ int dummy;
args += self.build.get_project_args(compiler, target.subproject)
args += target.get_java_args()
args += compiler.get_output_args(self.get_target_private_dir(target))
+ curdir = target.get_subdir()
+ sourcepath = os.path.join(self.build_to_src, curdir) + os.pathsep
+ sourcepath += os.path.normpath(curdir) + os.pathsep
for i in target.include_dirs:
for idir in i.get_incdirs():
- args += ['-sourcepath', os.path.join(self.build_to_src, i.curdir, idir)]
+ sourcepath += os.path.join(self.build_to_src, i.curdir, idir) + os.pathsep
+ args += ['-sourcepath', sourcepath]
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)
diff --git a/test cases/java/2 subdir/sub/meson.build b/test cases/java/2 subdir/sub/meson.build
index 807ca51..2111c06 100644
--- a/test cases/java/2 subdir/sub/meson.build
+++ b/test cases/java/2 subdir/sub/meson.build
@@ -1,6 +1,5 @@
javaprog = jar('myprog',
'com/mesonbuild/Simple.java',
'com/mesonbuild/TextPrinter.java',
- main_class : 'com.mesonbuild.Simple',
- include_directories : include_directories('.'))
+ main_class : 'com.mesonbuild.Simple')
test('subdirtest', javaprog)
diff --git a/test cases/java/5 includedirs/com/mesonbuild/Simple.java b/test cases/java/5 includedirs/com/mesonbuild/Simple.java
new file mode 100644
index 0000000..05a73ac
--- /dev/null
+++ b/test cases/java/5 includedirs/com/mesonbuild/Simple.java
@@ -0,0 +1,8 @@
+package com.mesonbuild;
+
+class Simple {
+ public static void main(String [] args) {
+ TextPrinter t = new TextPrinter("Printing from Java.");
+ t.print();
+ }
+}
diff --git a/test cases/java/5 includedirs/com/mesonbuild/TextPrinter.java b/test cases/java/5 includedirs/com/mesonbuild/TextPrinter.java
new file mode 100644
index 0000000..7e330a6
--- /dev/null
+++ b/test cases/java/5 includedirs/com/mesonbuild/TextPrinter.java
@@ -0,0 +1,14 @@
+package com.mesonbuild;
+
+class TextPrinter {
+
+ private String msg;
+
+ TextPrinter(String s) {
+ msg = s;
+ }
+
+ public void print() {
+ System.out.println(msg);
+ }
+}
diff --git a/test cases/java/5 includedirs/meson.build b/test cases/java/5 includedirs/meson.build
new file mode 100644
index 0000000..cf0b565
--- /dev/null
+++ b/test cases/java/5 includedirs/meson.build
@@ -0,0 +1,14 @@
+# The Ninja backend used to try and pass -sourcepath repeatedly for
+# multiple includes which would discard prior includes. Since this
+# won't compile without the '.' include, this ensures that multiple
+# paths are passed in a [semi-]colon separated list instead...
+
+project('includedirsjava', 'java')
+
+javaprog = jar('myprog',
+ 'com/mesonbuild/Simple.java',
+ 'com/mesonbuild/TextPrinter.java',
+ main_class : 'com.mesonbuild.Simple',
+ include_directories : [ include_directories('com'),
+ include_directories('com/mesonbuild') ])
+test('subdirtest', javaprog)
diff --git a/test cases/java/6 codegen/com/mesonbuild/Config.java.in b/test cases/java/6 codegen/com/mesonbuild/Config.java.in
new file mode 100644
index 0000000..fcc8811
--- /dev/null
+++ b/test cases/java/6 codegen/com/mesonbuild/Config.java.in
@@ -0,0 +1,5 @@
+package com.mesonbuild;
+
+public class Config {
+ public static final boolean FOOBAR = @foobar@;
+}
diff --git a/test cases/java/6 codegen/com/mesonbuild/Simple.java b/test cases/java/6 codegen/com/mesonbuild/Simple.java
new file mode 100644
index 0000000..df3c53d
--- /dev/null
+++ b/test cases/java/6 codegen/com/mesonbuild/Simple.java
@@ -0,0 +1,12 @@
+package com.mesonbuild;
+
+import com.mesonbuild.Config;
+
+class Simple {
+ public static void main(String [] args) {
+ if (Config.FOOBAR) {
+ TextPrinter t = new TextPrinter("Printing from Java.");
+ t.print();
+ }
+ }
+}
diff --git a/test cases/java/6 codegen/com/mesonbuild/TextPrinter.java b/test cases/java/6 codegen/com/mesonbuild/TextPrinter.java
new file mode 100644
index 0000000..7e330a6
--- /dev/null
+++ b/test cases/java/6 codegen/com/mesonbuild/TextPrinter.java
@@ -0,0 +1,14 @@
+package com.mesonbuild;
+
+class TextPrinter {
+
+ private String msg;
+
+ TextPrinter(String s) {
+ msg = s;
+ }
+
+ public void print() {
+ System.out.println(msg);
+ }
+}
diff --git a/test cases/java/6 codegen/com/mesonbuild/meson.build b/test cases/java/6 codegen/com/mesonbuild/meson.build
new file mode 100644
index 0000000..188bedf
--- /dev/null
+++ b/test cases/java/6 codegen/com/mesonbuild/meson.build
@@ -0,0 +1,6 @@
+
+conf_data = configuration_data()
+conf_data.set('foobar', 'true')
+config_file = configure_file(input : 'Config.java.in',
+ output : 'Config.java',
+ configuration : conf_data)
diff --git a/test cases/java/6 codegen/meson.build b/test cases/java/6 codegen/meson.build
new file mode 100644
index 0000000..f85d45a
--- /dev/null
+++ b/test cases/java/6 codegen/meson.build
@@ -0,0 +1,15 @@
+# If we generate code under the build directory then the backend needs to add
+# the build directory to the -sourcepath passed to javac otherwise the compiler
+# won't be able to handle the -implicit:class behaviour of automatically
+# compiling dependency classes.
+
+project('codegenjava', 'java')
+
+subdir('com/mesonbuild')
+
+javaprog = jar('myprog',
+ config_file,
+ 'com/mesonbuild/Simple.java',
+ 'com/mesonbuild/TextPrinter.java',
+ main_class : 'com.mesonbuild.Simple')
+test('subdirtest', javaprog)