]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-5.4.9-avoid-dependencies-on-self.patch
- release 47
[packages/rpm.git] / rpm-5.4.9-avoid-dependencies-on-self.patch
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.027721 seconds and 3 git commands to generate.