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
addReqProv(Package pkg,rpmTagVal tagN,const char * N,const char * EVR,rpmsenseFlags Flags,uint32_t index)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:
23 * - Provides are permitted only for source packages
24 * - Otherwise only requires
25 * - Ensure sense bit
26 */
27 if (rstreqn(N, "rpmlib(", sizeof("rpmlib(")-1)) {
28 if (tagN != RPMTAG_REQUIRENAME &&
29 (tagN == RPMTAG_PROVIDENAME && !(Flags & RPMSENSE_RPMLIB)))
30 return 1;
31 Flags |= RPMSENSE_RPMLIB;
32 }
33
34 newds = rpmdsSinglePoolTix(pkg->pool, tagN, N, EVR,
35 rpmSanitizeDSFlags(tagN, Flags), index);
36
37 rpmdsMerge(dsp, newds);
38 rpmdsFree(newds);
39
40 return 0;
41 }
42
addReqProvPkg(void * cbdata,rpmTagVal tagN,const char * N,const char * EVR,rpmsenseFlags Flags,int index)43 rpmRC addReqProvPkg(void *cbdata, rpmTagVal tagN,
44 const char * N, const char *EVR, rpmsenseFlags Flags,
45 int index)
46 {
47 Package pkg = cbdata;
48 return addReqProv(pkg, tagN, N, EVR, Flags, index) ? RPMRC_FAIL : RPMRC_OK;
49 }
50
rpmlibNeedsFeature(Package pkg,const char * feature,const char * featureEVR)51 int rpmlibNeedsFeature(Package pkg, const char * feature, const char * featureEVR)
52 {
53 char *reqname = NULL;
54 int flags = RPMSENSE_RPMLIB|RPMSENSE_LESS|RPMSENSE_EQUAL;
55 int res;
56
57 /* XXX HACK: avoid changing rpmlibNeedsFeature() for just one user */
58 if (rstreq(feature, "DynamicBuildRequires"))
59 flags |= RPMSENSE_MISSINGOK;
60
61 rasprintf(&reqname, "rpmlib(%s)", feature);
62
63 res = addReqProv(pkg, RPMTAG_REQUIRENAME, reqname, featureEVR, flags, 0);
64
65 free(reqname);
66
67 return res;
68 }
69