RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Bernhard Rosenkraenzer
Root: /v/rpm/cvs Email: [EMAIL PROTECTED]
Module: rpm Date: 12-Oct-2007 20:15:11
Branch: HEAD Handle: 2007101219151001
Modified files:
rpm CHANGES
rpm/build files.c
Log:
Support multiple %files files
Submitted by: bero
Summary:
Revision Changes Path
1.1674 +1 -0 rpm/CHANGES
1.266 +41 -33 rpm/build/files.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1673 -r1.1674 CHANGES
--- rpm/CHANGES 12 Oct 2007 17:58:07 -0000 1.1673
+++ rpm/CHANGES 12 Oct 2007 18:15:10 -0000 1.1674
@@ -1,4 +1,5 @@
4.5 -> 5.0:
+ - bero: Support multiple %files files per package (%files -f f1,f2,...)
- bero: Detect Ark Linux as RPMCANONVENDOR
- rpm.org: have selinux disabled imply RPMTRANS_FLAG_NOCONTEXTS.
- jbj: plug --rebuilddb memory leaks. headerGetExtension() est arrive!
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/files.c
============================================================================
$ cvs diff -u -r1.265 -r1.266 files.c
--- rpm/build/files.c 11 Oct 2007 19:44:21 -0000 1.265
+++ rpm/build/files.c 12 Oct 2007 18:15:11 -0000 1.266
@@ -2142,40 +2142,48 @@
pkg->cpioList = NULL;
if (pkg->fileFile) {
- const char *ffn;
- FILE * f;
- FD_t fd;
-
- /* XXX W2DO? urlPath might be useful here. */
- if (*pkg->fileFile == '/') {
- ffn = rpmGetPath(pkg->fileFile, NULL);
- } else {
- /* XXX FIXME: add %{buildsubdir} */
- ffn = rpmGetPath("%{_builddir}/",
- (spec->buildSubdir ? spec->buildSubdir : "") ,
- "/", pkg->fileFile, NULL);
- }
- fd = Fopen(ffn, "r.fpio");
-
- if (fd == NULL || Ferror(fd)) {
- rpmlog(RPMLOG_ERR,
- _("Could not open %%files file %s: %s\n"),
- ffn, Fstrerror(fd));
- return RPMRC_FAIL;
- }
- ffn = _free(ffn);
-
- /[EMAIL PROTECTED]@*/ f = fdGetFp(fd); /[EMAIL PROTECTED]@*/
- if (f != NULL)
- while (fgets(buf, sizeof(buf), f)) {
- handleComments(buf);
- if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
- rpmlog(RPMLOG_ERR, _("line: %s\n"), buf);
- return RPMRC_FAIL;
+ char *saveptr;
+ char *filesFiles=strdup(pkg->fileFile);
+ char *token=strtok_r(filesFiles, ",", &saveptr);
+ do {
+ const char *ffn;
+ FILE * f;
+ FD_t fd;
+
+ /* XXX W2DO? urlPath might be useful here. */
+ if (*token == '/') {
+ ffn = rpmGetPath(token, NULL);
+ } else {
+ /* XXX FIXME: add %{buildsubdir} */
+ ffn = rpmGetPath("%{_builddir}/",
+ (spec->buildSubdir ? spec->buildSubdir : "") ,
+ "/", token, NULL);
}
- appendStringBuf(pkg->fileList, buf);
- }
- (void) Fclose(fd);
+
+ fd = Fopen(ffn, "r.fpio");
+
+ if (fd == NULL || Ferror(fd)) {
+ rpmlog(RPMLOG_ERR,
+ _("Could not open %%files file %s: %s\n"),
+ ffn, Fstrerror(fd));
+ return RPMRC_FAIL;
+ }
+ ffn = _free(ffn);
+
+ /[EMAIL PROTECTED]@*/ f = fdGetFp(fd); /[EMAIL PROTECTED]@*/
+ if (f != NULL) {
+ while (fgets(buf, sizeof(buf), f)) {
+ handleComments(buf);
+ if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
+ rpmlog(RPMLOG_ERR, _("line: %s\n"), buf);
+ return RPMRC_FAIL;
+ }
+ appendStringBuf(token, buf);
+ }
+ }
+ (void) Fclose(fd);
+ } while(token=strtok_r(NULL, ",", &saveptr));
+ free(filesFiles);
}
/* Init the file list structure */
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository [email protected]