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
Igor Gnatenko 3992a6
Subject: [PATCH 52/54] 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,
Mark Wielaard e9309e
-- 
Igor Gnatenko 3992a6
2.13.2
Mark Wielaard e9309e