|
Mark Wielaard |
e9309e |
From 97ad525723d0c9af382acadc823b6a744d5426cf Mon Sep 17 00:00:00 2001
|
|
Mark Wielaard |
e9309e |
From: Mark Wielaard <mark@klomp.org>
|
|
Mark Wielaard |
e9309e |
Date: Thu, 29 Jun 2017 13:26:25 +0200
|
|
Mark Wielaard |
284dc3 |
Subject: [PATCH] Use a file list to add build-id files to pkgList.
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
Change the generation of build-id files to a file list using ARGV_t.
|
|
Mark Wielaard |
e9309e |
First go through the current package list and generate a files list.
|
|
Mark Wielaard |
e9309e |
Then add those files as if they were part of the original package file
|
|
Mark Wielaard |
e9309e |
list using the new resetPackageFilesDefaults() and addPackageFileList().
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
Mark Wielaard |
e9309e |
(cherry picked from commit 88b7f24547afbfec42bb727e28d929a815db971a)
|
|
Mark Wielaard |
e9309e |
---
|
|
Mark Wielaard |
e9309e |
build/files.c | 74 ++++++++++++++++++++++++++---------------------------------
|
|
Mark Wielaard |
e9309e |
1 file changed, 33 insertions(+), 41 deletions(-)
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
diff --git a/build/files.c b/build/files.c
|
|
Igor Gnatenko |
3992a6 |
index 8baf85e9d..e88a5d24d 100644
|
|
Mark Wielaard |
e9309e |
--- a/build/files.c
|
|
Mark Wielaard |
e9309e |
+++ b/build/files.c
|
|
Mark Wielaard |
e9309e |
@@ -1576,6 +1576,15 @@ exit:
|
|
Mark Wielaard |
e9309e |
return rc;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
+/* add a directory to the file list */
|
|
Mark Wielaard |
e9309e |
+static void argvAddDir(ARGV_t *filesp, const char *dir)
|
|
Mark Wielaard |
e9309e |
+{
|
|
Mark Wielaard |
e9309e |
+ char *line = NULL;
|
|
Mark Wielaard |
e9309e |
+ rasprintf(&line, "%%dir %s", dir);
|
|
Mark Wielaard |
e9309e |
+ argvAdd(filesp, line);
|
|
Mark Wielaard |
e9309e |
+ _free(line);
|
|
Mark Wielaard |
e9309e |
+}
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
#if HAVE_LIBDW
|
|
Mark Wielaard |
e9309e |
/* How build id links are generated. See macros.in for description. */
|
|
Mark Wielaard |
e9309e |
#define BUILD_IDS_NONE 0
|
|
Mark Wielaard |
e9309e |
@@ -1583,7 +1592,7 @@ exit:
|
|
Mark Wielaard |
e9309e |
#define BUILD_IDS_SEPARATE 2
|
|
Mark Wielaard |
e9309e |
#define BUILD_IDS_COMPAT 3
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
-static int addNewIDSymlink(FileList fl,
|
|
Mark Wielaard |
e9309e |
+static int addNewIDSymlink(ARGV_t *files,
|
|
Mark Wielaard |
e9309e |
char *targetpath, char *idlinkpath,
|
|
Mark Wielaard |
e9309e |
int isDbg, int *dups)
|
|
Mark Wielaard |
e9309e |
{
|
|
Mark Wielaard |
e9309e |
@@ -1632,8 +1641,7 @@ static int addNewIDSymlink(FileList fl,
|
|
Mark Wielaard |
e9309e |
rpmlog(RPMLOG_ERR, "%s: %s -> %s: %m\n",
|
|
Mark Wielaard |
e9309e |
linkerr, linkpath, targetpath);
|
|
Mark Wielaard |
e9309e |
} else {
|
|
Mark Wielaard |
e9309e |
- fl->cur.isDir = 0;
|
|
Mark Wielaard |
e9309e |
- rc = addFile(fl, linkpath, NULL);
|
|
Mark Wielaard |
e9309e |
+ rc = argvAdd(files, linkpath);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
if (nr > 0) {
|
|
Mark Wielaard |
e9309e |
@@ -1671,7 +1679,7 @@ static int addNewIDSymlink(FileList fl,
|
|
Mark Wielaard |
e9309e |
return rc;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
-static int generateBuildIDs(FileList fl)
|
|
Mark Wielaard |
e9309e |
+static int generateBuildIDs(FileList fl, ARGV_t *files)
|
|
Mark Wielaard |
e9309e |
{
|
|
Mark Wielaard |
e9309e |
int rc = 0;
|
|
Mark Wielaard |
e9309e |
int i;
|
|
Mark Wielaard |
e9309e |
@@ -1820,18 +1828,9 @@ static int generateBuildIDs(FileList fl)
|
|
Mark Wielaard |
e9309e |
mainiddir = rpmGetPath(fl->buildRoot, BUILD_ID_DIR, NULL);
|
|
Mark Wielaard |
e9309e |
debugiddir = rpmGetPath(fl->buildRoot, DEBUG_ID_DIR, NULL);
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
- /* Make sure to reset all file flags to defaults.
|
|
Mark Wielaard |
e9309e |
- Uses parseForAttr to reset ar, arFlags, and specdFlags.
|
|
Mark Wielaard |
e9309e |
- Note that parseForAttr pokes at the attrstr, so we cannot
|
|
Mark Wielaard |
e9309e |
- just pass a static string. */
|
|
Mark Wielaard |
e9309e |
- fl->cur.attrFlags = 0;
|
|
Mark Wielaard |
e9309e |
- fl->def.attrFlags = 0;
|
|
Mark Wielaard |
e9309e |
- fl->def.verifyFlags = RPMVERIFY_ALL;
|
|
Mark Wielaard |
e9309e |
- fl->cur.verifyFlags = RPMVERIFY_ALL;
|
|
Mark Wielaard |
e9309e |
- fl->def.specdFlags |= SPECD_VERIFY;
|
|
Mark Wielaard |
e9309e |
- fl->cur.specdFlags |= SPECD_VERIFY;
|
|
Mark Wielaard |
e9309e |
+ /* Make sure to reset all file flags to defaults. */
|
|
Mark Wielaard |
e9309e |
attrstr = mkattr(NULL);
|
|
Mark Wielaard |
e9309e |
- parseForAttr(fl->pool, attrstr, 1, &fl->def);
|
|
Mark Wielaard |
e9309e |
+ argvAdd(files, attrstr);
|
|
Mark Wielaard |
e9309e |
free (attrstr);
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
/* Supported, but questionable. */
|
|
Mark Wielaard |
e9309e |
@@ -1843,11 +1842,7 @@ static int generateBuildIDs(FileList fl)
|
|
Mark Wielaard |
e9309e |
if ((rc = rpmioMkpath(mainiddir, 0755, -1, -1)) != 0) {
|
|
Mark Wielaard |
e9309e |
rpmlog(RPMLOG_ERR, "%s %s: %m\n", errdir, mainiddir);
|
|
Mark Wielaard |
e9309e |
} else {
|
|
Mark Wielaard |
e9309e |
- attrstr = mkattr(mainiddir);
|
|
Mark Wielaard |
e9309e |
- parseForAttr(fl->pool, attrstr, 0, &fl->cur);
|
|
Mark Wielaard |
e9309e |
- fl->cur.isDir = 1;
|
|
Mark Wielaard |
e9309e |
- rc = addFile(fl, mainiddir, NULL);
|
|
Mark Wielaard |
e9309e |
- free (attrstr);
|
|
Mark Wielaard |
e9309e |
+ argvAddDir(files, mainiddir);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
@@ -1855,11 +1850,7 @@ static int generateBuildIDs(FileList fl)
|
|
Mark Wielaard |
e9309e |
if ((rc = rpmioMkpath(debugiddir, 0755, -1, -1)) != 0) {
|
|
Mark Wielaard |
e9309e |
rpmlog(RPMLOG_ERR, "%s %s: %m\n", errdir, debugiddir);
|
|
Mark Wielaard |
e9309e |
} else {
|
|
Mark Wielaard |
e9309e |
- attrstr = mkattr(debugiddir);
|
|
Mark Wielaard |
e9309e |
- parseForAttr(fl->pool, attrstr, 0, &fl->cur);
|
|
Mark Wielaard |
e9309e |
- fl->cur.isDir = 1;
|
|
Mark Wielaard |
e9309e |
- rc = addFile(fl, debugiddir, NULL);
|
|
Mark Wielaard |
e9309e |
- free (attrstr);
|
|
Mark Wielaard |
e9309e |
+ argvAddDir(files, debugiddir);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
@@ -1898,9 +1889,9 @@ static int generateBuildIDs(FileList fl)
|
|
Mark Wielaard |
e9309e |
&& (rc = rpmioMkpath(buildidsubdir, 0755, -1, -1)) != 0) {
|
|
Mark Wielaard |
e9309e |
rpmlog(RPMLOG_ERR, "%s %s: %m\n", errdir, buildidsubdir);
|
|
Mark Wielaard |
e9309e |
} else {
|
|
Mark Wielaard |
e9309e |
- fl->cur.isDir = 1;
|
|
Mark Wielaard |
e9309e |
- if (!addsubdir
|
|
Mark Wielaard |
e9309e |
- || (rc = addFile(fl, buildidsubdir, NULL)) == 0) {
|
|
Mark Wielaard |
e9309e |
+ if (addsubdir)
|
|
Mark Wielaard |
e9309e |
+ argvAddDir (files, buildidsubdir);
|
|
Mark Wielaard |
e9309e |
+ if (rc == 0) {
|
|
Mark Wielaard |
e9309e |
char *linkpattern, *targetpattern;
|
|
Mark Wielaard |
e9309e |
char *linkpath, *targetpath;
|
|
Mark Wielaard |
e9309e |
int dups = 0;
|
|
Mark Wielaard |
e9309e |
@@ -1914,7 +1905,7 @@ static int generateBuildIDs(FileList fl)
|
|
Mark Wielaard |
e9309e |
rasprintf(&linkpath, linkpattern,
|
|
Mark Wielaard |
e9309e |
buildidsubdir, &ids[i][2]);
|
|
Mark Wielaard |
e9309e |
rasprintf(&targetpath, targetpattern, paths[i]);
|
|
Mark Wielaard |
e9309e |
- rc = addNewIDSymlink(fl, targetpath, linkpath,
|
|
Mark Wielaard |
e9309e |
+ rc = addNewIDSymlink(files, targetpath, linkpath,
|
|
Mark Wielaard |
e9309e |
isDbg, &dups);
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
/* We might want to have a link from the debug
|
|
Mark Wielaard |
e9309e |
@@ -1960,7 +1951,7 @@ static int generateBuildIDs(FileList fl)
|
|
Mark Wielaard |
e9309e |
"../../../.build-id%s/%s.%d",
|
|
Mark Wielaard |
e9309e |
subdir, &ids[i][2], dups);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
- rc = addNewIDSymlink(fl, targetpath, linkpath,
|
|
Mark Wielaard |
e9309e |
+ rc = addNewIDSymlink(files, targetpath, linkpath,
|
|
Mark Wielaard |
e9309e |
0, NULL);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
@@ -1998,7 +1989,7 @@ static int generateBuildIDs(FileList fl)
|
|
Mark Wielaard |
e9309e |
buildidsubdir, &ids[i][2]);
|
|
Mark Wielaard |
e9309e |
rasprintf(&targetpath, "../../../../..%s",
|
|
Mark Wielaard |
e9309e |
targetstr);
|
|
Mark Wielaard |
e9309e |
- rc = addNewIDSymlink(fl, targetpath,
|
|
Mark Wielaard |
e9309e |
+ rc = addNewIDSymlink(files, targetpath,
|
|
Mark Wielaard |
e9309e |
linkpath, 0, &dups);
|
|
Mark Wielaard |
e9309e |
free(targetstr);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
@@ -2481,11 +2472,21 @@ static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
|
|
Mark Wielaard |
e9309e |
/* Check build-ids and add build-ids links for files to package list. */
|
|
Mark Wielaard |
e9309e |
const char *arch = headerGetString(pkg->header, RPMTAG_ARCH);
|
|
Mark Wielaard |
e9309e |
if (!rstreq(arch, "noarch")) {
|
|
Mark Wielaard |
e9309e |
- if (generateBuildIDs (&fl) != 0) {
|
|
Mark Wielaard |
e9309e |
+ /* Go through the current package list and generate a files list. */
|
|
Mark Wielaard |
e9309e |
+ ARGV_t idFiles = NULL;
|
|
Mark Wielaard |
e9309e |
+ if (generateBuildIDs (&fl, &idFiles) != 0) {
|
|
Mark Wielaard |
e9309e |
rpmlog(RPMLOG_ERR, _("Generating build-id links failed\n"));
|
|
Mark Wielaard |
e9309e |
fl.processingFailed = 1;
|
|
Mark Wielaard |
e9309e |
goto exit;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ if (idFiles != NULL) {
|
|
Mark Wielaard |
e9309e |
+ resetPackageFilesDefaults (&fl, pkgFlags);
|
|
Mark Wielaard |
e9309e |
+ addPackageFileList (&fl, pkg, &idFiles, NULL, NULL, 0);
|
|
Mark Wielaard |
e9309e |
+ }
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ if (fl.processingFailed)
|
|
Mark Wielaard |
e9309e |
+ goto exit;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
#endif
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
@@ -2743,15 +2744,6 @@ static Package cloneDebuginfoPackage(rpmSpec spec, Package pkg, Package maindbg)
|
|
Mark Wielaard |
e9309e |
return dbg;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
-/* add a directory to the file list */
|
|
Mark Wielaard |
e9309e |
-static void argvAddDir(ARGV_t *filesp, const char *dir)
|
|
Mark Wielaard |
e9309e |
-{
|
|
Mark Wielaard |
e9309e |
- char *line = NULL;
|
|
Mark Wielaard |
e9309e |
- rasprintf(&line, "%%dir %s", dir);
|
|
Mark Wielaard |
e9309e |
- argvAdd(filesp, line);
|
|
Mark Wielaard |
e9309e |
- _free(line);
|
|
Mark Wielaard |
e9309e |
-}
|
|
Mark Wielaard |
e9309e |
-
|
|
Mark Wielaard |
e9309e |
/* collect the debug files for package pkg and put them into
|
|
Mark Wielaard |
e9309e |
* a (possibly new) debuginfo subpackage */
|
|
Mark Wielaard |
e9309e |
static void filterDebuginfoPackage(rpmSpec spec, Package pkg,
|