From: max@... Date: 2020-11-29T20:37:12+00:00 Subject: [ruby-core:101144] [Ruby master Bug#17337] Don't embed Ruby build-time configuration in Ruby Issue #17337 has been updated by Rinkana (Max Berends). File Dockerfile added It seems that this issue also breaks building the sassc gem from version 2.1 onward. Building it on the ruby 3.0-rc docker image (ruby:3.0-rc-slim-buster) gives me: ``` shell current directory: /usr/local/bundle/gems/sassc-2.4.0/ext /usr/local/bin/ruby -I /usr/local/lib/ruby/site_ruby/3.0.0 -r ./siteconf20201129-11-yfpi8m.rb extconf.rb creating Makefile current directory: /usr/local/bundle/gems/sassc-2.4.0/ext make "DESTDIR=" clean current directory: /usr/local/bundle/gems/sassc-2.4.0/ext make "DESTDIR=" compiling ./libsass/src/ast.cpp make: I.: Command not found make: [Makefile:237: ast.o] Error 127 (ignored) [....] compiling ./libsass/src/values.cpp make: I.: Command not found make: [Makefile:237: values.o] Error 127 (ignored) linking shared-object sassc/libsass.so make: shared: Command not found make: [Makefile:262: libsass.so] Error 127 (ignored) strip: 'libsass.so': No such file make: *** [Makefile:263: libsass.so] Error 1 make failed, exit code 2 Gem files will remain installed in /usr/local/bundle/gems/sassc-2.4.0 for inspection. Results logged to /usr/local/bundle/extensions/x86_64-linux/3.0.0/sassc-2.4.0/gem_make.out ``` This is with just a clean Rails install (6.1.0-rc1) and no additional gems. sassc version 2.0.1 builds fine. As does sassc 2.4.0 on the ruby 2.7.2 image (ruby:2.7-slim-buster). Attached is my Dockerfile. It requires an entrypoint.sh that contains just: ``` shell #!/bin/bash set -e exec "$@" ``` ---------------------------------------- Bug #17337: Don't embed Ruby build-time configuration in Ruby https://bugs.ruby-lang.org/issues/17337#change-88824 * Author: vo.x (Vit Ondruch) * Status: Open * Priority: Normal * ruby -v: ruby 3.0.0dev (2020-11-04 master 704fb0b815) [x86_64-linux] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- When Ruby 3.0 is built without C++ compiler available, subsequent builds of Eventmachine extensions (or any other gems that require C++ compiler) fail: ~~~ ... 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 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 Ruby is built might be different from the machine where Ruby is used and the extension is installed. Typical examples are binary Linux distributions. RVM also uses precompiled Ruby binaries if I am not mistaken. Therefore, I would appreciate if we reconsider embedding Ruby build-time configuration in Ruby and reusing it for Ruby extension build. This would solve the issue of Eventmachine I started with, and also issues such as #14422 Just FTR, to avoid this kind of issues, as a Ruby maintainer on Red Hat platforms, I am considering to ship rbconfig.rb in vendorlib, which would dynamically 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 ---Files-------------------------------- Dockerfile (1.73 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: