[DRE-maint] Bug#996261: ruby-ffi: FTBFS on riscv64 due missing types.conf

Aurelien Jarno aurel32 at debian.org
Tue Oct 12 18:17:58 BST 2021


Package: ruby-ffi
Version: 1.12.2+dfsg-2
Severity: normal
Tags: ftbfs patch upstream
User: debian-riscv at lists.debian.org
Usertags: riscv64  
Forwarded: https://github.com/ffi/ffi/commit/3a280f70a36b56239d149d6205d20933151a2af3

Hi,

ruby-ffi fails to build on riscv64 with the following testsuite error:

| Failures:
| 
|   1) Custom type definitions detects the correct type for size_t
|      Failure/Error:
|        expect do
|          Module.new do
|            extend FFI::Library
|            ffi_lib "c"
|            if FFI::Platform.windows?
|              # _read() is a function of msvcrt.dll
|              attach_function :_read, [:int, :pointer, :uint], :int
|            else
|              # read(2) is a standard UNIX function
|              attach_function :read, [:int, :pointer, :size_t], :ssize_t
| 
|        expected no Exception, got #<TypeError: unable to resolve type 'size_t'> with backtrace:
|          # /<<PKGBUILDDIR>>/spec/ffi/typedef_spec.rb:86:in `block (4 levels) in <top (required)>'
|          # /<<PKGBUILDDIR>>/spec/ffi/typedef_spec.rb:78:in `initialize'
|          # /<<PKGBUILDDIR>>/spec/ffi/typedef_spec.rb:78:in `new'
|          # /<<PKGBUILDDIR>>/spec/ffi/typedef_spec.rb:78:in `block (3 levels) in <top (required)>'
|          # /<<PKGBUILDDIR>>/spec/ffi/typedef_spec.rb:77:in `block (2 levels) in <top (required)>'
|      # /<<PKGBUILDDIR>>/spec/ffi/typedef_spec.rb:77:in `block (2 levels) in <top (required)>'
| 
| Finished in 5.92 seconds (files took 29.09 seconds to load)
| 4851 examples, 1 failure
| 
| Failed examples:
| 
| rspec /<<PKGBUILDDIR>>/spec/ffi/typedef_spec.rb:76 # Custom type definitions detects the correct type for size_t
| 
| ERROR: Test "ruby2.7" failed. Exiting.
| dh_auto_install: error: dh_ruby --install /<<BUILDDIR>>/ruby-ffi-1.12.2\+dfsg/debian/ruby-ffi returned exit code 1
| make: *** [debian/rules:16: binary-arch] Error 25
| dpkg-buildpackage: error: debian/rules binary-arch subprocess returned exit status 2

A full build log is available there:
https://buildd.debian.org/status/fetch.php?pkg=ruby-ffi&arch=riscv64&ver=1.12.2%2Bdfsg-2&stamp=1634041393&raw=0

This is due to the types.conf file missing for the riscv64-linux
platform. This file has been recently added upstream, and I have tested
that the testsuite and the build is successful with it. You will find
attached the patch I used, would it be possible to include it in the
next upload?

