[jira] [Closed] (SVN-4841) Subversion fails to compile with ruby-2.7

"Daniel Sahlberg (Jira)" <[email protected]> Thu, 5 Oct 2023 08:13:00 +0000 (UTC)
Newsgroups gmane.comp.version-control.subversion.issues
Message-ID <[email protected]>
     [ https://issues.apache.org/jira/browse/SVN-4841?page=3Dcom.atlassian.=
jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Sahlberg closed SVN-4841.
--------------------------------

> Subversion fails to compile with ruby-2.7
> -----------------------------------------
>
>                 Key: SVN-4841
>                 URL: https://issues.apache.org/jira/browse/SVN-4841
>             Project: Subversion
>          Issue Type: Bug
>          Components: bindings_swig_ruby
>    Affects Versions: 1.13.0
>         Environment: Arch Linux with ruby 2.7
>            Reporter: Anatol Pomozov
>            Assignee: James McCoy
>            Priority: Major
>             Fix For: 1.14.0
>
>
> I am trying to compile subversion with ruby-2.7 and there is an issue:
> =C2=A0
> first there is a suspicious compiler warning:
> {noformat}
> gcc: error: unrecognized command line option =E2=80=98-prefer-pic=E2=80=
=99
> [root@wolf subversion-1.13.0]# gcc -march=3Dx86-64 -mtune=3Dgeneric -O2 -=
pipe -fno-plt -pthread -Wno-int-to-pointer-cast -D_FORTIFY_SOURCE=3D2 -DLIN=
UX -D_REENTRANT -D_GNU_SOURCE -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/b=
uild/subversion/src/subversion-1.13.0/subversion -I/build/subversion/src/su=
bversion-1.13.0/subversion/include -I/build/subversion/src/subversion-1.13.=
0/subversion/bindings/swig -I/build/subversion/src/subversion-1.13.0/subver=
sion/bindings/swig/include -I/build/subversion/src/subversion-1.13.0/subver=
sion/bindings/swig/proxy -I/build/subversion/src/subversion-1.13.0/subversi=
on/bindings/swig/proxy -I/usr/include/apr-1 -I/usr/include/apr-1 -I/usr/inc=
lude -I. -I/usr/include/ruby-2.7.0 -I/usr/include/ruby-2.7.0/ruby -I/usr/in=
clude/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0/x86_64-linux -I/bu=
ild/subversion/src/subversion-1.13.0/subversion/bindings/swig/ruby/libsvn_s=
wig_ruby -c -o subversion/bindings/swig/ruby/svn_client.lo subversion/bindi=
ngs/swig/ruby/svn_client.c
> subversion/bindings/swig/ruby/svn_client.c: In function =E2=80=98SWIG_Rub=
y_ConvertPtrAndOwn=E2=80=99:
> subversion/bindings/swig/ruby/svn_client.c:1666:13: warning: implicit dec=
laration of function =E2=80=98assert=E2=80=99 [-Wimplicit-function-declarat=
ion]
>  1666 | assert(own); /* badly formed typemap which will lead to a memory =
leak - it must set and use own to delete *ptr */
>  | ^~~~~~
> subversion/bindings/swig/ruby/svn_client.c:1394:1: note: =E2=80=98assert=
=E2=80=99 is defined in header =E2=80=98<assert.h>=E2=80=99; did you forget=
 to =E2=80=98#include <assert.h>=E2=80=99?
>  1393 | #include "assert.h"
>  +++ |+#include <assert.h>
>  1394 |{noformat}
> =C2=A0
> Then ruby tests fail:
> {noformat}
> /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': =
/build/subversion/src/subversion-1.13.0/subversion/bindings/swig/ruby/libsv=
n_swig_ruby/.libs/libsvn_swig_ruby-1.so.0: undefined symbol: assert - /buil=
d/subversion/src/subversion-1.13.0/subversion/bindings/swig/ruby/.ext/svn/e=
xt/core.so (LoadError)
> =09from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `re=
quire'
> =09from /build/subversion/src/subversion-1.13.0/subversion/bindings/swig/=
ruby/svn/error.rb:21:in `<top (required)>'
> =09from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `re=
quire'
> =09from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `re=
quire'
> =09from /build/subversion/src/subversion-1.13.0/subversion/bindings/swig/=
ruby/svn/core.rb:25:in `<top (required)>'
> =09from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `re=
quire'
> =09from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `re=
quire'
> =09from /build/subversion/src/subversion-1.13.0/subversion/bindings/swig/=
ruby/test/run-test.rb:47:in `<main>'
> make: *** [Makefile:962: check-swig-rb] Error 1{noformat}
> =C2=A0
> After some debugging I found that ruby-2.7 introduced a new file under '/=
usr/include/ruby-2.7.0/ruby/assert.h' and subversion build includes path '/=
usr/include/ruby-2.7.0/' before standard includes path. Thus ruby's version=
 of "assert.h" gets included and it contains no definition of assert() func=
tion.
> =C2=A0
> Is it something you can fix?
> =C2=A0
> I feel that /usr/include/ruby-2.7.0/ include path should be enough for su=
bversion. No need to include=C2=A0/usr/include/ruby-2.7.0/ruby and=C2=A0/us=
r/include/ruby-2.7.0/backward in build/ac-macros/swig.m4
> {noformat}
>     AC_CACHE_CHECK([for Ruby include path], [svn_cv_ruby_includes],[
>     if test -d "$rbconfig_rubyhdrdir"; then
>       dnl Ruby >=3D1.9
>       svn_cv_ruby_includes=3D"-I. -I$rbconfig_rubyhdrdir -I$rbconfig_ruby=
hdrdir/ruby -I$rbconfig_rubyhdrdir/ruby/backward"
>       if test -d "$rbconfig_rubyarchhdrdir"; then
>         dnl Ruby >=3D2.0
>         svn_cv_ruby_includes=3D"$svn_cv_ruby_includes -I$rbconfig_rubyarc=
hhdrdir"
>       else
>         svn_cv_ruby_includes=3D"$svn_cv_ruby_includes -I$rbconfig_rubyhdr=
dir/$rbconfig_arch"
>       fi
>     else
>       dnl Ruby 1.8
>       svn_cv_ruby_includes=3D"-I. -I$rbconfig_archdir"
>     fi
>     ])
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)