mirror of
https://abf.rosa.ru/djam/rpm.git
synced 2025-02-23 18:33:04 +00:00
86 lines
2.4 KiB
Diff
86 lines
2.4 KiB
Diff
![]() |
--- 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) {
|