Create rpmts-py.c.
[platform/upstream/rpm.git] / lib / rpmds.h
1 #ifndef H_RPMDS
2 #define H_RPMDS
3
4 /** \ingroup rpmdep rpmtrans
5  * \file lib/rpmds.h
6  * Structure(s) used for dependency tag sets.
7  */
8
9 /*@unchecked@*/
10 extern int _rpmds_debug;
11
12 #if defined(_RPMDS_INTERNAL)
13 /**
14  * A package dependency set.
15  */
16 struct rpmds_s {
17     int i;                      /*!< Element index. */
18
19 /*@observer@*/
20     const char * Type;          /*!< Tag name. */
21 /*@only@*/ /*@null@*/
22     const char * DNEVR;         /*!< Formatted dependency string. */
23
24     rpmTag tagN;                /*!< Header tag. */
25 /*@refcounted@*/ /*@null@*/
26     Header h;                   /*!< Header for dependency set (or NULL) */
27
28 /*@only@*/
29     const char ** N;            /*!< Name. */
30 /*@only@*/
31     const char ** EVR;          /*!< Epoch-Version-Release. */
32 /*@only@*/
33     int_32 * Flags;             /*!< Flags identifying context/comparison. */
34     rpmTagType Nt, EVRt, Ft;    /*!< Tag data types. */
35     int_32 Count;               /*!< No. of elements */
36 /*@refs@*/ int nrefs;           /*!< Reference count. */
37 };
38 #endif  /* _RPMDS_INTERNAL */
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43
44 /**
45  * Unreference a dependency set instance.
46  * @param ds            dependency set
47  * @param msg
48  * @return              NULL always
49  */
50 /*@unused@*/ /*@null@*/
51 rpmds rpmdsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmds ds,
52                 /*@null@*/ const char * msg)
53         /*@modifies ds @*/;
54
55 /** @todo Remove debugging entry from the ABI. */
56 /*@-exportlocal@*/
57 /*@null@*/
58 rpmds XrpmdsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmds ds,
59                 /*@null@*/ const char * msg, const char * fn, unsigned ln)
60         /*@modifies ds @*/;
61 /*@=exportlocal@*/
62 #define rpmdsUnlink(_ds, _msg)  XrpmdsUnlink(_ds, _msg, __FILE__, __LINE__)
63
64 /**
65  * Reference a dependency set instance.
66  * @param ds            dependency set
67  * @param msg
68  * @return              new dependency set reference
69  */
70 /*@unused@*/
71 rpmds rpmdsLink (/*@null@*/ rpmds ds, /*@null@*/ const char * msg)
72         /*@modifies ds @*/;
73
74 /** @todo Remove debugging entry from the ABI. */
75 rpmds XrpmdsLink (/*@null@*/ rpmds ds, /*@null@*/ const char * msg,
76                 const char * fn, unsigned ln)
77         /*@modifies ds @*/;
78 #define rpmdsLink(_ds, _msg)    XrpmdsLink(_ds, _msg, __FILE__, __LINE__)
79
80 /**
81  * Destroy a dependency set.
82  * @param ds            dependency set
83  * @return              NULL always
84  */
85 /*@null@*/
86 rpmds rpmdsFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmds ds)
87         /*@modifies ds@*/;
88 /**
89  * Create and load a dependency set.
90  * @param h             header
91  * @param tagN          type of dependency
92  * @param scareMem      Use pointers to refcounted header memory?
93  * @return              new dependency set
94  */
95 /*@null@*/
96 rpmds rpmdsNew(Header h, rpmTag tagN, int scareMem)
97         /*@modifies h @*/;
98
99 /**
100  * Return new formatted dependency string.
101  * @param dspfx         formatted dependency string prefix
102  * @param ds            dependency set
103  * @return              new formatted dependency (malloc'ed)
104  */
105 /*@only@*/
106 char * rpmdsNewDNEVR(const char * dspfx, const rpmds ds)
107         /*@*/;
108
109 /**
110  * Create, load and initialize a dependency for this header. 
111  * @param h             header
112  * @param tagN          type of dependency
113  * @param Flags         comparison flags
114  * @return              new dependency set
115  */
116 /*@null@*/
117 rpmds rpmdsThis(Header h, rpmTag tagN, int_32 Flags)
118         /*@*/;
119
120 /**
121  * Create, load and initialize a dependency set of size 1.
122  * @param tagN          type of dependency
123  * @param N             name
124  * @param EVR           epoch:version-release
125  * @param Flags         comparison flags
126  * @return              new dependency set
127  */
128 /*@null@*/
129 rpmds rpmdsSingle(rpmTag tagN, const char * N, const char * EVR, int_32 Flags)
130         /*@*/;
131
132 /**
133  * Return dependency set count.
134  * @param ds            dependency set
135  * @return              current count
136  */
137 int rpmdsCount(/*@null@*/ const rpmds ds)
138         /*@*/;
139
140 /**
141  * Return dependency set index.
142  * @param ds            dependency set
143  * @return              current index
144  */
145 int rpmdsIx(/*@null@*/ const rpmds ds)
146         /*@*/;
147
148 /**
149  * Set dependency set index.
150  * @param ds            dependency set
151  * @param ix            new index
152  * @return              current index
153  */
154 int rpmdsSetIx(/*@null@*/ rpmds ds, int ix)
155         /*@modifies ds @*/;
156
157 /**
158  * Return current formatted dependency string.
159  * @param ds            dependency set
160  * @return              current dependency DNEVR, NULL on invalid
161  */
162 /*@observer@*/ /*@null@*/
163 const char * rpmdsDNEVR(/*@null@*/ const rpmds ds)
164         /*@*/;
165
166 /**
167  * Return current dependency name.
168  * @param ds            dependency set
169  * @return              current dependency name, NULL on invalid
170  */
171 /*@observer@*/ /*@null@*/
172 const char * rpmdsN(/*@null@*/ const rpmds ds)
173         /*@*/;
174
175 /**
176  * Return current dependency epoch-version-release.
177  * @param ds            dependency set
178  * @return              current dependency EVR, NULL on invalid
179  */
180 /*@observer@*/ /*@null@*/
181 const char * rpmdsEVR(/*@null@*/ const rpmds ds)
182         /*@*/;
183
184 /**
185  * Return current dependency flags.
186  * @param ds            dependency set
187  * @return              current dependency flags, 0 on invalid
188  */
189 int_32 rpmdsFlags(/*@null@*/ const rpmds ds)
190         /*@*/;
191
192 /**
193  * Return current dependency type.
194  * @param ds            dependency set
195  * @return              current dependency type, 0 on invalid
196  */
197 rpmTag rpmdsTagN(/*@null@*/ const rpmds ds)
198         /*@*/;
199
200 /**
201  * Notify of results of dependency match.
202  * @param ds            dependency set
203  * @param where         where dependency was resolved (or NULL)
204  * @param rc            0 == YES, otherwise NO
205  */
206 /*@-globuse@*/ /* FIX: rpmMessage annotation is a lie */
207 void rpmdsNotify(/*@null@*/ rpmds ds, /*@null@*/ const char * where, int rc)
208         /*@globals fileSystem @*/
209         /*@modifies fileSystem @*/;
210 /*@=globuse@*/
211
212 /**
213  * Return next dependency set iterator index.
214  * @param ds            dependency set
215  * @return              dependency set iterator index, -1 on termination
216  */
217 int rpmdsNext(/*@null@*/ rpmds ds)
218         /*@modifies ds @*/;
219
220 /**
221  * Initialize dependency set iterator.
222  * @param ds            dependency set
223  * @return              dependency set
224  */
225 /*@null@*/
226 rpmds rpmdsInit(/*@null@*/ rpmds ds)
227         /*@modifies ds @*/;
228
229 /**
230  * Compare two versioned dependency ranges, looking for overlap.
231  * @param A             1st dependency
232  * @param B             2nd dependency
233  * @return              1 if dependencies overlap, 0 otherwise
234  */
235 int rpmdsCompare(const rpmds A, const rpmds B)
236         /*@*/;
237
238 /**
239  * Report a Requires: or Conflicts: dependency problem.
240  * @param ps            transaction set problems
241  * @param pkgNEVR       package name/epoch/version/release
242  * @param ds            dependency set
243  * @param suggestedKeys
244  */
245 void rpmdsProblem(/*@null@*/ rpmps ps, const char * pkgNEVR, const rpmds ds,
246                 /*@only@*/ /*@null@*/ const fnpyKey * suggestedKeys)
247         /*@modifies ps @*/;
248
249 /**
250  * Compare package provides dependencies from header with a single dependency.
251  * @param h             header
252  * @param req           dependency set
253  */
254 int rangeMatchesDepFlags (Header h, const rpmds req)
255         /*@modifies h @*/;
256
257 /**
258  * Compare package name-version-release from header with a single dependency.
259  * @deprecated Remove from API when obsoletes is correctly implemented.
260  * @param h             header
261  * @param req           dependency
262  * @return              1 if dependency overlaps, 0 otherwise
263  */
264 int headerMatchesDepFlags(const Header h, const rpmds req)
265         /*@*/;
266
267 #ifdef __cplusplus
268 }
269 #endif
270
271 #endif  /* H_RPMDS */