=== modified file 'smart/backends/rpm/header.py' --- smart/backends/rpm/header.py 2010-06-23 15:30:29 +0000 +++ smart/backends/rpm/header.py 2010-10-10 21:55:26 +0000 @@ -286,7 +286,9 @@ reqdict = {} for i in range(len(n)): ni = n[i] - if ni[:7] not in ("rpmlib(", "config("): + hint = (f[i]&1 << 19) # RPMSENSE_MISSINGOK + if ni[:7] not in ("rpmlib(", "config(") and (not hint + or sysconf.get("install-suggests", False)): vi = v[i] or None if vi and vi[:2] == "0:": vi = vi[2:] @@ -303,7 +305,38 @@ intern(ni), r, vi)] = True reqargs = reqdict.keys() else: - reqargs = None + reqargs = [] + + n = h[1156] # RPMTAG_SUGGESTSNAME + if n: + f = h[1158] # RPMTAG_SUGGESTSFLAGS + v = h[1157] # RPMTAG_SUGGESTSVERSION + if f == None: + f = [0] + elif type(f) != list: + f = [f] + reqdict = {} + for i in range(len(n)): + ni = n[i] + strong = (f[i]&1 << 27) # RPMSENSE_STRONG + if ni[:7] not in ("rpmlib(", "config(") and ( + (strong and sysconf.get("install-recommends", True) or + (not strong and sysconf.get("install-suggests", False)))): + vi = v[i] or None + if vi and vi[:2] == "0:": + vi = vi[2:] + r = CM.get(f[i]&CF) + if not ((r is None or "=" in r) and + (Prv, ni, vi) in prvdict or + system_provides.match(ni, r, vi)): + # RPMSENSE_PREREQ | + # RPMSENSE_SCRIPT_PRE | + # RPMSENSE_SCRIPT_PREUN | + # RPMSENSE_SCRIPT_POST | + # RPMSENSE_SCRIPT_POSTUN == 7744 + reqdict[(f[i]&7744 and PreReq or Req, + intern(ni), r, vi)] = True + reqargs.extend(reqdict.keys()) n = h[1054] # RPMTAG_CONFLICTNAME if n: === modified file 'smart/backends/rpm/metadata.py' --- smart/backends/rpm/metadata.py 2010-07-01 16:30:23 +0000 +++ smart/backends/rpm/metadata.py 2010-10-10 21:44:51 +0000 @@ -143,6 +143,8 @@ LICENSE = nstag(NS_RPM, "license") ENTRY = nstag(NS_RPM, "entry") REQUIRES = nstag(NS_RPM, "requires") + SUGGESTS = nstag(NS_RPM, "suggests") + RECOMMENDS = nstag(NS_RPM, "recommends") PROVIDES = nstag(NS_RPM, "provides") CONFLICTS = nstag(NS_RPM, "conflicts") OBSOLETES = nstag(NS_RPM, "obsoletes") @@ -279,7 +281,18 @@ if elem.get("pre") == "1": reqdict[(RPMPreRequires, ename, erelation, eversion)] = True - else: + elif (not elem.get("hint") == "1" + or sysconf.get("install-suggests", False)): + reqdict[(RPMRequires, + ename, erelation, eversion)] = True + + elif lasttag == RECOMMENDS: + if sysconf.get("install-recommends", True): + reqdict[(RPMRequires, + ename, erelation, eversion)] = True + + elif lasttag == SUGGESTS: + if sysconf.get("install-suggests", False): reqdict[(RPMRequires, ename, erelation, eversion)] = True