You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Alexander Thomas <al...@collab.net> on 2015/04/24 08:43:50 UTC

1.9-rc1: Javahl compilation issue in RHEL3

Compiling 1.9.0-rc1 JavaHL in RHEL3 32bit with GCC version 3.2.3-53 and 
libstdc++ version 5.0.3 fails with multiple compilation error in 
javahl/native/EditorProxy.cpp. In addition to line number 213, line 360 
also fails with same error.

However I was able to successfully compile against GCC 4.2.0 with 
libstdc++ 6.0.9.

Is this something we can fix for RHEL3 ?

[[[
  subversion/bindings/javahl/native/EditorProxy.cpp: In static member 
function
    `static svn_error_t* EditorProxy::cb_add_file(void*, const char*, const
    svn_checksum_t*, svn_stream_t*, apr_hash_t*, long int, apr_pool_t*)':
subversion/bindings/javahl/native/EditorProxy.cpp:213: `Env' specified as
    declarator-id
subversion/bindings/javahl/native/EditorProxy.cpp:213: multiple 
declarations `
    int' and `Java::RuntimeException'
subversion/bindings/javahl/native/EditorProxy.cpp:213: `int Java::Env()' 
should
    have been declared inside `Java'
subversion/bindings/javahl/native/EditorProxy.cpp:213: syntax error 
before `.'
    token
subversion/bindings/javahl/native/EditorProxy.cpp:213: `Env' specified as
    declarator-id
subversion/bindings/javahl/native/EditorProxy.cpp:213: multiple 
declarations `
    int' and `Java::RuntimeException'
subversion/bindings/javahl/native/EditorProxy.cpp:213: `int Java::Env()' 
should
    have been declared inside `Java'
subversion/bindings/javahl/native/EditorProxy.cpp:213: syntax error 
before `.'
    token
]]]


-AT

Re: 1.9-rc1: Javahl compilation issue in RHEL3

Posted by Branko Čibej <br...@wandisco.com>.
On 25.04.2015 08:17, Alexander Thomas wrote:
> On 04/25/2015 03:48 AM, Branko Čibej wrote:
>> On 24.04.2015 10:46, Alexander Thomas wrote:
>>> On 04/24/2015 12:47 PM, Branko Čibej wrote:
>>>>
>>>> Can you try compiling with the following patch, please, and report the
>>>> results?
>>>> ndings/javahl
>>>
>>> Here is result after patching ...
>>>
>>> [[[
>>> subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In
>>> function
>>>     `svn_error_t* Java::<unnamed>::global_stream_close_input(void*)':
>>> subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:114:
>>> type
>>>     specifier omitted for parameter `ref'
>>
>> (...etc)
>>
>> Pretty much as I expected, I'm afraid. You'll have to use a newer
>> version of GCC; yes, I'm aware that this makes packaging a lot more
>> painful, given that you'll most likely have to ship a newer
>> libstdc++, too.
>
> This is case I had to move to RHEL4. Bit painful no other go.
>>
>> As far as I'm aware, RHEL3 is EOL and the last official update was 8
>> years ago.
>>
> Yes I agree. Does this mean SVN official say RHEL 3 is no longer
> supported, that is how it happens ?

This is not about "supporting" RHEL 3; we do not "officially support"
any particular Linux distro. But you do need a valid C++ compiler with a
complete implementation of C++98 to compile JavaHL for 1.9.

> Another small changes required in the bindings/javahl/README where
> minimum required version of JRE/JDK now at 1.5+ need to be changed to
> 1.6+ (I hope). When I compiled javahl against 1.5.x, its not able find
> many symbols in class java.lang.String like isEmpty().

Yes, I think we'll have to update that minimum requirement, too. Java
1.5 has also been quite dead for a while. Although in this case,
replacing .isEmpty() with .equals("") should be fine.

-- Brane


Re: 1.9-rc1: Javahl compilation issue in RHEL3

Posted by Alexander Thomas <al...@collab.net>.
On 04/25/2015 03:48 AM, Branko Čibej wrote:
> On 24.04.2015 10:46, Alexander Thomas wrote:
>> On 04/24/2015 12:47 PM, Branko Čibej wrote:
>>>
>>> Can you try compiling with the following patch, please, and report the
>>> results?
>>>ndings/javahl
>>
>> Here is result after patching ...
>>
>> [[[
>> subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In
>> function
>>     `svn_error_t* Java::<unnamed>::global_stream_close_input(void*)':
>> subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:114: type
>>     specifier omitted for parameter `ref'
>
> (...etc)
>
> Pretty much as I expected, I'm afraid. You'll have to use a newer
> version of GCC; yes, I'm aware that this makes packaging a lot more
> painful, given that you'll most likely have to ship a newer libstdc++, too.

This is case I had to move to RHEL4. Bit painful no other go.
>
> As far as I'm aware, RHEL3 is EOL and the last official update was 8
> years ago.
>
Yes I agree. Does this mean SVN official say RHEL 3 is no longer 
supported, that is how it happens ?

Another small changes required in the bindings/javahl/README where 
minimum required version of JRE/JDK now at 1.5+ need to be changed to 
1.6+ (I hope). When I compiled javahl against 1.5.x, its not able find 
many symbols in class java.lang.String like isEmpty().

-AT

Re: 1.9-rc1: Javahl compilation issue in RHEL3

Posted by Branko Čibej <br...@wandisco.com>.
On 24.04.2015 10:46, Alexander Thomas wrote:
> On 04/24/2015 12:47 PM, Branko Čibej wrote:
>>
>> Can you try compiling with the following patch, please, and report the
>> results?
>>
>
> Here is result after patching ...
>
> [[[
> subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In
> function
>    `svn_error_t* Java::<unnamed>::global_stream_close_input(void*)':
> subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:114: type
>    specifier omitted for parameter `ref'

(...etc)

Pretty much as I expected, I'm afraid. You'll have to use a newer
version of GCC; yes, I'm aware that this makes packaging a lot more
painful, given that you'll most likely have to ship a newer libstdc++, too.

As far as I'm aware, RHEL3 is EOL and the last official update was 8
years ago.

-- Brane


Re: 1.9-rc1: Javahl compilation issue in RHEL3

Posted by Alexander Thomas <al...@collab.net>.
On 04/24/2015 12:47 PM, Branko Čibej wrote:
>
> Can you try compiling with the following patch, please, and report the
> results?
>

Here is result after patching ...

[[[
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In function
    `svn_error_t* Java::<unnamed>::global_stream_close_input(void*)':
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:114: type
    specifier omitted for parameter `ref'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:114: syntax
    error before `->' token
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:115: invalid
    conversion from `Java::InputStream (*)(...)' to `void*'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In function
    `svn_error_t* Java::<unnamed>::global_stream_mark(void*,
    svn_stream_mark_t**, apr_pool_t*)':
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:123: type
    specifier omitted for parameter `ref'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:123: syntax
    error before `->' token
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:124: invalid
    conversion from `Java::InputStream (*)(...)' to `void*'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In function
    `svn_error_t* Java::<unnamed>::global_stream_seek(void*, const
    svn_stream_mark_t*)':
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:131: type
    specifier omitted for parameter `ref'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:131: syntax
    error before `->' token
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:132: invalid
    conversion from `Java::InputStream (*)(...)' to `void*'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In function
    `svn_error_t* Java::<unnamed>::global_stream_read(void*, char*,
    apr_size_t*)':
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:139: type
    specifier omitted for parameter `ref'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:139: syntax
    error before `->' token
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:140: invalid
    conversion from `Java::InputStream (*)(...)' to `void*'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In function
    `svn_error_t* Java::<unnamed>::global_stream_skip(void*, unsigned int)':
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:147: type
    specifier omitted for parameter `ref'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:147: syntax
    error before `->' token
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:148: invalid
    conversion from `Java::InputStream (*)(...)' to `void*'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In function
    `svn_error_t* Java::<unnamed>::global_stream_close_output(void*)':
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:155: type
    specifier omitted for parameter `ref'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:155: syntax
    error before `->' token
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:156: invalid
    conversion from `Java::OutputStream (*)(...)' to `void*'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp: In function
    `svn_error_t* Java::<unnamed>::global_stream_write(void*, const char*,
    apr_size_t*)':
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:163: type
    specifier omitted for parameter `ref'
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:163: syntax
    error before `->' token
subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp:164: invalid
    conversion from `Java::OutputStream (*)(...)' to `void*'
make: *** 
[subversion/bindings/javahl/native/jniwrapper/jni_io_stream.lo] Error 1
]]]

