]>
Commit | Line | Data |
---|---|---|
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) { |