Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-updates-src > by-pkgid > 2d27fe3dff73e21c1aac97aebe0dff40 > files > 22

rpm-4.8.1-10.5.mga1.src.rpm

From 2dfdacaf172840f09a3467e7c04aa8eb2c2d02da Mon Sep 17 00:00:00 2001
From: unknown author <cooker@mandrivalinux.org>
Date: Mon, 5 Jan 2009 13:29:57 +0000
Subject: [PATCH 12/36] weakdeps

---
 build/parsePreamble.c |   18 ++++++++++++++++++
 build/parseReqs.c     |    4 ++++
 build/reqprov.c       |   10 ++++++++++
 build/rpmfc.c         |   14 ++++++++++++++
 lib/rpmds.c           |    4 ++++
 lib/rpmds.h           |    3 ++-
 lib/rpmtag.h          |   16 ++++++++--------
 python/rpmmodule.c    |    2 +-
 rpmpopt.in            |   16 ++++++++++++++++
 9 files changed, 77 insertions(+), 10 deletions(-)

diff --git a/build/parsePreamble.c b/build/parsePreamble.c
index b5f1780..483ac99 100644
--- a/build/parsePreamble.c
+++ b/build/parsePreamble.c
@@ -124,6 +124,8 @@ static struct tokenBits_s const installScriptBits[] = {
     { "post",		RPMSENSE_SCRIPT_POST },
     { "rpmlib",		RPMSENSE_RPMLIB },
     { "verify",		RPMSENSE_SCRIPT_VERIFY },
+    { "hint",		RPMSENSE_MISSINGOK },
+    { "strong",		RPMSENSE_STRONG },
     { NULL, 0 }
 };
 
@@ -134,6 +136,8 @@ static const struct tokenBits_s const buildScriptBits[] = {
     { "build",		RPMSENSE_SCRIPT_BUILD },
     { "install",	RPMSENSE_SCRIPT_INSTALL },
     { "clean",		RPMSENSE_SCRIPT_CLEAN },
+    { "hint",		RPMSENSE_MISSINGOK },
+    { "strong",		RPMSENSE_STRONG },
     { NULL, 0 }
 };
 
@@ -649,6 +653,16 @@ static int handlePreambleTag(rpmSpec spec, Package pkg, rpmTag tag,
 	if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags)))
 	    return rc;
 	break;
+    case RPMTAG_SUGGESTSFLAGS:
+    case RPMTAG_ENHANCESFLAGS:
+	tagflags = RPMSENSE_MISSINGOK;
+	if (macro && (!strcmp(macro, "recommends")))
+	    tagflags |= RPMSENSE_STRONG;
+	if (macro && (!strcmp(macro, "supplements")))
+	    tagflags |= RPMSENSE_STRONG;
+	if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags)))
+	    return rc;
+	break;
     case RPMTAG_EXCLUDEARCH:
     case RPMTAG_EXCLUSIVEARCH:
     case RPMTAG_EXCLUDEOS:
@@ -748,6 +762,10 @@ static struct PreambleRec_s const preambleList[] = {
     {RPMTAG_DOCDIR,		0, 0, LEN_AND_STR("docdir")},
     {RPMTAG_DISTTAG,		0, 0, LEN_AND_STR("disttag")},
     {RPMTAG_BUGURL,		0, 0, LEN_AND_STR("bugurl")},
+    {RPMTAG_SUGGESTSFLAGS,	0, 0, LEN_AND_STR("recommends")},
+    {RPMTAG_SUGGESTSFLAGS,	0, 0, LEN_AND_STR("suggests")},
+    {RPMTAG_ENHANCESFLAGS,	0, 0, LEN_AND_STR("supplements")},
+    {RPMTAG_ENHANCESFLAGS,	0, 0, LEN_AND_STR("enhances")},
     {0, 0, 0, 0}
 };
 
diff --git a/build/parseReqs.c b/build/parseReqs.c
index d12aca3..6d91ea1 100644
--- a/build/parseReqs.c
+++ b/build/parseReqs.c
@@ -85,6 +85,10 @@ rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char *field, rpmTag tagN,
 	tagflags |= RPMSENSE_ANY;
 	h = spec->buildRestrictions;
 	break;
