commit:     5fa70534e895c7a9b14bfca589fd862711a5cdff
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 27 20:43:39 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Aug 27 21:03:38 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5fa70534

dev-libs/libkdumpfile: new package, add 0.5.4

Hopefully we can drop the deprecated Python bindings here in future
but they're needed by drgn for now.

Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-libs/libkdumpfile/Manifest                     |  1 +
 .../files/libkdumpfile-0.5.4-32-bit-tests.patch    | 73 ++++++++++++++++++++++
 .../files/libkdumpfile-0.5.4-c99.patch             | 48 ++++++++++++++
 ...dumpfile-0.5.4-disabled-compression-tests.patch | 68 ++++++++++++++++++++
 dev-libs/libkdumpfile/libkdumpfile-0.5.4.ebuild    | 71 +++++++++++++++++++++
 dev-libs/libkdumpfile/metadata.xml                 | 11 ++++
 6 files changed, 272 insertions(+)

diff --git a/dev-libs/libkdumpfile/Manifest b/dev-libs/libkdumpfile/Manifest
new file mode 100644
index 000000000000..14ac192613b4
--- /dev/null
+++ b/dev-libs/libkdumpfile/Manifest
@@ -0,0 +1 @@
+DIST libkdumpfile-0.5.4.tar.bz2 623108 BLAKE2B 
17a425c2a0545f60574255d5ec139f60a59dd2c9c047a89f9d021afe31cae959c691b550d9ad4e10c88a11f5f1bab1a4d94dab025060dcd2598837442281b3b9
 SHA512 
6cdd77e3460b324f4e0641fc8f4cf1dcd8b7de4ec82a37ca11e4edfa7730f90305c2724825f8b1cf8ac2e8ad104fee1b6a36775287b084db802ae2f44a55cd85

