teknoraver / rpms / rpm

Forked from rpms/rpm 4 months ago
Clone
Blob Blame History Raw
From 9f826d903dabbc2ce199560e296224c320bb840f Mon Sep 17 00:00:00 2001
From: Michael Schroeder <mls@suse.de>
Date: Wed, 29 Mar 2017 14:55:10 +0200
Subject: [PATCH] Also add directories to split debuginfo packages

This gets rid of the last difference between debuginfo subpackages
and normal debuginfo packages.

(cherry picked from commit a517554e36666f58724620347a4b8224471d2225)
---
 build/files.c | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/build/files.c b/build/files.c
index 779a2a102..f27dcc7c1 100644
--- a/build/files.c
+++ b/build/files.c
@@ -2707,8 +2707,9 @@ static void filterDebuginfoPackage(rpmSpec spec, Package pkg,
 {
     rpmfi fi;
     ARGV_t files = NULL;
-    Package dbg = NULL;
-    char *path = NULL;
+    ARGV_t dirs = NULL;
+    int lastdiridx = -1, dirsadded;
+    char *path = NULL, *p, *pmin;
     size_t buildrootlen = strlen(buildroot);
 
     /* ignore noarch subpackages */
@@ -2741,12 +2742,37 @@ static void filterDebuginfoPackage(rpmSpec spec, Package pkg,
 		argvAdd(&files, "%defattr(-,root,root)");
 		argvAddDir(&files, DEBUG_LIB_DIR);
 	    }
+
 	    /* Add the files main debug-info file */
 	    argvAdd(&files, path + buildrootlen);
+
+	    /* Add the dir(s) */
+	    dirsadded = 0;
+	    pmin = path + buildrootlen + strlen(DEBUG_LIB_DIR);
+	    while ((p = strrchr(path + buildrootlen, '/')) != NULL && p > pmin) {
+		*p = 0;
+		if (lastdiridx >= 0 && !strcmp(dirs[lastdiridx], path + buildrootlen))
+		    break;		/* already added this one */
+		argvAdd(&dirs, path + buildrootlen);
+		dirsadded++;
+	    }
+	    if (dirsadded)
+		lastdiridx = argvCount(dirs) - dirsadded;	/* remember longest dir */
 	}
 	path = _free(path);
     }
 
+    /* add collected directories to file list */
+    if (dirs) {
+	int i;
+	argvSort(dirs, NULL);
+	for (i = 0; dirs[i]; i++) {
+	    if (!i || strcmp(dirs[i], dirs[i - 1]) != 0)
+		argvAddDir(&files, dirs[i]);
+	}
+	dirs = argvFree(dirs);
+    }
+
     if (files) {
 	/* we have collected some files. Now put them in a debuginfo
          * package. If this is not the main package, clone the main