- AT

Re: 1.9-rc1: Javahl compilation issue in RHEL3

Posted by Alexander Thomas <al...@collab.net>.
On 04/24/2015 12:47 PM, Branko Čibej wrote:
>
>      if (contents != NULL)
>        {
>          Java::Env env;
>          SVN_JAVAHL_CATCH(Java::Env(), ...);
>        }
>

if (contents != NULL)
   {
     Java::Env env;
     SVN_JAVAHL_CATCH(env,...);
   }

This I tried earlier even before I tried upgrading GCC, but ended up 
with more error on some other lines. Let me recompile and post you the 
error ...

-AT

Re: 1.9-rc1: Javahl compilation issue in RHEL3

Posted by Branko Čibej <br...@wandisco.com>.
On 24.04.2015 08:43, Alexander Thomas wrote:
> Compiling 1.9.0-rc1 JavaHL in RHEL3 32bit with GCC version 3.2.3-53
> and libstdc++ version 5.0.3 fails with multiple compilation error in
> javahl/native/EditorProxy.cpp. In addition to line number 213, line
> 360 also fails with same error.
>
> However I was able to successfully compile against GCC 4.2.0 with
> libstdc++ 6.0.9.
>
> Is this something we can fix for RHEL3 ?
>
> [[[
>  subversion/bindings/javahl/native/EditorProxy.cpp: In static member
> function
>    `static svn_error_t* EditorProxy::cb_add_file(void*, const char*,
> const
>    svn_checksum_t*, svn_stream_t*, apr_hash_t*, long int, apr_pool_t*)':
> subversion/bindings/javahl/native/EditorProxy.cpp:213: `Env' specified as
>    declarator-id
> subversion/bindings/javahl/native/EditorProxy.cpp:213: multiple
> declarations `
>    int' and `Java::RuntimeException'
> subversion/bindings/javahl/native/EditorProxy.cpp:213: `int
> Java::Env()' should
>    have been declared inside `Java'
> subversion/bindings/javahl/native/EditorProxy.cpp:213: syntax error
> before `.'
>    token
> subversion/bindings/javahl/native/EditorProxy.cpp:213: `Env' specified as
>    declarator-id
> subversion/bindings/javahl/native/EditorProxy.cpp:213: multiple
> declarations `
>    int' and `Java::RuntimeException'
> subversion/bindings/javahl/native/EditorProxy.cpp:213: `int
> Java::Env()' should
>    have been declared inside `Java'
> subversion/bindings/javahl/native/EditorProxy.cpp:213: syntax error
> before `.'
>    token
> ]]]


It appears that this (very old) version of GCC does not implement C++
name lookup and/or temporary object binding correctly. The declaration
of Java::Env in this case is equivalent to:

    namespace Java { class Env {}; }


but the compiler doesn't recognize 'Java::Env()' as constructing a
temporary object. We could fix this particular instance by declaring a
named variable in the scope of the conditional statement, like this:

    if (contents != NULL)
      {
        Java::Env env;
        SVN_JAVAHL_CATCH(Java::Env(), ...);
      }


but there are likely to be more cases where compilation with GCC 3.2
will fail for this or other reasons. Frankly, I'm not sure it's a good
idea to try to dumb down the code for a compiler that does not implement
C++98 correctly.

Can you try compiling with the following patch, please, and report the
results?

-- Brane


Index: subversion/bindings/javahl/native/EditorProxy.cpp
===================================================================
--- subversion/bindings/javahl/native/EditorProxy.cpp	(revision 1675261)
+++ subversion/bindings/javahl/native/EditorProxy.cpp	(working copy)
@@ -209,8 +209,11 @@
   SVN_JNI_CATCH(,SVN_ERR_RA_SVN_EDIT_ABORTED);
 
   if (contents != NULL)
-    SVN_JAVAHL_CATCH(Java::Env(), SVN_ERR_RA_SVN_EDIT_ABORTED,
-                     jcontents = wrap_input_stream(contents));
+    {
+      Java::Env env;
+      SVN_JAVAHL_CATCH(env, SVN_ERR_RA_SVN_EDIT_ABORTED,
+                       jcontents = wrap_input_stream(contents));
+    }
 
   SVN_JNI_CATCH(
       JNIUtil::getEnv()->CallVoidMethod(ep->m_jeditor, mid,
@@ -356,8 +359,11 @@
   SVN_JNI_CATCH(,SVN_ERR_RA_SVN_EDIT_ABORTED);
 
   if (contents != NULL)
-    SVN_JAVAHL_CATCH(Java::Env(), SVN_ERR_RA_SVN_EDIT_ABORTED,
-                     jcontents = wrap_input_stream(contents));
+    {
+      Java::Env env;
+      SVN_JAVAHL_CATCH(env, SVN_ERR_RA_SVN_EDIT_ABORTED,
+                       jcontents = wrap_input_stream(contents));
+    }
 
   SVN_JNI_CATCH(
       JNIUtil::getEnv()->CallVoidMethod(ep->m_jeditor, mid,