Den tors 6 aug. 2026 kl 16:18 skrev Branko Čibej <[email protected]>:
> On 2. 8. 2026 15:07, Daniel Sahlberg wrote: > > Den ons 29 juli 2026 kl 12:52 skrev Branko Čibej <[email protected]>: > >> On 29. 7. 2026 10:58, Daniel Sahlberg wrote: >> >> >> >> Den ons 29 juli 2026 kl 04:32 skrev Jun Omae <[email protected]>: >> >>> On 2026/07/28 23:58, Daniel Sahlberg wrote: >>> > Den mån 27 juli 2026 kl 00:09 skrev Jun Omae <[email protected] >>> <mailto:[email protected]>>: >>> > >>> > > Is there a problem if we include the test classes? >>> > >>> > No direct issues have been found so far. However, static >>> initializers within test classes are executed simply by loading the class. >>> > >>> > [[[ >>> > $ grep -r 'static *{' subversion/bindings/javahl >>> > >>> >>> subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java: >>> static { >>> > >>> >>> subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java: >>> static { >>> > ]]] >>> > >>> > >>> > Thank you! >>> > >>> > I think I got it working on 1.14.x, successfully created a JAR file >>> without the tests. >>> > >>> > It still seems to fail on trunk. Can you do the same steps above on >>> trunk? >>> > >>> > Cheers, >>> > Daniel >>> > >>> >>> Hm, I get the same failures on trunk. >>> It seems that the changes of the behavior is introduced in r1933892. >>> At least, ./configure should stop and/or warn it if the junit is NOT >>> optional when javahl enabled. >>> >>> [[[ >>> $ /bin/sh autogen.sh >>> $ ./configure --prefix=/dev/shm/svn/trunk --without-apxs --without-swig >>> --without-swig-{perl,python,ruby} --enable-javahl >>> --with-jdk=/usr/lib/jvm/java-11-openjdk-amd64 --without-junit >>> PYTHON=/usr/bin/python3 >>> $ make -j$(nproc) all >>> $ make javahl >>> >>> $ find subversion/bindings/javahl -name '*.class' | wc -l >>> 277 >>> $ find subversion/bindings/javahl -name '*Test*.class' | wc -l >>> 0 #==> tests/**/*.java are compiled yet. >>> >>> $ make install >>> $ make install-javahl # Why this task builds tests/**/*.java? >>> ... >>> /dev/shm/subversion-trunk/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java:1708: >>> error: cannot find symbol >>> assertEquals("wrong revision from commit", >>> ^ >>> symbol: method assertEquals(String,long,int) >>> location: class BasicTests >>> /dev/shm/subversion-trunk/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java:1756: >>> error: cannot find symbol >>> assertEquals("wrong revision from update", >>> ^ >>> symbol: method assertEquals(String,long,int) >>> location: class BasicTests >>> Note: Some input files use or override a deprecated API. >>> Note: Recompile with -Xlint:deprecation for details. >>> 100 errors >>> ]]] >>> >> >> Thanks for confirming! It seems like 1.15.x is also affected by this >> (I'll bring it up on the release thread). >> >> To add three more data points to the discussion, I checked Fedora 43, 44 >> and FreeBSD 14. The tests are present in Fedora's svn-javahl.jar but not in >> FreeBSD's svn-javahl.jar. Obviously different distributors use different >> options when building. That is unfortunate since we are distributing >> different ABIs. >> >> I think it would be cleaner to have the tests in svn-javahl-tests.jar if >> built. Maybe we want to install this alongside svn-javahl.jar. That way >> Fedora and Ubuntu can keep distributing the tests and FreeBSD not, while >> everyone's svn-javahl.jar is the same. >> >> Does that make sense? >> >> >> >> The following makes sense: >> >> 1. There is no regression in autotools. It is what it is. Note that >> putting test classes in a separate jar has wider consequences than just the >> ABI. For example, JavaHL tests would fail in autotools builds. We'd have to >> change the way the classpath is constructed in `make check-*-javahl`. >> >> 2. No change is needed in 1.15.x. Autotools are consistent with earlier >> releases and CMake doesn't build JavaHL. IFF we want to change this in >> CMake for 1.15, then we have further questions to consider: >> >> 2.1. CMake and Autotools/vcxproj should produce identical results given >> identical options. In this case specifically I mean that the CMake build >> should create the same lib/dll names and the same JavaHL jar (singular) as >> the vcxproj generator. >> >> >> 3. Regardless of the answer to 2: If we decide to not include test >> classes in svn-javhl.jar, then we have to consider how to mitigate the ABI >> change. >> >> Personally I'd prefer changing the build requirements to changing the ABI >> in svn-javahl.jar. That means that --enable-javahl implies that JUnit is >> mandatory. >> >> -- Brane >> >> > Is the patch below an acceptable way of requiring --with-junit? > > Cheers, > Daniel > > > [[[ > Index: configure.ac > =================================================================== > --- configure.ac (revision 1936330) > +++ configure.ac (working copy) > @@ -1748,6 +1748,7 @@ > > dnl Possibly compile JavaHL > do_javahl_build=no > +has_junit=no > > > This initialisation is not needed. > > AC_ARG_ENABLE(javahl, > AS_HELP_STRING([--enable-javahl], > [Enable compilation of Java high-level bindings (requires > C++)]), > @@ -1755,6 +1756,21 @@ > do_javahl_build="yes" > fi > ]) > +AC_ARG_WITH(junit, > +AS_HELP_STRING([--with-junit=PATH], > + [Specify a path to the junit JAR file.]), > +[ > + if test "$withval" != "no"; then > + if test -n "$JAVA_CLASSPATH"; then > + JAVA_CLASSPATH="$withval:$JAVA_CLASSPATH" > + else > + JAVA_CLASSPATH="$withval" > + fi > + JAVAHL_TESTS_TARGET="javahl-tests" > + JAVAHL_COMPAT_TESTS_TARGET="javahl-compat-tests" > + has_junit="yes" > > Should be; > > have_junit="yes" > > > + fi > +]) > > JAVAHL_OBJDIR="" > INSTALL_EXTRA_JAVAHL_LIB="" > @@ -1763,6 +1779,12 @@ > JAVAHL_COMPAT_TESTS_TARGET="" > LT_CXX_LIBADD="" > if test "$do_javahl_build" = "yes"; then > + dnl Since r1933892 junit is required to build the JavaHL bindings > + if test "$has_junit" = "no"; then > > > And here: > > if test "$have_junit" != "yes"; then > > > The idea is to set the have_junit variable exactly once. If it's not set, > "$have_junit" will be an empty string. > > + AC_MSG_ERROR([--with-junit must be specified if building the Java > high-level > + bindings.]) > + fi > + > dnl Check for suitable JDK > if test "$JDK_SUITABLE" = "no"; then > AC_MSG_ERROR([Cannot compile JavaHL without a suitable JDK. > @@ -1802,21 +1824,6 @@ > AC_SUBST(JAVAHL_OBJDIR) > AC_SUBST(FIX_JAVAHL_LIB) > AC_SUBST(LT_CXX_LIBADD) > - > -AC_ARG_WITH(junit, > -AS_HELP_STRING([--with-junit=PATH], > - [Specify a path to the junit JAR file.]), > -[ > - if test "$withval" != "no"; then > - if test -n "$JAVA_CLASSPATH"; then > - JAVA_CLASSPATH="$withval:$JAVA_CLASSPATH" > - else > - JAVA_CLASSPATH="$withval" > - fi > - JAVAHL_TESTS_TARGET="javahl-tests" > - JAVAHL_COMPAT_TESTS_TARGET="javahl-compat-tests" > - fi > -]) > AC_SUBST(JAVA_CLASSPATH) > AC_SUBST(JAVAHL_TESTS_TARGET) > AC_SUBST(JAVAHL_COMPAT_TESTS_TARGET) > ]]] > > > Out of curiosity, why do $do_javahl_build and others follow another pattern? Thanks, Daniel