diff --git a/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-32-bit-tests.patch 
b/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-32-bit-tests.patch
new file mode 100644
index 000000000000..4b5c0cb4c8fc
--- /dev/null
+++ b/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-32-bit-tests.patch
@@ -0,0 +1,73 @@
+https://github.com/ptesarik/libkdumpfile/commit/16c73b83a78c1bfb55f3e9823b09fce549c8ec11
+
+From 16c73b83a78c1bfb55f3e9823b09fce549c8ec11 Mon Sep 17 00:00:00 2001
+From: Petr Tesarik <[email protected]>
+Date: Thu, 23 May 2024 13:01:17 +0200
+Subject: [PATCH] Fix file cache test for 32-bit architectures
+
+If 64-bit file offsets are selected with _FILE_OFFSET_BITS on a 32-bit
+architecture, the default mmap() call takes a 64-bit off_t, but dlsym()
+returns a pointer to a function that takes a 32-bit off_t.
+
+To fix it:
+
+- always call original mmap64() if it is available,
+- use XSTRINGIFY(mmap) instead of "mmap".
+
+The latter is needed, because some systems define mmap as a macro which
+expands to another identifier.
+
+Fixes: #80
+Signed-off-by: Petr Tesarik <[email protected]>
+---
+ configure.ac                |  2 ++
+ src/kdumpfile/test-fcache.c | 13 ++++++++++++-
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 04d1c6fa..93ebb39d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -61,6 +61,8 @@ AC_CHECK_SIZEOF(long)
+ AC_CHECK_SIZEOF(off_t)
+ AC_SUBST(SIZEOF_OFF_T, $ac_cv_sizeof_off_t)
+ 
++AC_CHECK_FUNCS(mmap64)
++
+ dnl This makes sure pkg.m4 is available.
+ m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install 
pkg-config])
+ 
+diff --git a/src/kdumpfile/test-fcache.c b/src/kdumpfile/test-fcache.c
+index 1ed57447..604ed540 100644
+--- a/src/kdumpfile/test-fcache.c
++++ b/src/kdumpfile/test-fcache.c
+@@ -64,9 +64,20 @@ static char *mmapbuf;
+ 
+ static int failmmap;
+ 
++#ifdef HAVE_MMAP64
++
++#define STR_MMAP      XSTRINGIFY(mmap64)
++static void* (*orig_mmap)(void *addr, size_t length, int prot, int flags,
++                        int fd, off64_t offset);
++
++#else
++
++#define STR_MMAP      XSTRINGIFY(mmap)
+ static void* (*orig_mmap)(void *addr, size_t length, int prot, int flags,
+                         int fd, off_t offset);
+ 
++#endif
++
+ void *
+ mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
+ {
+@@ -445,7 +456,7 @@ main(int argc, char **argv)
+               return TEST_ERR;
+       }
+ 
+-      orig_mmap = dlsym(RTLD_NEXT, "mmap");
++      orig_mmap = dlsym(RTLD_NEXT, STR_MMAP);
+       if (!orig_mmap) {
+               fprintf(stderr, "Cannot get original mmap() address: %s\n",
+                       dlerror());

diff --git a/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-c99.patch 
b/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-c99.patch
new file mode 100644
index 000000000000..959af60454ef
--- /dev/null
+++ b/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-c99.patch
@@ -0,0 +1,48 @@
+https://github.com/ptesarik/libkdumpfile/commit/3682f5cad70146ab35d05af251d4461ef650b4b5
+
+From 3682f5cad70146ab35d05af251d4461ef650b4b5 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <[email protected]>
+Date: Thu, 4 Jan 2024 12:36:53 +0100
+Subject: [PATCH] Python 3 does not have a tp_print member in PyTypeObject
+
+This avoids an int-conversion compiler error with current
+compilers:
+
+./kdumpfile.c:1449:9: error: initialization of 'long int' from 'int 
(*)(PyObject *, FILE *, int)' {aka 'int (*)(struct _object *, FILE *, int)'} 
makes integer from pointer without a cast
+ 1449 |         attr_dir_print,                 /* tp_print*/
+      |         ^~~~~~~~~~~~~~
+
+
+In Python 3.11, the field at this position is called tp_vectorcall_offset
+and has type Py_ssize_t, hence the error.
+--- a/python/kdumpfile.c
++++ b/python/kdumpfile.c
+@@ -1143,7 +1143,6 @@ attr_dir_repr(PyObject *_self)
+       Py_XDECREF(colon);
+       return result;
+ }
+-#endif
+ 
+ static int
+ attr_dir_print(PyObject *_self, FILE *fp, int flags)
+@@ -1214,6 +1213,7 @@ attr_dir_print(PyObject *_self, FILE *fp, int flags)
+       kdump_attr_iter_end(ctx, &iter);
+       return -1;
+ }
++#endif
+ 
+ static PyObject *
+ attr_iterkey_new(PyObject *_self)
+@@ -1446,7 +1446,11 @@ static PyTypeObject attr_dir_object_type =
+       sizeof(char),                   /* tp_itemsize*/
+       /* methods */
+       attr_dir_dealloc,               /* tp_dealloc*/
++#if PY_MAJOR_VERSION < 3
+       attr_dir_print,                 /* tp_print*/
++#else
++      0,
++#endif
+       0,                              /* tp_getattr*/
+       0,                              /* tp_setattr*/
+       0,                              /* tp_compare*/
+

diff --git 
a/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-disabled-compression-tests.patch
 
