[prev in list] [next in list] [prev in thread] [next in thread] 

List:       subversion-issues
Subject:    [Issue 4443] New - New inner classes in javahl JNI interface are not handled correctly by javah from
From:       centic () tigris ! org
Date:       2013-11-03 21:38:52
Message-ID: iz4443 () subversion ! tigris ! org
[Download RAW message or body]

http://subversion.tigris.org/issues/show_bug.cgi?id=4443
                 Issue #|4443
                 Summary|New inner classes in javahl JNI interface are not hand
                        |led correctly by javah from gcj
               Component|subversion
                 Version|1.8.x
                Platform|All
                     URL|
              OS/Version|All
                  Status|NEW
       Status whiteboard|
                Keywords|
              Resolution|
              Issue type|DEFECT
                Priority|P3
            Subcomponent|bindings_javahl
             Assigned to|issues@subversion
             Reported by|centic






------- Additional comments from centic@tigris.org Sun Nov  3 14:38:52 -0700 2013 -------
Since 1.8 there is a new class VersionExtended.java in javahl which contains 4
inner classes, all of them contain native interfaces. 

The usual steps for handling javahl Java->H generation seems to be to use
build/generator/gen_make.py to generate the build-outputs.mk file which then
contains all the necessary dependencies and calls. It seems gen_make.py
currently expects the inner classes to be automatically generated as part of
running javah on the outer class, as no special handling is implemented there.

However on Ubuntu Precise (12.04) when the build uses javah from gcj, I do not
get the .h files generated for the new inner classes.

I.e. the following call will generate only one .h, whereas the build expects
inner classes to be generated as well
$ /usr/lib/jvm/java-gcj/bin/javah -force -d subversion/bindings/javahl/include
-classpath subversion/bindings/javahl/classes:
org.apache.subversion.javahl.types.VersionExtended

With a different JDK, 4 additional header files will be generated.
$ /usr/lib/jvm/java-7-oracle/bin/javah -force -d
subversion/bindings/javahl/include -classpath
subversion/bindings/javahl/classes:
org.apache.subversion.javahl.types.VersionExtended


So it seems javah from gcj expects the inner classes to be specified
explicetely, when I specify them via
"org.apache.subversion.javahl.types.VersionExtended$LoadedLib" when calling
javah, the classes are generated successfully.

I tried with the following Java versions, only gcj did not generate them,
Sun/Oracle JDK seems to generate them in all recent major versions:

$ /usr/lib/jvm/java-gcj/bin/javah -version
javah (GNU Classpath) 0.98
=> No inner classes are generated

$ /usr/lib/jvm/java-7-oracle/bin/javah -version
javah version "1.7.0_45"
=> Inner classes are generated

$ /usr/lib/jvm/java-1.5.0-sun/bin/javah -version
javah version "1.5.0_19"
=> Inner classes are generated

$ /usr/lib/jvm/java-1.6.0-openjdk/bin/javah -version
javah version "1.6.0_27"
=> Inner classes are generated

$ /usr/lib/jvm/java-7-openjdk-amd64/bin/javah -version
javah version "1.7.0_25"
=> Inner classes are generated

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=463&dsMessageId=3067728

To unsubscribe from this discussion, e-mail: [issues-unsubscribe@subversion.tigris.org].
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic