RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 17-Dec-2007 20:44:13
Branch: HEAD Handle: 2007121719441200
Modified files:
rpm CHANGES
rpm/build parseBuildInstallClean.c parseSpec.c rpmbuild.h
rpmspec.h spec.c
Log:
- jbj: preliminaries for %foo arbitrary section parsing (not added
yet).
Summary:
Revision Changes Path
1.1996 +1 -0 rpm/CHANGES
2.30 +5 -0 rpm/build/parseBuildInstallClean.c
2.127 +29 -2 rpm/build/parseSpec.c
2.89 +2 -1 rpm/build/rpmbuild.h
2.68 +4 -0 rpm/build/rpmspec.h
2.172 +9 -0 rpm/build/spec.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1995 -r1.1996 CHANGES
--- rpm/CHANGES 17 Dec 2007 17:44:52 -0000 1.1995
+++ rpm/CHANGES 17 Dec 2007 19:44:12 -0000 1.1996
@@ -1,4 +1,5 @@
5.0b2 -> 5.0b3:
+ - jbj: preliminaries for %foo arbitrary section parsing (not added yet).
- jbj: start using rpmParseState typedef rather than int.
- jbj: fix: explicitly add mkdir -p to spec_install_pre.
- jbj: explicitly compare against PART_NONE, avoid RPMRC_FOO collisions.
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/parseBuildInstallClean.c
============================================================================
$ cvs diff -u -r2.29 -r2.30 parseBuildInstallClean.c
--- rpm/build/parseBuildInstallClean.c 17 Dec 2007 17:44:52 -0000 2.29
+++ rpm/build/parseBuildInstallClean.c 17 Dec 2007 19:44:12 -0000 2.30
@@ -32,6 +32,11 @@
} else if (parsePart == PART_TRACK) { /* support "%track" scriptlet */
sbp = &spec->track;
name = "%track";
+ } else if (parsePart == PART_ARBITRARY) {
+ spec->foo = xrealloc(spec->foo, (spec->nfoo + 1) * sizeof(*spec->foo));
+ sbp = &spec->foo[spec->nfoo++];
+ *sbp = NULL;
+ name = "%arbitrary";
}
if (*sbp != NULL) {
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/parseSpec.c
============================================================================
$ cvs diff -u -r2.126 -r2.127 parseSpec.c
--- rpm/build/parseSpec.c 17 Dec 2007 17:13:52 -0000 2.126
+++ rpm/build/parseSpec.c 17 Dec 2007 19:44:12 -0000 2.127
@@ -6,6 +6,7 @@
#include "system.h"
#include <rpmio_internal.h> /* XXX fdGetFp */
+#define _RPMTAG_INTERNAL /* XXX rpmTags->aTags */
#include <rpmbuild.h>
#include "rpmds.h"
#include "rpmts.h"
@@ -60,6 +61,7 @@
rpmParseState isPart(const char *line)
{
struct PartRec *p;
+ rpmParseState nextPart = PART_NONE; /* assume failure */
if (partList[0].len == 0)
initParts(partList);
@@ -69,11 +71,35 @@
if (xstrncasecmp(line, p->token, p->len))
continue;
c = *(line + p->len);
- if (c == '\0' || xisspace(c))
+ if (c == '\0' || xisspace(c)) {
+ nextPart = p->part;
break;
+ }
+ }
+
+ /* If %foo is not found explictly, check for an arbitrary %foo tag. */
+ if (nextPart == PART_NONE) {
+ ARGV_t aTags = NULL;
+ const char * s;
+/*@-noeffect@*/
+ (void) tagName(0); /* XXX force arbitrary tags to be initialized. */
+/*@=noeffect@*/
+ aTags = rpmTags->aTags;
+ if (aTags != NULL && aTags[0] != NULL) {
+ ARGV_t av;
+ s = tagCanonicalize(line+1); /* XXX +1 to skip leading '%' */
+#if defined(RPM_VENDOR_OPENPKG) /* wildcard-matching-arbitrary-tagnames */
+ av = argvSearchLinear(aTags, s, argvFnmatchCasefold);
+#else
+ av = argvSearch(aTags, s, argvStrcasecmp);
+#endif
+ if (av != NULL)
+ nextPart = PART_ARBITRARY;
+ s = _free(s);
+ }
}
- return (p->token ? p->part : PART_NONE);
+ return nextPart;
}
/**
@@ -481,6 +507,7 @@
case PART_CHECK:
case PART_TRACK: /* support "%track" scriptlet */
case PART_CLEAN:
+ case PART_ARBITRARY:
parsePart = parseBuildInstallClean(spec, parsePart);
/*@switchbreak@*/ break;
case PART_CHANGELOG:
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/rpmbuild.h
============================================================================
$ cvs diff -u -r2.88 -r2.89 rpmbuild.h
--- rpm/build/rpmbuild.h 17 Dec 2007 17:13:52 -0000 2.88
+++ rpm/build/rpmbuild.h 17 Dec 2007 19:44:12 -0000 2.89
@@ -76,7 +76,8 @@
/* support "%track" and "%sanitycheck" scripts/sections */
PART_TRACK = 32+PART_BASE, /*!< */
PART_SANITYCHECK = 33+PART_BASE, /*!< */
- PART_LAST = 34+PART_BASE /*!< */
+ PART_ARBITRARY = 34+PART_BASE, /*!< */
+ PART_LAST = 35+PART_BASE /*!< */
} rpmParseState;
#define STRIP_NOTHING 0
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/rpmspec.h
============================================================================
$ cvs diff -u -r2.67 -r2.68 rpmspec.h
--- rpm/build/rpmspec.h 17 Dec 2007 07:07:41 -0000 2.67
+++ rpm/build/rpmspec.h 17 Dec 2007 19:44:12 -0000 2.68
@@ -180,6 +180,10 @@
/*@only@*/
StringBuf track; /*!< %track scriptlet. */
+ int nfoo;
+/*@only@*/ /*@null@*/
+ StringBuf *foo;
+
/*@owned@*/
Package packages; /*!< Package list. */
};
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/spec.c
============================================================================
$ cvs diff -u -r2.171 -r2.172 spec.c
--- rpm/build/spec.c 17 Dec 2007 15:45:48 -0000 2.171
+++ rpm/build/spec.c 17 Dec 2007 19:44:12 -0000 2.172
@@ -488,6 +488,8 @@
spec->check = NULL;
spec->clean = NULL;
spec->track = NULL; /* support "%track" script/section */
+ spec->foo = NULL;
+ spec->nfoo = 0;
spec->sources = NULL;
spec->packages = NULL;
@@ -535,6 +537,13 @@
spec->check = freeStringBuf(spec->check);
spec->clean = freeStringBuf(spec->clean);
spec->track = freeStringBuf(spec->track); /* support "%track" script/section */
+ if (spec->foo) {
+ int i;
+ for (i = 0; i < spec->nfoo; i++)
+ spec->foo[i] = freeStringBuf(spec->foo[i]);
+ spec->foo = _free(spec->foo);
+ }
+ spec->nfoo = 0;
spec->buildSubdir = _free(spec->buildSubdir);
spec->rootURL = _free(spec->rootURL);
@@ .
Received on Mon Dec 17 20:44:13 2007