aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/rpm/rpm-4.11.2/support-suggests-tag.patch
blob: 3da608573aae76d0698032aeef035fe732d0ad3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
Upstream-Status: Pending

Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Ronan Le Martret <ronan.lemartret@open.eurogiciel.org>

diff --git a/build/pack.c b/build/pack.c
index b6b2bea..5c3d8df 100644
--- a/build/pack.c
+++ b/build/pack.c
@@ -273,8 +273,10 @@ static rpmTagVal depevrtags[] = {
     RPMTAG_CONFLICTVERSION,
     RPMTAG_ORDERVERSION,
     RPMTAG_TRIGGERVERSION,
-    RPMTAG_SUGGESTSVERSION,
-    RPMTAG_ENHANCESVERSION,
+    RPMTAG_SUGGESTVERSION,
+    RPMTAG_ENHANCEVERSION,
+    RPMTAG_RECOMMENDVERSION,
+    RPMTAG_SUPPLEMENTVERSION,
     0
 };
 
diff --git a/build/parsePreamble.c b/build/parsePreamble.c
index 5772bef..cbbbee3 100644
--- a/build/parsePreamble.c
+++ b/build/parsePreamble.c
@@ -821,6 +821,10 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
 	}
 	/* fallthrough */
     case RPMTAG_PREREQ:
+    case RPMTAG_RECOMMENDFLAGS:
+    case RPMTAG_SUGGESTFLAGS:
+    case RPMTAG_SUPPLEMENTFLAGS:
+    case RPMTAG_ENHANCEFLAGS:
     case RPMTAG_CONFLICTFLAGS:
     case RPMTAG_OBSOLETEFLAGS:
     case RPMTAG_PROVIDEFLAGS:
