rpm  4.12.90
rpmds.h
Go to the documentation of this file.
1 #ifndef H_RPMDS
2 #define H_RPMDS
3 
9 #include <time.h>
10 
11 #include <rpm/rpmtypes.h>
12 #include <rpm/rpmps.h>
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
20 extern int _rpmds_nopromote;
21 
27  RPMSENSE_LESS = (1 << 1),
28  RPMSENSE_GREATER = (1 << 2),
29  RPMSENSE_EQUAL = (1 << 3),
30  /* bit 4 unused */
31  RPMSENSE_POSTTRANS = (1 << 5),
32  RPMSENSE_PREREQ = (1 << 6), /* legacy prereq dependency */
33  RPMSENSE_PRETRANS = (1 << 7),
34  RPMSENSE_INTERP = (1 << 8),
35  RPMSENSE_SCRIPT_PRE = (1 << 9),
36  RPMSENSE_SCRIPT_POST = (1 << 10),
37  RPMSENSE_SCRIPT_PREUN = (1 << 11),
38  RPMSENSE_SCRIPT_POSTUN = (1 << 12),
39  RPMSENSE_SCRIPT_VERIFY = (1 << 13),
40  RPMSENSE_FIND_REQUIRES = (1 << 14),
41  RPMSENSE_FIND_PROVIDES = (1 << 15),
43  RPMSENSE_TRIGGERIN = (1 << 16),
44  RPMSENSE_TRIGGERUN = (1 << 17),
45  RPMSENSE_TRIGGERPOSTUN = (1 << 18),
46  RPMSENSE_MISSINGOK = (1 << 19),
47  /* bits 20-23 unused */
48  RPMSENSE_RPMLIB = (1 << 24),
49  RPMSENSE_TRIGGERPREIN = (1 << 25),
50  RPMSENSE_KEYRING = (1 << 26),
51  /* bit 27 unused */
52  RPMSENSE_CONFIG = (1 << 28),
53  RPMSENSE_RICH = (1 << 29)
54 };
55 
57 
58 #define RPMSENSE_SENSEMASK 15 /* Mask to get senses, ie serial, */
59  /* less, greater, equal. */
60 
61 #define RPMSENSE_TRIGGER \
62  (RPMSENSE_TRIGGERPREIN | RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
63 
64 #define _ALL_REQUIRES_MASK (\
65  RPMSENSE_INTERP | \
66  RPMSENSE_SCRIPT_PRE | \
67  RPMSENSE_SCRIPT_POST | \
68  RPMSENSE_SCRIPT_PREUN | \
69  RPMSENSE_SCRIPT_POSTUN | \
70  RPMSENSE_SCRIPT_VERIFY | \
71  RPMSENSE_FIND_REQUIRES | \
72  RPMSENSE_RPMLIB | \
73  RPMSENSE_KEYRING | \
74  RPMSENSE_PRETRANS | \
75  RPMSENSE_POSTTRANS | \
76  RPMSENSE_PREREQ | \
77  RPMSENSE_MISSINGOK)
78 
79 #define _notpre(_x) ((_x) & ~RPMSENSE_PREREQ)
80 #define _INSTALL_ONLY_MASK \
81  _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB|RPMSENSE_KEYRING|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS)
82 #define _ERASE_ONLY_MASK \
83  _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
84 
85 #define isLegacyPreReq(_x) (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
86 #define isInstallPreReq(_x) ((_x) & _INSTALL_ONLY_MASK)
87 #define isErasePreReq(_x) ((_x) & _ERASE_ONLY_MASK)
88 
89 
90 
97 rpmsenseFlags rpmSanitizeDSFlags(rpmTagVal tagN, rpmsenseFlags Flags);
98 
105 rpmsenseFlags rpmParseDSFlags(const char *str, size_t len);
106 
112 rpmds rpmdsLink(rpmds ds);
113 
119 rpmds rpmdsFree(rpmds ds);
120 
128 rpmds rpmdsNew(Header h, rpmTagVal tagN, int flags);
129 
136 char * rpmdsNewDNEVR(const char * dspfx, const rpmds ds);
137 
145 rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags);
146 
155 rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlags Flags);
156 
163 
170 int rpmdsPutToHeader(rpmds ds, Header h);
171 
177 int rpmdsCount(const rpmds ds);
178 
184 int rpmdsIx(const rpmds ds);
185 
192 int rpmdsSetIx(rpmds ds, int ix);
193 
199 const char * rpmdsDNEVR(const rpmds ds);
200 
206 char rpmdsD(const rpmds ds);
207 
213 rpmTagVal rpmdsDToTagN(char deptype);
214 
220 const char * rpmdsN(const rpmds ds);
221 
227 const char * rpmdsEVR(const rpmds ds);
228 
234 int rpmdsTi(const rpmds ds);
235 
241 rpmsenseFlags rpmdsFlags(const rpmds ds);
242 
248 rpmTagVal rpmdsTagN(const rpmds ds);
249 
255 rpmTagVal rpmdsTagEVR(const rpmds ds);
256 
262 rpmTagVal rpmdsTagF(const rpmds ds);
263 
269 rpmTagVal rpmdsTagTi(const rpmds ds);
270 
277 unsigned int rpmdsInstance(rpmds ds);
278 
292 int rpmdsNoPromote(const rpmds ds);
293 
300 int rpmdsSetNoPromote(rpmds ds, int nopromote);
301 
307 rpm_color_t rpmdsColor(const rpmds ds);
308 
315 rpm_color_t rpmdsSetColor(const rpmds ds, rpm_color_t color);
316 
323 /* FIX: rpmMessage annotation is a lie */
324 void rpmdsNotify(rpmds ds, const char * where, int rc);
325 
331 int rpmdsNext(rpmds ds);
332 
338 rpmds rpmdsInit(rpmds ds);
339 
346 int rpmdsFind(rpmds ds, const rpmds ods);
347 
354 int rpmdsMerge(rpmds * dsp, rpmds ods);
355 
364 int rpmdsSearch(rpmds ds, rpmds ods);
365 
372 int rpmdsCompare(const rpmds A, const rpmds B);
373 
381 int rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote);
382 
391 int rpmdsMatchesDep (const Header h, int ix, const rpmds req, int nopromote);
392 
400 int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote);
401 
408 int rpmdsRpmlib(rpmds * dsp, const void * tblp);
409 
418 rpmds rpmdsNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, int flags);
419 
429  Header h, rpmTagVal tagN, rpmsenseFlags Flags);
430 
441  const char * N, const char * EVR, rpmsenseFlags Flags);
442 
454  const char * N, const char * EVR,
455  rpmsenseFlags Flags, int triggerIndex);
456 
464 int rpmdsRpmlibPool(rpmstrPool pool, rpmds * dsp, const void * tblp);
465 
466 
467 typedef enum rpmrichOp_e {
474 } rpmrichOp;
475 
476 typedef enum rpmrichParseType_e {
477  RPMRICH_PARSE_SIMPLE = 1, /* standard N <=> EVR dep */
478  RPMRICH_PARSE_ENTER = 2, /* entering sub-dependency */
479  RPMRICH_PARSE_LEAVE = 3, /* leaving sub-dependency */
480  RPMRICH_PARSE_OP = 4 /* parsed a rich dependency op */
482 
483 typedef rpmRC (*rpmrichParseFunction) (void *cbdata, rpmrichParseType type,
484  const char *n, int nl, const char *e, int el, rpmsenseFlags sense,
485  rpmrichOp op, char **emsg);
486 
495 rpmRC rpmrichParse(const char **dstrp, char **emsg, rpmrichParseFunction cb, void *cbdata);
496 
502 const char *rpmrichOpStr(rpmrichOp op);
503 
513 rpmRC rpmdsParseRichDep(rpmds dep, rpmds *leftds, rpmds *rightds, rpmrichOp *op, char **emsg);
514 
515 #ifdef __cplusplus
516 }
517 #endif
518 
519 #endif /* H_RPMDS */
char * rpmdsNewDNEVR(const char *dspfx, const rpmds ds)
Return new formatted dependency string.
rpmds rpmdsNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, int flags)
Create and load a dependency set.
rpmTagVal rpmdsTagF(const rpmds ds)
Return current dependency type.
int rpmdsMatchesDep(const Header h, int ix, const rpmds req, int nopromote)
Compare package provides dependencies from header with a single dependency.
rpmds rpmdsInit(rpmds ds)
Initialize dependency set iterator.
rpmRC rpmdsParseRichDep(rpmds dep, rpmds *leftds, rpmds *rightds, rpmrichOp *op, char **emsg)
Parse a rich dependency string.
enum rpmrichOp_e rpmrichOp
int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote)
Compare package name-version-release from header with a single dependency.
rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags)
Create, load and initialize a dependency for this header.
int rpmdsSetIx(rpmds ds, int ix)
Set dependency set index.
rpmds rpmdsNew(Header h, rpmTagVal tagN, int flags)
Create and load a dependency set.
int rpmdsPutToHeader(rpmds ds, Header h)
Write content of the dependency set to the header.
rpmsenseFlags rpmSanitizeDSFlags(rpmTagVal tagN, rpmsenseFlags Flags)
Return only those flags allowed for given type of dependencies.
rpmds rpmdsSinglePool(rpmstrPool pool, rpmTagVal tagN, const char *N, const char *EVR, rpmsenseFlags Flags)
Create, load and initialize a dependency set of size 1.
int rpmdsIx(const rpmds ds)
Return dependency set index.
rpmTagVal rpmdsTagEVR(const rpmds ds)
Return current dependency type.
rpmds rpmdsSingle(rpmTagVal tagN, const char *N, const char *EVR, rpmsenseFlags Flags)
Create, load and initialize a dependency set of size 1.
struct rpmds_s * rpmds
Definition: rpmtypes.h:65
rpmds rpmdsFree(rpmds ds)
Destroy a dependency set.
rpm_tag_t rpmTagVal
Definition: rpmtypes.h:30
int rpmdsRpmlib(rpmds *dsp, const void *tblp)
Load rpmlib provides into a dependency set.
int rpmdsFind(rpmds ds, const rpmds ods)
Find a dependency set element using binary search.
int rpmdsRpmlibPool(rpmstrPool pool, rpmds *dsp, const void *tblp)
Load rpmlib provides into a dependency set.
int rpmdsTi(const rpmds ds)
Return current dependency triggerindex.
int rpmdsCount(const rpmds ds)
Return dependency set count.
struct rpmstrPool_s * rpmstrPool
Definition: rpmtypes.h:83
int rpmdsSearch(rpmds ds, rpmds ods)
Search a sorted dependency set for an element that overlaps.
int rpmdsCompare(const rpmds A, const rpmds B)
Compare two versioned dependency ranges, looking for overlap.
int rpmdsNoPromote(const rpmds ds)
Return current "Don't promote Epoch:" flag.
rpm_color_t rpmdsColor(const rpmds ds)
Return current dependency color.
rpmrichOp_e
Definition: rpmds.h:467
rpmds rpmdsSinglePoolTix(rpmstrPool pool, rpmTagVal tagN, const char *N, const char *EVR, rpmsenseFlags Flags, int triggerIndex)
Create, load and initialize a trigger dependency set of size 1.
uint32_t rpmFlags
Definition: rpmtypes.h:42
int rpmdsNext(rpmds ds)
Return next dependency set iterator index.
rpmTagVal rpmdsDToTagN(char deptype)
Return matching tagN for one char dependency type description.
rpmrichParseType_e
Definition: rpmds.h:476
int _rpmds_nopromote
rpmsenseFlags rpmParseDSFlags(const char *str, size_t len)
Convert a string to the sense flags.
rpmds rpmdsLink(rpmds ds)
Reference a dependency set instance.
rpmds rpmdsThisPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmsenseFlags Flags)
Create, load and initialize a dependency for this header.
const char * rpmrichOpStr(rpmrichOp op)
Return a string representation of the rich dependency op.
rpmsenseFlags_e
Dependency Attributes.
Definition: rpmds.h:25
uint32_t rpm_color_t
Definition: rpmtypes.h:38
char rpmdsD(const rpmds ds)
Return one char indicating the type of the dependency.
rpmds rpmdsCurrent(rpmds ds)
Return a new dependency set of size 1 from the current iteration index.
rpmsenseFlags rpmdsFlags(const rpmds ds)
Return current dependency flags.
int rpmdsSetNoPromote(rpmds ds, int nopromote)
Set "Don't promote Epoch:" flag.
const char * rpmdsEVR(const rpmds ds)
Return current dependency epoch-version-release.
int rpmdsMerge(rpmds *dsp, rpmds ods)
Merge a dependency set maintaining (N,EVR,Flags) sorted order.
const char * rpmdsDNEVR(const rpmds ds)
Return current formatted dependency string.
enum rpmrichParseType_e rpmrichParseType
void rpmdsNotify(rpmds ds, const char *where, int rc)
Notify of results of dependency match.
int rpmdsAnyMatchesDep(const Header h, const rpmds req, int nopromote)
Compare package provides dependencies from header with a single dependency.
enum rpmRC_e rpmRC
Package read return codes.
rpmTagVal rpmdsTagN(const rpmds ds)
Return current dependency type.
rpmRC(* rpmrichParseFunction)(void *cbdata, rpmrichParseType type, const char *n, int nl, const char *e, int el, rpmsenseFlags sense, rpmrichOp op, char **emsg)
Definition: rpmds.h:483
unsigned int rpmdsInstance(rpmds ds)
Return dependency header instance, ie whether the dependency comes from an installed header or not...
rpmTagVal rpmdsTagTi(const rpmds ds)
Return current dependency type.
rpmFlags rpmsenseFlags
Definition: rpmds.h:56
const char * rpmdsN(const rpmds ds)
Return current dependency name.
rpmRC rpmrichParse(const char **dstrp, char **emsg, rpmrichParseFunction cb, void *cbdata)
Parse a rich dependency string.
struct headerToken_s * Header
RPM header and data retrieval types.
Definition: rpmtypes.h:24
rpm_color_t rpmdsSetColor(const rpmds ds, rpm_color_t color)
Return current dependency color.