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,