Project

General

Profile

Misc #17337

Updated by sawa (Tsuyoshi Sawada) over 3 years ago

When Ruby 3.0 is built build without C++ compiler available, subsequent builds of the Eventmachine extensions (or any other gems that require gem which requires C++ compiler) fail: fails: 

 ~~~ 
 ... snip ... 

 "make \"DESTDIR=\"" 
 I. -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I.    -DHAVE_OPENSSL_SSL_H -DHAVE_OPENSSL_ERR_H -DWITH_SSL -DBUILD_FOR_RUBY -DHAVE_RB_THREAD_CALL_WITHOUT_GVL -DHAVE_RB_THREAD_FD_SELECT -DHAVE_TYPE_RB_FDSET_T -DHAVE_RB_WAIT_FOR_SINGLE_FD -DHAVE_RB_TIME_NEW -DHAVE_INOTIFY_INIT -DHAVE_INOTIFY -DHAVE_WRITEV -DHAVE_PIPE2 -DHAVE_ACCEPT4 -DHAVE_CONST_SOCK_CLOEXEC -DOS_UNIX -DHAVE_EPOLL_CREATE -DHAVE_EPOLL -DHAVE_CLOCK_GETTIME -DHAVE_CONST_CLOCK_MONOTONIC_RAW -DHAVE_CONST_CLOCK_MONOTONIC      -fPIC -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1    -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection    -m64 -o binder.o -c binder.cpp 
 make: I.: No such file or directory 
 make: [Makefile:237: binder.o] Error 127 (ignored) 
 ~~~ 

 This happens since [1]. 

 I would don't like to question not just the commit, but the whole principle. Availability of C++ compiler during build of Ruby does not have anything to do with availability of C++ compiler during build of whatever Ruby extension. 

 Moreover, the machine where the Ruby is built might be different from to the machine where Ruby is used and the extension is installed. Typical examples are The typical example is every binary Linux distributions. distribution. But also RVM also uses is using precompiled Ruby binaries if I am not mistaken. 

 Therefore, Therefore I would appreciate if we reconsider embedding Ruby build-time build time configuration in into Ruby and its reusing it for Ruby extension build. build is reconsidered. This would solve help to avoid the issue of Eventmachine I started with, and but also avoid the issues such as #14422 

 Just FTR, to avoid this kind of issues, as a Ruby maintainer on Red Hat platforms, plaforms, I am considering to ship rbconfig.rb in vendorlib, which would dynamically dynamicaly fix these issues. E.g. set the `CONFIG['CXX']` based on C++ compiler availability during extension build. But I'd like to avoid it, at least as a downstream modification. 

 [1]: https://github.com/ruby/ruby/commit/50b18e81295ad2d45975e4d8ea1e0c7e85140b97

Back