A new user interface for you! Read more...

File newweakdeps.diff of Package rpm

--- ./build/files.c.orig	2014-02-05 13:04:01.000000000 +0000
+++ ./build/files.c	2014-02-20 14:47:48.107802710 +0000
@@ -1642,6 +1642,7 @@ static rpmRC readFilesManifest(rpmSpec s
     char *fn, buf[BUFSIZ];
     FILE *fd = NULL;
     rpmRC rc = RPMRC_FAIL;
+    unsigned int nlines = 0;
 
     if (*path == '/') {
 	fn = rpmGetPath(path, NULL);
@@ -1657,14 +1658,19 @@ static rpmRC readFilesManifest(rpmSpec s
     }
 
     while (fgets(buf, sizeof(buf), fd)) {
-	handleComments(buf);
+	if (handleComments(buf))
+	    continue;
 	if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
 	    rpmlog(RPMLOG_ERR, _("line: %s\n"), buf);
 	    goto exit;
 	}
 	argvAdd(&(pkg->fileList), buf);
+	nlines++;
     }
 
+    if (nlines == 0)
+	rpmlog(RPMLOG_WARNING, _("Empty %%files file %s\n"), fn);
+
     if (ferror(fd))
 	rpmlog(RPMLOG_ERR, _("Error reading %%files file %s: %m\n"), fn);
     else
--- ./build/pack.c.orig	2014-02-05 13:04:01.000000000 +0000
+++ ./build/pack.c	2014-02-20 14:47:48.107802710 +0000
@@ -228,8 +228,10 @@ static rpmTagVal depevrtags[] = {
     RPMTAG_CONFLICTVERSION,
     RPMTAG_ORDERVERSION,
     RPMTAG_TRIGGERVERSION,
-    RPMTAG_SUGGESTSVERSION,
-    RPMTAG_ENHANCESVERSION,
+    RPMTAG_SUGGESTVERSION,
+    RPMTAG_ENHANCEVERSION,
+    RPMTAG_RECOMMENDVERSION,
+    RPMTAG_SUPPLEMENTVERSION,
     0
 };
 
--- ./build/parsePreamble.c.orig	2014-02-05 13:04:01.000000000 +0000
+++ ./build/parsePreamble.c	2014-02-20 14:47:48.108802710 +0000
@@ -785,6 +785,10 @@ static rpmRC handlePreambleTag(rpmSpec s
 	}
 	/* 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:
@@ -886,6 +890,10 @@ static struct PreambleRec_s const preamb
     {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")},
--- ./build/parseReqs.c.orig	2014-02-05 13:06:21.000000000 +0000
+++ ./build/parseReqs.c	2014-02-20 14:47:48.108802710 +0000
@@ -61,6 +61,18 @@ rpmRC parseRCPOT(rpmSpec spec, Package p
 	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;
--- ./build/parseSpec.c.orig	2014-02-05 13:04:01.000000000 +0000
+++ ./build/parseSpec.c	2014-02-20 14:47:48.108802710 +0000
@@ -102,11 +102,14 @@ static int matchTok(const char *token, c
     return rc;
 }
 
-void handleComments(char *s)
+int handleComments(char *s)
 {
     SKIPSPACE(s);
-    if (*s == '#')
+    if (*s == '#') {
 	*s = '\0';
+	return 1;
+    }
+    return 0;
 }
 
 /* Push a file to spec's file stack, return the newly pushed entry */
--- ./build/reqprov.c.orig	2014-02-05 13:04:01.000000000 +0000
+++ ./build/reqprov.c	2014-02-20 14:47:48.108802710 +0000
@@ -81,6 +81,30 @@ int addReqProv(Package pkg, rpmTagVal ta
 	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;
--- ./build/rpmbuild_internal.h.orig	2014-02-05 13:04:01.000000000 +0000
+++ ./build/rpmbuild_internal.h	2014-02-20 14:47:48.109802710 +0000
@@ -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;
--- ./build/rpmbuild_misc.h.orig	2014-02-05 13:04:01.000000000 +0000
+++ ./build/rpmbuild_misc.h	2014-02-20 14:47:48.109802710 +0000
@@ -12,9 +12,10 @@ extern "C" {
 /** \ingroup rpmbuild
  * Truncate comment lines.
  * @param s		skip white space, truncate line at '#'
+ * @return		1 on comment lines, 0 otherwise
  */
 RPM_GNUC_INTERNAL
-void handleComments(char * s);
+int handleComments(char * s);
 
 /** \ingroup rpmstring
  */
--- ./build/spec.c.orig	2014-02-05 13:04:01.000000000 +0000
+++ ./build/spec.c	2014-02-20 14:47:48.109802710 +0000
@@ -137,6 +137,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);
--- ./lib/rpmds.c.orig	2014-02-05 13:04:02.000000000 +0000
+++ ./lib/rpmds.c	2014-02-20 14:47:48.110802710 +0000
@@ -54,6 +54,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;
--- ./lib/rpmtag.h.orig	2014-02-05 13:04:02.000000000 +0000
+++ ./lib/rpmtag.h	2014-02-20 14:47:48.110802710 +0000
@@ -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;
--- ./lib/tagexts.c.orig	2012-11-07 12:55:24.000000000 +0000
+++ ./lib/tagexts.c	2014-02-20 14:47:48.110802710 +0000
@@ -761,6 +761,26 @@ static int requirenevrsTag(Header h, rpm
     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 rpmH
     { 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 },
--- ./python/Makefile.am.orig	2014-02-05 13:04:02.000000000 +0000
+++ ./python/Makefile.am	2014-02-20 14:47:48.110802710 +0000
@@ -6,16 +6,16 @@ AM_CPPFLAGS = -I$(top_builddir)/include/
 AM_CPPFLAGS += -I$(top_srcdir)/python
 AM_CPPFLAGS += -I@WITH_PYTHON_INCLUDE@
 
-pkgpyexec_LTLIBRARIES = _rpmmodule.la _rpmbmodule.la _rpmsmodule.la
+pkgpyexec_LTLIBRARIES = _rpm.la _rpmb.la _rpms.la
 pkgpyexec_DATA = rpm/__init__.py rpm/transaction.py
 
-_rpmmodule_la_LDFLAGS = -module -avoid-version -shared
-_rpmmodule_la_LIBADD = \
+_rpm_la_LDFLAGS = -module -avoid-version -shared
+_rpm_la_LIBADD = \
 	$(top_builddir)/lib/librpm.la \
 	$(top_builddir)/rpmio/librpmio.la \
 	@WITH_PYTHON_LIB@
 
-_rpmmodule_la_SOURCES = rpmmodule.c rpmsystem-py.h \
+_rpm_la_SOURCES = rpmmodule.c rpmsystem-py.h \
 	header-py.c header-py.h \
 	rpmds-py.c rpmds-py.h \
 	rpmfd-py.c rpmfd-py.h \
@@ -30,22 +30,22 @@ _rpmmodule_la_SOURCES = rpmmodule.c rpms
 	rpmte-py.c rpmte-py.h \
 	rpmts-py.c rpmts-py.h
 
-_rpmbmodule_la_LDFLAGS = -module -avoid-version -shared
-_rpmbmodule_la_LIBADD = \
+_rpmb_la_LDFLAGS = -module -avoid-version -shared
+_rpmb_la_LIBADD = \
 	$(top_builddir)/build/librpmbuild.la \
 	$(top_builddir)/lib/librpm.la \
 	$(top_builddir)/rpmio/librpmio.la \
 	@WITH_PYTHON_LIB@
 
-_rpmbmodule_la_SOURCES = rpmbmodule.c rpmsystem-py.h \
+_rpmb_la_SOURCES = rpmbmodule.c rpmsystem-py.h \
 	spec-py.c spec-py.h
 
-_rpmsmodule_la_LDFLAGS = -module -avoid-version -shared
-_rpmsmodule_la_LIBADD = \
+_rpms_la_LDFLAGS = -module -avoid-version -shared
+_rpms_la_LIBADD = \
         $(top_builddir)/sign/librpmsign.la \
         $(top_builddir)/lib/librpm.la \
         $(top_builddir)/rpmio/librpmio.la \
         @WITH_PYTHON_LIB@
 
-_rpmsmodule_la_SOURCES = rpmsmodule.c rpmsystem-py.h
+_rpms_la_SOURCES = rpmsmodule.c rpmsystem-py.h
 
--- ./python/rpmbmodule.c.orig	2012-11-07 12:55:24.000000000 +0000
+++ ./python/rpmbmodule.c	2014-02-20 14:47:48.110802710 +0000
@@ -66,8 +66,8 @@ static struct PyModuleDef moduledef = {
     NULL         /* m_free */
 };
 
-PyObject * PyInit__rpm(void);	/* XXX eliminate gcc warning */
-PyObject * PyInit__rpm(void)
+PyObject * PyInit__rpmb(void);	/* XXX eliminate gcc warning */
+PyObject * PyInit__rpmb(void)
 {
     PyObject *m;
 
--- ./python/rpmii-py.c.orig	2012-11-07 12:55:24.000000000 +0000
+++ ./python/rpmii-py.c	2014-02-20 14:47:48.110802710 +0000
@@ -88,7 +88,9 @@ static PyNumberMethods rpmii_as_number =
 	0, /* nb_add */
 	0, /* nb_subtract */
 	0, /* nb_multiply */
+#if PY_MAJOR_VERSION < 3
 	0, /* nb_divide */
+#endif
 	0, /* nb_remainder */
 	0, /* nb_divmod */
 	0, /* nb_power */
--- ./python/rpmmi-py.c.orig	2012-11-07 12:55:24.000000000 +0000
+++ ./python/rpmmi-py.c	2014-02-20 14:47:48.110802710 +0000
@@ -149,7 +149,9 @@ static PyNumberMethods rpmmi_as_number =
 	0, /* nb_add */
 	0, /* nb_subtract */
 	0, /* nb_multiply */
+#if PY_MAJOR_VERSION < 3
 	0, /* nb_divide */
+#endif
 	0, /* nb_remainder */
 	0, /* nb_divmod */
 	0, /* nb_power */
--- ./python/rpmsmodule.c.orig	2012-11-07 12:55:24.000000000 +0000
+++ ./python/rpmsmodule.c	2014-02-20 14:47:48.110802710 +0000
@@ -59,15 +59,15 @@ static struct PyModuleDef moduledef = {
     "_rpms",     /* m_name */
     rpms__doc__, /* m_doc */
     0,           /* m_size */
-    NULL,        /* m_methods */
+    modMethods,  /* m_methods */
     NULL,        /* m_reload */
     NULL,        /* m_traverse */
     NULL,        /* m_clear */
     NULL         /* m_free */
 };
 
-PyObject * PyInit__rpm(void);	/* XXX eliminate gcc warning */
-PyObject * PyInit__rpm(void)
+PyObject * PyInit__rpms(void);	/* XXX eliminate gcc warning */
+PyObject * PyInit__rpms(void)
 {
     PyObject *m;
 
--- ./python/rpmsystem-py.h.orig	2012-11-07 12:55:24.000000000 +0000
+++ ./python/rpmsystem-py.h	2014-02-20 14:47:48.110802710 +0000
@@ -48,6 +48,7 @@ typedef Py_ssize_t (*lenfunc)(PyObject *
 #define PyInt_FromLong PyLong_FromLong
 #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
 #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+#define PyInt_AsSsize_t PyLong_AsSsize_t
 #endif
 
 #endif	/* H_SYSTEM_PYTHON */
--- ./rpmio/digest.c.orig	2012-11-07 12:55:24.000000000 +0000
+++ ./rpmio/digest.c	2014-02-20 14:47:48.110802710 +0000
@@ -8,7 +8,7 @@
 
 #include "debug.h"
 
-#define DIGESTS_MAX 11
+#define DIGESTS_MAX 12
 struct rpmDigestBundle_s {
     int index_min;			/*!< Smallest index of active digest */
     int index_max;			/*!< Largest index of active digest */
--- ./rpmpopt.in.orig	2014-02-05 13:04:02.000000000 +0000
+++ ./rpmpopt.in	2014-02-20 14:47:48.110802710 +0000
@@ -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}|\
--- ./tests/data/SPECS/deptest.spec.orig	2014-02-05 13:04:02.000000000 +0000
+++ ./tests/data/SPECS/deptest.spec	2014-02-20 14:47:48.110802710 +0000
@@ -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}
--- ./tests/rpmbuild.at.orig	2014-02-05 13:04:02.000000000 +0000
+++ ./tests/rpmbuild.at	2014-02-20 14:47:48.110802710 +0000
@@ -185,3 +185,31 @@ 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 --recommends /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --suggests /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --supplements /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --enhances /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+],
+[0],
+[foo > 1.2.3
+bar >= 0.1.2
+baz
+zap = 3
+],
+[ignore])
+AT_CLEANUP
--- ./tests/rpmdb.at.orig	2014-02-05 13:04:02.000000000 +0000
+++ ./tests/rpmdb.at	2014-02-20 14:47:48.111802710 +0000
@@ -103,7 +103,7 @@ AT_CLEANUP
 
 # ------------------------------
 # reinstall a noarch package (with no files)
-AT_SETUP([rpm -U --replacepkgs])
+AT_SETUP([rpm -U --replacepkgs 1])
 AT_KEYWORDS([rpmdb install])
 
 AT_CHECK([
@@ -124,6 +124,28 @@ runroot rpm -i "${tpkg}" &&
 AT_CLEANUP
 
 # ------------------------------
+# reinstall a package with different file policies
+AT_SETUP([rpm -U --replacepkgs 2])
+AT_KEYWORDS([rpmdb install])
+
+AT_CHECK([
+AT_XFAIL_IF([test $RPM_XFAIL -ne 0])
+RPMDB_CLEAR
+RPMDB_INIT
+
+tpkg="/data/RPMS/hello-2.0-1.i686.rpm"
+
+runroot rpm -U --nodeps --ignorearch "${tpkg}" && 
+  runroot rpm -U --nodeps --ignorearch --nodocs --replacepkgs "${tpkg}" &&
+  runroot rpm -e hello
+test -d "${RPMTEST}"/usr/share/doc/hello-2.0
+],
+[1],
+[],
+[])
+
+AT_CLEANUP
+# ------------------------------
 # install a package into a local rpmdb
 # * Shall only work with relocation
 # * Use --ignorearch because we don't know the arch
--- ./tests/rpmgeneral.at.orig	2012-11-07 12:55:24.000000000 +0000
+++ ./tests/rpmgeneral.at	2014-02-20 14:47:48.111802710 +0000
@@ -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