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

"Daniel Shahaf (Jira)" <[email protected]>
Newsgroups gmane.comp.version-control.subversion.issues
Message-ID <[email protected]>
    [ https://issues.apache.org/jira/browse/SVN-4841?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17005516#comment-17005516 ] 

Daniel Shahaf commented on SVN-4841:
------------------------------------

Assuming your analysis is correct, would you like to write a patch? http://subversion.apache.org/patches.

We should also add -Werror=implicit-function-declaration to CFLAGS in configure.  (There's a list of flags that we only add if the compiler supports them.)

Where does that line 1393 come from?  Our code never uses the "" syntax for including assert.h; it only uses the <> syntax for that.

We don't use the issue tracker for discussion; please use the mailing lists instead.

Thanks for the report :)

> 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
>            Priority: Major
>
> I am trying to compile subversion with ruby-2.7 and there is an issue:
>  
> first there is a suspicious compiler warning:
> {noformat}
> gcc: error: unrecognized command line option ‘-prefer-pic’
> [root@wolf subversion-1.13.0]# gcc -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -pthread -Wno-int-to-pointer-cast -D_FORTIFY_SOURCE=2 -DLINUX -D_REENTRANT -D_GNU_SOURCE -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/build/subversion/src/subversion-1.13.0/subversion -I/build/subversion/src/subversion-1.13.0/subversion/include -I/build/subversion/src/subversion-1.13.0/subversion/bindings/swig -I/build/subversion/src/subversion-1.13.0/subversion/bindings/swig/include -I/build/subversion/src/subversion-1.13.0/subversion/bindings/swig/proxy -I/build/subversion/src/subversion-1.13.0/subversion/bindings/swig/proxy -I/usr/include/apr-1 -I/usr/include/apr-1 -I/usr/include -I. -I/usr/include/ruby-2.7.0 -I/usr/include/ruby-2.7.0/ruby -I/usr/include/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0/x86_64-linux -I/build/subversion/src/subversion-1.13.0/subversion/bindings/swig/ruby/libsvn_swig_ruby -c -o subversion/bindings/swig/ruby/svn_client.lo subversion/bindings/swig/ruby/svn_client.c
> subversion/bindings/swig/ruby/svn_client.c: In function ‘SWIG_Ruby_ConvertPtrAndOwn’:
> subversion/bindings/swig/ruby/svn_client.c:1666:13: warning: implicit declaration of function ‘assert’ [-Wimplicit-function-declaration]
>  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: ‘assert’ is defined in header ‘<assert.h>’; did you forget to ‘#include <assert.h>’?
>  1393 | #include "assert.h"
>  +++ |+#include <assert.h>
>  1394 |{noformat}
>  
> 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/libsvn_swig_ruby/.libs/libsvn_swig_ruby-1.so.0: undefined symbol: assert - /build/subversion/src/subversion-1.13.0/subversion/bindings/swig/ruby/.ext/svn/ext/core.so (LoadError)
> 	from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
> 	from /build/subversion/src/subversion-1.13.0/subversion/bindings/swig/ruby/svn/error.rb:21:in `<top (required)>'
> 	from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
> 	from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
> 	from /build/subversion/src/subversion-1.13.0/subversion/bindings/swig/ruby/svn/core.rb:25:in `<top (required)>'
> 	from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
> 	from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
> 	from /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}
>  
> 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() function.
>  
> Is it something you can fix?
>  
> I feel that /usr/include/ruby-2.7.0/ include path should be enough for subversion. No need to include /usr/include/ruby-2.7.0/ruby and /usr/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 >=1.9
>       svn_cv_ruby_includes="-I. -I$rbconfig_rubyhdrdir -I$rbconfig_rubyhdrdir/ruby -I$rbconfig_rubyhdrdir/ruby/backward"
>       if test -d "$rbconfig_rubyarchhdrdir"; then
>         dnl Ruby >=2.0
>         svn_cv_ruby_includes="$svn_cv_ruby_includes -I$rbconfig_rubyarchhdrdir"
>       else
>         svn_cv_ruby_includes="$svn_cv_ruby_includes -I$rbconfig_rubyhdrdir/$rbconfig_arch"
>       fi
>     else
>       dnl Ruby 1.8
>       svn_cv_ruby_includes="-I. -I$rbconfig_archdir"
>     fi
>     ])
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.