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`.
>

autotools (in 1.14) produce different results depending on if you use
--with-junit or without. Depending on how I read your arguments ("changing
the ABI" below), it could be an ABI violation/bug that we sometimes produce
a svn-javahl.jar without the test classes.


> 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:
>

Autotools currently fail when building when using options that were working
in 1.14. That for me is a regression.  Changing build requirements and
refusing to run configure is not a regression. More below.


>
> 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.
>
>
Agree that it should produce identical results given identical options.

>
> 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.
>

Good! That is exactly what we need to figure out.

Cheers,
Daniel

Reply via email to