Hi,
Ruby currently fails to build due to removal of GCC from buildroot. The build failure is due to one test case [1] which fails now and which should be probably fixed to pass even without GCC.
However, digging into this, I wonder if Ruby should have "BR: gcc" or "BR: gcc-c++". The thing is, that Ruby is checking presence of C++ compiler during its configuration phase. When I was asking upstream what is the reason for that [2], the answer was that some extension/gems might use C++. Generally, for distribution purpose, I think that it does not really make sense and every extension should be configured separately, therefore we should have just "BR: gcc", i.e. no C++ compiler available during build. However, I am not really sure if this is going to break something or not. I have tried to build rubygem-eventmachine at it seems to build just fine, but what else might be broken?
Anyway, for now, I'll probably stick with "BR: gcc" and we can change to "BR: gcc-c++" later, if we discover it causes real troubles.
Vít
Vít Ondruch wrote on 07/26/2018 06:28 PM:
Hi,
Ruby currently fails to build due to removal of GCC from buildroot. The build failure is due to one test case [1] which fails now and which should be probably fixed to pass even without GCC.
However, digging into this, I wonder if Ruby should have "BR: gcc" or "BR: gcc-c++". The thing is, that Ruby is checking presence of C++ compiler during its configuration phase.
ruby-libs contains:
/usr/lib64/ruby/rbconfig.rb:180: CONFIG["CXXFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" /usr/lib64/ruby/rbconfig.rb:181: CONFIG["CXX"] = "g++" /usr/share/ruby/mkmf.rb:74: CXX_EXT = %w[cc mm cxx cpp] /usr/share/ruby/mkmf.rb:76: CXX_EXT.concat(%w[C]) /usr/share/ruby/mkmf.rb:82: SRC_EXT = C_EXT + CXX_EXT /usr/share/ruby/mkmf.rb:1830: $CXXFLAGS += " " << cflags /usr/share/ruby/mkmf.rb:1963:CXX = #{CONFIG['CXX']} /usr/share/ruby/mkmf.rb:1984:CXXFLAGS = $(CCDLFLAGS) #$CXXFLAGS $(ARCH_FLAG) /usr/share/ruby/mkmf.rb:2429: command = compile_command % COMPILE_CXX /usr/share/ruby/mkmf.rb:2430: asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_CXX /usr/share/ruby/mkmf.rb:2431: CXX_EXT.each do |e| /usr/share/ruby/mkmf.rb:2458: if srcs.any?(&%r".(?:#{CXX_EXT.join('|')})\z".method(:===)) /usr/share/ruby/mkmf.rb:2510: $CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup /usr/share/ruby/mkmf.rb:2666: COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<' /usr/share/ruby/mkmf.rb:2676: ASSEMBLE_CXX = config_string('ASSEMBLE_CXX') || COMPILE_CXX.sub(/(?<=\s)-c(?=\s)/, '-S')
So it is quite reasonable that ruby compilation checks CXX compiler.
Regards, Mamoru
Dne 26.7.2018 v 13:40 Mamoru TASAKA napsal(a):
Vít Ondruch wrote on 07/26/2018 06:28 PM:
Hi,
Ruby currently fails to build due to removal of GCC from buildroot. The build failure is due to one test case [1] which fails now and which should be probably fixed to pass even without GCC.
However, digging into this, I wonder if Ruby should have "BR: gcc" or "BR: gcc-c++". The thing is, that Ruby is checking presence of C++ compiler during its configuration phase.
ruby-libs contains:
/usr/lib64/ruby/rbconfig.rb:180: CONFIG["CXXFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" /usr/lib64/ruby/rbconfig.rb:181: CONFIG["CXX"] = "g++" /usr/share/ruby/mkmf.rb:74: CXX_EXT = %w[cc mm cxx cpp] /usr/share/ruby/mkmf.rb:76: CXX_EXT.concat(%w[C]) /usr/share/ruby/mkmf.rb:82: SRC_EXT = C_EXT + CXX_EXT /usr/share/ruby/mkmf.rb:1830: $CXXFLAGS += " " << cflags /usr/share/ruby/mkmf.rb:1963:CXX = #{CONFIG['CXX']} /usr/share/ruby/mkmf.rb:1984:CXXFLAGS = $(CCDLFLAGS) #$CXXFLAGS $(ARCH_FLAG) /usr/share/ruby/mkmf.rb:2429: command = compile_command % COMPILE_CXX /usr/share/ruby/mkmf.rb:2430: asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_CXX /usr/share/ruby/mkmf.rb:2431: CXX_EXT.each do |e| /usr/share/ruby/mkmf.rb:2458: if srcs.any?(&%r".(?:#{CXX_EXT.join('|')})\z".method(:===)) /usr/share/ruby/mkmf.rb:2510: $CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup /usr/share/ruby/mkmf.rb:2666: COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<' /usr/share/ruby/mkmf.rb:2676: ASSEMBLE_CXX = config_string('ASSEMBLE_CXX') || COMPILE_CXX.sub(/(?<=\s)-c(?=\s)/, '-S')
So it is quite reasonable that ruby compilation checks CXX compiler.
The ticket [1] I referenced even linked to commit which introduced some of these lines [10]. However, this says nothing about usage of this code. Neither the ruby-dev discussion provides more information [11].
So is there some extension library which uses results of these checks? Frankly I'd be much happier if this was removed from upstream, since why special case C++, but not Rust for example. I am looking for some evidence ....
V.
[10] https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/8371 [11] http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/26089
Sending to mailing list:
Vít Ondruch wrote on 07/26/2018 09:18 PM:
Dne 26.7.2018 v 13:40 Mamoru TASAKA napsal(a):
Vít Ondruch wrote on 07/26/2018 06:28 PM:
Hi,
Ruby currently fails to build due to removal of GCC from buildroot. The build failure is due to one test case [1] which fails now and which should be probably fixed to pass even without GCC.
However, digging into this, I wonder if Ruby should have "BR: gcc" or "BR: gcc-c++". The thing is, that Ruby is checking presence of C++ compiler during its configuration phase.
ruby-libs contains:
/usr/lib64/ruby/rbconfig.rb:180: CONFIG["CXXFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" /usr/lib64/ruby/rbconfig.rb:181: CONFIG["CXX"] = "g++" /usr/share/ruby/mkmf.rb:74: CXX_EXT = %w[cc mm cxx cpp] /usr/share/ruby/mkmf.rb:76: CXX_EXT.concat(%w[C]) /usr/share/ruby/mkmf.rb:82: SRC_EXT = C_EXT + CXX_EXT /usr/share/ruby/mkmf.rb:1830: $CXXFLAGS += " " << cflags /usr/share/ruby/mkmf.rb:1963:CXX = #{CONFIG['CXX']} /usr/share/ruby/mkmf.rb:1984:CXXFLAGS = $(CCDLFLAGS) #$CXXFLAGS $(ARCH_FLAG) /usr/share/ruby/mkmf.rb:2429: command = compile_command % COMPILE_CXX /usr/share/ruby/mkmf.rb:2430: asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_CXX /usr/share/ruby/mkmf.rb:2431: CXX_EXT.each do |e| /usr/share/ruby/mkmf.rb:2458: if srcs.any?(&%r".(?:#{CXX_EXT.join('|')})\z".method(:===)) /usr/share/ruby/mkmf.rb:2510: $CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup /usr/share/ruby/mkmf.rb:2666: COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<' /usr/share/ruby/mkmf.rb:2676: ASSEMBLE_CXX = config_string('ASSEMBLE_CXX') || COMPILE_CXX.sub(/(?<=\s)-c(?=\s)/, '-S')
So it is quite reasonable that ruby compilation checks CXX compiler.
The ticket [1] I referenced even linked to commit which introduced some of these lines [10]. However, this says nothing about usage of this code. Neither the ruby-dev discussion provides more information [11].
So is there some extension library which uses results of these checks? Frankly I'd be much happier if this was removed from upstream, since why special case C++, but not Rust for example. I am looking for some evidence ....
https://koji.fedoraproject.org/koji/buildinfo?buildID=1124633 https://github.com/knu/ruby-unf_ext/blob/master/ext/unf_ext/extconf.rb#L31
Regards, Mamoru
Dne 26.7.2018 v 15:11 Mamoru TASAKA napsal(a):
Sending to mailing list:
Vít Ondruch wrote on 07/26/2018 09:18 PM:
Dne 26.7.2018 v 13:40 Mamoru TASAKA napsal(a):
Vít Ondruch wrote on 07/26/2018 06:28 PM:
Hi,
Ruby currently fails to build due to removal of GCC from buildroot. The build failure is due to one test case [1] which fails now and which should be probably fixed to pass even without GCC.
However, digging into this, I wonder if Ruby should have "BR: gcc" or "BR: gcc-c++". The thing is, that Ruby is checking presence of C++ compiler during its configuration phase.
ruby-libs contains:
/usr/lib64/ruby/rbconfig.rb:180: CONFIG["CXXFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" /usr/lib64/ruby/rbconfig.rb:181: CONFIG["CXX"] = "g++" /usr/share/ruby/mkmf.rb:74: CXX_EXT = %w[cc mm cxx cpp] /usr/share/ruby/mkmf.rb:76: CXX_EXT.concat(%w[C]) /usr/share/ruby/mkmf.rb:82: SRC_EXT = C_EXT + CXX_EXT /usr/share/ruby/mkmf.rb:1830: $CXXFLAGS += " " << cflags /usr/share/ruby/mkmf.rb:1963:CXX = #{CONFIG['CXX']} /usr/share/ruby/mkmf.rb:1984:CXXFLAGS = $(CCDLFLAGS) #$CXXFLAGS $(ARCH_FLAG) /usr/share/ruby/mkmf.rb:2429: command = compile_command % COMPILE_CXX /usr/share/ruby/mkmf.rb:2430: asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_CXX /usr/share/ruby/mkmf.rb:2431: CXX_EXT.each do |e| /usr/share/ruby/mkmf.rb:2458: if srcs.any?(&%r".(?:#{CXX_EXT.join('|')})\z".method(:===)) /usr/share/ruby/mkmf.rb:2510: $CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup /usr/share/ruby/mkmf.rb:2666: COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<' /usr/share/ruby/mkmf.rb:2676: ASSEMBLE_CXX = config_string('ASSEMBLE_CXX') || COMPILE_CXX.sub(/(?<=\s)-c(?=\s)/, '-S')
So it is quite reasonable that ruby compilation checks CXX compiler.
The ticket [1] I referenced even linked to commit which introduced some of these lines [10]. However, this says nothing about usage of this code. Neither the ruby-dev discussion provides more information [11].
So is there some extension library which uses results of these checks? Frankly I'd be much happier if this was removed from upstream, since why special case C++, but not Rust for example. I am looking for some evidence ....
https://koji.fedoraproject.org/koji/buildinfo?buildID=1124633 https://github.com/knu/ruby-unf_ext/blob/master/ext/unf_ext/extconf.rb#L31
Ups, sorry, I forgot test it prior issuing the latest build (I was happy enough that I workarounded the OpenSSL test failures) :(
However testing the build now, rubygem-unf_ext builds just fine. "gem install unf_ext" works fine as well. Also, the RbConfig contains the CXX variables referred in the extconf.rb:
~~~ $ rpm -q ruby-libs ruby-libs-2.5.1-94.fc29.x86_64
$ ruby -r rbconfig -e "RbConfig::CONFIG.each {|c| p c}" | grep CXX ["configure_args", " '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-rubylibprefix=/usr/share/ruby' '--with-archlibdir=/usr/lib64' '--with-rubyarchprefix=/usr/lib64/ruby' '--with-sitedir=/usr/local/share/ruby/site_ruby' '--with-sitearchdir=/usr/local/lib64/ruby/site_ruby' '--with-vendordir=/usr/share/ruby/vendor_ruby' '--with-vendorarchdir=/usr/lib64/ruby/vendor_ruby' '--with-rubyhdrdir=/usr/include' '--with-rubyarchhdrdir=/usr/include' '--with-sitearchhdrdir=$(sitehdrdir)/$(arch)' '--with-vendorarchhdrdir=$(vendorhdrdir)/$(arch)' '--with-rubygemsdir=/usr/share/rubygems' '--with-ruby-pc=ruby.pc' '--with-compress-debug-sections=no' '--disable-rpath' '--enable-shared' '--with-ruby-version=' '--enable-multiarch' '--with-prelude=./abrt_prelude.rb' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'"] ["CXXFLAGS", "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection"] ["CXX", "g++"] ["CFLAGS", "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC"] ~~~
Actually, this makes me even less worried, because for RPM build, we can use %{optflags} and we are relatively safe here, but I was more worried about pure "gem install" scenario.
Vít
Dne 27.7.2018 v 12:11 Vít Ondruch napsal(a):
Dne 26.7.2018 v 15:11 Mamoru TASAKA napsal(a):
Sending to mailing list:
Vít Ondruch wrote on 07/26/2018 09:18 PM:
Dne 26.7.2018 v 13:40 Mamoru TASAKA napsal(a):
Vít Ondruch wrote on 07/26/2018 06:28 PM:
Hi,
Ruby currently fails to build due to removal of GCC from buildroot. The build failure is due to one test case [1] which fails now and which should be probably fixed to pass even without GCC.
However, digging into this, I wonder if Ruby should have "BR: gcc" or "BR: gcc-c++". The thing is, that Ruby is checking presence of C++ compiler during its configuration phase.
ruby-libs contains:
/usr/lib64/ruby/rbconfig.rb:180: CONFIG["CXXFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" /usr/lib64/ruby/rbconfig.rb:181: CONFIG["CXX"] = "g++" /usr/share/ruby/mkmf.rb:74: CXX_EXT = %w[cc mm cxx cpp] /usr/share/ruby/mkmf.rb:76: CXX_EXT.concat(%w[C]) /usr/share/ruby/mkmf.rb:82: SRC_EXT = C_EXT + CXX_EXT /usr/share/ruby/mkmf.rb:1830: $CXXFLAGS += " " << cflags /usr/share/ruby/mkmf.rb:1963:CXX = #{CONFIG['CXX']} /usr/share/ruby/mkmf.rb:1984:CXXFLAGS = $(CCDLFLAGS) #$CXXFLAGS $(ARCH_FLAG) /usr/share/ruby/mkmf.rb:2429: command = compile_command % COMPILE_CXX /usr/share/ruby/mkmf.rb:2430: asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_CXX /usr/share/ruby/mkmf.rb:2431: CXX_EXT.each do |e| /usr/share/ruby/mkmf.rb:2458: if srcs.any?(&%r".(?:#{CXX_EXT.join('|')})\z".method(:===)) /usr/share/ruby/mkmf.rb:2510: $CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup /usr/share/ruby/mkmf.rb:2666: COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<' /usr/share/ruby/mkmf.rb:2676: ASSEMBLE_CXX = config_string('ASSEMBLE_CXX') || COMPILE_CXX.sub(/(?<=\s)-c(?=\s)/, '-S')
So it is quite reasonable that ruby compilation checks CXX compiler.
The ticket [1] I referenced even linked to commit which introduced some of these lines [10]. However, this says nothing about usage of this code. Neither the ruby-dev discussion provides more information [11].
So is there some extension library which uses results of these checks? Frankly I'd be much happier if this was removed from upstream, since why special case C++, but not Rust for example. I am looking for some evidence ....
https://koji.fedoraproject.org/koji/buildinfo?buildID=1124633 https://github.com/knu/ruby-unf_ext/blob/master/ext/unf_ext/extconf.rb#L31
Ups, sorry, I forgot test it prior issuing the latest build (I was happy enough that I workarounded the OpenSSL test failures) :(
However testing the build now, rubygem-unf_ext builds just fine. "gem install unf_ext" works fine as well. Also, the RbConfig contains the CXX variables referred in the extconf.rb:
$ rpm -q ruby-libs ruby-libs-2.5.1-94.fc29.x86_64 $ ruby -r rbconfig -e "RbConfig::CONFIG.each {|c| p c}" | grep CXX ["configure_args", " '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-rubylibprefix=/usr/share/ruby' '--with-archlibdir=/usr/lib64' '--with-rubyarchprefix=/usr/lib64/ruby' '--with-sitedir=/usr/local/share/ruby/site_ruby' '--with-sitearchdir=/usr/local/lib64/ruby/site_ruby' '--with-vendordir=/usr/share/ruby/vendor_ruby' '--with-vendorarchdir=/usr/lib64/ruby/vendor_ruby' '--with-rubyhdrdir=/usr/include' '--with-rubyarchhdrdir=/usr/include' '--with-sitearchhdrdir=$(sitehdrdir)/$(arch)' '--with-vendorarchhdrdir=$(vendorhdrdir)/$(arch)' '--with-rubygemsdir=/usr/share/rubygems' '--with-ruby-pc=ruby.pc' '--with-compress-debug-sections=no' '--disable-rpath' '--enable-shared' '--with-ruby-version=' '--enable-multiarch' '--with-prelude=./abrt_prelude.rb' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'"] ["CXXFLAGS", "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection"] ["CXX", "g++"] ["CFLAGS", "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC"]
Actually, this makes me even less worried, because for RPM build, we can use %{optflags} and we are relatively safe here, but I was more worried about pure "gem install" scenario.
Vít
This brings me to another question, shouldn't we add "cxxflags" here?
https://src.fedoraproject.org/rpms/ruby/blob/7c494340f9b797e5a8ce2f8dd8fd8ec...
V.
Vít Ondruch wrote on 07/27/2018 07:23 PM:
Dne 27.7.2018 v 12:11 Vít Ondruch napsal(a):
Dne 26.7.2018 v 15:11 Mamoru TASAKA napsal(a):
Sending to mailing list:
Vít Ondruch wrote on 07/26/2018 09:18 PM:
Dne 26.7.2018 v 13:40 Mamoru TASAKA napsal(a):
Vít Ondruch wrote on 07/26/2018 06:28 PM:
Hi,
Ruby currently fails to build due to removal of GCC from buildroot. The build failure is due to one test case [1] which fails now and which should be probably fixed to pass even without GCC.
However, digging into this, I wonder if Ruby should have "BR: gcc" or "BR: gcc-c++". The thing is, that Ruby is checking presence of C++ compiler during its configuration phase.
ruby-libs contains:
/usr/lib64/ruby/rbconfig.rb:180: CONFIG["CXXFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" /usr/lib64/ruby/rbconfig.rb:181: CONFIG["CXX"] = "g++" /usr/share/ruby/mkmf.rb:74: CXX_EXT = %w[cc mm cxx cpp] /usr/share/ruby/mkmf.rb:76: CXX_EXT.concat(%w[C]) /usr/share/ruby/mkmf.rb:82: SRC_EXT = C_EXT + CXX_EXT /usr/share/ruby/mkmf.rb:1830: $CXXFLAGS += " " << cflags /usr/share/ruby/mkmf.rb:1963:CXX = #{CONFIG['CXX']} /usr/share/ruby/mkmf.rb:1984:CXXFLAGS = $(CCDLFLAGS) #$CXXFLAGS $(ARCH_FLAG) /usr/share/ruby/mkmf.rb:2429: command = compile_command % COMPILE_CXX /usr/share/ruby/mkmf.rb:2430: asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_CXX /usr/share/ruby/mkmf.rb:2431: CXX_EXT.each do |e| /usr/share/ruby/mkmf.rb:2458: if srcs.any?(&%r".(?:#{CXX_EXT.join('|')})\z".method(:===)) /usr/share/ruby/mkmf.rb:2510: $CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup /usr/share/ruby/mkmf.rb:2666: COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<' /usr/share/ruby/mkmf.rb:2676: ASSEMBLE_CXX = config_string('ASSEMBLE_CXX') || COMPILE_CXX.sub(/(?<=\s)-c(?=\s)/, '-S')
So it is quite reasonable that ruby compilation checks CXX compiler.
The ticket [1] I referenced even linked to commit which introduced some of these lines [10]. However, this says nothing about usage of this code. Neither the ruby-dev discussion provides more information [11].
So is there some extension library which uses results of these checks? Frankly I'd be much happier if this was removed from upstream, since why special case C++, but not Rust for example. I am looking for some evidence ....
https://koji.fedoraproject.org/koji/buildinfo?buildID=1124633 https://github.com/knu/ruby-unf_ext/blob/master/ext/unf_ext/extconf.rb#L31
Ups, sorry, I forgot test it prior issuing the latest build (I was happy enough that I workarounded the OpenSSL test failures) :(
However testing the build now, rubygem-unf_ext builds just fine. "gem install unf_ext" works fine as well. Also, the RbConfig contains the CXX variables referred in the extconf.rb:
$ rpm -q ruby-libs ruby-libs-2.5.1-94.fc29.x86_64 $ ruby -r rbconfig -e "RbConfig::CONFIG.each {|c| p c}" | grep CXX ["configure_args", " '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-rubylibprefix=/usr/share/ruby' '--with-archlibdir=/usr/lib64' '--with-rubyarchprefix=/usr/lib64/ruby' '--with-sitedir=/usr/local/share/ruby/site_ruby' '--with-sitearchdir=/usr/local/lib64/ruby/site_ruby' '--with-vendordir=/usr/share/ruby/vendor_ruby' '--with-vendorarchdir=/usr/lib64/ruby/vendor_ruby' '--with-rubyhdrdir=/usr/include' '--with-rubyarchhdrdir=/usr/include' '--with-sitearchhdrdir=$(sitehdrdir)/$(arch)' '--with-vendorarchhdrdir=$(vendorhdrdir)/$(arch)' '--with-rubygemsdir=/usr/share/rubygems' '--with-ruby-pc=ruby.pc' '--with-compress-debug-sections=no' '--disable-rpath' '--enable-shared' '--with-ruby-version=' '--enable-multiarch' '--with-prelude=./abrt_prelude.rb' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'"] ["CXXFLAGS", "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection"] ["CXX", "g++"] ["CFLAGS", "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC"]
Actually, this makes me even less worried, because for RPM build, we can use %{optflags} and we are relatively safe here, but I was more worried about pure "gem install" scenario.
Vít
This brings me to another question, shouldn't we add "cxxflags" here?
https://src.fedoraproject.org/rpms/ruby/blob/7c494340f9b797e5a8ce2f8dd8fd8ec...
I guess it is better.
Regards, Mamoru
Dne 30.7.2018 v 17:40 Mamoru TASAKA napsal(a):
Vít Ondruch wrote on 07/27/2018 07:23 PM:
Dne 27.7.2018 v 12:11 Vít Ondruch napsal(a):
Dne 26.7.2018 v 15:11 Mamoru TASAKA napsal(a):
Sending to mailing list:
Vít Ondruch wrote on 07/26/2018 09:18 PM:
Dne 26.7.2018 v 13:40 Mamoru TASAKA napsal(a):
Vít Ondruch wrote on 07/26/2018 06:28 PM: > Hi, > > Ruby currently fails to build due to removal of GCC from buildroot. > The > build failure is due to one test case [1] which fails now and which > should be probably fixed to pass even without GCC. > > However, digging into this, I wonder if Ruby should have "BR: > gcc" or > "BR: gcc-c++". The thing is, that Ruby is checking presence of C++ > compiler during its configuration phase. ruby-libs contains:
/usr/lib64/ruby/rbconfig.rb:180: CONFIG["CXXFLAGS"] = "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" /usr/lib64/ruby/rbconfig.rb:181: CONFIG["CXX"] = "g++" /usr/share/ruby/mkmf.rb:74: CXX_EXT = %w[cc mm cxx cpp] /usr/share/ruby/mkmf.rb:76: CXX_EXT.concat(%w[C]) /usr/share/ruby/mkmf.rb:82: SRC_EXT = C_EXT + CXX_EXT /usr/share/ruby/mkmf.rb:1830: $CXXFLAGS += " " << cflags /usr/share/ruby/mkmf.rb:1963:CXX = #{CONFIG['CXX']} /usr/share/ruby/mkmf.rb:1984:CXXFLAGS = $(CCDLFLAGS) #$CXXFLAGS $(ARCH_FLAG) /usr/share/ruby/mkmf.rb:2429: command = compile_command % COMPILE_CXX /usr/share/ruby/mkmf.rb:2430: asm_command = compile_command.sub(/compiling/, 'translating') % ASSEMBLE_CXX /usr/share/ruby/mkmf.rb:2431: CXX_EXT.each do |e| /usr/share/ruby/mkmf.rb:2458: if srcs.any?(&%r".(?:#{CXX_EXT.join('|')})\z".method(:===)) /usr/share/ruby/mkmf.rb:2510: $CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup /usr/share/ruby/mkmf.rb:2666: COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<' /usr/share/ruby/mkmf.rb:2676: ASSEMBLE_CXX = config_string('ASSEMBLE_CXX') || COMPILE_CXX.sub(/(?<=\s)-c(?=\s)/, '-S')
So it is quite reasonable that ruby compilation checks CXX compiler.
The ticket [1] I referenced even linked to commit which introduced some of these lines [10]. However, this says nothing about usage of this code. Neither the ruby-dev discussion provides more information [11].
So is there some extension library which uses results of these checks? Frankly I'd be much happier if this was removed from upstream, since why special case C++, but not Rust for example. I am looking for some evidence ....
https://koji.fedoraproject.org/koji/buildinfo?buildID=1124633 https://github.com/knu/ruby-unf_ext/blob/master/ext/unf_ext/extconf.rb#L31
Ups, sorry, I forgot test it prior issuing the latest build (I was happy enough that I workarounded the OpenSSL test failures) :(
However testing the build now, rubygem-unf_ext builds just fine. "gem install unf_ext" works fine as well. Also, the RbConfig contains the CXX variables referred in the extconf.rb:
$ rpm -q ruby-libs ruby-libs-2.5.1-94.fc29.x86_64 $ ruby -r rbconfig -e "RbConfig::CONFIG.each {|c| p c}" | grep CXX ["configure_args", " '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-rubylibprefix=/usr/share/ruby' '--with-archlibdir=/usr/lib64' '--with-rubyarchprefix=/usr/lib64/ruby' '--with-sitedir=/usr/local/share/ruby/site_ruby' '--with-sitearchdir=/usr/local/lib64/ruby/site_ruby' '--with-vendordir=/usr/share/ruby/vendor_ruby' '--with-vendorarchdir=/usr/lib64/ruby/vendor_ruby' '--with-rubyhdrdir=/usr/include' '--with-rubyarchhdrdir=/usr/include' '--with-sitearchhdrdir=$(sitehdrdir)/$(arch)' '--with-vendorarchhdrdir=$(vendorhdrdir)/$(arch)' '--with-rubygemsdir=/usr/share/rubygems' '--with-ruby-pc=ruby.pc' '--with-compress-debug-sections=no' '--disable-rpath' '--enable-shared' '--with-ruby-version=' '--enable-multiarch' '--with-prelude=./abrt_prelude.rb' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'"] ["CXXFLAGS", "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection"] ["CXX", "g++"] ["CFLAGS", "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC"]
Actually, this makes me even less worried, because for RPM build, we can use %{optflags} and we are relatively safe here, but I was more worried about pure "gem install" scenario.
Vít
This brings me to another question, shouldn't we add "cxxflags" here?
https://src.fedoraproject.org/rpms/ruby/blob/7c494340f9b797e5a8ce2f8dd8fd8ec...
I guess it is better.
This is now committed:
https://src.fedoraproject.org/rpms/ruby/c/d5e84a533c0c6d5b92ea21ee5ba09b49b1...
V.
Regards, Mamoru
ruby-sig mailing list -- ruby-sig@lists.fedoraproject.org To unsubscribe send an email to ruby-sig-leave@lists.fedoraproject.org Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.o...
ruby-sig@lists.fedoraproject.org