dev-ruby/ffi: revbump 1.15.5-r1, fix sparc

See: https://github.com/ffi/ffi/pull/957
Closes: https://bugs.gentoo.org/847286
Signed-off-by: matoro <matoro@users.noreply.github.com>
Signed-off-by: Matt Turner <mattst88@gentoo.org>
This commit is contained in:
matoro
2022-10-22 17:33:10 -04:00
committed by Matt Turner
parent 23f46cf57e
commit 4cf664faf6
3 changed files with 161 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
USE_RUBY="ruby26 ruby27 ruby30 ruby31"
RUBY_FAKEGEM_RECIPE_TEST="rspec3"
RUBY_FAKEGEM_DOCDIR="doc"
RUBY_FAKEGEM_EXTRADOC="README.md"
RUBY_FAKEGEM_GEMSPEC="ffi.gemspec"
RUBY_FAKEGEM_EXTENSIONS=(ext/ffi_c/extconf.rb)
inherit ruby-fakegem toolchain-funcs
DESCRIPTION="Ruby extension for programmatically loading dynamic libraries"
HOMEPAGE="https://wiki.github.com/ffi/ffi"
SRC_URI="https://github.com/${PN}/${PN}/archive/v${PV}.tar.gz -> ${PN}-git-${PV}.tgz"
IUSE=""
LICENSE="BSD"
SLOT="0"
KEYWORDS="amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
PATCHES=(
"${FILESDIR}/backport-pr-962.patch"
"${FILESDIR}/pr-957-sparc.patch" # submitted upstream as https://github.com/ffi/ffi/pull/957
)
RDEPEND+=" dev-libs/libffi:="
DEPEND+=" dev-libs/libffi:="
ruby_add_bdepend "dev-ruby/rake"
all_ruby_prepare() {
sed -i -e '/tasks/ s:^:#:' \
-e '/Gem::Tasks/,/end/ s:^:#:' Rakefile || die
sed -e '/require/c\require "./lib/ffi/version"' \
-e 's/git ls-files -z/find * -print0/' \
-e '/^ lfs/,/^ end/ s:^:#:' \
-i ${RUBY_FAKEGEM_GEMSPEC} || die
# Fix Makefile for tests
sed -i -e '/CCACHE :=/ s:^:#:' \
-e 's/-O2//' \
-e 's/^CFLAGS =/CFLAGS +=/' spec/ffi/fixtures/GNUmakefile || die
# Remove bundled version of libffi.
rm -rf ext/ffi_c/libffi || die
}
each_ruby_compile() {
each_fakegem_compile
${RUBY} -S rake -f gen/Rakefile || die "types.conf generation failed"
}
each_ruby_test() {
CC=$(tc-getCC) CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ${RUBY} -S rspec spec || die
}
all_ruby_install() {
all_fakegem_install
docinto examples
dodoc samples/*
}
+48
View File
@@ -0,0 +1,48 @@
From edc54894f77d00c4ca34593c8b4c94f656f5807e Mon Sep 17 00:00:00 2001
From: Frederick Cheung <frederick.cheung@gmail.com>
Date: Fri, 17 Jun 2022 18:57:28 +0100
Subject: [PATCH] Fix Pointer#initialize using NUM2LL instead of NUM2ULL
If the high bit of the address was set this would raise RangeError
(bignum too big to convert into long long). This is not uncommon on
platforms that use the high bits of pointers for purposes such as
pointer authentication
This also now matches Pointer#address which uses ULL2NUM.
---
ext/ffi_c/Pointer.c | 2 +-
spec/ffi/pointer_spec.rb | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/ext/ffi_c/Pointer.c b/ext/ffi_c/Pointer.c
index 153fff101..79886811f 100644
--- a/ext/ffi_c/Pointer.c
+++ b/ext/ffi_c/Pointer.c
@@ -112,7 +112,7 @@ ptr_initialize(int argc, VALUE* argv, VALUE self)
switch (TYPE(rbAddress)) {
case T_FIXNUM:
case T_BIGNUM:
- p->memory.address = (void*) (uintptr_t) NUM2LL(rbAddress);
+ p->memory.address = (void*) (uintptr_t) NUM2ULL(rbAddress);
p->memory.size = LONG_MAX;
if (p->memory.address == NULL) {
p->memory.flags = 0;
diff --git a/spec/ffi/pointer_spec.rb b/spec/ffi/pointer_spec.rb
index b216a161d..7a2ac1565 100644
--- a/spec/ffi/pointer_spec.rb
+++ b/spec/ffi/pointer_spec.rb
@@ -237,6 +237,14 @@ def to_ptr
expect(FFI::Pointer.new(0).slice(0, 10).size_limit?).to be true
end
end
+
+ describe "#initialise" do
+ it 'can use adresses with high bit set' do
+ max_address = 2**FFI::Platform::ADDRESS_SIZE - 1
+ pointer = FFI::Pointer.new(:uint8, max_address)
+ expect(pointer.address).to eq(max_address)
+ end
+ end
end
describe "AutoPointer" do
+42
View File
@@ -0,0 +1,42 @@
From 241b10322283743b79c9489993bfb964b5167f7f Mon Sep 17 00:00:00 2001
From: matoro <matoro@users.noreply.github.com>
Date: Wed, 25 May 2022 14:23:55 -0400
Subject: [PATCH 1/2] Rename sparc64-linux -> sparcv9-linux
In https://github.com/ffi/ffi/pull/575, 64-bit sparc was changed to also
use sparcv9 as the platform name, but the types.conf directory was never
renamed. This breaks only on Ruby 3.0 and later due to the fileutils
change to use keyword arguments in
https://github.com/ruby/fileutils/commit/482de6d397742526d1111576e2791f9b7051e3c0
---
lib/ffi/platform/{sparc64-linux => sparcv9-linux}/types.conf | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename lib/ffi/platform/{sparc64-linux => sparcv9-linux}/types.conf (100%)
diff --git a/lib/ffi/platform/sparc64-linux/types.conf b/lib/ffi/platform/sparcv9-linux/types.conf
similarity index 100%
rename from lib/ffi/platform/sparc64-linux/types.conf
rename to lib/ffi/platform/sparcv9-linux/types.conf
From 76dc5c7d69a445268f47f5b6a9185e644bcd68e8 Mon Sep 17 00:00:00 2001
From: matoro <matoro@users.noreply.github.com>
Date: Mon, 13 Jun 2022 22:56:26 -0400
Subject: [PATCH 2/2] Also normalize sparc64 -> sparcv9 in test fixture
---
spec/ffi/fixtures/compile.rb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/spec/ffi/fixtures/compile.rb b/spec/ffi/fixtures/compile.rb
index f2e831a63..58ee5611d 100644
--- a/spec/ffi/fixtures/compile.rb
+++ b/spec/ffi/fixtures/compile.rb
@@ -22,6 +22,8 @@ module TestLibrary
"powerpc64"
when /ppc|powerpc/
"powerpc"
+ when /sparcv9|sparc64/
+ "sparcv9"
when /^arm/
if RbConfig::CONFIG['host_os'] =~ /darwin/
"aarch64"