| |
| 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 |