Description of problem: Package ruby fails to build from source in Fedora 42. Version-Release number of selected component (if applicable): 3.4.1-22.fc42 Steps to Reproduce: koji build --scratch f42 ruby-3.4.1-22.fc42.src.rpm Additional info: This package is tracked by Koschei. See: https://koschei.fedoraproject.org/package/ruby Reproducible: Always
~~~ gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/aarch64-linux -I/builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/include -I/builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1 -I/builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/prism -I/builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/enc/unicode/15.0.0 -Dmodular_gc_dir="" -o compile.o -c /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/compile.c In file included from /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/compile.c:21: /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/vm_callinfo.h: In function ‘vm_ci_dump’: /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/internal.h:89:72: error: ‘RUBY_FUNCTION_NAME_STRING’ undeclared (first use in this function) 89 | #define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING) | ^~~~~~~~~~~~~~~~~~~~~~~~~ /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/vm_callinfo.h:183:9: note: in expansion of macro ‘rp’ 183 | rp(ci); | ^~ /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/internal.h:89:72: note: each undeclared identifier is reported only once for each function it appears in 89 | #define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING) | ^~~~~~~~~~~~~~~~~~~~~~~~~ /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/vm_callinfo.h:183:9: note: in expansion of macro ‘rp’ 183 | rp(ci); | ^~ /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/vm_callinfo.h: In function ‘vm_ci_new_’: /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/internal.h:89:72: error: ‘RUBY_FUNCTION_NAME_STRING’ undeclared (first use in this function) 89 | #define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING) | ^~~~~~~~~~~~~~~~~~~~~~~~~ /builddir/build/BUILD/ruby-3.4.1-build/ruby-3.4.1/vm_callinfo.h:221:16: note: in expansion of macro ‘rp’ 221 | if (debug) rp(ci); | ^~ make: *** [Makefile:461: compile.o] Error 1 ~~~ Seems to be change in GCC behavior on AArch64. gcc-15.0.1-0.4.fc42 worked just fine, gcc-15.0.1-0.4.fc42 seems to cause the issue.
I don't see a failed build in koji, where was this built? Is that aarch64 only or all arches? What the second gcc NVR is supposed to be (both are the same)? Looking at ruby's configure.ac, seems it is defined based on configure check: AC_CACHE_CHECK(for function name string predefined identifier, rb_cv_function_name_string, [AS_CASE(["$target_os"],[openbsd*],[ rb_cv_function_name_string=__func__ ],[ rb_cv_function_name_string=no RUBY_WERROR_FLAG([ for func in __func__ __FUNCTION__; do AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <stdio.h>]], [[puts($func);]])], [rb_cv_function_name_string=$func break]) done ]) ])] ) AS_IF([test "$rb_cv_function_name_string" != no], [ AC_DEFINE_UNQUOTED(RUBY_FUNCTION_NAME_STRING, [$rb_cv_function_name_string]) ]) So, can you look at config.log to see what warnings or errors were emitted?
Actually not gcc but binutils change (2.43.50-12.fc42 -> 2.44-1.fc42) I am going to write detail shortly
So with aarch64, trying to compile and link the above "conftest.c" with binutils-2.44-1.fc42.aarch64 shows warnings (which I don't know what to mean): /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/libgmp.so: warning: GCS is required by -z gcs, but this shared library lacks the necessary property note. The dynamic loader might not enable GCS or refuse to load the program unless all the shared library dependencies have the GCS marking. /usr/lib/gcc/aarch64-redhat-linux/15/../../../../lib64/libcrypt.so: warning: GCS is required by -z gcs, but this shared library lacks the necessary property note. The dynamic loader might not enable GCS or refuse to load the program unless all the shared library dependencies have the GCS marking. and "RUBY_WERROR_FLAG" treats the above warnings as error. So whether binutils should be fixed, or the above "RUBY_WERROR_FLAG" should be unset for now (on aarch64)
Current (one of) ruby.src side workaround seems: ``` diff --git a/ruby.spec b/ruby.spec index 4396a7f..59f98e2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -789,6 +789,10 @@ autoconf mkdir -p %{_vpath_builddir} pushd %{_vpath_builddir} +%ifarch aarch64 +export LDFLAGS="$LDFLAGS -Wl,-z,gcs-report=none" +%endif + %configure \ --with-rubylibprefix='%{ruby_libdir}' \ --with-archlibdir='%{_libdir}' \ ```
(In reply to Mamoru TASAKA from comment #5) > +export LDFLAGS="$LDFLAGS -Wl,-z,gcs-report=none" Minimally, -Wl,-z,gcs-report-dynamic=none. That's the offending warning.
FYI, this is being fixed in binutils by disabling gcs-report-dynamic by default. Builds are in progress, in case you want to wait and try that out instead of putting a workaround in ruby spec: https://src.fedoraproject.org/rpms/binutils/pull-request/62 https://src.fedoraproject.org/rpms/binutils/pull-request/63
ruby is now okay with binutils-2.44-3.fc42 , koschei is now green.