diff options
Diffstat (limited to 'test cases/java/9 jni')
-rw-r--r-- | test cases/java/9 jni/lib/com_mesonbuild_JniTest.c | 9 | ||||
-rw-r--r-- | test cases/java/9 jni/lib/meson.build | 18 | ||||
-rw-r--r-- | test cases/java/9 jni/lib/native.c | 11 | ||||
-rw-r--r-- | test cases/java/9 jni/meson.build | 38 | ||||
-rw-r--r-- | test cases/java/9 jni/src/com/mesonbuild/Configured.java.in | 5 | ||||
-rw-r--r-- | test cases/java/9 jni/src/com/mesonbuild/JniTest.java | 15 | ||||
-rw-r--r-- | test cases/java/9 jni/src/com/mesonbuild/meson.build | 11 | ||||
-rw-r--r-- | test cases/java/9 jni/src/meson.build | 9 |
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', +) |