aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Partin <tristan@partin.io>2022-01-26 00:33:58 -0600
committerEli Schwartz <eschwartz93@gmail.com>2022-03-02 16:23:09 -0500
commit96b2469544fba40e63d009db73b41c3b07b80684 (patch)
tree4d365b8e8c8a6a8784b55b37eefa2b8b33b2d09b
parentf9bfeb2add70973113ab4a98454a5c5d7e3a26ae (diff)
downloadmeson-96b2469544fba40e63d009db73b41c3b07b80684.zip
meson-96b2469544fba40e63d009db73b41c3b07b80684.tar.gz
meson-96b2469544fba40e63d009db73b41c3b07b80684.tar.bz2
Rename JDK system dep to JNI
JNI is a more apt name because it currently only supports the JNI. I also believe that CMake uses the terminology JNI here as well. JNI is currently the only way to interact with the JVM through native code, but there is a project called "Project Panama" which aims to be another way for native code to interact with the JVM.
-rw-r--r--docs/markdown/Dependencies.md26
-rw-r--r--docs/markdown/Release-notes-for-0.58.0.md4
-rw-r--r--docs/markdown/snippets/jdk-renamed-to-jni.md6
-rw-r--r--mesonbuild/dependencies/__init__.py3
-rw-r--r--mesonbuild/dependencies/dev.py21
-rw-r--r--test cases/java/9 jdk/lib/com_mesonbuild_JdkTest.c9
-rw-r--r--test cases/java/9 jdk/lib/meson.build18
-rw-r--r--test cases/java/9 jdk/src/meson.build17
-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.c (renamed from test cases/java/9 jdk/lib/native.c)0
-rw-r--r--test cases/java/9 jni/meson.build (renamed from test cases/java/9 jdk/meson.build)6
-rw-r--r--test cases/java/9 jni/src/com/mesonbuild/JniTest.java (renamed from test cases/java/9 jdk/src/com/mesonbuild/JdkTest.java)8
-rw-r--r--test cases/java/9 jni/src/com/mesonbuild/meson.build (renamed from test cases/java/9 jdk/src/com/mesonbuild/meson.build)2
-rw-r--r--test cases/java/9 jni/src/meson.build17
15 files changed, 100 insertions, 64 deletions
diff --git a/docs/markdown/Dependencies.md b/docs/markdown/Dependencies.md
index 3b6b212..a7e34e5 100644
--- a/docs/markdown/Dependencies.md
+++ b/docs/markdown/Dependencies.md
@@ -486,17 +486,31 @@ instead.
## JDK
*(added 0.58.0)*
+*(deprecated 0.62.0)*
-Provides access to compiling with the Java Native Interface (JNI). Lookup is
-entirely dependent on the `target_machine` Java compiler. In a
-cross-compilation, remember to override the Java compiler in order to add the
-correct flags. The `version` keyword is compared against the version of the
-Java compiler. No other `dependency()` keywords are respected.
+Deprecated name for JNI. `dependency('jdk')` instead of `dependency('jni')`.
+
+## JNI
+
+*(added 0.62.0)*
+
+Provides access to compiling with the Java Native Interface (JNI). The lookup
+will first check if `JAVA_HOME` is set in the environment, and if not will use
+the resolved path of `javac`. Systems will usually link your preferred JDK to
+well known paths like `/usr/bin/javac` on Linux for instance. Using the path
+from `JAVA_HOME` or the resolved `javac`, this dependency will place the JDK
+installation's `include` directory and its platform-dependent subdirectory on
+the compiler's include path.
```meson
-dep = dependency('jdk', version: '>= 1.8.0')
+dep = dependency('jni', version: '>= 1.8.0')
```
+**Note**: Due to usage of a resolved path, upgrading the JDK may cause the
+various headers to not be found. In that case, please reconfigure the build
+directory. One workaround is to explicitly set `JAVA_HOME` instead of relying on
+the fallback `javac` resolved path behavior.
+
## libgcrypt
*(added 0.49.0)*
diff --git a/docs/markdown/Release-notes-for-0.58.0.md b/docs/markdown/Release-notes-for-0.58.0.md
index 25674af..e9b8ec2 100644
--- a/docs/markdown/Release-notes-for-0.58.0.md
+++ b/docs/markdown/Release-notes-for-0.58.0.md
@@ -279,7 +279,7 @@ It is now allowed to pass libraries generated by a `custom_target()` to
pkg-config file generator. The output filename must have a known library extension
such as `.a`, `.so`, etc.
-## JDK System Dependency
+## JNI System Dependency
When building projects such as those interacting with the JNI, you need access
to a few header files located in a Java installation. This system dependency
@@ -289,7 +289,7 @@ your system is a located in the `bin` directory of a Java installation. Note:
symlinks are resolved.
```meson
-jdk = dependency('jdk', version : '>=1.8')
+jni_dep = dependency('jni', version : '>=1.8')
```
Currently this system dependency only works on `linux`, `win32`, and `darwin`.
diff --git a/docs/markdown/snippets/jdk-renamed-to-jni.md b/docs/markdown/snippets/jdk-renamed-to-jni.md
new file mode 100644
index 0000000..d1e7f9d
--- /dev/null
+++ b/docs/markdown/snippets/jdk-renamed-to-jni.md
@@ -0,0 +1,6 @@
+## JDK System Dependency Renamed from `jdk` to `jni`
+
+The JDK system dependency is useful for creating native Java modules using the
+JNI. Since the purpose is to find the JNI, it has been decided that a better
+name is in fact "jni". Use of `dependency('jdk')` should be replaced with
+`dependency('jni')`.
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py
index b49514b..1e1a9f7 100644
--- a/mesonbuild/dependencies/__init__.py
+++ b/mesonbuild/dependencies/__init__.py
@@ -27,7 +27,7 @@ from .pkgconfig import PkgConfigDependency
from .factory import DependencyFactory
from .detect import find_external_dependency, get_dep_identifier, packages, _packages_accept_language
from .dev import (
- ValgrindDependency, JDKSystemDependency, gmock_factory, gtest_factory,
+ ValgrindDependency, JNISystemDependency, JDKSystemDependency, gmock_factory, gtest_factory,
llvm_factory, zlib_factory)
from .coarrays import coarray_factory
from .mpi import mpi_factory
@@ -229,6 +229,7 @@ packages.update({
'llvm': llvm_factory,
'valgrind': ValgrindDependency,
'zlib': zlib_factory,
+ 'jni': JNISystemDependency,
'jdk': JDKSystemDependency,
'boost': BoostDependency,
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index 85beb4b..247dbc7 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -22,6 +22,8 @@ import pathlib
import shutil
import typing as T
+from mesonbuild.interpreterbase.decorators import FeatureDeprecated
+
from .. import mesonlib, mlog
from ..compilers import AppleClangCCompiler, AppleClangCPPCompiler, detect_compiler_for
from ..environment import get_llvm_tool_names
@@ -497,10 +499,11 @@ class ZlibSystemDependency(SystemDependency):
self.version = v.strip('"')
-class JDKSystemDependency(SystemDependency):
+class JNISystemDependency(SystemDependency):
def __init__(self, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
- super().__init__('jdk', environment, kwargs)
- self.feature_since = ('0.59.0', '')
+ super().__init__('jni', environment, kwargs)
+
+ self.feature_since = ('0.62.0', '')
m = self.env.machines[self.for_machine]
@@ -549,6 +552,18 @@ class JDKSystemDependency(SystemDependency):
return None
+class JDKSystemDependency(JNISystemDependency):
+ def __init__(self, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
+ super().__init__(environment, kwargs)
+
+ self.feature_since = ('0.59.0', '')
+ self.featurechecks.append(FeatureDeprecated(
+ 'jdk system dependency',
+ '0.62.0',
+ 'Use the jni system dependency instead'
+ ))
+
+
llvm_factory = DependencyFactory(
'LLVM',
[DependencyMethods.CMAKE, DependencyMethods.CONFIG_TOOL],
diff --git a/test cases/java/9 jdk/lib/com_mesonbuild_JdkTest.c b/test cases/java/9 jdk/lib/com_mesonbuild_JdkTest.c
deleted file mode 100644
index 075e37b..0000000
--- a/test cases/java/9 jdk/lib/com_mesonbuild_JdkTest.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <jni.h>
-
-#include "com_mesonbuild_JdkTest.h"
-
-JNIEXPORT jint JNICALL Java_com_mesonbuild_JdkTest_jdk_1test
- (JNIEnv *env, jclass clazz)
-{
- return (jint)0xdeadbeef;
-}
diff --git a/test cases/java/9 jdk/lib/meson.build b/test cases/java/9 jdk/lib/meson.build
deleted file mode 100644
index 08407cf..0000000
--- a/test cases/java/9 jdk/lib/meson.build
+++ /dev/null
@@ -1,18 +0,0 @@
-sources = [
- files(
- 'native.c',
- 'com_mesonbuild_JdkTest.c',
- ),
- native_headers
-]
-
-jdkjava = shared_module(
- 'jdkjava',
- sources,
- dependencies : [jdk],
- include_directories : [native_header_includes]
-)
-
-jdkjava_dep = declare_dependency(
- link_with : jdkjava,
-)
diff --git a/test cases/java/9 jdk/src/meson.build b/test cases/java/9 jdk/src/meson.build
deleted file mode 100644
index d1b9ee3..0000000
--- a/test cases/java/9 jdk/src/meson.build
+++ /dev/null
@@ -1,17 +0,0 @@
-jdkjar = jar(
- 'jdkjar',
- 'com' / 'mesonbuild' / 'JdkTest.java',
- main_class : 'com.mesonbuild.JdkTest',
-)
-
-test(
- 'jdktest',
- java,
- args: [
- '-Djava.library.path=@0@'.format(fs.parent(jdkjava.full_path())),
- '-jar',
- jdkjar,
- ],
- protocol : 'exitcode',
- depends : [jdkjava],
-)
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 jdk/lib/native.c b/test cases/java/9 jni/lib/native.c
index 0b5e718..0b5e718 100644
--- a/test cases/java/9 jdk/lib/native.c
+++ b/test cases/java/9 jni/lib/native.c
diff --git a/test cases/java/9 jdk/meson.build b/test cases/java/9 jni/meson.build
index e5c9728..65d7ff6 100644
--- a/test cases/java/9 jdk/meson.build
+++ b/test cases/java/9 jni/meson.build
@@ -1,11 +1,11 @@
-project('jdkjava', ['c', 'java'])
+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 isn not available in the Azure Pipelines Windows images')
+ 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')
@@ -13,7 +13,7 @@ javamod = import('java')
java = find_program('java')
-jdk = dependency('jdk', version : '>=1.8')
+jni_dep = dependency('jni', version : '>=1.8')
# generate native headers
subdir('src/com/mesonbuild')
diff --git a/test cases/java/9 jdk/src/com/mesonbuild/JdkTest.java b/test cases/java/9 jni/src/com/mesonbuild/JniTest.java
index 35c47ce..f80b326 100644
--- a/test cases/java/9 jdk/src/com/mesonbuild/JdkTest.java
+++ b/test cases/java/9 jni/src/com/mesonbuild/JniTest.java
@@ -1,15 +1,15 @@
package com.mesonbuild;
-public final class JdkTest {
- private static native int jdk_test();
+public final class JniTest {
+ private static native int jni_test();
public static void main(String[] args) {
- if (jdk_test() != 0xdeadbeef) {
+ if (jni_test() != 0xdeadbeef) {
throw new RuntimeException("jdk_test() did not return 0");
}
}
static {
- System.loadLibrary("jdkjava");
+ System.loadLibrary("jnijava");
}
}
diff --git a/test cases/java/9 jdk/src/com/mesonbuild/meson.build b/test cases/java/9 jni/src/com/mesonbuild/meson.build
index 0cce7f0..3ee2083 100644
--- a/test cases/java/9 jdk/src/com/mesonbuild/meson.build
+++ b/test cases/java/9 jni/src/com/mesonbuild/meson.build
@@ -1,3 +1,3 @@
native_headers = javamod.generate_native_headers(
- 'JdkTest.java', package: 'com.mesonbuild', classes: ['JdkTest'])
+ 'JniTest.java', package: 'com.mesonbuild', classes: ['JdkTest'])
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..07a0664
--- /dev/null
+++ b/test cases/java/9 jni/src/meson.build
@@ -0,0 +1,17 @@
+jnijar = jar(
+ 'jnijar',
+ 'com' / 'mesonbuild' / 'JniTest.java',
+ main_class : 'com.mesonbuild.JniTest',
+)
+
+test(
+ 'jnitest',
+ java,
+ args: [
+ '-Djava.library.path=@0@'.format(fs.parent(jnijava.full_path())),
+ '-jar',
+ jnijar,
+ ],
+ protocol : 'exitcode',
+ depends : [jnijava],
+)