Author: svn-role
Date: Tue May 19 04:02:36 2026
New Revision: 1934378
Log:
Merge r1933892 from trunk:
* r1933892
Make the JavaHL JAR an automatic module.
Justification:
Provides fine-grained control of access to restricted methods. The
alternative requires granting access to all "unnamed" modules.
Depends:
Notes:
Although this change does not affect backwards compatibility of JavaHL,
it is my opinion that it really should go into a minor release. So we
should either backport to 1.15.0 or wait for 1.16.0.
Tested with JDK 1.8, JDK 11 and JDK 25 on ARM64 macOS.
Votes:
+1: brane, dsahlberg, jcorvel
Modified:
subversion/branches/1.15.x/ (props changed)
subversion/branches/1.15.x/Makefile.in
subversion/branches/1.15.x/STATUS
subversion/branches/1.15.x/build.conf
subversion/branches/1.15.x/build/ac-macros/java.m4
subversion/branches/1.15.x/configure.ac
subversion/branches/1.15.x/subversion/bindings/javahl/Manifest.in
Modified: subversion/branches/1.15.x/Makefile.in
==============================================================================
--- subversion/branches/1.15.x/Makefile.in Tue May 19 04:02:26 2026 (r1934377)
+++ subversion/branches/1.15.x/Makefile.in Tue May 19 04:02:36 2026 (r1934378)
@@ -378,8 +378,6 @@ SWIG_RB_SRC_DIR = $(abs_srcdir)/subversi
JAVAHL_MANIFEST_IN = $(abs_srcdir)/subversion/bindings/javahl/Manifest.in
JAVAHL_MANIFEST = subversion/bindings/javahl/Manifest
INSTALL_EXTRA_JAVAHL_JAVA=\
- sed s/%bundleVersion/$(PACKAGE_VERSION)/ $(JAVAHL_MANIFEST_IN) > $(JAVAHL_MANIFEST); \
- $(JAR) cfm $(JAVAHL_JAR) $(JAVAHL_MANIFEST) -C subversion/bindings/javahl/classes org; \
$(INSTALL_DATA) $(JAVAHL_JAR) $(DESTDIR)$(javahl_javadir);
INSTALL_EXTRA_JAVAHL_LIB=@INSTALL_EXTRA_JAVAHL_LIB@
@@ -524,20 +522,26 @@ clean-javahl:
rm -f $(libsvnjavahl_PATH)/*.lo
rm -f $(libsvnjavahl_PATH)/*.o
-check-tigris-javahl: javahl-compat
+JAVAHL_CHECK_FLAGS = @JAVAHL_CHECK_FLAGS@ -Xcheck:jni "-Dtest.rootdir=$(javahl_test_rootdir)" "-Dtest.srcdir=$(javahl_test_srcdir)" "-Dtest.rooturl=$(BASE_URL)" "-Dtest.fstype=$(FS_TYPE)" "-Djava.library.path=@JAVAHL_OBJDIR@:$(libdir)" "-Dtest.cleanup=$(JAVAHL_CLEANUP)" "-Dtest.tests=$(JAVAHL_TESTS)" -classpath "$(JAVAHL_JAR):$(javahl_tests_CLASSPATH)"
+
+$(JAVAHL_JAR): $(JAVAHL_MANIFEST_IN) $(javahl_callback_java_OBJECTS) $(javahl_compat_java_OBJECTS) $(javahl_compat_tests_OBJECTS) $(javahl_java_OBJECTS) $(javahl_remote_java_OBJECT) $(javahl_tests_OBJECTS) $(javahl_types_java_OBJECTS) $(javahl_util_java_OBJECTS)
+ sed s/%bundleVersion/$(PACKAGE_VERSION)/ $(JAVAHL_MANIFEST_IN) > $(JAVAHL_MANIFEST) && \
+ $(JAR) cfm $(JAVAHL_JAR) $(JAVAHL_MANIFEST) -C subversion/bindings/javahl/classes org
+
+check-tigris-javahl: javahl-compat $(JAVAHL_JAR)
@FIX_JAVAHL_LIB@
$(TEST_SHLIB_VAR_JAVAHL) \
- $(JAVA) -Xcheck:jni "-Dtest.rootdir=$(javahl_test_rootdir)" "-Dtest.srcdir=$(javahl_test_srcdir)" "-Dtest.rooturl=$(BASE_URL)" "-Dtest.fstype=$(FS_TYPE)" "-Djava.library.path=@JAVAHL_OBJDIR@:$(libdir)" -classpath "$(javahl_compat_tests_PATH):$(javahl_tests_CLASSPATH)" "-Dtest.cleanup=$(JAVAHL_CLEANUP)" "-Dtest.tests=$(JAVAHL_TESTS)" org.tigris.subversion.javahl.RunTests
+ $(JAVA) $(JAVAHL_CHECK_FLAGS) org.tigris.subversion.javahl.RunTests
-check-apache-javahl: javahl
+check-apache-javahl: javahl $(JAVAHL_JAR)
@FIX_JAVAHL_LIB@
$(TEST_SHLIB_VAR_JAVAHL) \
- $(JAVA) -Xcheck:jni "-Dtest.rootdir=$(javahl_test_rootdir)" "-Dtest.srcdir=$(javahl_test_srcdir)" "-Dtest.rooturl=$(BASE_URL)" "-Dtest.fstype=$(FS_TYPE)" "-Djava.library.path=@JAVAHL_OBJDIR@:$(libdir)" -classpath "$(javahl_tests_PATH):$(javahl_tests_CLASSPATH)" "-Dtest.cleanup=$(JAVAHL_CLEANUP)" "-Dtest.tests=$(JAVAHL_TESTS)" org.apache.subversion.javahl.RunTests
+ $(JAVA) $(JAVAHL_CHECK_FLAGS) org.apache.subversion.javahl.RunTests
-check-deprecated-authn-javahl: javahl
+check-deprecated-authn-javahl: javahl $(JAVAHL_JAR)
@FIX_JAVAHL_LIB@
$(TEST_SHLIB_VAR_JAVAHL) \
- $(JAVA) -Xcheck:jni "-Dtest.rootdir=$(javahl_test_rootdir)" "-Dtest.srcdir=$(javahl_test_srcdir)" "-Dtest.rooturl=$(BASE_URL)" "-Dtest.fstype=$(FS_TYPE)" "-Djava.library.path=@JAVAHL_OBJDIR@:$(libdir)" -classpath "$(javahl_tests_PATH):$(javahl_tests_CLASSPATH)" "-Dtest.cleanup=$(JAVAHL_CLEANUP)" "-Dtest.tests=$(JAVAHL_TESTS)" "-Dtest.authn.deprecated=true" org.apache.subversion.javahl.RunTests
+ $(JAVA) $(JAVAHL_CHECK_FLAGS) "-Dtest.authn.deprecated=true" org.apache.subversion.javahl.RunTests
check-javahl: check-apache-javahl
Modified: subversion/branches/1.15.x/STATUS
==============================================================================
--- subversion/branches/1.15.x/STATUS Tue May 19 04:02:26 2026 (r1934377)
+++ subversion/branches/1.15.x/STATUS Tue May 19 04:02:36 2026 (r1934378)
@@ -52,20 +52,6 @@ Veto-blocked changes:
Approved changes:
=================
- * r1933892
- Make the JavaHL JAR an automatic module.
- Justification:
- Provides fine-grained control of access to restricted methods. The
- alternative requires granting access to all "unnamed" modules.
- Depends:
- Notes:
- Although this change does not affect backwards compatibility of JavaHL,
- it is my opinion that it really should go into a minor release. So we
- should either backport to 1.15.0 or wait for 1.16.0.
- Tested with JDK 1.8, JDK 11 and JDK 25 on ARM64 macOS.
- Votes:
- +1: brane, dsahlberg, jcorvel
-
* r1934313
Include 1.15-specific APIs in JavaHL.
Justification:
Modified: subversion/branches/1.15.x/build.conf
==============================================================================
--- subversion/branches/1.15.x/build.conf Tue May 19 04:02:26 2026 (r1934377)
+++ subversion/branches/1.15.x/build.conf Tue May 19 04:02:36 2026 (r1934378)
@@ -641,6 +641,7 @@ sources = *.java
native = CommitItemStateFlags.java NativeResources.java SVNClient.java
SVNRepos.java
install = javahl-java
+add-install-deps = $(JAVAHL_JAR)
link-cmd = $(COMPILE_JAVAHL_JAVAC)
classes = subversion/bindings/javahl/classes
headers = subversion/bindings/javahl/include
@@ -650,7 +651,8 @@ package = org.apache.subversion.javahl
type = java
path = subversion/bindings/javahl/src/org/tigris/subversion/javahl
sources = *.java
-install = javahl-java
+install = javahl-compat-java
+add-install-deps = $(JAVAHL_JAR)
link-cmd = $(COMPILE_JAVAHL_COMPAT_JAVAC)
classes = subversion/bindings/javahl/classes
add-deps = $(javahl_callback_java_DEPS) $(javahl_remote_java_DEPS)
@@ -664,7 +666,8 @@ package = org.tigris.subversion.javahl
type = java
path = subversion/bindings/javahl/tests/org/apache/subversion/javahl
sources = *.java
-install = javahl-java
+install = javahl-tests
+add-install-deps = $(JAVAHL_JAR)
link-cmd = $(COMPILE_JAVAHL_JAVAC)
classes = subversion/bindings/javahl/classes
package = org.apache.subversion.javahl
@@ -678,7 +681,8 @@ add-deps = $(javahl_callback_java_DEPS)
type = java
path = subversion/bindings/javahl/tests/org/tigris/subversion/javahl
sources = *.java
-install = javahl-java
+install = javahl-compat-tests
+add-install-deps = $(JAVAHL_JAR)
link-cmd = $(COMPILE_JAVAHL_COMPAT_JAVAC)
classes = subversion/bindings/javahl/classes
package = org.tigris.subversion.javahl
@@ -694,7 +698,8 @@ headers = subversion/bindings/javahl/inc
package = org.apache.subversion.javahl.callback
sources = *.java
native = UserPasswordCallback.java
-install = javahl-java
+install = javahl-callback-java
+add-install-deps = $(JAVAHL_JAR)
link-cmd = $(COMPILE_JAVAHL_JAVAC)
[javahl-remote-java]
@@ -706,7 +711,8 @@ package = org.apache.subversion.javahl.r
sources = *.java
native = CommitEditor.java RemoteFactory.java RemoteSession.java
StateReporter.java
-install = javahl-java
+install = javahl-remote-java
+add-install-deps = $(JAVAHL_JAR)
link-cmd = $(COMPILE_JAVAHL_JAVAC)
[javahl-types-java]
@@ -719,7 +725,8 @@ sources = *.java
native = NativeInputStream.java NativeOutputStream.java Revision.java
RevisionRangeList.java RuntimeVersion.java VersionExtended.java
Version.java
-install = javahl-java
+install = javahl-types-java
+add-install-deps = $(JAVAHL_JAR)
link-cmd = $(COMPILE_JAVAHL_JAVAC)
[javahl-util-java]
@@ -732,7 +739,8 @@ sources = *.java
native = ConfigImpl.java ConfigLib.java DiffLib.java PropLib.java
RequestChannel.java ResponseChannel.java SubstLib.java
TunnelChannel.java
-install = javahl-java
+install = javahl-util-java
+add-install-deps = $(JAVAHL_JAR)
link-cmd = $(COMPILE_JAVAHL_JAVAC)
[libsvnjavahl]
Modified: subversion/branches/1.15.x/build/ac-macros/java.m4
==============================================================================
--- subversion/branches/1.15.x/build/ac-macros/java.m4 Tue May 19 04:02:26 2026 (r1934377)
+++ subversion/branches/1.15.x/build/ac-macros/java.m4 Tue May 19 04:02:36 2026 (r1934378)
@@ -162,18 +162,37 @@ AC_DEFUN(SVN_FIND_JDK,
fi
])
+ dnl Get the Java release version
+ java_version=[`"$JDK/bin/java" -version 2>&1 | $HEAD -1 | $SED -e 's/^[^0-9]*//' -e 's/\.[^.]*$//'`]
+ java_major=[`echo $java_version | $SED -e 's/\.[^.]*$//'`]
+ java_minor=[`echo $java_version | $SED -e 's/^[^.]*\.//'`]
+ dnl versions older than 11 report '1.V.x' instead of 'V.x.y'
+ if test "$java_major" -eq 1; then
+ java_release="$java_minor"
+ else
+ java_release="$java_major"
+ java_version="$java_release"
+ fi
+ AC_MSG_NOTICE([Compiling with Java $java_version for target Java $JAVA_OLDEST_WORKING_VER])
+
+ dnl Java 24 and above restrict native access.
+ dnl See: https://inside.java/2024/12/09/quality-heads-up/
+ if test "$java_release" -ge 24; then
+ JAVAHL_CHECK_FLAGS='--module-path "$(abs_builddir)/$(JAVAHL_JAR)"'
+ JAVAHL_CHECK_FLAGS="$JAVAHL_CHECK_FLAGS --add-modules org.apache.subversion.javahl"
+ JAVAHL_CHECK_FLAGS="$JAVAHL_CHECK_FLAGS --enable-native-access=org.apache.subversion.javahl"
+ JAVAHL_CHECK_FLAGS="$JAVAHL_CHECK_FLAGS --illegal-native-access=deny"
+ fi
+
dnl Add javac flags.
- # The release for "-source" could actually be greater than that
- # of "-target", if we want to cross-compile for lesser JVMs.
if test -z "$JAVAC_FLAGS"; then
- java_version=[`"$JDK/bin/javac" -version 2>&1 | $SED -e 's/^[^0-9]*//' -e 's/\.[^.]*$//'`]
- java_major=[`echo $java_version | $SED -e 's/\.[^.]*$//'`]
- java_minor=[`echo $java_version | $SED -e 's/^[^.]*\.//'`]
- if test "$java_major" -eq 1 && test "$java_minor" -lt 9; then
+ dnl The release for "-source" could actually be greater than that
+ dnl of "-target", if we want to cross-compile for lesser JVMs.
+ if test "$java_release" -lt 9; then
JAVAC_FLAGS="-target $JAVA_OLDEST_WORKING_VER -source 1.8"
else
- java_release=[`echo $JAVA_OLDEST_WORKING_VER | $SED -e 's/^[^.]*\.//'`]
- JAVAC_FLAGS="--release $java_release"
+ java_oldest_release=[`echo $JAVA_OLDEST_WORKING_VER | $SED -e 's/^1\.//'`]
+ JAVAC_FLAGS="--release $java_oldest_release"
fi
if test "$enable_debugging" = "yes"; then
@@ -205,4 +224,5 @@ AC_DEFUN(SVN_FIND_JDK,
AC_SUBST(JAVAH)
AC_SUBST(JAR)
AC_SUBST(JNI_INCLUDES)
+ AC_SUBST(JAVAHL_CHECK_FLAGS)
])
Modified: subversion/branches/1.15.x/configure.ac
==============================================================================
--- subversion/branches/1.15.x/configure.ac Tue May 19 04:02:26 2026 (r1934377)
+++ subversion/branches/1.15.x/configure.ac Tue May 19 04:02:36 2026 (r1934378)
@@ -192,6 +192,9 @@ if test -z "$MKDIR"; then
fi
AC_SUBST([MKDIR])
+# Look for 'head'
+AC_CHECK_TOOL([HEAD], [head], [SED="${HEAD:-head}"])
+
# ==== Libraries, for which we may have source to build ======================
dnl verify apr version and set apr flags
Modified: subversion/branches/1.15.x/subversion/bindings/javahl/Manifest.in
==============================================================================
--- subversion/branches/1.15.x/subversion/bindings/javahl/Manifest.in Tue May 19 04:02:26 2026 (r1934377)
+++ subversion/branches/1.15.x/subversion/bindings/javahl/Manifest.in Tue May 19 04:02:36 2026 (r1934378)
@@ -2,8 +2,9 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Apache Subversion JavaHL API
Bundle-Vendor: Apache Subversion
-Bundle-SymbolicName: org.apache.subversion.javahl
Bundle-Version: %bundleVersion
+Bundle-SymbolicName: org.apache.subversion.javahl
+Automatic-Module-Name: org.apache.subversion.javahl
Export-Package: org.apache.subversion.javahl,
org.apache.subversion.javahl.callback,
org.apache.subversion.javahl.types,
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.