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