Actions
Bug #18645
closedfiddle.rb assumes wrong file name for glibc shared object on Alpha
Description
On Alpha, the fiddle.rb test fails because the code in helper.rb assumes that the name for the libc shared object file is "libc.so.6" which is not correct for all architectures:
ruby -v: ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [alpha-linux-gnu]
exec ./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems "./test/runner.rb" --ruby="./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems" --excludes-dir=./test/excludes --name=!/memory_leak/ -v --excludes-dir=debian/tests/excludes/any/ --excludes-dir=debian/tests/excludes/alpha/
/<<PKGBUILDDIR>>/.ext/common/fiddle.rb:61:in `initialize': libc.so.6: cannot open shared object file: No such file or directory (Fiddle::DLError)
from /<<PKGBUILDDIR>>/.ext/common/fiddle.rb:61:in `new'
from /<<PKGBUILDDIR>>/.ext/common/fiddle.rb:61:in `dlopen'
from /<<PKGBUILDDIR>>/.ext/common/fiddle/import.rb:86:in `block in dlload'
from /<<PKGBUILDDIR>>/.ext/common/fiddle/import.rb:77:in `collect'
from /<<PKGBUILDDIR>>/.ext/common/fiddle/import.rb:77:in `dlload'
from /<<PKGBUILDDIR>>/test/fiddle/test_import.rb:12:in `<module:LIBC>'
from /<<PKGBUILDDIR>>/test/fiddle/test_import.rb:10:in `<module:Fiddle>'
from /<<PKGBUILDDIR>>/test/fiddle/test_import.rb:9:in `<top (required)>'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1049:in `require'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1049:in `block in non_options'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1043:in `each'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1043:in `non_options'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:65:in `process_args'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:143:in `process_args'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1237:in `process_args'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1242:in `run'
from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1249:in `run'
from /<<PKGBUILDDIR>>/tool/test/runner.rb:23:in `<top (required)>'
from ./test/runner.rb:11:in `require_relative'
from ./test/runner.rb:11:in `<main>'
Full log: https://buildd.debian.org/status/fetch.php?pkg=ruby3.0&arch=alpha&ver=3.0.3-1&stamp=1647549307&raw=0
The code in question is located in test/fiddle/helper.rb:
# Handle musl libc
libc_so, = Dir.glob(File.join(libdir, "libc.musl*.so*"))
if libc_so
libm_so = libc_so
else
# glibc
libc_so = "libc.so.6"
libm_so = "libm.so.6"
end
On a machine running Linux on Alpha, the filename for the shared library is libc.so.6.1, the same applies for Itanium:
root@alpha-test-01:~# uname -a
Linux alpha-test-01 5.14.0-3-alpha-generic #1 Debian 5.14.12-1 (2021-10-14) alpha GNU/Linux
root@alpha-test-01:~# ls -l /lib/alpha-linux-gnu/libc.so*
-rw-r--r-- 1 root root 273 Feb 21 09:47 /lib/alpha-linux-gnu/libc.so
lrwxrwxrwx 1 root root 12 Feb 21 09:47 /lib/alpha-linux-gnu/libc.so.6.1 -> libc-2.33.so
root@alpha-test-01:~#
root@yttrium:~# uname -a
Linux yttrium 5.15.0-2-mckinley #1 SMP Debian 5.15.5-1 (2021-11-26) ia64 GNU/Linux
root@yttrium:~# ls -l /lib/ia64-linux-gnu/libc.so*
lrwxrwxrwx 1 root root 12 Jan 26 22:01 /lib/ia64-linux-gnu/libc.so.6.1 -> libc-2.33.so
root@yttrium:~#
The code in helper.rb should be modified to set the name for libc_so on Alpha and IA64 to "libc.so.6.1".
Updated by kou (Kouhei Sutou) over 2 years ago
- Status changed from Open to Third Party's Issue
- Assignee set to kou (Kouhei Sutou)
Could you report this to https://github.com/ruby/fiddle/ because ruby/fiddle is the upstream?
Updated by nobu (Nobuyoshi Nakada) over 2 years ago
I think the current hard code is a bad habit, and ldd
should be primary.
Actions
Like0
Like0Like0