Thanks,
Aurelien  
-------------- next part --------------
--- ruby-ffi-1.12.2+dfsg/debian/patches/add-types.conf-for-riscv64-linux.patch
+++ ruby-ffi-1.12.2+dfsg/debian/patches/add-types.conf-for-riscv64-linux.patch
@@ -0,0 +1,123 @@
+From 3a280f70a36b56239d149d6205d20933151a2af3 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab at suse.de>
+Date: Thu, 25 Feb 2021 12:17:32 +0100
+Subject: [PATCH] Add types.conf for riscv64-linux
+
+---
+ lib/ffi/platform/riscv64-linux/types.conf | 104 ++++++++++++++++++++++
+ 1 file changed, 104 insertions(+)
+ create mode 100644 lib/ffi/platform/riscv64-linux/types.conf
+
+diff --git a/lib/ffi/platform/riscv64-linux/types.conf b/lib/ffi/platform/riscv64-linux/types.conf
+new file mode 100644
+index 0000000..ede0f98
+--- /dev/null
++++ b/lib/ffi/platform/riscv64-linux/types.conf
+@@ -0,0 +1,104 @@
++rbx.platform.typedef.*__caddr_t = char
++rbx.platform.typedef.*__qaddr_t = long
++rbx.platform.typedef.__blkcnt64_t = long
++rbx.platform.typedef.__blkcnt_t = long
++rbx.platform.typedef.__blksize_t = int
++rbx.platform.typedef.__clock_t = long
++rbx.platform.typedef.__clockid_t = int
++rbx.platform.typedef.__daddr_t = int
++rbx.platform.typedef.__dev_t = ulong
++rbx.platform.typedef.__fd_mask = long
++rbx.platform.typedef.__fsblkcnt64_t = ulong
++rbx.platform.typedef.__fsblkcnt_t = ulong
++rbx.platform.typedef.__fsfilcnt64_t = ulong
++rbx.platform.typedef.__fsfilcnt_t = ulong
++rbx.platform.typedef.__fsword_t = long
++rbx.platform.typedef.__gid_t = uint
++rbx.platform.typedef.__id_t = uint
++rbx.platform.typedef.__ino64_t = ulong
++rbx.platform.typedef.__ino_t = ulong
++rbx.platform.typedef.__int16_t = short
++rbx.platform.typedef.__int32_t = int
++rbx.platform.typedef.__int64_t = long
++rbx.platform.typedef.__int8_t = char
++rbx.platform.typedef.__intptr_t = long
++rbx.platform.typedef.__key_t = int
++rbx.platform.typedef.__loff_t = long
++rbx.platform.typedef.__mode_t = uint
++rbx.platform.typedef.__nlink_t = uint
++rbx.platform.typedef.__off64_t = long
++rbx.platform.typedef.__off_t = long
++rbx.platform.typedef.__pid_t = int
++rbx.platform.typedef.__priority_which_t = int
++rbx.platform.typedef.__quad_t = long
++rbx.platform.typedef.__rlim64_t = ulong
++rbx.platform.typedef.__rlim_t = ulong
++rbx.platform.typedef.__rlimit_resource_t = int
++rbx.platform.typedef.__rusage_who_t = int
++rbx.platform.typedef.__sig_atomic_t = int
++rbx.platform.typedef.__socklen_t = uint
++rbx.platform.typedef.__ssize_t = long
++rbx.platform.typedef.__suseconds_t = long
++rbx.platform.typedef.__syscall_slong_t = long
++rbx.platform.typedef.__syscall_ulong_t = ulong
++rbx.platform.typedef.__time_t = long
++rbx.platform.typedef.__timer_t = pointer
++rbx.platform.typedef.__u_char = uchar
++rbx.platform.typedef.__u_int = uint
++rbx.platform.typedef.__u_long = ulong
++rbx.platform.typedef.__u_quad_t = ulong
++rbx.platform.typedef.__u_short = ushort
++rbx.platform.typedef.__uid_t = uint
++rbx.platform.typedef.__uint16_t = ushort
++rbx.platform.typedef.__uint32_t = uint
++rbx.platform.typedef.__uint64_t = ulong
++rbx.platform.typedef.__uint8_t = uchar
++rbx.platform.typedef.__useconds_t = uint
++rbx.platform.typedef.blkcnt_t = long
++rbx.platform.typedef.blksize_t = int
++rbx.platform.typedef.clock_t = long
++rbx.platform.typedef.clockid_t = int
++rbx.platform.typedef.daddr_t = int
++rbx.platform.typedef.dev_t = ulong
++rbx.platform.typedef.fd_mask = long
++rbx.platform.typedef.fsblkcnt_t = ulong
++rbx.platform.typedef.fsfilcnt_t = ulong
++rbx.platform.typedef.gid_t = uint
++rbx.platform.typedef.id_t = uint
++rbx.platform.typedef.ino_t = ulong
++rbx.platform.typedef.int16_t = short
++rbx.platform.typedef.int32_t = int
++rbx.platform.typedef.int64_t = long
++rbx.platform.typedef.int8_t = char
++rbx.platform.typedef.key_t = int
++rbx.platform.typedef.loff_t = long
++rbx.platform.typedef.mode_t = uint
++rbx.platform.typedef.nlink_t = uint
++rbx.platform.typedef.off_t = long
++rbx.platform.typedef.pid_t = int
++rbx.platform.typedef.pthread_key_t = uint
++rbx.platform.typedef.pthread_once_t = int
++rbx.platform.typedef.pthread_t = ulong
++rbx.platform.typedef.quad_t = long
++rbx.platform.typedef.register_t = long
++rbx.platform.typedef.rlim_t = ulong
++rbx.platform.typedef.sa_family_t = ushort
++rbx.platform.typedef.size_t = ulong
++rbx.platform.typedef.socklen_t = uint
++rbx.platform.typedef.ssize_t = long
++rbx.platform.typedef.suseconds_t = long
++rbx.platform.typedef.time_t = long
++rbx.platform.typedef.timer_t = pointer
++rbx.platform.typedef.u_char = uchar
++rbx.platform.typedef.u_int = uint
++rbx.platform.typedef.u_int16_t = ushort
++rbx.platform.typedef.u_int32_t = uint
++rbx.platform.typedef.u_int64_t = ulong
++rbx.platform.typedef.u_int8_t = uchar
++rbx.platform.typedef.u_long = ulong
++rbx.platform.typedef.u_quad_t = ulong
++rbx.platform.typedef.u_short = ushort
++rbx.platform.typedef.uid_t = uint
++rbx.platform.typedef.uint = uint
++rbx.platform.typedef.ulong = ulong
++rbx.platform.typedef.ushort = ushort
+-- 
+2.30.2
+
--- ruby-ffi-1.12.2+dfsg/debian/patches/series
+++ ruby-ffi-1.12.2+dfsg/debian/patches/series
@@ -1 +1,2 @@
 remove-git-in-gemspec.patch
+add-types.conf-for-riscv64-linux.patch


More information about the Pkg-ruby-extras-maintainers mailing list