mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-11-08 18:27:07 -08:00
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:
@@ -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/*
|
||||
}
|
||||
@@ -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
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user