Update debugsubpkg.diff
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=386
This commit is contained in:
parent
ff91377c67
commit
3b630e4565
219
debugsubpkg.diff
219
debugsubpkg.diff
@ -1,9 +1,7 @@
|
|||||||
Create a debuginfo package for each subpackage.
|
Create a debuginfo package for each subpackage.
|
||||||
|
|
||||||
Index: build/files.c
|
--- ./build/files.c.orig 2017-02-16 09:52:49.292092380 +0000
|
||||||
===================================================================
|
+++ ./build/files.c 2017-03-22 11:55:13.814882170 +0000
|
||||||
--- build/files.c.orig 2017-02-16 10:52:49.292092380 +0100
|
|
||||||
+++ build/files.c 2017-02-22 15:17:39.066161045 +0100
|
|
||||||
@@ -21,6 +21,10 @@
|
@@ -21,6 +21,10 @@
|
||||||
#include <rpm/rpmlog.h>
|
#include <rpm/rpmlog.h>
|
||||||
#include <rpm/rpmbase64.h>
|
#include <rpm/rpmbase64.h>
|
||||||
@ -15,7 +13,7 @@ Index: build/files.c
|
|||||||
#include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */
|
#include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */
|
||||||
#include "misc/fts.h"
|
#include "misc/fts.h"
|
||||||
#include "lib/rpmfi_internal.h" /* XXX fi->apath */
|
#include "lib/rpmfi_internal.h" /* XXX fi->apath */
|
||||||
@@ -2155,13 +2159,298 @@ exit:
|
@@ -2155,13 +2159,301 @@ exit:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +176,6 @@ Index: build/files.c
|
|||||||
+
|
+
|
||||||
+static Package processDebuginfo(rpmSpec spec, Package pkg, char *buildroot)
|
+static Package processDebuginfo(rpmSpec spec, Package pkg, char *buildroot)
|
||||||
+{
|
+{
|
||||||
+ static int handled_dwz = 1;
|
|
||||||
+ const char *a;
|
+ const char *a;
|
||||||
+
|
+
|
||||||
+ elf_version(EV_CURRENT);
|
+ elf_version(EV_CURRENT);
|
||||||
@ -233,47 +230,8 @@ Index: build/files.c
|
|||||||
+ directory. */
|
+ directory. */
|
||||||
+ if (!seen_build_id)
|
+ if (!seen_build_id)
|
||||||
+ {
|
+ {
|
||||||
|
+ seen_build_id = 1;
|
||||||
+ argvAdd(&files, "%dir /usr/lib/debug/.build-id");
|
+ argvAdd(&files, "%dir /usr/lib/debug/.build-id");
|
||||||
+ if (!handled_dwz)
|
|
||||||
+ {
|
|
||||||
+ handled_dwz = 1;
|
|
||||||
+ /* For now put the shared data from .dwz into the
|
|
||||||
+ first package we process.
|
|
||||||
+ ??? Ideally we do this in a postprocessing
|
|
||||||
+ step after building all -debuginfo packages. */
|
|
||||||
+ snprintf(tmp, 1024, "%s%s", buildroot,
|
|
||||||
+ "/usr/lib/debug/.dwz");
|
|
||||||
+ if (lstat(tmp, &sbuf) == 0 && S_ISDIR(sbuf.st_mode))
|
|
||||||
+ {
|
|
||||||
+ DIR *d;
|
|
||||||
+ struct dirent *de;
|
|
||||||
+ argvAdd(&files, "/usr/lib/debug/.dwz");
|
|
||||||
+ d = opendir (tmp);
|
|
||||||
+ while ((de = readdir (d)))
|
|
||||||
+ {
|
|
||||||
+ unsigned char *build_id2 = NULL;
|
|
||||||
+ size_t build_id_size2 = 0;
|
|
||||||
+ snprintf(tmp, 1024,
|
|
||||||
+ "%s/usr/lib/debug/.dwz/%s",
|
|
||||||
+ buildroot, de->d_name);
|
|
||||||
+ if (lstat(tmp, &sbuf) == -1
|
|
||||||
+ || ! S_ISREG(sbuf.st_mode))
|
|
||||||
+ continue;
|
|
||||||
+ if (getELFBuildId(tmp, &build_id2,
|
|
||||||
+ &build_id_size2) == -1)
|
|
||||||
+ continue;
|
|
||||||
+ snprintf(tmp, 1024,
|
|
||||||
+ "/usr/lib/debug/.build-id/%02x/",
|
|
||||||
+ build_id2[0]);
|
|
||||||
+ for (i = 1; i < build_id_size2; ++i)
|
|
||||||
+ sprintf(tmp + strlen(tmp), "%02x", build_id2[i]);
|
|
||||||
+ sprintf(tmp + strlen(tmp), ".debug");
|
|
||||||
+ argvAdd(&files, tmp);
|
|
||||||
+ free (build_id2);
|
|
||||||
+ }
|
|
||||||
+ closedir (d);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ /* From the build-id construct the two links pointing back
|
+ /* From the build-id construct the two links pointing back
|
||||||
@ -296,6 +254,49 @@ Index: build/files.c
|
|||||||
+ }
|
+ }
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static char *addDebugDWZ(ARGV_t *filesp, char *buildroot)
|
||||||
|
+{
|
||||||
|
+ char tmp[1024];
|
||||||
|
+ struct stat sbuf;
|
||||||
|
+ char *dwz_dbg_buildid = NULL;
|
||||||
|
+ DIR *d;
|
||||||
|
+ struct dirent *de;
|
||||||
|
+
|
||||||
|
+ snprintf(tmp, 1024, "%s%s", buildroot, "/usr/lib/debug/.dwz");
|
||||||
|
+ if (lstat(tmp, &sbuf) == 0 && S_ISDIR(sbuf.st_mode))
|
||||||
|
+ return NULL;
|
||||||
|
+ d = opendir(tmp);
|
||||||
|
+ if (!d)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ argvAdd(filesp, "/usr/lib/debug/.dwz");
|
||||||
|
+ while ((de = readdir (d))) {
|
||||||
|
+ unsigned char *build_id = NULL;
|
||||||
|
+ size_t build_id_size = 0;
|
||||||
|
+
|
||||||
|
+ snprintf(tmp, 1024, "%s/usr/lib/debug/.dwz/%s", buildroot, de->d_name);
|
||||||
|
+ if (lstat(tmp, &sbuf) == -1 || !S_ISREG(sbuf.st_mode))
|
||||||
|
+ continue;
|
||||||
|
+ if (getELFBuildId(tmp, &build_id, &build_id_size) == -1)
|
||||||
|
+ continue;
|
||||||
|
+ snprintf(tmp, 1024, "/usr/lib/debug/.build-id/%02x/", build_id[0]);
|
||||||
|
+ for (i = 1; i < build_id_size; ++i)
|
||||||
|
+ sprintf(tmp + strlen(tmp), "%02x", build_id[i]);
|
||||||
|
+ sprintf(tmp + strlen(tmp), ".debug");
|
||||||
|
+ argvAdd(filesp, tmp);
|
||||||
|
+ if (!dwz_dbg_buildid) {
|
||||||
|
+ for (i = 0; i < build_id_size; ++i)
|
||||||
|
+ sprintf(tmp + 2 * i, "%02x", build_id[i]);
|
||||||
|
+ dwz_dbg_buildid = xstrdup(tmp);
|
||||||
|
+ }
|
||||||
|
+ free(build_id);
|
||||||
|
+ }
|
||||||
|
+ closedir(d);
|
||||||
|
+ return dwz_dbg_buildid;
|
||||||
|
+}
|
||||||
|
+
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
|
rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
|
||||||
@ -307,108 +308,49 @@ Index: build/files.c
|
|||||||
+ Package first_dbg = NULL, dwz_dbg = NULL;
|
+ Package first_dbg = NULL, dwz_dbg = NULL;
|
||||||
+ int processing_dbg = 0;
|
+ int processing_dbg = 0;
|
||||||
+ int main_pkg_got_dbg = 0;
|
+ int main_pkg_got_dbg = 0;
|
||||||
+ char dwz_dbg_buildid[41] = { '\0' } ;
|
+ char *dwz_dbg_buildid = NULL;
|
||||||
|
|
||||||
check_fileList = newStringBuf();
|
check_fileList = newStringBuf();
|
||||||
+ buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
|
+ buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
|
||||||
genSourceRpmName(spec);
|
genSourceRpmName(spec);
|
||||||
|
|
||||||
for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
|
for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
|
||||||
@@ -2171,7 +2460,7 @@ rpmRC processBinaryFiles(rpmSpec spec, r
|
@@ -2179,8 +2471,40 @@ rpmRC processBinaryFiles(rpmSpec spec, r
|
||||||
int arch_color;
|
|
||||||
|
|
||||||
if (pkg->fileList == NULL)
|
|
||||||
- continue;
|
|
||||||
+ continue;
|
|
||||||
|
|
||||||
headerPutString(pkg->header, RPMTAG_SOURCERPM, spec->sourceRpmName);
|
|
||||||
|
|
||||||
@@ -2179,8 +2468,90 @@ rpmRC processBinaryFiles(rpmSpec spec, r
|
|
||||||
rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr);
|
rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr);
|
||||||
free(nvr);
|
free(nvr);
|
||||||
|
|
||||||
- if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK ||
|
- if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK ||
|
||||||
- (rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK)
|
- (rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK)
|
||||||
+#if HAVE_GELF_H && HAVE_LIBELF
|
+#if HAVE_GELF_H && HAVE_LIBELF
|
||||||
+ if (pkg == first_dbg)
|
+ if (pkg == first_dbg) {
|
||||||
+ {
|
|
||||||
+ char tmp[1024];
|
|
||||||
+ struct stat sbuf;
|
|
||||||
+ int i;
|
|
||||||
+ ARGV_t files = NULL;
|
|
||||||
+ /* If we have multiple debug packages then we put
|
+ /* If we have multiple debug packages then we put
|
||||||
+ DWZ generated files into %name-debuginfo which
|
+ DWZ generated files into %name-debuginfo which
|
||||||
+ may already exist. Otherwise put the DWZ data
|
+ may already exist. Otherwise put the DWZ data
|
||||||
+ into the only debug package. */
|
+ into the only debug package. */
|
||||||
+ if (! first_dbg->next
|
|
||||||
+ || main_pkg_got_dbg)
|
|
||||||
+ files = first_dbg->fileList;
|
|
||||||
+
|
|
||||||
+ processing_dbg = 1;
|
+ processing_dbg = 1;
|
||||||
+
|
+ if (!first_dbg->next || main_pkg_got_dbg) {
|
||||||
+ snprintf(tmp, 1024, "%s%s", buildroot,
|
+ dwz_dbg_buildid = addDebugDWZ(&first_dbg->fileList, buildroot);
|
||||||
+ "/usr/lib/debug/.dwz");
|
|
||||||
+ if (lstat(tmp, &sbuf) == 0 && S_ISDIR(sbuf.st_mode))
|
|
||||||
+ {
|
|
||||||
+ DIR *d;
|
|
||||||
+ struct dirent *de;
|
|
||||||
+ argvAdd(&files, "/usr/lib/debug/.dwz");
|
|
||||||
+ d = opendir (tmp);
|
|
||||||
+ while ((de = readdir (d)))
|
|
||||||
+ {
|
|
||||||
+ unsigned char *build_id = NULL;
|
|
||||||
+ size_t build_id_size = 0;
|
|
||||||
+ snprintf(tmp, 1024,
|
|
||||||
+ "%s/usr/lib/debug/.dwz/%s",
|
|
||||||
+ buildroot, de->d_name);
|
|
||||||
+ if (lstat(tmp, &sbuf) == -1
|
|
||||||
+ || ! S_ISREG(sbuf.st_mode))
|
|
||||||
+ continue;
|
|
||||||
+ if (getELFBuildId(tmp, &build_id,
|
|
||||||
+ &build_id_size) == -1)
|
|
||||||
+ continue;
|
|
||||||
+ snprintf(tmp, 1024,
|
|
||||||
+ "/usr/lib/debug/.build-id/%02x/",
|
|
||||||
+ build_id[0]);
|
|
||||||
+ sprintf(dwz_dbg_buildid, "%02x", build_id[0]);
|
|
||||||
+ for (i = 1; i < build_id_size; ++i)
|
|
||||||
+ {
|
|
||||||
+ sprintf(tmp + strlen(tmp), "%02x", build_id[i]);
|
|
||||||
+ sprintf(dwz_dbg_buildid + strlen(dwz_dbg_buildid),
|
|
||||||
+ "%02x", build_id[i]);
|
|
||||||
+ }
|
|
||||||
+ sprintf(tmp + strlen(tmp), ".debug");
|
|
||||||
+ argvAdd(&files, tmp);
|
|
||||||
+ free (build_id);
|
|
||||||
+ }
|
|
||||||
+ closedir (d);
|
|
||||||
+ }
|
|
||||||
+ if (! first_dbg->next
|
|
||||||
+ || main_pkg_got_dbg)
|
|
||||||
+ {
|
|
||||||
+ first_dbg->fileList = files;
|
|
||||||
+ dwz_dbg = pkg;
|
+ dwz_dbg = pkg;
|
||||||
+ }
|
+ } else {
|
||||||
+ else
|
+ ARGV_t files = NULL;
|
||||||
+ dwz_dbg = addDebuginfoPackage (spec, spec->packages, files);
|
+ dwz_dbg_buildid = addDebugDWZ(&files, buildroot);
|
||||||
+ }
|
+ dwz_dbg = addDebuginfoPackage(spec, spec->packages, files);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
+#endif
|
+#endif
|
||||||
+ if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK)
|
+ if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK)
|
||||||
+ goto exit;
|
+ goto exit;
|
||||||
+#if HAVE_GELF_H && HAVE_LIBELF
|
+#if HAVE_GELF_H && HAVE_LIBELF
|
||||||
+ if (! processing_dbg)
|
+ if (!processing_dbg) {
|
||||||
+ {
|
|
||||||
+ Package dbg = processDebuginfo(spec, pkg, buildroot);
|
+ Package dbg = processDebuginfo(spec, pkg, buildroot);
|
||||||
+ if (dbg && ! first_dbg)
|
+ if (dbg && !first_dbg) {
|
||||||
+ {
|
|
||||||
+ first_dbg = dbg;
|
+ first_dbg = dbg;
|
||||||
+ if (pkg == spec->packages)
|
+ if (pkg == spec->packages)
|
||||||
+ main_pkg_got_dbg = 1;
|
+ main_pkg_got_dbg = 1;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ /* If we have DWZ info and it is not in PKG then add a requires. */
|
+ /* If we have DWZ info and it is not in PKG then add a requires. */
|
||||||
+ else if (dwz_dbg_buildid[0]
|
+ if (dwz_dbg_buildid && pkg != dwz_dbg)
|
||||||
+ && pkg != dwz_dbg)
|
|
||||||
+ addReqProv(pkg, RPMTAG_REQUIRENAME,
|
+ addReqProv(pkg, RPMTAG_REQUIRENAME,
|
||||||
+ "debuginfo(build-id)", dwz_dbg_buildid, RPMSENSE_EQUAL, 0);
|
+ "debuginfo(build-id)", dwz_dbg_buildid, RPMSENSE_EQUAL, 0);
|
||||||
+#endif
|
+#endif
|
||||||
@ -416,10 +358,16 @@ Index: build/files.c
|
|||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
a = headerGetString(pkg->header, RPMTAG_ARCH);
|
a = headerGetString(pkg->header, RPMTAG_ARCH);
|
||||||
Index: build/parseSpec.c
|
@@ -2215,6 +2539,7 @@ rpmRC processBinaryFiles(rpmSpec spec, r
|
||||||
===================================================================
|
}
|
||||||
--- build/parseSpec.c.orig 2017-02-21 12:39:50.036450319 +0100
|
exit:
|
||||||
+++ build/parseSpec.c 2017-02-21 12:39:50.072450885 +0100
|
check_fileList = freeStringBuf(check_fileList);
|
||||||
|
+ _free(dwz_dbg_buildid);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
--- ./build/parseSpec.c.orig 2017-03-22 11:52:02.332400093 +0000
|
||||||
|
+++ ./build/parseSpec.c 2017-03-22 11:52:43.249280459 +0000
|
||||||
@@ -564,7 +564,7 @@ static void initSourceHeader(rpmSpec spe
|
@@ -564,7 +564,7 @@ static void initSourceHeader(rpmSpec spe
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -429,10 +377,8 @@ Index: build/parseSpec.c
|
|||||||
{
|
{
|
||||||
const char *arch, *name;
|
const char *arch, *name;
|
||||||
char *evr, *isaprov;
|
char *evr, *isaprov;
|
||||||
Index: build/rpmbuild_internal.h
|
--- ./build/rpmbuild_internal.h.orig 2017-02-16 09:40:09.788649545 +0000
|
||||||
===================================================================
|
+++ ./build/rpmbuild_internal.h 2017-03-22 11:52:43.249280459 +0000
|
||||||
--- build/rpmbuild_internal.h.orig 2017-02-16 10:40:09.788649545 +0100
|
|
||||||
+++ build/rpmbuild_internal.h 2017-02-21 12:39:50.072450885 +0100
|
|
||||||
@@ -442,6 +442,13 @@ int addReqProv(Package pkg, rpmTagVal ta
|
@@ -442,6 +442,13 @@ int addReqProv(Package pkg, rpmTagVal ta
|
||||||
|
|
||||||
|
|
||||||
@ -447,10 +393,8 @@ Index: build/rpmbuild_internal.h
|
|||||||
* Add rpmlib feature dependency.
|
* Add rpmlib feature dependency.
|
||||||
* @param pkg package
|
* @param pkg package
|
||||||
* @param feature rpm feature name (i.e. "rpmlib(Foo)" for feature Foo)
|
* @param feature rpm feature name (i.e. "rpmlib(Foo)" for feature Foo)
|
||||||
Index: macros.in
|
--- ./macros.in.orig 2017-03-22 11:52:02.335400084 +0000
|
||||||
===================================================================
|
+++ ./macros.in 2017-03-22 11:52:43.250280456 +0000
|
||||||
--- macros.in.orig 2017-02-21 12:39:50.060450696 +0100
|
|
||||||
+++ macros.in 2017-02-21 15:39:02.817639317 +0100
|
|
||||||
@@ -186,24 +186,10 @@
|
@@ -186,24 +186,10 @@
|
||||||
# Template for debug information sub-package.
|
# Template for debug information sub-package.
|
||||||
%debug_package \
|
%debug_package \
|
||||||
@ -476,10 +420,8 @@ Index: macros.in
|
|||||||
%description debugsource\
|
%description debugsource\
|
||||||
This package provides debug sources for package %{name}.\
|
This package provides debug sources for package %{name}.\
|
||||||
Debug sources are useful when developing applications that use this\
|
Debug sources are useful when developing applications that use this\
|
||||||
Index: scripts/find-debuginfo.sh
|
--- ./scripts/find-debuginfo.sh.orig 2017-03-22 11:52:02.331400096 +0000
|
||||||
===================================================================
|
+++ ./scripts/find-debuginfo.sh 2017-03-22 11:52:43.250280456 +0000
|
||||||
--- scripts/find-debuginfo.sh.orig 2017-02-21 12:39:50.016450005 +0100
|
|
||||||
+++ scripts/find-debuginfo.sh 2017-02-21 15:39:03.265646371 +0100
|
|
||||||
@@ -220,6 +220,11 @@ debug_link()
|
@@ -220,6 +220,11 @@ debug_link()
|
||||||
# Provide .2, .3, ... symlinks to all filename instances of this build-id.
|
# Provide .2, .3, ... symlinks to all filename instances of this build-id.
|
||||||
make_id_dup_link()
|
make_id_dup_link()
|
||||||
@ -517,4 +459,3 @@ Index: scripts/find-debuginfo.sh
|
|||||||
|
|
||||||
if [ -s "$SOURCEFILE" ]; then
|
if [ -s "$SOURCEFILE" ]; then
|
||||||
mkdir -p "${RPM_BUILD_ROOT}/usr/src/debug"
|
mkdir -p "${RPM_BUILD_ROOT}/usr/src/debug"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user