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,

Reply via email to