]> git.pld-linux.org Git - packages/rpm.git/blame - rpm-5.4.9-avoid-dependencies-on-self.patch
- release 47
[packages/rpm.git] / rpm-5.4.9-avoid-dependencies-on-self.patch
CommitLineData
70f8787d
JR
1--- rpm-5.4.9/lib/rpmfc.c.drop_deps~ 2012-05-07 22:41:45.000000000 +0200
2+++ rpm-5.4.9/lib/rpmfc.c 2012-05-15 01:58:00.071056896 +0200
3@@ -1696,6 +1696,65 @@ static int rpmfcGenerateScriptletDeps(co
4 return rc;
5 }
6
7+static void removeSillyDeps(Header h) {
8+ HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
9+ int xx, i, rnum, removed = 0;
10+ const char **deps = NULL;
11+ const char **versions = NULL;
12+ evrFlags *flags = NULL;
13+
14+ he->tag = RPMTAG_REQUIRENAME;
15+ xx = headerGet(h, he, 0);
16+ deps = he->p.argv;
17+ rnum = he->c;
18+
19+ he->tag = RPMTAG_REQUIREVERSION;
20+ xx = headerGet(h, he, 0);
21+ versions = he->p.argv;
22+
23+ he->tag = RPMTAG_REQUIREFLAGS;
24+ xx = headerGet(h, he, 0);
25+ flags = (evrFlags*)he->p.ui32p;
26+
27+ for (i = 0; i < rnum-removed; i++) {
28+ if (removed) {
29+ deps[i] = deps[i+removed];
30+ versions[i] = versions[i+removed];
31+ flags[i] = flags[i+removed];
32+ }
33+ rpmds req = rpmdsSingle(RPMTAG_REQUIRENAME, deps[i], versions[i], flags[i]);
34+ rpmds prov = rpmdsNew(h, (*deps[i] == '/' && !*versions[i]) ? RPMTAG_BASENAMES : RPMTAG_PROVIDENAME, 0);
35+ if (rpmdsMatch(req, prov)) {
36+ if (flags[i] & RPMSENSE_SCRIPT_PRE)
37+ rpmlog(RPMLOG_ERR, "Requires(pre): on dependency provided by self: %s\n", rpmdsDNEVR(req));
38+ else {
39+ rpmlog(RPMLOG_NOTICE, "Removing dependency on self: %s\n", rpmdsDNEVR(req));
40+ removed++;
41+ i--;
42+ }
43+ }
44+ req = rpmdsFree(req);
45+ prov = rpmdsFree(prov);
46+ }
47+ if (removed) {
48+ he->tag = RPMTAG_REQUIRENAME;
49+ he->t = RPM_STRING_ARRAY_TYPE;
50+ he->p.argv = deps;
51+ he->c -= removed;
52+ headerMod(h, he, 0);
53+
54+ he->tag = RPMTAG_REQUIREVERSION;
55+ he->p.argv = versions;
56+ headerMod(h, he, 0);
57+
58+ he->tag = RPMTAG_REQUIREFLAGS;
59+ he->t = RPM_UINT32_TYPE;
60+ he->p.ui32p = (uint32_t*)flags;
61+ headerMod(h, he, 0);
62+ }
63+
64+}
65+
66 rpmRC rpmfcGenerateDepends(void * _spec, void * _pkg)
67 {
68 HE_t he = (HE_t) memset(alloca(sizeof(*he)), 0, sizeof(*he));
69@@ -1729,6 +1788,7 @@ rpmRC rpmfcGenerateDepends(void * _spec,
70 if (internaldeps == 0) {
71 /* ... then generate dependencies using %{__find_requires} et al. */
72 rc = rpmfcGenerateDependsHelper(spec, pkg, fi);
73+ removeSillyDeps(pkg->header);
74 printDeps(pkg->header);
75 return rc;
76 }
77@@ -1946,6 +2006,8 @@ assert(ac == (int)he->c);
78 xx = headerPut(pkg->header, he, 0);
79 }
80
81+ removeSillyDeps(pkg->header);
82+
83 printDeps(pkg->header);
84
85 if (fc != NULL && _rpmfc_debug) {
This page took 0.033259 seconds and 4 git commands to generate.