b/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-disabled-compression-tests.patch
new file mode 100644
index 000000000000..5748a27e1e81
--- /dev/null
+++ 
b/dev-libs/libkdumpfile/files/libkdumpfile-0.5.4-disabled-compression-tests.patch
@@ -0,0 +1,68 @@
+https://github.com/ptesarik/libkdumpfile/commit/d529a573ab2cdbda501309e377007812e6de3351
+
+From d529a573ab2cdbda501309e377007812e6de3351 Mon Sep 17 00:00:00 2001
+From: Stephen Brennan <[email protected]>
+Date: Fri, 19 Jan 2024 11:52:24 -0800
+Subject: [PATCH] tests: skip tests which apply to disabled compression
+
+If configured --without-libzstd, for example, the diskdump-basic-zstd
+test will return an ERROR code, causing "make check" to fail. Even using
+XFAIL_TESTS will not resolve the error, because the return code is
+ERROR, not FAIL.
+
+Instead, conditionally include the tests based on whether we are
+compiling with each compression format. This way, we don't test
+unsupported features.
+
+Signed-off-by: Stephen Brennan <[email protected]>
+---
+ m4/compression.m4 |  1 +
+ tests/Makefile.am | 17 +++++++++++++----
+ 2 files changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/m4/compression.m4 b/m4/compression.m4
+index 6755ef13..8cb7ce2d 100644
+--- a/m4/compression.m4
++++ b/m4/compression.m4
+@@ -32,4 +32,5 @@ AC_SUBST([$2][_REQUIRES])
+ AC_SUBST([$2][_CFLAGS])
+ AC_SUBST([$2][_LIBS])
+ AC_SUBST([$2][_PC_LIBS])
++AM_CONDITIONAL(HAVE_$2, test "x$have_$1" = xyes)
+ ])
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 0c03b20b..8ac90b39 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -196,10 +196,6 @@ test_scripts = \
+       diskdump-empty-s390x \
+       diskdump-empty-x86_64 \
+       diskdump-basic-raw \
+-      diskdump-basic-zlib \
+-      diskdump-basic-lzo \
+-      diskdump-basic-snappy \
+-      diskdump-basic-zstd \
+       diskdump-flat-raw \
+       diskdump-multiread \
+       diskdump-excluded \
+@@ -331,6 +327,19 @@ test_scripts = \
+       xlat-xen-x86_64-4.6-bigmem \
+       zero-size
+ 
++if HAVE_ZSTD
++test_scripts += diskdump-basic-zstd
++endif
++if HAVE_ZLIB
++test_scripts += diskdump-basic-zlib
++endif
++if HAVE_LZO
++test_scripts += diskdump-basic-lzo
++endif
++if HAVE_SNAPPY
++test_scripts += diskdump-basic-snappy
++endif
++
+ dist_check_DATA = \
+       addrmap-single-begin.expect \
+       addrmap-single-middle.expect \
+

diff --git a/dev-libs/libkdumpfile/libkdumpfile-0.5.4.ebuild 
b/dev-libs/libkdumpfile/libkdumpfile-0.5.4.ebuild
new file mode 100644
index 000000000000..fe48a9f877fc
--- /dev/null
+++ b/dev-libs/libkdumpfile/libkdumpfile-0.5.4.ebuild
@@ -0,0 +1,71 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..13} )
+inherit autotools python-r1
+
+DESCRIPTION="Kernel coredump file access"
+HOMEPAGE="https://github.com/ptesarik/libkdumpfile";
+SRC_URI="https://github.com/ptesarik/libkdumpfile/releases/download/v${PV}/${P}.tar.bz2";
+
+LICENSE="|| ( LGPL-3+ GPL-2+ )"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="lzo snappy zlib zstd"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+DEPEND="
+       ${PYTHON_DEPS}
+       lzo? ( dev-libs/lzo )
+       snappy? ( app-arch/snappy:= )
+       zlib? ( sys-libs/zlib )
+       zstd? ( app-arch/zstd:= )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+       "${FILESDIR}"/${P}-c99.patch
+       "${FILESDIR}"/${P}-disabled-compression-tests.patch
+       "${FILESDIR}"/${P}-32-bit-tests.patch
+)
+
+src_prepare() {
+       default
+
+       # Can drop on next release >0.5.4
+       eautoreconf
+}
+
+src_configure() {
+       # We could make Python optional in future as libkdumpfile's
+       # builtin Python bindings appear deprecated in favour of another
+       # CFFI-based approach, but given we're adding libkdumpfile for
+       # dev-debug/drgn right now which uses *these*, let's not bother.
+       local ECONF_SOURCE=${S}
+       local myeconfargs=(
+               $(use_with lzo lzo2)
+               $(use_with snappy)
+               $(use_with zlib)
+               $(use_with zstd libzstd)
+       )
+
+       python_foreach_impl run_in_build_dir econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+       python_foreach_impl run_in_build_dir default
+}
+
+src_test() {
+       python_foreach_impl run_in_build_dir default
+}
+
+src_install() {
+       python_foreach_impl run_in_build_dir default
+       python_foreach_impl python_optimize
+       einstalldocs
+       find "${D}" -name '*.la' -delete || die
+}

diff --git a/dev-libs/libkdumpfile/metadata.xml 
b/dev-libs/libkdumpfile/metadata.xml
new file mode 100644
index 000000000000..57d3a905a40e
--- /dev/null
+++ b/dev-libs/libkdumpfile/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="person">
+               <email>[email protected]</email>
+               <name>Sam James</name>
+       </maintainer>
+       <upstream>
+               <remote-id type="github">ptesarik/libkdumpfile</remote-id>
+       </upstream>
+</pkgmetadata>

Reply via email to