upgrade rpm version to 4.14.1
[platform/upstream/rpm.git] / build / reqprov.c
1 /** \ingroup rpmbuild
2  * \file build/reqprov.c
3  *  Add dependency tags to package header(s).
4  */
5
6 #include "system.h"
7
8 #include <rpm/header.h>
9 #include <rpm/rpmstring.h>
10 #include <rpm/rpmlog.h>
11 #include "build/rpmbuild_internal.h"
12 #include "debug.h"
13
14 int addReqProv(Package pkg, rpmTagVal tagN,
15                 const char * N, const char * EVR, rpmsenseFlags Flags,
16                 uint32_t index)
17 {
18     rpmds newds, *dsp = NULL;
19
20     dsp = packageDependencies(pkg, tagN);
21
22     /* rpmlib() dependency sanity: only requires permitted, ensure sense bit */
23     if (rstreqn(N, "rpmlib(", sizeof("rpmlib(")-1)) {
24         if (tagN != RPMTAG_REQUIRENAME) return 1;
25         Flags |= RPMSENSE_RPMLIB;
26     }
27
28     newds = rpmdsSinglePoolTix(pkg->pool, tagN, N, EVR,
29                                rpmSanitizeDSFlags(tagN, Flags), index);
30
31     rpmdsMerge(dsp, newds);
32     rpmdsFree(newds);
33
34     return 0;
35 }
36
37 rpmRC addReqProvPkg(void *cbdata, rpmTagVal tagN,
38                     const char * N, const char *EVR, rpmsenseFlags Flags,
39                     int index)
40 {
41     Package pkg = cbdata;
42     return addReqProv(pkg, tagN, N, EVR, Flags, index) ? RPMRC_FAIL : RPMRC_OK;
43 }
44
45 int rpmlibNeedsFeature(Package pkg, const char * feature, const char * featureEVR)
46 {
47     char *reqname = NULL;
48     int res;
49
50     rasprintf(&reqname, "rpmlib(%s)", feature);
51
52     res = addReqProv(pkg, RPMTAG_REQUIRENAME, reqname, featureEVR,
53                      RPMSENSE_RPMLIB|(RPMSENSE_LESS|RPMSENSE_EQUAL), 0);
54
55     free(reqname);
56
57     return res;
58 }