Date
1 - 2 of 2
[PATCH V2] debugedit: add recipe
Chen Qi
This recipe provides find-debuginfo which is used by rpm, more
specifically rpmbuild. RPM upstream removed find-debuginfo and switched to use debugedit in the following commit. https://github.com/rpm-software-management/rpm/commit/04b0805a756cdd9466fb9dc717846f5bf15518cc Without debugedit, rpmbuild fails to generate debuginfo package when %debug_package is added to spec file. Signed-off-by: Chen Qi <Qi.Chen@...> --- .../debugedit/debugedit_5.0.bb | 28 +++++ ...tools-Add-error.h-for-non-glibc-case.patch | 102 ++++++++++++++++++ ...ugcrcfix.c-do-not-use-64bit-variants.patch | 56 ++++++++++ ...003-Makefile.am-do-not-update-manual.patch | 65 +++++++++++ 4 files changed, 251 insertions(+) create mode 100644 meta/recipes-devtools/debugedit/debugedit_5.0.bb create mode 100644 meta/recipes-devtools/debugedit/files/0001-tools-Add-error.h-for-non-glibc-case.patch create mode 100644 meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch create mode 100644 meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch diff --git a/meta/recipes-devtools/debugedit/debugedit_5.0.bb b/meta/recipes-devtools/debugedit/debugedit_5.0.bb new file mode 100644 index 0000000000..257238fa24 --- /dev/null +++ b/meta/recipes-devtools/debugedit/debugedit_5.0.bb @@ -0,0 +1,28 @@ +SUMMARY = "Tools for creating debuginfo and source file distributions" +DESCRIPTION = "debugedit provides programs and scripts for creating \ +debuginfo and source file distributions, collect build-ids and rewrite \ +source paths in DWARF data for debugging, tracing and profiling." +HOMEPAGE = "https://sourceware.org/debugedit/" + +LICENSE = "GPL-2.0-only & GPL-3.0-only & LGPL-2.1-only" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ + file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \ + file://COPYING3;md5=d32239bcb673463ab874e80d47fae504" + +SRC_URI = "https://sourceware.org/ftp/debugedit/${PV}/debugedit-${PV}.tar.xz" + +SRC_URI:append:libc-musl = " \ + file://0001-tools-Add-error.h-for-non-glibc-case.patch \ + file://0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch \ + file://0003-Makefile.am-do-not-update-manual.patch \ + " + +SRC_URI[sha256sum] = "e9ecd7d350bebae1f178ce6776ca19a648b6fe8fa22f5b3044b38d7899aa553e" + +DEPENDS = "elfutils" + +inherit pkgconfig autotools + +RDEPENDS:${PN} += "bash elfutils-binutils" + +BBCLASSEXTEND = "native nativesdk" diff --git a/meta/recipes-devtools/debugedit/files/0001-tools-Add-error.h-for-non-glibc-case.patch b/meta/recipes-devtools/debugedit/files/0001-tools-Add-error.h-for-non-glibc-case.patch new file mode 100644 index 0000000000..f6d64cb4e7 --- /dev/null +++ b/meta/recipes-devtools/debugedit/files/0001-tools-Add-error.h-for-non-glibc-case.patch @@ -0,0 +1,102 @@ +From 4c797d3b559ba51bd9ccd9a2036245819acce843 Mon Sep 17 00:00:00 2001 +From: Chen Qi <Qi.Chen@...> +Date: Thu, 23 Mar 2023 10:54:21 +0800 +Subject: [PATCH] tools: Add error.h for non-glibc case + +error is glibc specific API, so this patch will mostly not accepted +upstream given that elfutils has been closely tied to glibc + +This is a OE specific workaround for musl. + +Upstream-Status: Inappropriate [OE Specific] + +Signed-off-by: Chen Qi <Qi.Chen@...> +--- + tools/debugedit.c | 7 ++++++- + tools/error.h | 27 +++++++++++++++++++++++++++ + tools/sepdebugcrcfix.c | 7 ++++++- + 3 files changed, 39 insertions(+), 2 deletions(-) + create mode 100644 tools/error.h + +diff --git a/tools/debugedit.c b/tools/debugedit.c +index 668777a..a72c3c0 100644 +--- a/tools/debugedit.c ++++ b/tools/debugedit.c +@@ -25,7 +25,6 @@ + #include <byteswap.h> + #include <endian.h> + #include <errno.h> +-#include <error.h> + #include <limits.h> + #include <string.h> + #include <stdlib.h> +@@ -40,6 +39,12 @@ + #include <gelf.h> + #include <dwarf.h> + ++#ifdef __GLIBC__ ++#include <error.h> ++#else ++#include "error.h" ++#endif ++ + #ifndef MAX + #define MAX(m, n) ((m) < (n) ? (n) : (m)) + #endif +diff --git a/tools/error.h b/tools/error.h +new file mode 100644 +index 0000000..9b24418 +--- /dev/null ++++ b/tools/error.h +@@ -0,0 +1,27 @@ ++#ifndef _ERROR_H_ ++#define _ERROR_H_ ++ ++#include <stdarg.h> ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#include <errno.h> ++ ++static unsigned int error_message_count = 0; ++ ++static inline void error(int status, int errnum, const char* format, ...) ++{ ++ va_list ap; ++ fprintf(stderr, "%s: ", program_invocation_name); ++ va_start(ap, format); ++ vfprintf(stderr, format, ap); ++ va_end(ap); ++ if (errnum) ++ fprintf(stderr, ": %s", strerror(errnum)); ++ fprintf(stderr, "\n"); ++ error_message_count++; ++ if (status) ++ exit(status); ++} ++ ++#endif /* _ERROR_H_ */ +diff --git a/tools/sepdebugcrcfix.c b/tools/sepdebugcrcfix.c +index da50e6c..c4a9d56 100644 +--- a/tools/sepdebugcrcfix.c ++++ b/tools/sepdebugcrcfix.c +@@ -29,10 +29,15 @@ + #include <endian.h> + #include <stdio.h> + #include <stdlib.h> +-#include <error.h> + #include <libelf.h> + #include <gelf.h> + ++#ifdef __GLIBC__ ++#include <error.h> ++#else ++#include "error.h" ++#endif ++ + #ifndef _ + #define _(x) x + #endif +-- +2.17.1 + diff --git a/meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch b/meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch new file mode 100644 index 0000000000..4463bd2324 --- /dev/null +++ b/meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch @@ -0,0 +1,56 @@ +From 3e05bbc1f7909ab6f529e66f0d0f70fb1e60583a Mon Sep 17 00:00:00 2001 +From: Chen Qi <Qi.Chen@...> +Date: Thu, 23 Mar 2023 11:55:53 +0800 +Subject: [PATCH 2/2] sepdebugcrcfix.c: do not use 64bit variants + +configure.ac checks for largefile support via AC_SYS_LARGEFILE +already, therefore use off_t, open and lseek instead of 64bit +variants. Musl e.g. does not define them without _LARGEFILE64_SOURCE +and error is not seen on glibc because _GNU_SOURCE defines +_LARGEFILE64_SOURCE. + +This patch is marked as inappropriate as debugedit obviously only +wants to support glibc or some glibc compatible libcs. We can see +this from the error() usage. And this patch is only for musl. + +Upstream-Status: Inappropriate [OE Specific] + +Signed-off-by: Chen Qi <Qi.Chen@...> +--- + tools/sepdebugcrcfix.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tools/sepdebugcrcfix.c b/tools/sepdebugcrcfix.c +index c4a9d56..882e5f5 100644 +--- a/tools/sepdebugcrcfix.c ++++ b/tools/sepdebugcrcfix.c +@@ -144,7 +144,7 @@ crc32 (const char *fname, const char *base_fname, uint32_t *crcp) + error (0, errno, _("cannot open \"%s\""), debugname); + return false; + } +- off64_t size = lseek64 (fd, 0, SEEK_END); ++ off_t size = lseek (fd, 0, SEEK_END); + if (size == -1) + { + error (0, errno, _("cannot get size of \"%s\""), debugname); +@@ -289,7 +289,7 @@ process (Elf *elf, int fd, const char *fname) + return true; + } + updated_count++; +- off64_t seekto = (shdr->sh_offset + data->d_off ++ off_t seekto = (shdr->sh_offset + data->d_off + + (crcp - (const uint8_t *) data->d_buf)); + uint32_t crc_targetendian = (ehdr->e_ident[EI_DATA] == ELFDATA2LSB + ? htole32 (crc) : htobe32 (crc)); +@@ -361,7 +361,7 @@ main (int argc, char **argv) + error (0, errno, _("cannot chmod \"%s\" to make sure we can read and write"), fname); + + bool failed = false; +- int fd = open64 (fname, O_RDWR); ++ int fd = open (fname, O_RDWR); + if (fd == -1) + { + error (0, errno, _("cannot open \"%s\""), fname); +-- +2.17.1 + diff --git a/meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch b/meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch new file mode 100644 index 0000000000..de467f5365 --- /dev/null +++ b/meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch @@ -0,0 +1,65 @@ +From 4f0d7d2f4900ce8555e09854dc681278b7a3d9a9 Mon Sep 17 00:00:00 2001 +From: Chen Qi <Qi.Chen@...> +Date: Thu, 23 Mar 2023 13:09:23 +0800 +Subject: [PATCH 3/3] Makefile.am: do not update manual + +The tarball ships these manuals, no need to re-generate them. +We have local patches for debugedit.c and sepdebugcrcfix.c, +this will triger re-generation of the manuals, which causes +error of missing help2man. + +This is an OE specific patch. If we don't have local patches +patching debugedit.c and sepdebugcrcfix.c, this patch is also +not needed. + +Upstream-Status: Inappropriate [OE Specific] + +Signed-off-by: Chen Qi <Qi.Chen@...> +--- + Makefile.am | 30 ------------------------------ + 1 file changed, 30 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 98b2f20..f91deea 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -52,36 +52,6 @@ sepdebugcrcfix_LDADD = @LIBELF_LIBS@ + # Manual pages are generated for dist + dist_man_MANS = debugedit.1 sepdebugcrcfix.1 find-debuginfo.1 + +-# The 'case' ensures the man pages are only generated if the corresponding +-# source script (the first prerequisite) or configure.ac (for the version) +-# has been changed. The executable prerequisite is solely meant to force +-# these docs to be made only after the executable has been compiled. +-# This makes sure help2man is not normally necessary (since the generated +-# man pages are distributed). +-debugedit.1: tools/debugedit.c configure.ac debugedit$(EXEEXT) +- @case '$?' in \ +- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \ +- --name='debug source path manipulation tool' \ +- ./debugedit$(EXEEXT) ;; \ +- * ) : ;; \ +- esac +- +-sepdebugcrcfix.1: tools/sepdebugcrcfix.c configure.ac sepdebugcrcfix$(EXEEXT) +- @case '$?' in \ +- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \ +- --name='fixes CRC for separate .debug files' \ +- ./sepdebugcrcfix$(EXEEXT) ;;\ +- * ) : ;; \ +- esac +- +-find-debuginfo.1: $(top_srcdir)/scripts/find-debuginfo.in configure.ac find-debuginfo +- @case '$?' in \ +- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \ +- --name='finds debuginfo and processes it' \ +- ./find-debuginfo ;;\ +- * ) : ;; \ +- esac +- + noinst_HEADERS= tools/ansidecl.h \ + tools/hashtab.h \ + tools/md5.h \ +-- +2.17.1 + -- 2.17.1 |
|
Alexandre Belloni
Hello,
toggle quoted message
Show quoted text
I think you also forgot to add a maintainer: AssertionError: The following recipes do not have a maintainer assigned to them. Please add an entry to meta/conf/distro/include/maintainers.inc file. debugedit (/home/pokybuild/yocto-worker/oe-selftest-centos/build/meta/recipes-devtools/debugedit/debugedit_5.0.bb) On 23/03/2023 16:11:15+0800, Chen Qi wrote:
This recipe provides find-debuginfo which is used by rpm, more --
Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com |
|