+    case RPMTAG_SUGGESTSFLAGS:
+    case RPMTAG_ENHANCESFLAGS:
+	h = pkg->header;
+	break;
     default:
     case RPMTAG_REQUIREFLAGS:
 	tagflags |= RPMSENSE_ANY;
diff --git a/build/reqprov.c b/build/reqprov.c
index 9c48b11..761bef4 100644
--- a/build/reqprov.c
+++ b/build/reqprov.c
@@ -75,6 +75,16 @@ int addReqProv(rpmSpec spec, Header h, rpmTag tagN,
 	flagtag = RPMTAG_TRIGGERFLAGS;
 	indextag = RPMTAG_TRIGGERINDEX;
 	extra = Flags & RPMSENSE_TRIGGER;
+    } else if (tagN == RPMTAG_SUGGESTSFLAGS) {
+	nametag = RPMTAG_SUGGESTSNAME;
+	versiontag = RPMTAG_SUGGESTSVERSION;
+	flagtag = RPMTAG_SUGGESTSFLAGS;
+	extra = Flags & _ALL_REQUIRES_MASK;
+    } else if (tagN == RPMTAG_ENHANCESFLAGS) {
+	nametag = RPMTAG_ENHANCESNAME;
+	versiontag = RPMTAG_ENHANCESVERSION;
+	flagtag = RPMTAG_ENHANCESFLAGS;
+	extra = Flags & _ALL_REQUIRES_MASK;
     } else {
 	nametag = RPMTAG_REQUIRENAME;
 	versiontag = RPMTAG_REQUIREVERSION;
diff --git a/build/rpmfc.c b/build/rpmfc.c
index ac19e82..e6fab51 100644
--- a/build/rpmfc.c
+++ b/build/rpmfc.c
@@ -1405,6 +1405,12 @@ static struct DepMsg_s depMsgs[] = {
   { "Obsoletes",	{ "%{?__find_obsoletes}", NULL, NULL, NULL },
 	RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS,
 	0, -1 },
+  { "Enhances",		{ "%{?__find_enhances}", NULL, NULL, NULL },
+	RPMTAG_ENHANCESNAME, RPMTAG_ENHANCESVERSION, RPMTAG_ENHANCESFLAGS,
+	RPMSENSE_STRONG, RPMSENSE_STRONG },
+  { "Supplements",	{ "%{?__find_supplements}", NULL, NULL, NULL },
+	RPMTAG_ENHANCESNAME, RPMTAG_ENHANCESVERSION, RPMTAG_ENHANCESFLAGS,
+	RPMSENSE_STRONG, 0 },
   { NULL,		{ NULL, NULL, NULL, NULL },	0, 0, 0, 0, 0 }
 };
 
@@ -1490,6 +1496,14 @@ static int rpmfcGenerateDependsHelper(const rpmSpec spec, Package pkg, rpmfi fi)
 	    failnonzero = 0;
 	    tagflags = RPMSENSE_FIND_REQUIRES;
 	    break;
+ 	case RPMTAG_ENHANCESFLAGS:
+ 	    if (!pkg->autoProv)
+ 		continue;
+ 	    failnonzero = 0;
+ 	    tagflags = RPMSENSE_FIND_REQUIRES | RPMSENSE_MISSINGOK;
+ 	    if (strcmp(dm->msg, "Supplements") == 0)
+ 		tagflags |= RPMSENSE_STRONG;
+ 	    break;
 	default:
 	    continue;
 	    break;
diff --git a/lib/rpmds.c b/lib/rpmds.c
index 3f92ab8..6db3163 100644
--- a/lib/rpmds.c
+++ b/lib/rpmds.c
@@ -66,6 +66,10 @@ static int dsType(rpmTag tag,
 	t = "Trigger";
 	evr = RPMTAG_TRIGGERVERSION;
 	f = RPMTAG_TRIGGERFLAGS;
+    } else if (tag == RPMTAG_ENHANCESNAME) {
+ 	t = "Enhances";
+ 	evr = RPMTAG_ENHANCESVERSION;
+ 	f = RPMTAG_ENHANCESFLAGS;
     } else {
 	rc = 1;
     } 
diff --git a/lib/rpmds.h b/lib/rpmds.h
index e8b2a33..7097107 100644
--- a/lib/rpmds.h
+++ b/lib/rpmds.h
@@ -55,7 +55,7 @@ typedef	enum rpmsenseFlags_e {
     RPMSENSE_RPMLIB = (1 << 24),	/*!< rpmlib(feature) dependency. */
     RPMSENSE_TRIGGERPREIN = (1 << 25),	/*!< %triggerprein dependency. */
     RPMSENSE_KEYRING	= (1 << 26),
-    RPMSENSE_PATCHES	= (1 << 27),
+    RPMSENSE_STRONG	= (1 << 27),
     RPMSENSE_CONFIG	= (1 << 28)
 } rpmsenseFlags;
 
@@ -73,6 +73,7 @@ typedef	enum rpmsenseFlags_e {
     RPMSENSE_SCRIPT_POSTUN | \
     RPMSENSE_SCRIPT_VERIFY | \
     RPMSENSE_FIND_REQUIRES | \
+    RPMSENSE_STRONG | \
     RPMSENSE_SCRIPT_PREP | \
     RPMSENSE_SCRIPT_BUILD | \
     RPMSENSE_SCRIPT_INSTALL | \
diff --git a/lib/rpmtag.h b/lib/rpmtag.h
index eb3b1ad..e94bdcb 100644
--- a/lib/rpmtag.h
+++ b/lib/rpmtag.h
@@ -228,14 +228,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_SUGGESTSNAME		= 1156,	/* s[] extension */
+#define	RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME	/* s[] */
+    RPMTAG_SUGGESTSVERSION	= 1157,	/* s[] extension */
+    RPMTAG_SUGGESTSFLAGS	= 1158,	/* i[] extension */
+    RPMTAG_ENHANCESNAME		= 1159,	/* s[] extension */
+#define	RPMTAG_ENHANCES RPMTAG_ENHANCESNAME	/* s[] */
+    RPMTAG_ENHANCESVERSION	= 1160,	/* s[] extension */
+    RPMTAG_ENHANCESFLAGS	= 1161,	/* i[] extension */
     RPMTAG_PRIORITY		= 1162, /* i[] extension placeholder (unimplemented) */
     RPMTAG_CVSID		= 1163, /* s (unimplemented) */
 #define	RPMTAG_SVNID	RPMTAG_CVSID	/* s (unimplemented) */
diff --git a/python/rpmmodule.c b/python/rpmmodule.c
index 2bb087a..9abdd00 100644
--- a/python/rpmmodule.c
+++ b/python/rpmmodule.c
@@ -373,7 +373,7 @@ static int initModule(PyObject *m)
     REGISTER_ENUM(RPMSENSE_RPMLIB);
     REGISTER_ENUM(RPMSENSE_TRIGGERPREIN);
     REGISTER_ENUM(RPMSENSE_KEYRING);
-    REGISTER_ENUM(RPMSENSE_PATCHES);
+    REGISTER_ENUM(RPMSENSE_STRONG);
     REGISTER_ENUM(RPMSENSE_CONFIG);
 
     REGISTER_ENUM(RPMTRANS_FLAG_TEST);
diff --git a/rpmpopt.in b/rpmpopt.in
index 1d8816a..de930cb 100644
--- a/rpmpopt.in
+++ b/rpmpopt.in
@@ -65,6 +65,22 @@ rpm	alias --requires	--qf \
 	--POPTdesc=$"list capabilities required by package(s)"
 rpm	alias -R --requires
 
+rpm	alias --suggests	--qf \
+  "[%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n]" \
+	--POPTdesc=$"list capabilities this package suggests"
+
+rpm	alias --recommends	--qf \
+  "[%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n]" \
+	--POPTdesc=$"list capabilities this package recommends"
+
+rpm	alias --enhances	--qf \
+  "[%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n]" \
+	--POPTdesc=$"list capabilities this package enhances"
+
+rpm	alias --supplements	--qf \
+  "[%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n]" \
+	--POPTdesc=$"list capabilities this package supplements"
+
 rpm	alias --info --qf 'Name        : %-27{NAME}  Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
 Version     : %-27{VERSION}       Vendor: %{VENDOR}\n\
 Release     : %-27{RELEASE}   Build Date: %{BUILDTIME:date}\n\
-- 
1.6.4.4