summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChen Qi <Qi.Chen@windriver.com>2023-03-23 16:11:15 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-03-27 15:44:02 +0100
commit4ffcbe98e82c73c543aa46105413de2586aa1cee (patch)
treef57162b00c9e866d491e6e8324f1a46fa89f7cfa
parenta94ca827c2066b22c746003f5144b89d28b13a1a (diff)
downloadpoky-4ffcbe98e82c73c543aa46105413de2586aa1cee.tar.gz
debugedit: add recipe
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. (From OE-Core rev: f7ada8b4d003473abce5b589cc38aec1e5e5f18a) Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/conf/distro/include/maintainers.inc1
-rw-r--r--meta/recipes-devtools/debugedit/debugedit_5.0.bb28
-rw-r--r--meta/recipes-devtools/debugedit/files/0001-tools-Add-error.h-for-non-glibc-case.patch102
-rw-r--r--meta/recipes-devtools/debugedit/files/0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch56
-rw-r--r--meta/recipes-devtools/debugedit/files/0003-Makefile.am-do-not-update-manual.patch65
5 files changed, 252 insertions, 0 deletions
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index c76447a25d..682ec2cfdf 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -135,6 +135,7 @@ RECIPE_MAINTAINER:pn-dbus = "Chen Qi <Qi.Chen@windriver.com>"
135RECIPE_MAINTAINER:pn-dbus-glib = "Chen Qi <Qi.Chen@windriver.com>" 135RECIPE_MAINTAINER:pn-dbus-glib = "Chen Qi <Qi.Chen@windriver.com>"
136RECIPE_MAINTAINER:pn-dbus-wait = "Chen Qi <Qi.Chen@windriver.com>" 136RECIPE_MAINTAINER:pn-dbus-wait = "Chen Qi <Qi.Chen@windriver.com>"
137RECIPE_MAINTAINER:pn-debianutils = "Yi Zhao <yi.zhao@windriver.com>" 137RECIPE_MAINTAINER:pn-debianutils = "Yi Zhao <yi.zhao@windriver.com>"
138RECIPE_MAINTAINER:pn-debugedit = "Chen Qi <Qi.Chen@windriver.com>"
138RECIPE_MAINTAINER:pn-dejagnu = "Nathan Rossi <nathan@nathanrossi.com>" 139RECIPE_MAINTAINER:pn-dejagnu = "Nathan Rossi <nathan@nathanrossi.com>"
139RECIPE_MAINTAINER:pn-depmodwrapper-cross = "Unassigned <unassigned@yoctoproject.org>" 140RECIPE_MAINTAINER:pn-depmodwrapper-cross = "Unassigned <unassigned@yoctoproject.org>"
140RECIPE_MAINTAINER:pn-desktop-file-utils = "Alexander Kanavin <alex.kanavin@gmail.com>" 141RECIPE_MAINTAINER:pn-desktop-file-utils = "Alexander Kanavin <alex.kanavin@gmail.com>"
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 @@
1SUMMARY = "Tools for creating debuginfo and source file distributions"
2DESCRIPTION = "debugedit provides programs and scripts for creating \
3debuginfo and source file distributions, collect build-ids and rewrite \
4source paths in DWARF data for debugging, tracing and profiling."
5HOMEPAGE = "https://sourceware.org/debugedit/"
6
7LICENSE = "GPL-2.0-only & GPL-3.0-only & LGPL-2.1-only"
8LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
9 file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
10 file://COPYING3;md5=d32239bcb673463ab874e80d47fae504"
11
12SRC_URI = "https://sourceware.org/ftp/debugedit/${PV}/debugedit-${PV}.tar.xz"
13
14SRC_URI:append:libc-musl = " \
15 file://0001-tools-Add-error.h-for-non-glibc-case.patch \
16 file://0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch \
17 file://0003-Makefile.am-do-not-update-manual.patch \
18 "
19
20SRC_URI[sha256sum] = "e9ecd7d350bebae1f178ce6776ca19a648b6fe8fa22f5b3044b38d7899aa553e"
21
22DEPENDS = "elfutils"
23
24inherit pkgconfig autotools
25
26RDEPENDS:${PN} += "bash elfutils-binutils"
27
28BBCLASSEXTEND = "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 @@
1From 4c797d3b559ba51bd9ccd9a2036245819acce843 Mon Sep 17 00:00:00 2001
2From: Chen Qi <Qi.Chen@windriver.com>
3Date: Thu, 23 Mar 2023 10:54:21 +0800
4Subject: [PATCH] tools: Add error.h for non-glibc case
5
6error is glibc specific API, so this patch will mostly not accepted
7upstream given that elfutils has been closely tied to glibc
8
9This is a OE specific workaround for musl.
10
11Upstream-Status: Inappropriate [OE Specific]
12
13Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
14---
15 tools/debugedit.c | 7 ++++++-
16 tools/error.h | 27 +++++++++++++++++++++++++++
17 tools/sepdebugcrcfix.c | 7 ++++++-
18 3 files changed, 39 insertions(+), 2 deletions(-)
19 create mode 100644 tools/error.h
20
21diff --git a/tools/debugedit.c b/tools/debugedit.c
22index 668777a..a72c3c0 100644
23--- a/tools/debugedit.c
24+++ b/tools/debugedit.c
25@@ -25,7 +25,6 @@
26 #include <byteswap.h>
27 #include <endian.h>
28 #include <errno.h>
29-#include <error.h>
30 #include <limits.h>
31 #include <string.h>
32 #include <stdlib.h>
33@@ -40,6 +39,12 @@
34 #include <gelf.h>
35 #include <dwarf.h>
36
37+#ifdef __GLIBC__
38+#include <error.h>
39+#else
40+#include "error.h"
41+#endif
42+
43 #ifndef MAX
44 #define MAX(m, n) ((m) < (n) ? (n) : (m))
45 #endif
46diff --git a/tools/error.h b/tools/error.h
47new file mode 100644
48index 0000000..9b24418
49--- /dev/null
50+++ b/tools/error.h
51@@ -0,0 +1,27 @@
52+#ifndef _ERROR_H_
53+#define _ERROR_H_
54+
55+#include <stdarg.h>
56+#include <stdio.h>
57+#include <stdlib.h>
58+#include <string.h>
59+#include <errno.h>
60+
61+static unsigned int error_message_count = 0;
62+
63+static inline void error(int status, int errnum, const char* format, ...)
64+{
65+ va_list ap;
66+ fprintf(stderr, "%s: ", program_invocation_name);
67+ va_start(ap, format);
68+ vfprintf(stderr, format, ap);
69+ va_end(ap);
70+ if (errnum)
71+ fprintf(stderr, ": %s", strerror(errnum));
72+ fprintf(stderr, "\n");
73+ error_message_count++;
74+ if (status)
75+ exit(status);
76+}
77+
78+#endif /* _ERROR_H_ */
79diff --git a/tools/sepdebugcrcfix.c b/tools/sepdebugcrcfix.c
80index da50e6c..c4a9d56 100644
81--- a/tools/sepdebugcrcfix.c
82+++ b/tools/sepdebugcrcfix.c
83@@ -29,10 +29,15 @@
84 #include <endian.h>
85 #include <stdio.h>
86 #include <stdlib.h>
87-#include <error.h>
88 #include <libelf.h>
89 #include <gelf.h>
90
91+#ifdef __GLIBC__
92+#include <error.h>
93+#else
94+#include "error.h"
95+#endif
96+
97 #ifndef _
98 #define _(x) x
99 #endif
100--
1012.17.1
102
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 @@
1From 3e05bbc1f7909ab6f529e66f0d0f70fb1e60583a Mon Sep 17 00:00:00 2001
2From: Chen Qi <Qi.Chen@windriver.com>
3Date: Thu, 23 Mar 2023 11:55:53 +0800
4Subject: [PATCH 2/2] sepdebugcrcfix.c: do not use 64bit variants
5
6configure.ac checks for largefile support via AC_SYS_LARGEFILE
7already, therefore use off_t, open and lseek instead of 64bit
8variants. Musl e.g. does not define them without _LARGEFILE64_SOURCE
9and error is not seen on glibc because _GNU_SOURCE defines
10_LARGEFILE64_SOURCE.
11
12This patch is marked as inappropriate as debugedit obviously only
13wants to support glibc or some glibc compatible libcs. We can see
14this from the error() usage. And this patch is only for musl.
15
16Upstream-Status: Inappropriate [OE Specific]
17
18Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
19---
20 tools/sepdebugcrcfix.c | 6 +++---
21 1 file changed, 3 insertions(+), 3 deletions(-)
22
23diff --git a/tools/sepdebugcrcfix.c b/tools/sepdebugcrcfix.c
24index c4a9d56..882e5f5 100644
25--- a/tools/sepdebugcrcfix.c
26+++ b/tools/sepdebugcrcfix.c
27@@ -144,7 +144,7 @@ crc32 (const char *fname, const char *base_fname, uint32_t *crcp)
28 error (0, errno, _("cannot open \"%s\""), debugname);
29 return false;
30 }
31- off64_t size = lseek64 (fd, 0, SEEK_END);
32+ off_t size = lseek (fd, 0, SEEK_END);
33 if (size == -1)
34 {
35 error (0, errno, _("cannot get size of \"%s\""), debugname);
36@@ -289,7 +289,7 @@ process (Elf *elf, int fd, const char *fname)
37 return true;
38 }
39 updated_count++;
40- off64_t seekto = (shdr->sh_offset + data->d_off
41+ off_t seekto = (shdr->sh_offset + data->d_off
42 + (crcp - (const uint8_t *) data->d_buf));
43 uint32_t crc_targetendian = (ehdr->e_ident[EI_DATA] == ELFDATA2LSB
44 ? htole32 (crc) : htobe32 (crc));
45@@ -361,7 +361,7 @@ main (int argc, char **argv)
46 error (0, errno, _("cannot chmod \"%s\" to make sure we can read and write"), fname);
47
48 bool failed = false;
49- int fd = open64 (fname, O_RDWR);
50+ int fd = open (fname, O_RDWR);
51 if (fd == -1)
52 {
53 error (0, errno, _("cannot open \"%s\""), fname);
54--
552.17.1
56
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 @@
1From 4f0d7d2f4900ce8555e09854dc681278b7a3d9a9 Mon Sep 17 00:00:00 2001
2From: Chen Qi <Qi.Chen@windriver.com>
3Date: Thu, 23 Mar 2023 13:09:23 +0800
4Subject: [PATCH 3/3] Makefile.am: do not update manual
5
6The tarball ships these manuals, no need to re-generate them.
7We have local patches for debugedit.c and sepdebugcrcfix.c,
8this will triger re-generation of the manuals, which causes
9error of missing help2man.
10
11This is an OE specific patch. If we don't have local patches
12patching debugedit.c and sepdebugcrcfix.c, this patch is also
13not needed.
14
15Upstream-Status: Inappropriate [OE Specific]
16
17Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
18---
19 Makefile.am | 30 ------------------------------
20 1 file changed, 30 deletions(-)
21
22diff --git a/Makefile.am b/Makefile.am
23index 98b2f20..f91deea 100644
24--- a/Makefile.am
25+++ b/Makefile.am
26@@ -52,36 +52,6 @@ sepdebugcrcfix_LDADD = @LIBELF_LIBS@
27 # Manual pages are generated for dist
28 dist_man_MANS = debugedit.1 sepdebugcrcfix.1 find-debuginfo.1
29
30-# The 'case' ensures the man pages are only generated if the corresponding
31-# source script (the first prerequisite) or configure.ac (for the version)
32-# has been changed. The executable prerequisite is solely meant to force
33-# these docs to be made only after the executable has been compiled.
34-# This makes sure help2man is not normally necessary (since the generated
35-# man pages are distributed).
36-debugedit.1: tools/debugedit.c configure.ac debugedit$(EXEEXT)
37- @case '$?' in \
38- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \
39- --name='debug source path manipulation tool' \
40- ./debugedit$(EXEEXT) ;; \
41- * ) : ;; \
42- esac
43-
44-sepdebugcrcfix.1: tools/sepdebugcrcfix.c configure.ac sepdebugcrcfix$(EXEEXT)
45- @case '$?' in \
46- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \
47- --name='fixes CRC for separate .debug files' \
48- ./sepdebugcrcfix$(EXEEXT) ;;\
49- * ) : ;; \
50- esac
51-
52-find-debuginfo.1: $(top_srcdir)/scripts/find-debuginfo.in configure.ac find-debuginfo
53- @case '$?' in \
54- *$<* | *configure.ac* ) $(HELP2MAN) -N --output=$@ \
55- --name='finds debuginfo and processes it' \
56- ./find-debuginfo ;;\
57- * ) : ;; \
58- esac
59-
60 noinst_HEADERS= tools/ansidecl.h \
61 tools/hashtab.h \
62 tools/md5.h \
63--
642.17.1
65