summaryrefslogtreecommitdiffstats
path: root/test cases/java/9 jni
diff options
context:
space:
mode:
Diffstat (limited to 'test cases/java/9 jni')
-rw-r--r--test cases/java/9 jni/lib/com_mesonbuild_JniTest.c9
-rw-r--r--test cases/java/9 jni/lib/meson.build18
-rw-r--r--test cases/java/9 jni/lib/native.c11
-rw-r--r--test cases/java/9 jni/meson.build38
-rw-r--r--test cases/java/9 jni/src/com/mesonbuild/Configured.java.in5
-rw-r--r--test cases/java/9 jni/src/com/mesonbuild/JniTest.java15
-rw-r--r--test cases/java/9 jni/src/com/mesonbuild/meson.build11
-rw-r--r--test cases/java/9 jni/src/meson.build9
8 files changed, 116 insertions, 0 deletions
diff --git a/test cases/java/9 jni/lib/com_mesonbuild_JniTest.c b/test cases/java/9 jni/lib/com_mesonbuild_JniTest.c
new file mode 100644
index 0000000..5deca03
--- /dev/null
+++ b/test cases/java/9 jni/lib/com_mesonbuild_JniTest.c
@@ -0,0 +1,9 @@
+#include <jni.h>
+
+#include "com_mesonbuild_JniTest.h"
+
+JNIEXPORT jint JNICALL Java_com_mesonbuild_JniTest_jni_1test
+ (JNIEnv *env, jclass clazz)
+{
+ return (jint)0xdeadbeef;
+}
diff --git a/test cases/java/9 jni/lib/meson.build b/test cases/java/9 jni/lib/meson.build
new file mode 100644
index 0000000..c2ddc7a
--- /dev/null
+++ b/test cases/java/9 jni/lib/meson.build
@@ -0,0 +1,18 @@
+sources = [
+ files(
+ 'native.c',
+ 'com_mesonbuild_JniTest.c',
+ ),
+ native_headers
+]
+
+jnijava = shared_module(
+ 'jnijava',
+ sources,
+ dependencies : [jni_dep],
+ include_directories : [native_header_includes]
+)
+
+jnijava_dep = declare_dependency(
+ link_with : jnijava
+)
diff --git a/test cases/java/9 jni/lib/native.c b/test cases/java/9 jni/lib/native.c
new file mode 100644
index 0000000..0b5e718
--- /dev/null
+++ b/test cases/java/9 jni/lib/native.c
@@ -0,0 +1,11 @@
+#include <jni.h>
+
+JNIEXPORT jint JNICALL
+JNI_OnLoad(JavaVM *vm, void *reserved)
+{
+ return JNI_VERSION_1_8;
+}
+
+JNIEXPORT void JNICALL
+JNI_OnUnload(JavaVM *vm, void *reserved)
+{}
diff --git a/test cases/java/9 jni/meson.build b/test cases/java/9 jni/meson.build
new file mode 100644
index 0000000..7a68165
--- /dev/null
+++ b/test cases/java/9 jni/meson.build
@@ -0,0 +1,38 @@
+project('jnijava', ['c', 'java'])
+
+if build_machine.system() == 'cygwin'
+ error('MESON_SKIP_TEST: cygwin test failures')
+endif
+
+if build_machine.system() == 'windows' and build_machine.cpu_family() == 'x86'
+ error('MESON_SKIP_TEST: failing builds on 32bit Windows because a 32bit JDK is not available in the Azure Pipelines Windows images')
+endif
+
+fs = import('fs')
+javamod = import('java')
+
+cc = meson.get_compiler('c')
+java = find_program('java')
+
+jni_dep = dependency('jni', version : '>=1.8', modules: ['jvm', 'awt'])
+
+# Assert that the header can actually be found with the dependency.
+cc.has_header('jni.h', dependencies: [jni_dep])
+# Assert that the platform-specific include directory is included in the compiler arguments.
+cc.has_header('jni_md.h', dependencies: [jni_dep])
+
+# generate native headers
+subdir('src')
+subdir('lib')
+
+test(
+ 'jnitest',
+ java,
+ args: [
+ '-Djava.library.path=@0@'.format(fs.parent(jnijava.full_path())),
+ '-jar',
+ jnijar,
+ ],
+ protocol : 'exitcode',
+ depends : [jnijava],
+)
diff --git a/test cases/java/9 jni/src/com/mesonbuild/Configured.java.in b/test cases/java/9 jni/src/com/mesonbuild/Configured.java.in
new file mode 100644
index 0000000..fac6e05
--- /dev/null
+++ b/test cases/java/9 jni/src/com/mesonbuild/Configured.java.in
@@ -0,0 +1,5 @@
+package com.mesonbuild;
+
+public final class Configured {
+ public static final int FINGERPRINT = @fingerprint@;
+}
diff --git a/test cases/java/9 jni/src/com/mesonbuild/JniTest.java b/test cases/java/9 jni/src/com/mesonbuild/JniTest.java
new file mode 100644
index 0000000..4bfffe9
--- /dev/null
+++ b/test cases/java/9 jni/src/com/mesonbuild/JniTest.java
@@ -0,0 +1,15 @@
+package com.mesonbuild;
+
+public final class JniTest {
+ private static native int jni_test();
+
+ public static void main(String[] args) {
+ if (jni_test() != Configured.FINGERPRINT) {
+ throw new RuntimeException("jdk_test() did not return 0");
+ }
+ }
+
+ static {
+ System.loadLibrary("jnijava");
+ }
+}
diff --git a/test cases/java/9 jni/src/com/mesonbuild/meson.build b/test cases/java/9 jni/src/com/mesonbuild/meson.build
new file mode 100644
index 0000000..a505b1a
--- /dev/null
+++ b/test cases/java/9 jni/src/com/mesonbuild/meson.build
@@ -0,0 +1,11 @@
+configured = configure_file(
+ input: files('Configured.java.in'),
+ output: 'Configured.java',
+ configuration: configuration_data({'fingerprint': '0xdeadbeef'})
+)
+
+sources += configured
+
+native_headers = javamod.native_headers(
+ sources, package: 'com.mesonbuild', classes: ['JniTest'])
+native_header_includes = include_directories('.')
diff --git a/test cases/java/9 jni/src/meson.build b/test cases/java/9 jni/src/meson.build
new file mode 100644
index 0000000..af443b5
--- /dev/null
+++ b/test cases/java/9 jni/src/meson.build
@@ -0,0 +1,9 @@
+sources = [files('com/mesonbuild/JniTest.java')]
+
+subdir('com/mesonbuild')
+
+jnijar = jar(
+ 'jnijar',
+ sources,
+ main_class : 'com.mesonbuild.JniTest',
+)