Actions
Bug #18645
closedfiddle.rb assumes wrong file name for glibc shared object on Alpha
    Bug #18645:
    fiddle.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 3 years ago
          Updated by kou (Kouhei Sutou) over 3 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 3 years ago
          Updated by nobu (Nobuyoshi Nakada) over 3 years ago
          
          
        
        
      
      I think the current hard code is a bad habit, and ldd should be primary.
Actions