rpm/rpm-5.4.4-avoid-dependencies-on-self.patch
2012-02-01 18:08:07 +04:00

75 lines
2.2 KiB
Diff

--- rpm-5.4.4/lib/rpmfc.c.drop_deps~ 2011-04-12 09:59:26.000000000 +0200
+++ rpm-5.4.4/lib/rpmfc.c 2011-12-22 20:21:07.089502076 +0100
@@ -1658,6 +1658,64 @@ 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 * specp, void * pkgp)
{
HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
@@ -1691,6 +1749,7 @@ rpmRC rpmfcGenerateDepends(void * specp,
if (internaldeps == 0) {
/* ... then generate dependencies using %{__find_requires} et al. */
rc = rpmfcGenerateDependsHelper(spec, pkg, fi);
+ removeSillyDeps(pkg->header);
printDeps(pkg->header);
return rc;
}