rpm/rpm-5.4.9-avoid-dependencies-on-self.patch

86 lines
2.4 KiB
Diff
Raw Normal View History

2012-08-01 14:59:23 +04:00
--- 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) {