mirror of
https://abf.rosa.ru/djam/rpm.git
synced 2025-02-23 18:33:04 +00:00
75 lines
2.2 KiB
Diff
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;
|
|
}
|