@@ -922,6 +926,10 @@ static struct PreambleRec_s const preambleList[] = {
     {RPMTAG_ICON,		0, 0, LEN_AND_STR("icon")},
     {RPMTAG_PROVIDEFLAGS,	0, 0, LEN_AND_STR("provides")},
     {RPMTAG_REQUIREFLAGS,	2, 0, LEN_AND_STR("requires")},
+    {RPMTAG_RECOMMENDFLAGS,	0, 0, LEN_AND_STR("recommends")},
+    {RPMTAG_SUGGESTFLAGS,	0, 0, LEN_AND_STR("suggests")},
+    {RPMTAG_SUPPLEMENTFLAGS,	0, 0, LEN_AND_STR("supplements")},
+    {RPMTAG_ENHANCEFLAGS,	0, 0, LEN_AND_STR("enhances")},
     {RPMTAG_PREREQ,		2, 1, LEN_AND_STR("prereq")},
     {RPMTAG_CONFLICTFLAGS,	0, 0, LEN_AND_STR("conflicts")},
     {RPMTAG_OBSOLETEFLAGS,	0, 0, LEN_AND_STR("obsoletes")},
diff --git a/build/parseReqs.c b/build/parseReqs.c
index ba080a1..1427111 100644
--- a/build/parseReqs.c
+++ b/build/parseReqs.c
@@ -61,6 +61,18 @@ rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char *field, rpmTagVal tagN,
 	nametag = RPMTAG_REQUIRENAME;
 	tagflags |= RPMSENSE_ANY;
 	break;
+    case RPMTAG_RECOMMENDFLAGS:
+	nametag = RPMTAG_RECOMMENDNAME;
+	break;
+    case RPMTAG_SUGGESTFLAGS:
+	nametag = RPMTAG_SUGGESTNAME;
+	break;
+    case RPMTAG_SUPPLEMENTFLAGS:
+	nametag = RPMTAG_SUPPLEMENTNAME;
+	break;
+    case RPMTAG_ENHANCEFLAGS:
+	nametag = RPMTAG_ENHANCENAME;
+	break;
     case RPMTAG_PROVIDEFLAGS:
 	nametag = RPMTAG_PROVIDENAME;
 	break;
diff --git a/build/reqprov.c b/build/reqprov.c
index a368f42..c270af6 100644
--- a/build/reqprov.c
+++ b/build/reqprov.c
@@ -81,6 +81,30 @@ int addReqProv(Package pkg, rpmTagVal tagN,
 	extra = Flags & RPMSENSE_TRIGGER;
 	dsp = &pkg->triggers;
 	break;
+    case RPMTAG_RECOMMENDNAME:
+	versiontag = RPMTAG_RECOMMENDVERSION;
+	flagtag = RPMTAG_RECOMMENDFLAGS;
+	extra = Flags & _ALL_REQUIRES_MASK;
+	dsp = &pkg->recommends;
+	break;
+    case RPMTAG_SUGGESTNAME:
+	versiontag = RPMTAG_SUGGESTVERSION;
+	flagtag = RPMTAG_SUGGESTFLAGS;
+	extra = Flags & _ALL_REQUIRES_MASK;
+	dsp = &pkg->suggests;
+	break;
+    case RPMTAG_SUPPLEMENTNAME:
+	versiontag = RPMTAG_SUPPLEMENTVERSION;
+	flagtag = RPMTAG_SUPPLEMENTFLAGS;
+	extra = Flags & _ALL_REQUIRES_MASK;
+	dsp = &pkg->supplements;
+	break;
+    case RPMTAG_ENHANCENAME:
+	versiontag = RPMTAG_ENHANCEVERSION;
+	flagtag = RPMTAG_ENHANCEFLAGS;
+	extra = Flags & _ALL_REQUIRES_MASK;
+	dsp = &pkg->enhances;
+	break;
     case RPMTAG_REQUIRENAME:
     default:
 	tagN = RPMTAG_REQUIRENAME;
diff --git a/build/rpmbuild_internal.h b/build/rpmbuild_internal.h
index a9e4c7c..0a1977f 100644
--- a/build/rpmbuild_internal.h
+++ b/build/rpmbuild_internal.h
@@ -93,6 +93,10 @@ struct Package_s {
     rpmds ds;			/*!< Requires: N = EVR */
     rpmds requires;
     rpmds provides;
+    rpmds recommends;
+    rpmds suggests;
+    rpmds supplements;
+    rpmds enhances;
     rpmds conflicts;
     rpmds obsoletes;
     rpmds triggers;
diff --git a/build/spec.c b/build/spec.c
index 703ec78..7ae2120 100644
--- a/build/spec.c
+++ b/build/spec.c
@@ -139,6 +139,11 @@ static Package freePackage(Package pkg)
     pkg->ds = rpmdsFree(pkg->ds);
     pkg->requires = rpmdsFree(pkg->requires);
     pkg->provides = rpmdsFree(pkg->provides);
+    pkg->recommends = rpmdsFree(pkg->recommends);
+    pkg->suggests = rpmdsFree(pkg->suggests);
+    pkg->supplements = rpmdsFree(pkg->supplements);
+    pkg->enhances = rpmdsFree(pkg->enhances);
+
     pkg->conflicts = rpmdsFree(pkg->conflicts);
     pkg->obsoletes = rpmdsFree(pkg->obsoletes);
     pkg->triggers = rpmdsFree(pkg->triggers);
diff --git a/lib/rpmds.c b/lib/rpmds.c
index 7a51167..1e5dda0 100644
--- a/lib/rpmds.c
+++ b/lib/rpmds.c
@@ -52,6 +52,22 @@ static int dsType(rpmTagVal tag,
 	t = "Requires";
 	evr = RPMTAG_REQUIREVERSION;
 	f = RPMTAG_REQUIREFLAGS;
+    } else if (tag == RPMTAG_SUPPLEMENTNAME) {
+	t = "Supplements";
+	evr = RPMTAG_SUPPLEMENTVERSION;
+	f = RPMTAG_SUPPLEMENTFLAGS;
+    } else if (tag == RPMTAG_ENHANCENAME) {
+	t = "Enhances";
+	evr = RPMTAG_ENHANCEVERSION;
+	f = RPMTAG_ENHANCEFLAGS;
+    } else if (tag == RPMTAG_RECOMMENDNAME) {
+	t = "Recommends";
+	evr = RPMTAG_RECOMMENDVERSION;
+	f = RPMTAG_RECOMMENDFLAGS;
+    } else if (tag == RPMTAG_SUGGESTNAME) {
+	t = "Suggests";
+	evr = RPMTAG_SUGGESTVERSION;
+	f = RPMTAG_SUGGESTFLAGS;
     } else if (tag == RPMTAG_CONFLICTNAME) {
 	t = "Conflicts";
 	evr = RPMTAG_CONFLICTVERSION;
diff --git a/lib/rpmtag.h b/lib/rpmtag.h
index 64b03f1..b943229 100644
--- a/lib/rpmtag.h
+++ b/lib/rpmtag.h
@@ -217,14 +217,14 @@ typedef enum rpmTag_e {
     RPMTAG_PRETRANSPROG		= 1153,	/* s[] */
     RPMTAG_POSTTRANSPROG	= 1154,	/* s[] */
     RPMTAG_DISTTAG		= 1155,	/* s */
-    RPMTAG_SUGGESTSNAME		= 1156,	/* s[] extension (unimplemented) */
-#define	RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME	/* s[] (unimplemented) */
-    RPMTAG_SUGGESTSVERSION	= 1157,	/* s[] extension (unimplemented) */
-    RPMTAG_SUGGESTSFLAGS	= 1158,	/* i[] extension (unimplemented) */
-    RPMTAG_ENHANCESNAME		= 1159,	/* s[] extension placeholder (unimplemented) */
-#define	RPMTAG_ENHANCES RPMTAG_ENHANCESNAME	/* s[] (unimplemented) */
-    RPMTAG_ENHANCESVERSION	= 1160,	/* s[] extension placeholder (unimplemented) */
-    RPMTAG_ENHANCESFLAGS	= 1161,	/* i[] extension placeholder (unimplemented) */
+    RPMTAG_OLDSUGGESTSNAME	= 1156,	/* s[] (unimplemented) */
+#define	RPMTAG_OLDSUGGESTS RPMTAG_OLDSUGGESTSNAME /* s[] (unimplemented) */
+    RPMTAG_OLDSUGGESTSVERSION	= 1157,	/* s[] (unimplemented) */
+    RPMTAG_OLDSUGGESTSFLAGS	= 1158,	/* i[] (unimplemented) */
+    RPMTAG_OLDENHANCESNAME		= 1159,	/* s[] (unimplemented) */
+#define	RPMTAG_OLDENHANCES RPMTAG_OLDENHANCESNAME /* s[] (unimplemented) */
+    RPMTAG_OLDENHANCESVERSION	= 1160,	/* s[] (unimplemented) */
+    RPMTAG_OLDENHANCESFLAGS	= 1161,	/* i[] (unimplemented) */
     RPMTAG_PRIORITY		= 1162, /* i[] extension placeholder (unimplemented) */
     RPMTAG_CVSID		= 1163, /* s (unimplemented) */
 #define	RPMTAG_SVNID	RPMTAG_CVSID	/* s (unimplemented) */
@@ -261,6 +261,7 @@ typedef enum rpmTag_e {
     RPMTAG_BUILDOBSOLETES	= 1194, /* internal (unimplemented) */
     RPMTAG_DBINSTANCE		= 1195, /* i extension */
     RPMTAG_NVRA			= 1196, /* s extension */
+
     /* tags 1997-4999 reserved */
     RPMTAG_FILENAMES		= 5000, /* s[] extension */
     RPMTAG_FILEPROVIDE		= 5001, /* s[] extension */
@@ -307,6 +308,26 @@ typedef enum rpmTag_e {
     RPMTAG_OBSOLETENEVRS	= 5043, /* s[] extension */
     RPMTAG_CONFLICTNEVRS	= 5044, /* s[] extension */
     RPMTAG_FILENLINKS		= 5045,	/* i[] extension */
+    RPMTAG_RECOMMENDNAME	= 5046,	/* s[] */
+#define	RPMTAG_RECOMMENDS RPMTAG_RECOMMENDNAME	/* s[] */
+    RPMTAG_RECOMMENDVERSION	= 5047,	/* s[] */
+    RPMTAG_RECOMMENDFLAGS	= 5048,	/* i[] */
+    RPMTAG_SUGGESTNAME		= 5049,	/* s[] */
+#define	RPMTAG_SUGGESTS RPMTAG_SUGGESTNAME	/* s[] */
+    RPMTAG_SUGGESTVERSION	= 5050,	/* s[] extension */
+    RPMTAG_SUGGESTFLAGS		= 5051,	/* i[] extension */
+    RPMTAG_SUPPLEMENTNAME	= 5052,	/* s[] */
+#define	RPMTAG_SUPPLEMENTS RPMTAG_SUPPLEMENTNAME /* s[] */
+    RPMTAG_SUPPLEMENTVERSION	= 5053,	/* s[] */
+    RPMTAG_SUPPLEMENTFLAGS	= 5054,	/* i[] */
+    RPMTAG_ENHANCENAME		= 5055,	/* s[] */
+#define	RPMTAG_ENHANCES RPMTAG_ENHANCENAME	/* s[] */
+    RPMTAG_ENHANCEVERSION	= 5056,	/* s[] */
+    RPMTAG_ENHANCEFLAGS		= 5057,	/* i[] */
+    RPMTAG_RECOMMENDNEVRS	= 5058, /* s[] extension */
+    RPMTAG_SUGGESTNEVRS		= 5059, /* s[] extension */
+    RPMTAG_SUPPLEMENTNEVRS	= 5060, /* s[] extension */
+    RPMTAG_ENHANCENEVRS		= 5061, /* s[] extension */
 
     RPMTAG_FIRSTFREE_TAG	/*!< internal */
 } rpmTag;
diff --git a/lib/tagexts.c b/lib/tagexts.c
index 29b2bae..e940310 100644
--- a/lib/tagexts.c
+++ b/lib/tagexts.c
@@ -761,6 +761,26 @@ static int requirenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
     return depnevrsTag(h, td, hgflags, RPMTAG_REQUIRENAME);
 }
 
+static int recommendnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+    return depnevrsTag(h, td, hgflags, RPMTAG_RECOMMENDNAME);
+}
+
+static int suggestnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+    return depnevrsTag(h, td, hgflags, RPMTAG_SUGGESTNAME);
+}
+
+static int supplementnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+    return depnevrsTag(h, td, hgflags, RPMTAG_SUPPLEMENTNAME);
+}
+
+static int enhancenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+    return depnevrsTag(h, td, hgflags, RPMTAG_ENHANCENAME);
+}
+
 static int providenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
 {
     return depnevrsTag(h, td, hgflags, RPMTAG_PROVIDENAME);
@@ -823,6 +843,10 @@ static const struct headerTagFunc_s rpmHeaderTagExtensions[] = {
     { RPMTAG_EPOCHNUM,		epochnumTag },
     { RPMTAG_INSTFILENAMES,	instfilenamesTag },
     { RPMTAG_REQUIRENEVRS,	requirenevrsTag },
+    { RPMTAG_RECOMMENDNEVRS,	recommendnevrsTag},
+    { RPMTAG_SUGGESTNEVRS,	suggestnevrsTag},
+    { RPMTAG_SUPPLEMENTNEVRS,	supplementnevrsTag},
+    { RPMTAG_ENHANCENEVRS,	enhancenevrsTag},
     { RPMTAG_PROVIDENEVRS,	providenevrsTag },
     { RPMTAG_OBSOLETENEVRS,	obsoletenevrsTag },
     { RPMTAG_CONFLICTNEVRS,	conflictnevrsTag },
diff --git a/rpmpopt.in b/rpmpopt.in
index 805599e..036ab4e 100644
--- a/rpmpopt.in
+++ b/rpmpopt.in
@@ -67,6 +67,19 @@ rpm	alias --requires	--qf \
 	--POPTdesc=$"list capabilities required by package(s)"
 rpm	alias -R --requires
 
+rpm	alias --recommends	--qf \
+  "[%|VERBOSE?{%{RECOMMENDFLAGS:deptype}: }:{}|%{RECOMMENDNEVRS}\n]" \
+	--POPTdesc=$"list capabilities recommended by package(s)"
+rpm	alias --suggests	--qf \
+  "[%|VERBOSE?{%{SUGGESTFLAGS:deptype}: }:{}|%{SUGGESTNEVRS}\n]" \
+	--POPTdesc=$"list capabilities suggested by package(s)"
+rpm	alias --supplements	--qf \
+  "[%|VERBOSE?{%{SUPPLEMENTFLAGS:deptype}: }:{}|%{SUPPLEMENTNEVRS}\n]" \
+	--POPTdesc=$"list capabilities supplemented by package(s)"
+rpm	alias --enhances	--qf \
+  "[%|VERBOSE?{%{ENHANCEFLAGS:deptype}: }:{}|%{ENHANCENEVRS}\n]" \
+	--POPTdesc=$"list capabilities enhanced by package(s)"
+
 rpm	alias --info --qf '\
 Name        : %{NAME}\n\
 %|EPOCH?{Epoch       : %{EPOCH}\n}|\
diff --git a/tests/data/SPECS/deptest.spec b/tests/data/SPECS/deptest.spec
index cb4cbbd..7c47f6d 100644
--- a/tests/data/SPECS/deptest.spec
+++ b/tests/data/SPECS/deptest.spec
@@ -10,6 +10,10 @@ BuildArch:	noarch
 %{?provs:Provides: %{provs}}
 %{?cfls:Conflicts: %{cfls}}
 %{?obs:Obsoletes: %{obs}}
+%{?recs:Recommends: %{recs}}
+%{?sugs:Suggests: %{sugs}}
+%{?sups:Supplements: %{sups}}
+%{?ens:Enhances: %{ens}}
 
 %description
 %{summary}
diff --git a/tests/rpmbuild.at b/tests/rpmbuild.at
index 6230903..c4c954c 100644
--- a/tests/rpmbuild.at
+++ b/tests/rpmbuild.at
@@ -185,3 +185,25 @@ lrwxrwxrwx /opt/globtest/linkgood
 ],
 [])
 AT_CLEANUP
+
+# ------------------------------
+# Check if weak and reverse requires can be built
+AT_SETUP([Weak and reverse requires])
+AT_KEYWORDS([build])
+AT_CHECK([
+
+runroot rpmbuild -bb --quiet \
+	--define "pkg weakdeps" \
+	--define "recs foo > 1.2.3" \
+	--define "sugs bar >= 0.1.2" \
+	--define "sups baz" \
+	--define "ens zap = 3" \
+	  /data/SPECS/deptest.spec
+
+runroot rpm -qp --qf "[%{supplementname}\n]" /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+],
+[0],
+[baz
+],
+[ignore])
+AT_CLEANUP
diff --git a/tests/rpmgeneral.at b/tests/rpmgeneral.at
index 13131e2..80cca63 100644
--- a/tests/rpmgeneral.at
+++ b/tests/rpmgeneral.at
@@ -79,6 +79,11 @@ DISTTAG
 DISTURL
 DSAHEADER
 E
+ENHANCEFLAGS
+ENHANCENAME
+ENHANCENEVRS
+ENHANCES
+ENHANCEVERSION
 EPOCH
 EPOCHNUM
 EVR
@@ -199,6 +204,11 @@ PROVIDES
 PROVIDEVERSION
 PUBKEYS
 R
+RECOMMENDFLAGS
+RECOMMENDNAME
+RECOMMENDNEVRS
+RECOMMENDS
+RECOMMENDVERSION
 RECONTEXTS
 RELEASE
 REMOVETID
@@ -219,7 +229,17 @@ SOURCE
 SOURCEPACKAGE
 SOURCEPKGID
 SOURCERPM
+SUGGESTFLAGS
+SUGGESTNAME
+SUGGESTNEVRS
+SUGGESTS
+SUGGESTVERSION
 SUMMARY
+SUPPLEMENTFLAGS
+SUPPLEMENTNAME
+SUPPLEMENTNEVRS
+SUPPLEMENTS
+SUPPLEMENTVERSION
 TRIGGERCONDS
 TRIGGERFLAGS
 TRIGGERINDEX