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,