--- rpm-5.4.9/lib/rpmfc.c.drop_deps~ 2012-05-07 22:41:45.000000000 +0200 +++ rpm-5.4.9/lib/rpmfc.c 2012-05-15 01:58:00.071056896 +0200 @@ -1696,6 +1696,65 @@ static int rpmfcGenerateScriptletDeps(co return rc; } +static void removeSillyDeps(Header h) { + HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); + int xx, i, rnum, removed = 0; + const char **deps = NULL; + const char **versions = NULL; + evrFlags *flags = NULL; + + he->tag = RPMTAG_REQUIRENAME; + xx = headerGet(h, he, 0); + deps = he->p.argv; + rnum = he->c; + + he->tag = RPMTAG_REQUIREVERSION; + xx = headerGet(h, he, 0); + versions = he->p.argv; + + he->tag = RPMTAG_REQUIREFLAGS; + xx = headerGet(h, he, 0); + flags = (evrFlags*)he->p.ui32p; + + for (i = 0; i < rnum-removed; i++) { + if (removed) { + deps[i] = deps[i+removed]; + versions[i] = versions[i+removed]; + flags[i] = flags[i+removed]; + } + rpmds req = rpmdsSingle(RPMTAG_REQUIRENAME, deps[i], versions[i], flags[i]); + rpmds prov = rpmdsNew(h, (*deps[i] == '/' && !*versions[i]) ? RPMTAG_BASENAMES : RPMTAG_PROVIDENAME, 0); + if (rpmdsMatch(req, prov)) { + if (flags[i] & RPMSENSE_SCRIPT_PRE) + rpmlog(RPMLOG_ERR, "Requires(pre): on dependency provided by self: %s\n", rpmdsDNEVR(req)); + else { + rpmlog(RPMLOG_NOTICE, "Removing dependency on self: %s\n", rpmdsDNEVR(req)); + removed++; + i--; + } + } + req = rpmdsFree(req); + prov = rpmdsFree(prov); + } + if (removed) { + he->tag = RPMTAG_REQUIRENAME; + he->t = RPM_STRING_ARRAY_TYPE; + he->p.argv = deps; + he->c -= removed; + headerMod(h, he, 0); + + he->tag = RPMTAG_REQUIREVERSION; + he->p.argv = versions; + headerMod(h, he, 0); + + he->tag = RPMTAG_REQUIREFLAGS; + he->t = RPM_UINT32_TYPE; + he->p.ui32p = (uint32_t*)flags; + headerMod(h, he, 0); + } + +} + rpmRC rpmfcGenerateDepends(void * _spec, void * _pkg) { HE_t he = (HE_t) memset(alloca(sizeof(*he)), 0, sizeof(*he)); @@ -1729,6 +1788,7 @@ rpmRC rpmfcGenerateDepends(void * _spec, if (internaldeps == 0) { /* ... then generate dependencies using %{__find_requires} et al. */ rc = rpmfcGenerateDependsHelper(spec, pkg, fi); + removeSillyDeps(pkg->header); printDeps(pkg->header); return rc; } @@ -1946,6 +2006,8 @@ assert(ac == (int)he->c); xx = headerPut(pkg->header, he, 0); } + removeSillyDeps(pkg->header); + printDeps(pkg->header); if (fc != NULL && _rpmfc_debug) {