summaryrefslogtreecommitdiffstats
path: root/meta/packages/rpm
diff options
context:
space:
mode:
authorRichard Purdie <richard@openedhand.com>2008-08-27 00:06:59 +0000
committerRichard Purdie <richard@openedhand.com>2008-08-27 00:06:59 +0000
commit99e44d2b57d8adff7e15afb297d202da040b26d2 (patch)
treeb8119d8be267fed98e6035a25fd5144e197528da /meta/packages/rpm
parent375bf90a377fe381be8e56af36e31882f1e55da7 (diff)
downloadpoky-99e44d2b57d8adff7e15afb297d202da040b26d2.tar.gz
rpm: Add recommends support from suse rpm patches
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5113 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'meta/packages/rpm')
-rw-r--r--meta/packages/rpm/files/tagsbackport.patch37
-rw-r--r--meta/packages/rpm/files/weakdeps.patch312
-rw-r--r--meta/packages/rpm/rpm_4.4.2.3.bb6
3 files changed, 353 insertions, 2 deletions
diff --git a/meta/packages/rpm/files/tagsbackport.patch b/meta/packages/rpm/files/tagsbackport.patch
new file mode 100644
index 0000000000..a2a360944c
--- /dev/null
+++ b/meta/packages/rpm/files/tagsbackport.patch
@@ -0,0 +1,37 @@
1Backported some new tags and sense values.
2
3Index: lib/rpmlib.h
4===================================================================
5--- lib/rpmlib.h.orig 2008-08-26 17:07:12.000000000 +0100
6+++ lib/rpmlib.h 2008-08-26 17:22:21.000000000 +0100
7@@ -447,7 +447,19 @@
8 RPMTAG_PRIORITY = 1162, /* i extension placeholder */
9 RPMTAG_CVSID = 1163, /* s */
10 #define RPMTAG_SVNID RPMTAG_CVSID /* s */
11+ RPMTAG_BLINKPKGID = 1164, /* s[] */
12+ RPMTAG_BLINKHDRID = 1165, /* s[] */
13+ RPMTAG_BLINKNEVRA = 1166, /* s[] */
14+ RPMTAG_FLINKPKGID = 1167, /* s[] */
15+ RPMTAG_FLINKHDRID = 1168, /* s[] */
16+ RPMTAG_FLINKNEVRA = 1169, /* s[] */
17+ RPMTAG_PACKAGEORIGIN = 1170, /* s */
18 RPMTAG_TRIGGERPREIN = 1171, /*!< internal */
19+ RPMTAG_BUILDSUGGESTS = 1172, /*!< internal */
20+ RPMTAG_BUILDENHANCES = 1173, /*!< internal */
21+ RPMTAG_SCRIPTSTATES = 1174, /*!< i scriptlet exit codes */
22+ RPMTAG_SCRIPTMETRICS = 1175, /*!< i scriptlet execution times */
23+ RPMTAG_BUILDCPUCLOCK = 1176, /*!< i */
24
25 /*@-enummemuse@*/
26 RPMTAG_FIRSTFREE_TAG /*!< internal */
27@@ -531,7 +543,9 @@
28 /*@=enummemuse@*/
29 RPMSENSE_KEYRING = (1 << 26),
30 RPMSENSE_STRONG = (1 << 27),
31- RPMSENSE_CONFIG = (1 << 28)
32+ RPMSENSE_CONFIG = (1 << 28),
33+ RPMSENSE_PROBE = (1 << 29),
34+ RPMSENSE_PACKAGE = (1 << 30)
35 } rpmsenseFlags;
36
37 #define RPMSENSE_SENSEMASK 15 /* Mask to get senses, ie serial, */
diff --git a/meta/packages/rpm/files/weakdeps.patch b/meta/packages/rpm/files/weakdeps.patch
new file mode 100644
index 0000000000..a013b75542
--- /dev/null
+++ b/meta/packages/rpm/files/weakdeps.patch
@@ -0,0 +1,312 @@
1Taken from OpenSUSE 11 rpm source file - RP 26/8/08
2
3Add support for weak dependencies:
4
5A) use RPMTAG_SUGGESTS and RPMTAG_ENHANCES to store them.
6
7 This is different to upstream, which uses RPMSENSE_MISSINGOK
8 and RPMTAG_REQUIRES/RPMTAG_PROVIDES instead. I chose different
9 tags because I wanted to be compatible. The point is that
10 applications that don't know about the new MISSINGOK semantics
11 will mis-interpret the provides/requires otherwise, which
12 I deemed to risky.
13
14B) use RPMSENSE_STRONG to support a "strong" version, "Recommends"
15 instead of "Suggests" and "Supplements" instead of "Enhances".
16
17Needs extcond.diff for query operations.
18
19Index: build/parsePreamble.c
20===================================================================
21--- build/parsePreamble.c.orig 2008-04-01 08:28:21.000000000 +0100
22+++ build/parsePreamble.c 2008-08-26 16:58:09.000000000 +0100
23@@ -129,6 +129,8 @@
24 { "post", RPMSENSE_SCRIPT_POST },
25 { "rpmlib", RPMSENSE_RPMLIB },
26 { "verify", RPMSENSE_SCRIPT_VERIFY },
27+ { "hint", RPMSENSE_MISSINGOK },
28+ { "strong", RPMSENSE_STRONG },
29 { NULL, 0 }
30 };
31
32@@ -140,6 +142,8 @@
33 { "build", RPMSENSE_SCRIPT_BUILD },
34 { "install", RPMSENSE_SCRIPT_INSTALL },
35 { "clean", RPMSENSE_SCRIPT_CLEAN },
36+ { "hint", RPMSENSE_MISSINGOK },
37+ { "strong", RPMSENSE_STRONG },
38 { NULL, 0 }
39 };
40
41@@ -692,6 +696,18 @@
42 if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags)))
43 return rc;
44 break;
45+ case RPMTAG_SUGGESTSFLAGS:
46+ case RPMTAG_ENHANCESFLAGS:
47+ case RPMTAG_BUILDSUGGESTS:
48+ case RPMTAG_BUILDENHANCES:
49+ tagflags = RPMSENSE_MISSINGOK;
50+ if (macro && (!strcmp(macro, "recommends") || !strcmp(macro, "buildrecommends")))
51+ tagflags |= RPMSENSE_STRONG;
52+ if (macro && (!strcmp(macro, "supplements") || !strcmp(macro, "buildsupplements")))
53+ tagflags |= RPMSENSE_STRONG;
54+ if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags)))
55+ return rc;
56+ break;
57 case RPMTAG_EXCLUDEARCH:
58 case RPMTAG_EXCLUSIVEARCH:
59 case RPMTAG_EXCLUDEOS:
60@@ -783,6 +799,14 @@
61 {RPMTAG_DISTTAG, 0, 0, 0, "disttag"},
62 {RPMTAG_CVSID, 0, 0, 0, "cvsid"},
63 {RPMTAG_SVNID, 0, 0, 0, "svnid"},
64+ {RPMTAG_SUGGESTSFLAGS, 0, 0, 0, "recommends"},
65+ {RPMTAG_SUGGESTSFLAGS, 0, 0, 0, "suggests"},
66+ {RPMTAG_ENHANCESFLAGS, 0, 0, 0, "supplements"},
67+ {RPMTAG_ENHANCESFLAGS, 0, 0, 0, "enhances"},
68+ {RPMTAG_BUILDSUGGESTS, 0, 0, 0, "buildrecommends"},
69+ {RPMTAG_BUILDSUGGESTS, 0, 0, 0, "buildsuggests"},
70+ {RPMTAG_BUILDENHANCES, 0, 0, 0, "buildsupplements"},
71+ {RPMTAG_BUILDENHANCES, 0, 0, 0, "buildenhances"},
72 /*@-nullassign@*/ /* LCL: can't add null annotation */
73 {0, 0, 0, 0, 0}
74 /*@=nullassign@*/
75Index: build/parseReqs.c
76===================================================================
77--- build/parseReqs.c.orig 2008-04-01 08:28:21.000000000 +0100
78+++ build/parseReqs.c 2008-08-26 16:58:09.000000000 +0100
79@@ -85,6 +85,14 @@
80 tagflags |= RPMSENSE_ANY;
81 h = spec->buildRestrictions;
82 break;
83+ case RPMTAG_SUGGESTSFLAGS:
84+ case RPMTAG_ENHANCESFLAGS:
85+ h = pkg->header;
86+ break;
87+ case RPMTAG_BUILDSUGGESTS:
88+ case RPMTAG_BUILDENHANCES:
89+ h = spec->buildRestrictions;
90+ break;
91 default:
92 case RPMTAG_REQUIREFLAGS:
93 tagflags |= RPMSENSE_ANY;
94Index: build/reqprov.c
95===================================================================
96--- build/reqprov.c.orig 2008-04-01 08:28:21.000000000 +0100
97+++ build/reqprov.c 2008-08-26 16:58:09.000000000 +0100
98@@ -48,6 +48,16 @@
99 flagtag = RPMTAG_TRIGGERFLAGS;
100 indextag = RPMTAG_TRIGGERINDEX;
101 extra = Flags & RPMSENSE_TRIGGER;
102+ } else if (tagN == RPMTAG_SUGGESTSFLAGS || tagN == RPMTAG_BUILDSUGGESTS) {
103+ nametag = RPMTAG_SUGGESTSNAME;
104+ versiontag = RPMTAG_SUGGESTSVERSION;
105+ flagtag = RPMTAG_SUGGESTSFLAGS;
106+ extra = Flags & _ALL_REQUIRES_MASK;
107+ } else if (tagN == RPMTAG_ENHANCESFLAGS || tagN == RPMTAG_BUILDENHANCES) {
108+ nametag = RPMTAG_ENHANCESNAME;
109+ versiontag = RPMTAG_ENHANCESVERSION;
110+ flagtag = RPMTAG_ENHANCESFLAGS;
111+ extra = Flags & _ALL_REQUIRES_MASK;
112 } else {
113 nametag = RPMTAG_REQUIRENAME;
114 versiontag = RPMTAG_REQUIREVERSION;
115Index: build/rpmfc.c
116===================================================================
117--- build/rpmfc.c.orig 2008-04-01 08:28:21.000000000 +0100
118+++ build/rpmfc.c 2008-08-26 16:58:09.000000000 +0100
119@@ -1385,6 +1385,12 @@
120 { "Obsoletes", { "%{?__find_obsoletes}", NULL, NULL, NULL },
121 RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS,
122 0, -1 },
123+ { "Enhances", { "%{?__find_enhances}", NULL, NULL, NULL },
124+ RPMTAG_ENHANCESNAME, RPMTAG_ENHANCESVERSION, RPMTAG_ENHANCESFLAGS,
125+ RPMSENSE_STRONG, RPMSENSE_STRONG },
126+ { "Supplements", { "%{?__find_supplements}", NULL, NULL, NULL },
127+ RPMTAG_ENHANCESNAME, RPMTAG_ENHANCESVERSION, RPMTAG_ENHANCESFLAGS,
128+ RPMSENSE_STRONG, 0 },
129 { NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 }
130 };
131
132@@ -1480,6 +1486,14 @@
133 failnonzero = 0;
134 tagflags = RPMSENSE_FIND_REQUIRES;
135 /*@switchbreak@*/ break;
136+ case RPMTAG_ENHANCESFLAGS:
137+ if (!pkg->autoProv)
138+ continue;
139+ failnonzero = 0;
140+ tagflags = RPMSENSE_FIND_REQUIRES | RPMSENSE_MISSINGOK;
141+ if (strcmp(dm->msg, "Supplements") == 0)
142+ tagflags |= RPMSENSE_STRONG;
143+ /*@switchbreak@*/ break;
144 default:
145 continue;
146 /*@notreached@*/ /*@switchbreak@*/ break;
147Index: lib/rpmlib.h
148===================================================================
149--- lib/rpmlib.h.orig 2008-04-01 08:28:22.000000000 +0100
150+++ lib/rpmlib.h 2008-08-26 17:00:37.000000000 +0100
151@@ -530,7 +530,7 @@
152 RPMSENSE_TRIGGERPREIN = (1 << 25), /*!< @todo Implement %triggerprein. */
153 /*@=enummemuse@*/
154 RPMSENSE_KEYRING = (1 << 26),
155- RPMSENSE_PATCHES = (1 << 27),
156+ RPMSENSE_STRONG = (1 << 27),
157 RPMSENSE_CONFIG = (1 << 28)
158 } rpmsenseFlags;
159
160Index: python/rpmmodule.c
161===================================================================
162--- python/rpmmodule.c.orig 2008-04-01 08:28:22.000000000 +0100
163+++ python/rpmmodule.c 2008-08-26 16:58:09.000000000 +0100
164@@ -433,7 +433,7 @@
165 REGISTER_ENUM(RPMSENSE_RPMLIB);
166 REGISTER_ENUM(RPMSENSE_TRIGGERPREIN);
167 REGISTER_ENUM(RPMSENSE_KEYRING);
168- REGISTER_ENUM(RPMSENSE_PATCHES);
169+ REGISTER_ENUM(RPMSENSE_STRONG);
170 REGISTER_ENUM(RPMSENSE_CONFIG);
171
172 REGISTER_ENUM(RPMTRANS_FLAG_TEST);
173Index: lib/rpmds.c
174===================================================================
175--- lib/rpmds.c.orig 2008-04-01 08:28:22.000000000 +0100
176+++ lib/rpmds.c 2008-08-26 16:58:09.000000000 +0100
177@@ -320,6 +320,11 @@
178 tagEVR = RPMTAG_TRIGGERVERSION;
179 tagF = RPMTAG_TRIGGERFLAGS;
180 } else
181+ if (tagN == RPMTAG_ENHANCESNAME) {
182+ Type = "Enhances";
183+ tagEVR = RPMTAG_ENHANCESVERSION;
184+ tagF = RPMTAG_ENHANCESFLAGS;
185+ } else
186 goto exit;
187
188 /*@-branchstate@*/
189Index: rpmpopt.in
190===================================================================
191--- rpmpopt.in.orig 2008-04-01 08:28:22.000000000 +0100
192+++ rpmpopt.in 2008-08-26 16:58:09.000000000 +0100
193@@ -68,6 +68,22 @@
194 --POPTdesc=$"list capabilities required by package(s)"
195 rpm alias -R --requires
196
197+rpm alias --suggests --qf \
198+ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
199+ --POPTdesc=$"list capabilities this package suggests"
200+
201+rpm alias --recommends --qf \
202+ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
203+ --POPTdesc=$"list capabilities this package recommends"
204+
205+rpm alias --enhances --qf \
206+ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
207+ --POPTdesc=$"list capabilities this package enhances"
208+
209+rpm alias --supplements --qf \
210+ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
211+ --POPTdesc=$"list capabilities this package supplements"
212+
213 rpm alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
214 Version : %-27{VERSION} Vendor: %{VENDOR}\n\
215 Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
216@@ -351,6 +367,22 @@
217 --POPTdesc=$"list capabilities required by package(s)"
218 rpmq alias -R --requires
219
220+rpmq alias --suggests --qf \
221+ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
222+ --POPTdesc=$"list capabilities this package suggests"
223+
224+rpmq alias --recommends --qf \
225+ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
226+ --POPTdesc=$"list capabilities this package recommends"
227+
228+rpmq alias --enhances --qf \
229+ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
230+ --POPTdesc=$"list capabilities this package enhances"
231+
232+rpmq alias --supplements --qf \
233+ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
234+ --POPTdesc=$"list capabilities this package supplements"
235+
236 rpmq alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
237 Version : %-27{VERSION} Vendor: %{VENDOR}\n\
238 Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
239@@ -452,6 +484,22 @@
240 --POPTdesc=$"list capabilities required by package(s)"
241 rpmquery alias -R --requires
242
243+rpmquery alias --suggests --qf \
244+ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
245+ --POPTdesc=$"list capabilities this package suggests"
246+
247+rpmquery alias --recommends --qf \
248+ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
249+ --POPTdesc=$"list capabilities this package recommends"
250+
251+rpmquery alias --enhances --qf \
252+ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
253+ --POPTdesc=$"list capabilities this package enhances"
254+
255+rpmquery alias --supplements --qf \
256+ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
257+ --POPTdesc=$"list capabilities this package supplements"
258+
259 rpmquery alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
260 Version : %-27{VERSION} Vendor: %{VENDOR}\n\
261 Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
262Index: lib/formats.c
263===================================================================
264--- lib/formats.c.orig 2008-04-01 08:28:22.000000000 +0100
265+++ lib/formats.c 2008-08-26 16:58:09.000000000 +0100
266@@ -543,6 +543,38 @@
267 return val;
268 }
269
270+static /*@only@*/ char * depflag_strongFormat(int_32 type, const void * data,
271+ char * formatPrefix, int padding, /*@unused@*/ int element)
272+ /*@modifies formatPrefix @*/
273+ /*@requires maxRead(data) >= 0 @*/
274+{
275+ char * val;
276+ char buf[10];
277+ int anint;
278+
279+ if (type != RPM_INT32_TYPE) {
280+ val = xstrdup(_("(not a number)"));
281+ } else {
282+ anint = *((int_32 *) data);
283+ buf[0] = '\0';
284+
285+/*@-boundswrite@*/
286+ if (anint & RPMSENSE_STRONG)
287+ strcat(buf, "strong");
288+/*@=boundswrite@*/
289+
290+ val = xmalloc(7 + padding);
291+/*@-boundswrite@*/
292+ strcat(formatPrefix, "s");
293+/*@=boundswrite@*/
294+ /*@-formatconst@*/
295+ sprintf(val, formatPrefix, buf);
296+ /*@=formatconst@*/
297+ }
298+
299+ return val;
300+}
301+
302 /**
303 * Retrieve mounted file system paths.
304 * @param h header
305@@ -1171,6 +1203,7 @@
306 { HEADER_EXT_FORMAT, "base64", { base64Format } },
307 { HEADER_EXT_FORMAT, "pgpsig", { pgpsigFormat } },
308 { HEADER_EXT_FORMAT, "depflags", { depflagsFormat } },
309+ { HEADER_EXT_FORMAT, "depflag_strong", { depflag_strongFormat } },
310 { HEADER_EXT_FORMAT, "fflags", { fflagsFormat } },
311 { HEADER_EXT_FORMAT, "perms", { permsFormat } },
312 { HEADER_EXT_FORMAT, "permissions", { permsFormat } },
diff --git a/meta/packages/rpm/rpm_4.4.2.3.bb b/meta/packages/rpm/rpm_4.4.2.3.bb
index 4e868e3716..1a6e01a196 100644
--- a/meta/packages/rpm/rpm_4.4.2.3.bb
+++ b/meta/packages/rpm/rpm_4.4.2.3.bb
@@ -2,11 +2,13 @@ DESCRIPTION = "The RPM Package Manager."
2HOMEPAGE = "http://rpm.org/" 2HOMEPAGE = "http://rpm.org/"
3LICENSE = "LGPL GPL" 3LICENSE = "LGPL GPL"
4DEPENDS = "zlib beecrypt file popt python" 4DEPENDS = "zlib beecrypt file popt python"
5PR = "r4" 5PR = "r6"
6 6
7SRC_URI = "http://www.rpm.org/releases/rpm-4.4.x/rpm-4.4.2.3.tar.gz \ 7SRC_URI = "http://www.rpm.org/releases/rpm-4.4.x/rpm-4.4.2.3.tar.gz \
8 file://external-tools.patch;patch=1 \ 8 file://external-tools.patch;patch=1 \
9 file://cross_libpaths.patch;patch=1" 9 file://cross_libpaths.patch;patch=1 \
10 file://weakdeps.patch;patch=1;pnum=0 \
11 file://tagsbackport.patch;patch=1;pnum=0"
10 12
11inherit autotools gettext 13inherit autotools gettext
12 14