|
Mark Wielaard |
e9309e |
From bc5990647ad94fcb4acdb68612e16fe514ee59b7 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:24 +0200
|
|
Mark Wielaard |
284dc3 |
Subject: [PATCH] Extract package file list processing in separate functions.
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
Extract two functions resetPackageFilesDefaults() and addPackageFileList()
|
|
Mark Wielaard |
e9309e |
from processPackageFiles(). This will make it possible to add multiple
|
|
Mark Wielaard |
e9309e |
(generated) file lists to a package later.
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
Mark Wielaard |
e9309e |
(cherry picked from commit 139d62d3b8068b0e39893babf13f0c3cc5329e75)
|
|
Mark Wielaard |
e9309e |
---
|
|
Mark Wielaard |
e9309e |
build/files.c | 170 ++++++++++++++++++++++++++++++++++++----------------------
|
|
Mark Wielaard |
e9309e |
1 file changed, 107 insertions(+), 63 deletions(-)
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
diff --git a/build/files.c b/build/files.c
|
|
Igor Gnatenko |
3992a6 |
index e93efebd7..8baf85e9d 100644
|
|
Mark Wielaard |
e9309e |
--- a/build/files.c
|
|
Mark Wielaard |
e9309e |
+++ b/build/files.c
|
|
Mark Wielaard |
e9309e |
@@ -2307,45 +2307,35 @@ static void processSpecialDir(rpmSpec spec, Package pkg, FileList fl,
|
|
Mark Wielaard |
e9309e |
freeStringBuf(docScript);
|
|
Mark Wielaard |
e9309e |
free(mkdocdir);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
-
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
-static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
|
|
Mark Wielaard |
e9309e |
- Package pkg, int installSpecialDoc, int test)
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+/* Resets the default settings for files in the package list.
|
|
Mark Wielaard |
e9309e |
+ Used in processPackageFiles whenever a new set of files is added. */
|
|
Mark Wielaard |
e9309e |
+static void resetPackageFilesDefaults (struct FileList_s *fl,
|
|
Mark Wielaard |
e9309e |
+ rpmBuildPkgFlags pkgFlags)
|
|
Mark Wielaard |
e9309e |
{
|
|
Mark Wielaard |
e9309e |
struct AttrRec_s root_ar = { 0, 0, 0, 0, 0, 0 };
|
|
Mark Wielaard |
e9309e |
- struct FileList_s fl;
|
|
Mark Wielaard |
e9309e |
- ARGV_t fileNames = NULL;
|
|
Mark Wielaard |
e9309e |
- specialDir specialDoc = NULL;
|
|
Mark Wielaard |
e9309e |
- specialDir specialLic = NULL;
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
- pkg->cpioList = NULL;
|
|
Mark Wielaard |
e9309e |
+ root_ar.ar_user = rpmstrPoolId(fl->pool, "root", 1);
|
|
Mark Wielaard |
e9309e |
+ root_ar.ar_group = rpmstrPoolId(fl->pool, "root", 1);
|
|
Mark Wielaard |
e9309e |
+ dupAttrRec(&root_ar, &fl->def.ar); /* XXX assume %defattr(-,root,root) */
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
- for (ARGV_const_t fp = pkg->fileFile; fp && *fp != NULL; fp++) {
|
|
Mark Wielaard |
e9309e |
- if (readFilesManifest(spec, pkg, *fp))
|
|
Mark Wielaard |
e9309e |
- return RPMRC_FAIL;
|
|
Mark Wielaard |
e9309e |
- }
|
|
Mark Wielaard |
e9309e |
- /* Init the file list structure */
|
|
Mark Wielaard |
e9309e |
- memset(&fl, 0, sizeof(fl));
|
|
Mark Wielaard |
e9309e |
-
|
|
Mark Wielaard |
e9309e |
- fl.pool = rpmstrPoolLink(spec->pool);
|
|
Mark Wielaard |
e9309e |
- /* XXX spec->buildRoot == NULL, then xstrdup("") is returned */
|
|
Mark Wielaard |
e9309e |
- fl.buildRoot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
|
|
Mark Wielaard |
e9309e |
- fl.buildRootLen = strlen(fl.buildRoot);
|
|
Mark Wielaard |
e9309e |
+ fl->def.verifyFlags = RPMVERIFY_ALL;
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
- root_ar.ar_user = rpmstrPoolId(fl.pool, "root", 1);
|
|
Mark Wielaard |
e9309e |
- root_ar.ar_group = rpmstrPoolId(fl.pool, "root", 1);
|
|
Mark Wielaard |
e9309e |
- dupAttrRec(&root_ar, &fl.def.ar); /* XXX assume %defattr(-,root,root) */
|
|
Mark Wielaard |
e9309e |
-
|
|
Mark Wielaard |
e9309e |
- fl.def.verifyFlags = RPMVERIFY_ALL;
|
|
Mark Wielaard |
e9309e |
-
|
|
Mark Wielaard |
e9309e |
- fl.pkgFlags = pkgFlags;
|
|
Mark Wielaard |
e9309e |
+ fl->pkgFlags = pkgFlags;
|
|
Mark Wielaard |
e9309e |
+}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
- { char *docs = rpmGetPath("%{?__docdir_path}", NULL);
|
|
Mark Wielaard |
e9309e |
- argvSplit(&fl.docDirs, docs, ":");
|
|
Mark Wielaard |
e9309e |
- free(docs);
|
|
Mark Wielaard |
e9309e |
- }
|
|
Mark Wielaard |
e9309e |
-
|
|
Mark Wielaard |
e9309e |
- for (ARGV_const_t fp = pkg->fileList; *fp != NULL; fp++) {
|
|
Mark Wielaard |
e9309e |
+/* Adds the given fileList to the package. If fromSpecFileList is not zero
|
|
Mark Wielaard |
e9309e |
+ then the specialDirs are also filled in and the files are sanitized
|
|
Mark Wielaard |
e9309e |
+ through processBinaryFile(). Otherwise no special files are processed
|
|
Mark Wielaard |
e9309e |
+ and the files are added directly through addFile(). */
|
|
Mark Wielaard |
e9309e |
+static void addPackageFileList (struct FileList_s *fl, Package pkg,
|
|
Mark Wielaard |
e9309e |
+ ARGV_t *fileList,
|
|
Mark Wielaard |
e9309e |
+ specialDir *specialDoc, specialDir *specialLic,
|
|
Mark Wielaard |
e9309e |
+ int fromSpecFileList)
|
|
Mark Wielaard |
e9309e |
+{
|
|
Mark Wielaard |
e9309e |
+ ARGV_t fileNames = NULL;
|
|
Mark Wielaard |
e9309e |
+ for (ARGV_const_t fp = *fileList; *fp != NULL; fp++) {
|
|
Mark Wielaard |
e9309e |
char buf[strlen(*fp) + 1];
|
|
Mark Wielaard |
e9309e |
const char *s = *fp;
|
|
Mark Wielaard |
e9309e |
SKIPSPACE(s);
|
|
Mark Wielaard |
e9309e |
@@ -2355,41 +2345,63 @@ static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
|
|
Mark Wielaard |
e9309e |
rstrlcpy(buf, s, sizeof(buf));
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
/* Reset for a new line in %files */
|
|
Mark Wielaard |
e9309e |
- FileEntryFree(&fl.cur);
|
|
Mark Wielaard |
e9309e |
+ FileEntryFree(&fl->cur);
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
/* turn explicit flags into %def'd ones (gosh this is hacky...) */
|
|
Mark Wielaard |
e9309e |
- fl.cur.specdFlags = ((unsigned)fl.def.specdFlags) >> 8;
|
|
Mark Wielaard |
e9309e |
- fl.cur.verifyFlags = fl.def.verifyFlags;
|
|
Mark Wielaard |
e9309e |
-
|
|
Mark Wielaard |
e9309e |
- if (parseForVerify(buf, 0, &fl.cur) ||
|
|
Mark Wielaard |
e9309e |
- parseForVerify(buf, 1, &fl.def) ||
|
|
Mark Wielaard |
e9309e |
- parseForAttr(fl.pool, buf, 0, &fl.cur) ||
|
|
Mark Wielaard |
e9309e |
- parseForAttr(fl.pool, buf, 1, &fl.def) ||
|
|
Mark Wielaard |
e9309e |
- parseForDev(buf, &fl.cur) ||
|
|
Mark Wielaard |
e9309e |
- parseForConfig(buf, &fl.cur) ||
|
|
Mark Wielaard |
e9309e |
- parseForLang(buf, &fl.cur) ||
|
|
Mark Wielaard |
e9309e |
- parseForCaps(buf, &fl.cur) ||
|
|
Mark Wielaard |
e9309e |
- parseForSimple(buf, &fl.cur, &fileNames))
|
|
Mark Wielaard |
e9309e |
+ fl->cur.specdFlags = ((unsigned)fl->def.specdFlags) >> 8;
|
|
Mark Wielaard |
e9309e |
+ fl->cur.verifyFlags = fl->def.verifyFlags;
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ if (parseForVerify(buf, 0, &fl->cur) ||
|
|
Mark Wielaard |
e9309e |
+ parseForVerify(buf, 1, &fl->def) ||
|
|
Mark Wielaard |
e9309e |
+ parseForAttr(fl->pool, buf, 0, &fl->cur) ||
|
|
Mark Wielaard |
e9309e |
+ parseForAttr(fl->pool, buf, 1, &fl->def) ||
|
|
Mark Wielaard |
e9309e |
+ parseForDev(buf, &fl->cur) ||
|
|
Mark Wielaard |
e9309e |
+ parseForConfig(buf, &fl->cur) ||
|
|
Mark Wielaard |
e9309e |
+ parseForLang(buf, &fl->cur) ||
|
|
Mark Wielaard |
e9309e |
+ parseForCaps(buf, &fl->cur) ||
|
|
Mark Wielaard |
e9309e |
+ parseForSimple(buf, &fl->cur, &fileNames))
|
|
Mark Wielaard |
e9309e |
{
|
|
Mark Wielaard |
e9309e |
- fl.processingFailed = 1;
|
|
Mark Wielaard |
e9309e |
+ fl->processingFailed = 1;
|
|
Mark Wielaard |
e9309e |
continue;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
for (ARGV_const_t fn = fileNames; fn && *fn; fn++) {
|
|
Mark Wielaard |
e9309e |
- if (fl.cur.attrFlags & RPMFILE_SPECIALDIR) {
|
|
Mark Wielaard |
e9309e |
- rpmFlags oattrs = (fl.cur.attrFlags & ~RPMFILE_SPECIALDIR);
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ /* For file lists that don't come from a spec file list
|
|
Mark Wielaard |
e9309e |
+ processing is easy. There are no special files and the
|
|
Mark Wielaard |
e9309e |
+ file names don't need to be adjusted. */
|
|
Mark Wielaard |
e9309e |
+ if (!fromSpecFileList) {
|
|
Mark Wielaard |
e9309e |
+ if (fl->cur.attrFlags & RPMFILE_SPECIALDIR
|
|
Mark Wielaard |
e9309e |
+ || fl->cur.attrFlags & RPMFILE_DOCDIR
|
|
Mark Wielaard |
e9309e |
+ || fl->cur.attrFlags & RPMFILE_PUBKEY) {
|
|
Mark Wielaard |
e9309e |
+ rpmlog(RPMLOG_ERR,
|
|
Mark Wielaard |
e9309e |
+ _("Special file in generated file list: %s\n"),
|
|
Mark Wielaard |
e9309e |
+ *fn);
|
|
Mark Wielaard |
e9309e |
+ fl->processingFailed = 1;
|
|
Mark Wielaard |
e9309e |
+ continue;
|
|
Mark Wielaard |
e9309e |
+ }
|
|
Mark Wielaard |
e9309e |
+ if (fl->cur.attrFlags & RPMFILE_DIR)
|
|
Mark Wielaard |
e9309e |
+ fl->cur.isDir = 1;
|
|
Mark Wielaard |
e9309e |
+ addFile(fl, *fn, NULL);
|
|
Mark Wielaard |
e9309e |
+ continue;
|
|
Mark Wielaard |
e9309e |
+ }
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ /* File list does come from the spec, try to detect special
|
|
Mark Wielaard |
e9309e |
+ files and adjust the actual file names. */
|
|
Mark Wielaard |
e9309e |
+ if (fl->cur.attrFlags & RPMFILE_SPECIALDIR) {
|
|
Mark Wielaard |
e9309e |
+ rpmFlags oattrs = (fl->cur.attrFlags & ~RPMFILE_SPECIALDIR);
|
|
Mark Wielaard |
e9309e |
specialDir *sdp = NULL;
|
|
Mark Wielaard |
e9309e |
if (oattrs == RPMFILE_DOC) {
|
|
Mark Wielaard |
e9309e |
- sdp = &specialDoc;
|
|
Mark Wielaard |
e9309e |
+ sdp = specialDoc;
|
|
Mark Wielaard |
e9309e |
} else if (oattrs == RPMFILE_LICENSE) {
|
|
Mark Wielaard |
e9309e |
- sdp = &specialLic;
|
|
Mark Wielaard |
e9309e |
+ sdp = specialLic;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
if (sdp == NULL || **fn == '/') {
|
|
Mark Wielaard |
e9309e |
rpmlog(RPMLOG_ERR,
|
|
Mark Wielaard |
e9309e |
_("Can't mix special %s with other forms: %s\n"),
|
|
Mark Wielaard |
e9309e |
(oattrs & RPMFILE_DOC) ? "%doc" : "%license", *fn);
|
|
Mark Wielaard |
e9309e |
- fl.processingFailed = 1;
|
|
Mark Wielaard |
e9309e |
+ fl->processingFailed = 1;
|
|
Mark Wielaard |
e9309e |
continue;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
@@ -2397,32 +2409,65 @@ static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
|
|
Mark Wielaard |
e9309e |
if (*sdp == NULL) {
|
|
Mark Wielaard |
e9309e |
*sdp = specialDirNew(pkg->header, oattrs);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
- addSpecialFile(*sdp, *fn, &fl.cur, &fl.def);
|
|
Mark Wielaard |
e9309e |
+ addSpecialFile(*sdp, *fn, &fl->cur, &fl->def);
|
|
Mark Wielaard |
e9309e |
continue;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
/* this is now an artificial limitation */
|
|
Mark Wielaard |
e9309e |
if (fn != fileNames) {
|
|
Mark Wielaard |
e9309e |
rpmlog(RPMLOG_ERR, _("More than one file on a line: %s\n"),*fn);
|
|
Mark Wielaard |
e9309e |
- fl.processingFailed = 1;
|
|
Mark Wielaard |
e9309e |
+ fl->processingFailed = 1;
|
|
Mark Wielaard |
e9309e |
continue;
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
- if (fl.cur.attrFlags & RPMFILE_DOCDIR) {
|
|
Mark Wielaard |
e9309e |
- argvAdd(&(fl.docDirs), *fn);
|
|
Mark Wielaard |
e9309e |
- } else if (fl.cur.attrFlags & RPMFILE_PUBKEY) {
|
|
Mark Wielaard |
e9309e |
- (void) processMetadataFile(pkg, &fl, *fn, RPMTAG_PUBKEYS);
|
|
Mark Wielaard |
e9309e |
+ if (fl->cur.attrFlags & RPMFILE_DOCDIR) {
|
|
Mark Wielaard |
e9309e |
+ argvAdd(&(fl->docDirs), *fn);
|
|
Mark Wielaard |
e9309e |
+ } else if (fl->cur.attrFlags & RPMFILE_PUBKEY) {
|
|
Mark Wielaard |
e9309e |
+ (void) processMetadataFile(pkg, fl, *fn, RPMTAG_PUBKEYS);
|
|
Mark Wielaard |
e9309e |
} else {
|
|
Mark Wielaard |
e9309e |
- if (fl.cur.attrFlags & RPMFILE_DIR)
|
|
Mark Wielaard |
e9309e |
- fl.cur.isDir = 1;
|
|
Mark Wielaard |
e9309e |
- (void) processBinaryFile(pkg, &fl, *fn);
|
|
Mark Wielaard |
e9309e |
+ if (fl->cur.attrFlags & RPMFILE_DIR)
|
|
Mark Wielaard |
e9309e |
+ fl->cur.isDir = 1;
|
|
Mark Wielaard |
e9309e |
+ (void) processBinaryFile(pkg, fl, *fn);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
- if (fl.cur.caps)
|
|
Mark Wielaard |
e9309e |
- fl.haveCaps = 1;
|
|
Mark Wielaard |
e9309e |
+ if (fl->cur.caps)
|
|
Mark Wielaard |
e9309e |
+ fl->haveCaps = 1;
|
|
Mark Wielaard |
e9309e |
+ }
|
|
Mark Wielaard |
e9309e |
+ argvFree(fileNames);
|
|
Mark Wielaard |
e9309e |
+}
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
|
|
Mark Wielaard |
e9309e |
+ Package pkg, int installSpecialDoc, int test)
|
|
Mark Wielaard |
e9309e |
+{
|
|
Mark Wielaard |
e9309e |
+ struct FileList_s fl;
|
|
Mark Wielaard |
e9309e |
+ specialDir specialDoc = NULL;
|
|
Mark Wielaard |
e9309e |
+ specialDir specialLic = NULL;
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ pkg->cpioList = NULL;
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ for (ARGV_const_t fp = pkg->fileFile; fp && *fp != NULL; fp++) {
|
|
Mark Wielaard |
e9309e |
+ if (readFilesManifest(spec, pkg, *fp))
|
|
Mark Wielaard |
e9309e |
+ return RPMRC_FAIL;
|
|
Mark Wielaard |
e9309e |
+ }
|
|
Mark Wielaard |
e9309e |
+ /* Init the file list structure */
|
|
Mark Wielaard |
e9309e |
+ memset(&fl, 0, sizeof(fl));
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ fl.pool = rpmstrPoolLink(spec->pool);
|
|
Mark Wielaard |
e9309e |
+ /* XXX spec->buildRoot == NULL, then xstrdup("") is returned */
|
|
Mark Wielaard |
e9309e |
+ fl.buildRoot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
|
|
Mark Wielaard |
e9309e |
+ fl.buildRootLen = strlen(fl.buildRoot);
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ resetPackageFilesDefaults (&fl, pkgFlags);
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
+ { char *docs = rpmGetPath("%{?__docdir_path}", NULL);
|
|
Mark Wielaard |
e9309e |
+ argvSplit(&fl.docDirs, docs, ":");
|
|
Mark Wielaard |
e9309e |
+ free(docs);
|
|
Mark Wielaard |
e9309e |
}
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
+ addPackageFileList (&fl, pkg, &pkg->fileList,
|
|
Mark Wielaard |
e9309e |
+ &specialDoc, &specialLic, 1);
|
|
Mark Wielaard |
e9309e |
+
|
|
Mark Wielaard |
e9309e |
/* Now process special docs and licenses if present */
|
|
Mark Wielaard |
e9309e |
if (specialDoc)
|
|
Mark Wielaard |
e9309e |
processSpecialDir(spec, pkg, &fl, specialDoc, installSpecialDoc, test);
|
|
Mark Wielaard |
e9309e |
@@ -2451,7 +2496,6 @@ static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
|
|
Mark Wielaard |
e9309e |
genCpioListAndHeader(&fl, pkg, 0);
|
|
Mark Wielaard |
e9309e |
|
|
Mark Wielaard |
e9309e |
exit:
|
|
Mark Wielaard |
e9309e |
- argvFree(fileNames);
|
|
Mark Wielaard |
e9309e |
FileListFree(&fl);
|
|
Mark Wielaard |
e9309e |
specialDirFree(specialDoc);
|
|
Mark Wielaard |
e9309e |
specialDirFree(specialLic);
|