/* list of files */
static StringBuf check_fileList = NULL;
+/*backup of maindb->fileList*/
+ARGV_t maindb_fileList_bakup = NULL;
+
typedef struct FileEntry_s {
rpmfileAttrs attrFlags;
specfFlags specdFlags;
/* we have collected some files. Now put them in a debuginfo
* package. If this is not the main package, clone the main
* debuginfo package */
- if (pkg == spec->packages)
+ if (pkg == spec->packages) {
maindbg->fileList = files;
+ /*free maindb_fileList_bakup and set to NULL*/
+ maindb_fileList_bakup = argvFree(maindb_fileList_bakup);
+ }
else {
Package dbg = cloneDebuginfoPackage(spec, pkg, maindbg);
dbg->fileList = files;
addPackageDeps(dbg, dbgsrc ? dbgsrc : maindbg,
RPMTAG_RECOMMENDNAME);
}
+ } else {
+ /*To allow generate debuginfo package which is written in spec file, even there is no .debug files*/
+ if (pkg == spec->packages && headerGetString(maindbg->header,RPMTAG_MULTIFILELIST)) {
+ rpmlog(RPMLOG_WARNING, "user rewrite %%file debuginfo to pack something\n");
+ maindbg->fileList = maindb_fileList_bakup;
+ maindb_fileList_bakup = NULL;
+ headerDel(maindbg->header,RPMTAG_MULTIFILELIST);
+ }
}
}
*pp = maindbg;
}
/* delete unsplit file list, we will re-add files back later */
+ /*backup maindb fileList before free*/
+ maindb_fileList_bakup = maindbg->fileList;
maindbg->fileFile = argvFree(maindbg->fileFile);
- maindbg->fileList = argvFree(maindbg->fileList);
+ maindbg->fileList = NULL;
if (rpmExpandNumeric("%{?_unique_debug_names}"))
uniquearch = rpmExpand("-%{VERSION}-%{RELEASE}.%{_arch}", NULL);
}
if (pkg->fileList != NULL) {
rpmlog(RPMLOG_WARNING, _("line %d: multiple %%files for package '%s'\n"),
spec->lineNum, rpmstrPoolStr(pkg->pool, pkg->name));
+ if (0 == strncmp(name, "debuginfo", 9))
+ {
+ char* multifilelist_flag = "1";
+ headerPutString(pkg->header, RPMTAG_MULTIFILELIST, multifilelist_flag);
+ }
pkg->fileList = argvFree(pkg->fileList);
}
if (haveLangTag(h, tag, lang)) {
/* Turn this into an error eventually */
- rpmlog(RPMLOG_WARNING, _("line %d: second %s\n"),
+ rpmlog(RPMLOG_WARNING, _("line %d: second %s, please remove it\n"),
spec->lineNum, rpmTagGetName(tag));
+ return 0;
}
if (!*lang) {
// goto exit;
if (!lookupPackage(spec, name, flag, NULL)) {
+ //exist %package debuginfo, need to ignore it, because there has been
+ //debuginfo package created by %debug_package macro.
+ if (0 == strncmp(name, "debuginfo", 9))
+ {
+ rpmlog(RPMLOG_WARNING, _("debuginfo package has been in spec file, Don't write again this %s"), spec->line);
+ if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) {
+ nextPart = PART_NONE;
+ } else if (rc < 0) {
+ free(name);
+ goto exit;
+ } else {
+ while (! (nextPart = isPart(spec->line))) {
+ if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) {
+ nextPart = PART_NONE;
+ break;
+ }
+ if (rc) {
+ free(name);
+ goto exit;
+ }
+ }
+ }
+ res = nextPart;
+ }
free(name);
goto exit;
}
RPMTAG_BUILDOBSOLETES = 1194, /* internal (unimplemented) */
RPMTAG_DBINSTANCE = 1195, /* i extension */
RPMTAG_NVRA = 1196, /* s extension */
+ RPMTAG_MULTIFILELIST = 1197, /* s */
- /* tags 1997-4999 reserved */
+ /* tags 1998-4999 reserved */
RPMTAG_FILENAMES = 5000, /* s[] extension */
RPMTAG_FILEPROVIDE = 5001, /* s[] extension */
RPMTAG_FILEREQUIRE = 5002, /* s[] extension */
RPMTAG_FILESIGNATURELENGTH = 5091, /* i */
RPMTAG_PAYLOADDIGEST = 5092, /* s[] */
RPMTAG_PAYLOADDIGESTALGO = 5093, /* i */
- /* Skip numbers which might be used in new RPM versions */
- RPMTAG_BUILDINFO = 7000, /* s[] information about build */
+ /* Skip numbers which might be used in new RPM versions */
+ RPMTAG_BUILDINFO = 7000, /* s[] information about build */
- RPMTAG_FIRSTFREE_TAG /*!< internal */
+ RPMTAG_FIRSTFREE_TAG, /*!< internal */
} rpmTag;
#define RPMTAG_EXTERNAL_TAG 1000000