perl failed to build from source in Fedora rawhide/f36 https://koji.fedoraproject.org/koji/taskinfo?taskID=81984899 For details on the mass rebuild see: https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Please fix perl at your earliest convenience and set the bug's status to ASSIGNED when you start fixing it. If the bug remains in NEW state for 8 weeks, perl will be orphaned. Before branching of Fedora 37, perl will be retired, if it still fails to build. For more details on the FTBFS policy, please visit: https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/
Created attachment 1856032 [details] build.log file build.log too big, will only attach last 32768 bytes
Created attachment 1856033 [details] root.log file root.log too big, will only attach last 32768 bytes
Created attachment 1856034 [details] state.log
The build failed only on ppc64le. I am working on it now.
The failure is related to failing test XS-APItest/t/printf.t which fails only on ppc64le. # Failed test 'print_long_double' # at t/printf.t line 44. # got: '0.000' # expected: '7.000' # Failed test 'print_long_doubleL' # at t/printf.t line 45. # got: '0.000' # expected: '7.000' # Looks like you failed 2 tests of 13. ../ext/XS-APItest/t/printf.t ......................................... Dubious, test returned 2 (wstat 512, 0x200) Failed 2/13 subtests
From what I can see, perl likes to do everything on its own, so the printf that the test uses is actually PerlIO_stdoutf. Looking at config.h, the long double detection looks reasonable #define HAS_LONG_DOUBLE /**/ #ifdef HAS_LONG_DOUBLE #define LONG_DOUBLESIZE 16 /**/ #define LONG_DOUBLEKIND 1 /**/ #define LONG_DOUBLE_IS_DOUBLE 0 #define LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN 1 ... #define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE 5 #define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE 6 #define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE 7 #define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE 8 ... #define LONG_DOUBLE_STYLE_IEEE #undef LONG_DOUBLE_STYLE_IEEE_DOUBLEDOUBLE #undef LONG_DOUBLE_STYLE_IEEE_EXTENDED #define LONG_DOUBLE_STYLE_IEEE_STD #undef LONG_DOUBLE_STYLE_VAX #endif but the question is what it does with it. I'm not familiar with the perl codebase and it is unfortunately quite cryptic. Is there an easy way to run a single test as opposed to all of them? Actually: #ifndef USE_LONG_DOUBLE /*#define USE_LONG_DOUBLE / **/ #endif looks kind of unexpected. I bet that is also the reason why #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) and not #define Gconvert(x,n,t,b) sprintf((b),"%.*Lg",(n),(x)) I'd suggest to compare emitted config.h between s390x and ppc64le, s390x also (like rawhide ppc64le) has IEEE quad long double (though, it has big-endian one while ppc64le little endian). And also compare it with f35-ish ppc64le (which had IBM double double instead of IEEE quad long double).
I temporarily turned off running those two test cases for ppc64le to be able to build perl. perl-5.34.0-484.fc36 has been successfully built. I will continue to look for the cause of the error.
If you need access to a rawhide/ppc64le machine, please let me know.
I can't reproduce this issue with gcc-12.0.1-0.6.fc36. I tested with commit a471b953f462f, which doesn't disable the 2 test cases. I suspect this issue has been fixed by bug 2050569.
Thanks for the notice, Tulio. I removed the previous changes and successfully rebuilt perl.