summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/rpm/rpm-4.11.2/support-suggests-tag.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/rpm/rpm-4.11.2/support-suggests-tag.patch')
-rw-r--r--meta/recipes-devtools/rpm/rpm-4.11.2/support-suggests-tag.patch384
1 files changed, 384 insertions, 0 deletions
diff --git a/meta/recipes-devtools/rpm/rpm-4.11.2/support-suggests-tag.patch b/meta/recipes-devtools/rpm/rpm-4.11.2/support-suggests-tag.patch
new file mode 100644
index 0000000000..3da608573a
--- /dev/null
+++ b/meta/recipes-devtools/rpm/rpm-4.11.2/support-suggests-tag.patch
@@ -0,0 +1,384 @@
1
2Upstream-Status: Pending
3
4Signed-off-by: Saul Wold <sgw@linux.intel.com>
5Signed-off-by: Ronan Le Martret <ronan.lemartret@open.eurogiciel.org>
6
7diff --git a/build/pack.c b/build/pack.c
8index b6b2bea..5c3d8df 100644
9--- a/build/pack.c
10+++ b/build/pack.c
11@@ -273,8 +273,10 @@ static rpmTagVal depevrtags[] = {
12 RPMTAG_CONFLICTVERSION,
13 RPMTAG_ORDERVERSION,
14 RPMTAG_TRIGGERVERSION,
15- RPMTAG_SUGGESTSVERSION,
16- RPMTAG_ENHANCESVERSION,
17+ RPMTAG_SUGGESTVERSION,
18+ RPMTAG_ENHANCEVERSION,
19+ RPMTAG_RECOMMENDVERSION,
20+ RPMTAG_SUPPLEMENTVERSION,
21 0
22 };
23
24diff --git a/build/parsePreamble.c b/build/parsePreamble.c
25index 5772bef..cbbbee3 100644
26--- a/build/parsePreamble.c
27+++ b/build/parsePreamble.c
28@@ -821,6 +821,10 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
29 }
30 /* fallthrough */
31 case RPMTAG_PREREQ:
32+ case RPMTAG_RECOMMENDFLAGS:
33+ case RPMTAG_SUGGESTFLAGS:
34+ case RPMTAG_SUPPLEMENTFLAGS:
35+ case RPMTAG_ENHANCEFLAGS:
36 case RPMTAG_CONFLICTFLAGS:
37 case RPMTAG_OBSOLETEFLAGS:
38 case RPMTAG_PROVIDEFLAGS:
39@@ -922,6 +926,10 @@ static struct PreambleRec_s const preambleList[] = {
40 {RPMTAG_ICON, 0, 0, LEN_AND_STR("icon")},
41 {RPMTAG_PROVIDEFLAGS, 0, 0, LEN_AND_STR("provides")},
42 {RPMTAG_REQUIREFLAGS, 2, 0, LEN_AND_STR("requires")},
43+ {RPMTAG_RECOMMENDFLAGS, 0, 0, LEN_AND_STR("recommends")},
44+ {RPMTAG_SUGGESTFLAGS, 0, 0, LEN_AND_STR("suggests")},
45+ {RPMTAG_SUPPLEMENTFLAGS, 0, 0, LEN_AND_STR("supplements")},
46+ {RPMTAG_ENHANCEFLAGS, 0, 0, LEN_AND_STR("enhances")},
47 {RPMTAG_PREREQ, 2, 1, LEN_AND_STR("prereq")},
48 {RPMTAG_CONFLICTFLAGS, 0, 0, LEN_AND_STR("conflicts")},
49 {RPMTAG_OBSOLETEFLAGS, 0, 0, LEN_AND_STR("obsoletes")},
50diff --git a/build/parseReqs.c b/build/parseReqs.c
51index ba080a1..1427111 100644
52--- a/build/parseReqs.c
53+++ b/build/parseReqs.c
54@@ -61,6 +61,18 @@ rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char *field, rpmTagVal tagN,
55 nametag = RPMTAG_REQUIRENAME;
56 tagflags |= RPMSENSE_ANY;
57 break;
58+ case RPMTAG_RECOMMENDFLAGS:
59+ nametag = RPMTAG_RECOMMENDNAME;
60+ break;
61+ case RPMTAG_SUGGESTFLAGS:
62+ nametag = RPMTAG_SUGGESTNAME;
63+ break;
64+ case RPMTAG_SUPPLEMENTFLAGS:
65+ nametag = RPMTAG_SUPPLEMENTNAME;
66+ break;
67+ case RPMTAG_ENHANCEFLAGS:
68+ nametag = RPMTAG_ENHANCENAME;
69+ break;
70 case RPMTAG_PROVIDEFLAGS:
71 nametag = RPMTAG_PROVIDENAME;
72 break;
73diff --git a/build/reqprov.c b/build/reqprov.c
74index a368f42..c270af6 100644
75--- a/build/reqprov.c
76+++ b/build/reqprov.c
77@@ -81,6 +81,30 @@ int addReqProv(Package pkg, rpmTagVal tagN,
78 extra = Flags & RPMSENSE_TRIGGER;
79 dsp = &pkg->triggers;
80 break;
81+ case RPMTAG_RECOMMENDNAME:
82+ versiontag = RPMTAG_RECOMMENDVERSION;
83+ flagtag = RPMTAG_RECOMMENDFLAGS;
84+ extra = Flags & _ALL_REQUIRES_MASK;
85+ dsp = &pkg->recommends;
86+ break;
87+ case RPMTAG_SUGGESTNAME:
88+ versiontag = RPMTAG_SUGGESTVERSION;
89+ flagtag = RPMTAG_SUGGESTFLAGS;
90+ extra = Flags & _ALL_REQUIRES_MASK;
91+ dsp = &pkg->suggests;
92+ break;
93+ case RPMTAG_SUPPLEMENTNAME:
94+ versiontag = RPMTAG_SUPPLEMENTVERSION;
95+ flagtag = RPMTAG_SUPPLEMENTFLAGS;
96+ extra = Flags & _ALL_REQUIRES_MASK;
97+ dsp = &pkg->supplements;
98+ break;
99+ case RPMTAG_ENHANCENAME:
100+ versiontag = RPMTAG_ENHANCEVERSION;
101+ flagtag = RPMTAG_ENHANCEFLAGS;
102+ extra = Flags & _ALL_REQUIRES_MASK;
103+ dsp = &pkg->enhances;
104+ break;
105 case RPMTAG_REQUIRENAME:
106 default:
107 tagN = RPMTAG_REQUIRENAME;
108diff --git a/build/rpmbuild_internal.h b/build/rpmbuild_internal.h
109index a9e4c7c..0a1977f 100644
110--- a/build/rpmbuild_internal.h
111+++ b/build/rpmbuild_internal.h
112@@ -93,6 +93,10 @@ struct Package_s {
113 rpmds ds; /*!< Requires: N = EVR */
114 rpmds requires;
115 rpmds provides;
116+ rpmds recommends;
117+ rpmds suggests;
118+ rpmds supplements;
119+ rpmds enhances;
120 rpmds conflicts;
121 rpmds obsoletes;
122 rpmds triggers;
123diff --git a/build/spec.c b/build/spec.c
124index 703ec78..7ae2120 100644
125--- a/build/spec.c
126+++ b/build/spec.c
127@@ -139,6 +139,11 @@ static Package freePackage(Package pkg)
128 pkg->ds = rpmdsFree(pkg->ds);
129 pkg->requires = rpmdsFree(pkg->requires);
130 pkg->provides = rpmdsFree(pkg->provides);
131+ pkg->recommends = rpmdsFree(pkg->recommends);
132+ pkg->suggests = rpmdsFree(pkg->suggests);
133+ pkg->supplements = rpmdsFree(pkg->supplements);
134+ pkg->enhances = rpmdsFree(pkg->enhances);
135+
136 pkg->conflicts = rpmdsFree(pkg->conflicts);
137 pkg->obsoletes = rpmdsFree(pkg->obsoletes);
138 pkg->triggers = rpmdsFree(pkg->triggers);
139diff --git a/lib/rpmds.c b/lib/rpmds.c
140index 7a51167..1e5dda0 100644
141--- a/lib/rpmds.c
142+++ b/lib/rpmds.c
143@@ -52,6 +52,22 @@ static int dsType(rpmTagVal tag,
144 t = "Requires";
145 evr = RPMTAG_REQUIREVERSION;
146 f = RPMTAG_REQUIREFLAGS;
147+ } else if (tag == RPMTAG_SUPPLEMENTNAME) {
148+ t = "Supplements";
149+ evr = RPMTAG_SUPPLEMENTVERSION;
150+ f = RPMTAG_SUPPLEMENTFLAGS;
151+ } else if (tag == RPMTAG_ENHANCENAME) {
152+ t = "Enhances";
153+ evr = RPMTAG_ENHANCEVERSION;
154+ f = RPMTAG_ENHANCEFLAGS;
155+ } else if (tag == RPMTAG_RECOMMENDNAME) {
156+ t = "Recommends";
157+ evr = RPMTAG_RECOMMENDVERSION;
158+ f = RPMTAG_RECOMMENDFLAGS;
159+ } else if (tag == RPMTAG_SUGGESTNAME) {
160+ t = "Suggests";
161+ evr = RPMTAG_SUGGESTVERSION;
162+ f = RPMTAG_SUGGESTFLAGS;
163 } else if (tag == RPMTAG_CONFLICTNAME) {
164 t = "Conflicts";
165 evr = RPMTAG_CONFLICTVERSION;
166diff --git a/lib/rpmtag.h b/lib/rpmtag.h
167index 64b03f1..b943229 100644
168--- a/lib/rpmtag.h
169+++ b/lib/rpmtag.h
170@@ -217,14 +217,14 @@ typedef enum rpmTag_e {
171 RPMTAG_PRETRANSPROG = 1153, /* s[] */
172 RPMTAG_POSTTRANSPROG = 1154, /* s[] */
173 RPMTAG_DISTTAG = 1155, /* s */
174- RPMTAG_SUGGESTSNAME = 1156, /* s[] extension (unimplemented) */
175-#define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME /* s[] (unimplemented) */
176- RPMTAG_SUGGESTSVERSION = 1157, /* s[] extension (unimplemented) */
177- RPMTAG_SUGGESTSFLAGS = 1158, /* i[] extension (unimplemented) */
178- RPMTAG_ENHANCESNAME = 1159, /* s[] extension placeholder (unimplemented) */
179-#define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME /* s[] (unimplemented) */
180- RPMTAG_ENHANCESVERSION = 1160, /* s[] extension placeholder (unimplemented) */
181- RPMTAG_ENHANCESFLAGS = 1161, /* i[] extension placeholder (unimplemented) */
182+ RPMTAG_OLDSUGGESTSNAME = 1156, /* s[] (unimplemented) */
183+#define RPMTAG_OLDSUGGESTS RPMTAG_OLDSUGGESTSNAME /* s[] (unimplemented) */
184+ RPMTAG_OLDSUGGESTSVERSION = 1157, /* s[] (unimplemented) */
185+ RPMTAG_OLDSUGGESTSFLAGS = 1158, /* i[] (unimplemented) */
186+ RPMTAG_OLDENHANCESNAME = 1159, /* s[] (unimplemented) */
187+#define RPMTAG_OLDENHANCES RPMTAG_OLDENHANCESNAME /* s[] (unimplemented) */
188+ RPMTAG_OLDENHANCESVERSION = 1160, /* s[] (unimplemented) */
189+ RPMTAG_OLDENHANCESFLAGS = 1161, /* i[] (unimplemented) */
190 RPMTAG_PRIORITY = 1162, /* i[] extension placeholder (unimplemented) */
191 RPMTAG_CVSID = 1163, /* s (unimplemented) */
192 #define RPMTAG_SVNID RPMTAG_CVSID /* s (unimplemented) */
193@@ -261,6 +261,7 @@ typedef enum rpmTag_e {
194 RPMTAG_BUILDOBSOLETES = 1194, /* internal (unimplemented) */
195 RPMTAG_DBINSTANCE = 1195, /* i extension */
196 RPMTAG_NVRA = 1196, /* s extension */
197+
198 /* tags 1997-4999 reserved */
199 RPMTAG_FILENAMES = 5000, /* s[] extension */
200 RPMTAG_FILEPROVIDE = 5001, /* s[] extension */
201@@ -307,6 +308,26 @@ typedef enum rpmTag_e {
202 RPMTAG_OBSOLETENEVRS = 5043, /* s[] extension */
203 RPMTAG_CONFLICTNEVRS = 5044, /* s[] extension */
204 RPMTAG_FILENLINKS = 5045, /* i[] extension */
205+ RPMTAG_RECOMMENDNAME = 5046, /* s[] */
206+#define RPMTAG_RECOMMENDS RPMTAG_RECOMMENDNAME /* s[] */
207+ RPMTAG_RECOMMENDVERSION = 5047, /* s[] */
208+ RPMTAG_RECOMMENDFLAGS = 5048, /* i[] */
209+ RPMTAG_SUGGESTNAME = 5049, /* s[] */
210+#define RPMTAG_SUGGESTS RPMTAG_SUGGESTNAME /* s[] */
211+ RPMTAG_SUGGESTVERSION = 5050, /* s[] extension */
212+ RPMTAG_SUGGESTFLAGS = 5051, /* i[] extension */
213+ RPMTAG_SUPPLEMENTNAME = 5052, /* s[] */
214+#define RPMTAG_SUPPLEMENTS RPMTAG_SUPPLEMENTNAME /* s[] */
215+ RPMTAG_SUPPLEMENTVERSION = 5053, /* s[] */
216+ RPMTAG_SUPPLEMENTFLAGS = 5054, /* i[] */
217+ RPMTAG_ENHANCENAME = 5055, /* s[] */
218+#define RPMTAG_ENHANCES RPMTAG_ENHANCENAME /* s[] */
219+ RPMTAG_ENHANCEVERSION = 5056, /* s[] */
220+ RPMTAG_ENHANCEFLAGS = 5057, /* i[] */
221+ RPMTAG_RECOMMENDNEVRS = 5058, /* s[] extension */
222+ RPMTAG_SUGGESTNEVRS = 5059, /* s[] extension */
223+ RPMTAG_SUPPLEMENTNEVRS = 5060, /* s[] extension */
224+ RPMTAG_ENHANCENEVRS = 5061, /* s[] extension */
225
226 RPMTAG_FIRSTFREE_TAG /*!< internal */
227 } rpmTag;
228diff --git a/lib/tagexts.c b/lib/tagexts.c
229index 29b2bae..e940310 100644
230--- a/lib/tagexts.c
231+++ b/lib/tagexts.c
232@@ -761,6 +761,26 @@ static int requirenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
233 return depnevrsTag(h, td, hgflags, RPMTAG_REQUIRENAME);
234 }
235
236+static int recommendnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
237+{
238+ return depnevrsTag(h, td, hgflags, RPMTAG_RECOMMENDNAME);
239+}
240+
241+static int suggestnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
242+{
243+ return depnevrsTag(h, td, hgflags, RPMTAG_SUGGESTNAME);
244+}
245+
246+static int supplementnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
247+{
248+ return depnevrsTag(h, td, hgflags, RPMTAG_SUPPLEMENTNAME);
249+}
250+
251+static int enhancenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
252+{
253+ return depnevrsTag(h, td, hgflags, RPMTAG_ENHANCENAME);
254+}
255+
256 static int providenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
257 {
258 return depnevrsTag(h, td, hgflags, RPMTAG_PROVIDENAME);
259@@ -823,6 +843,10 @@ static const struct headerTagFunc_s rpmHeaderTagExtensions[] = {
260 { RPMTAG_EPOCHNUM, epochnumTag },
261 { RPMTAG_INSTFILENAMES, instfilenamesTag },
262 { RPMTAG_REQUIRENEVRS, requirenevrsTag },
263+ { RPMTAG_RECOMMENDNEVRS, recommendnevrsTag},
264+ { RPMTAG_SUGGESTNEVRS, suggestnevrsTag},
265+ { RPMTAG_SUPPLEMENTNEVRS, supplementnevrsTag},
266+ { RPMTAG_ENHANCENEVRS, enhancenevrsTag},
267 { RPMTAG_PROVIDENEVRS, providenevrsTag },
268 { RPMTAG_OBSOLETENEVRS, obsoletenevrsTag },
269 { RPMTAG_CONFLICTNEVRS, conflictnevrsTag },
270diff --git a/rpmpopt.in b/rpmpopt.in
271index 805599e..036ab4e 100644
272--- a/rpmpopt.in
273+++ b/rpmpopt.in
274@@ -67,6 +67,19 @@ rpm alias --requires --qf \
275 --POPTdesc=$"list capabilities required by package(s)"
276 rpm alias -R --requires
277
278+rpm alias --recommends --qf \
279+ "[%|VERBOSE?{%{RECOMMENDFLAGS:deptype}: }:{}|%{RECOMMENDNEVRS}\n]" \
280+ --POPTdesc=$"list capabilities recommended by package(s)"
281+rpm alias --suggests --qf \
282+ "[%|VERBOSE?{%{SUGGESTFLAGS:deptype}: }:{}|%{SUGGESTNEVRS}\n]" \
283+ --POPTdesc=$"list capabilities suggested by package(s)"
284+rpm alias --supplements --qf \
285+ "[%|VERBOSE?{%{SUPPLEMENTFLAGS:deptype}: }:{}|%{SUPPLEMENTNEVRS}\n]" \
286+ --POPTdesc=$"list capabilities supplemented by package(s)"
287+rpm alias --enhances --qf \
288+ "[%|VERBOSE?{%{ENHANCEFLAGS:deptype}: }:{}|%{ENHANCENEVRS}\n]" \
289+ --POPTdesc=$"list capabilities enhanced by package(s)"
290+
291 rpm alias --info --qf '\
292 Name : %{NAME}\n\
293 %|EPOCH?{Epoch : %{EPOCH}\n}|\
294diff --git a/tests/data/SPECS/deptest.spec b/tests/data/SPECS/deptest.spec
295index cb4cbbd..7c47f6d 100644
296--- a/tests/data/SPECS/deptest.spec
297+++ b/tests/data/SPECS/deptest.spec
298@@ -10,6 +10,10 @@ BuildArch: noarch
299 %{?provs:Provides: %{provs}}
300 %{?cfls:Conflicts: %{cfls}}
301 %{?obs:Obsoletes: %{obs}}
302+%{?recs:Recommends: %{recs}}
303+%{?sugs:Suggests: %{sugs}}
304+%{?sups:Supplements: %{sups}}
305+%{?ens:Enhances: %{ens}}
306
307 %description
308 %{summary}
309diff --git a/tests/rpmbuild.at b/tests/rpmbuild.at
310index 6230903..c4c954c 100644
311--- a/tests/rpmbuild.at
312+++ b/tests/rpmbuild.at
313@@ -185,3 +185,25 @@ lrwxrwxrwx /opt/globtest/linkgood
314 ],
315 [])
316 AT_CLEANUP
317+
318+# ------------------------------
319+# Check if weak and reverse requires can be built
320+AT_SETUP([Weak and reverse requires])
321+AT_KEYWORDS([build])
322+AT_CHECK([
323+
324+runroot rpmbuild -bb --quiet \
325+ --define "pkg weakdeps" \
326+ --define "recs foo > 1.2.3" \
327+ --define "sugs bar >= 0.1.2" \
328+ --define "sups baz" \
329+ --define "ens zap = 3" \
330+ /data/SPECS/deptest.spec
331+
332+runroot rpm -qp --qf "[%{supplementname}\n]" /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
333+],
334+[0],
335+[baz
336+],
337+[ignore])
338+AT_CLEANUP
339diff --git a/tests/rpmgeneral.at b/tests/rpmgeneral.at
340index 13131e2..80cca63 100644
341--- a/tests/rpmgeneral.at
342+++ b/tests/rpmgeneral.at
343@@ -79,6 +79,11 @@ DISTTAG
344 DISTURL
345 DSAHEADER
346 E
347+ENHANCEFLAGS
348+ENHANCENAME
349+ENHANCENEVRS
350+ENHANCES
351+ENHANCEVERSION
352 EPOCH
353 EPOCHNUM
354 EVR
355@@ -199,6 +204,11 @@ PROVIDES
356 PROVIDEVERSION
357 PUBKEYS
358 R
359+RECOMMENDFLAGS
360+RECOMMENDNAME
361+RECOMMENDNEVRS
362+RECOMMENDS
363+RECOMMENDVERSION
364 RECONTEXTS
365 RELEASE
366 REMOVETID
367@@ -219,7 +229,17 @@ SOURCE
368 SOURCEPACKAGE
369 SOURCEPKGID
370 SOURCERPM
371+SUGGESTFLAGS
372+SUGGESTNAME
373+SUGGESTNEVRS
374+SUGGESTS
375+SUGGESTVERSION
376 SUMMARY
377+SUPPLEMENTFLAGS
378+SUPPLEMENTNAME
379+SUPPLEMENTNEVRS
380+SUPPLEMENTS
381+SUPPLEMENTVERSION
382 TRIGGERCONDS
383 TRIGGERFLAGS
384 TRIGGERINDEX