Doxygen annotations for config files.
[tools/librpm-tizen.git] / lib / depends.h
1 #ifndef H_DEPENDS
2 #define H_DEPENDS
3
4 /** \ingroup rpmdep rpmtrans
5  * \file lib/depends.h
6  * Structures used for dependency checking.
7  */
8
9 #include <header.h>
10
11 /** \ingroup rpmdep
12  * Dependncy ordering information.
13  */
14 struct tsortInfo {
15     union {
16         int     count;
17         /*@kept@*/ struct availablePackage * suc;
18     } tsi_u;
19 #define tsi_count       tsi_u.count
20 #define tsi_suc         tsi_u.suc
21 /*@owned@*/ struct tsortInfo * tsi_next;
22 /*@kept@*/ struct availablePackage * tsi_pkg;
23     int         tsi_reqx;
24     int         tsi_qcnt;
25 } ;
26
27 /** \ingroup rpmdep
28  * Info about a single package to be installed.
29  */
30 struct availablePackage {
31     Header h;                           /*!< Package header. */
32 /*@dependent@*/ const char * name;      /*!< Header name. */
33 /*@dependent@*/ const char * version;   /*!< Header version. */
34 /*@dependent@*/ const char * release;   /*!< Header release. */
35 /*@owned@*/ const char ** provides;     /*!< Provides: name strings. */
36 /*@owned@*/ const char ** providesEVR;  /*!< Provides: [epoch:]version[-release] strings. */
37 /*@dependent@*/ int * provideFlags;     /*!< Provides: logical range qualifiers. */
38 /*@owned@*/ const char ** requires;     /*!< Requires: name strings. */
39 /*@owned@*/ const char ** requiresEVR;  /*!< Requires: [epoch:]version[-release] strings. */
40 /*@dependent@*/ int * requireFlags;     /*!< Requires: logical range qualifiers. */
41 /*@owned@*/ const char ** baseNames;    /*!< Header file basenames. */
42 /*@dependent@*/ int_32 * epoch;         /*!< Header epoch (if any). */
43     int providesCount;                  /*!< No. of Provide:'s in header. */
44     int requiresCount;                  /*!< No. of Require:'s in header. */
45     int filesCount;                     /*!< No. of files in header. */
46     struct tsortInfo tsi;               /*!< Dependency tsort data. */
47     uint_32 multiLib;   /* MULTILIB */
48 /*@kept@*/ const void * key;    /*!< Private data associated with a package (e.g. file name of package). */
49     rpmRelocation * relocs;
50 /*@null@*/ FD_t fd;
51 } ;
52
53 /** \ingroup rpmdep
54  * A single available item (e.g. a Provides: dependency).
55  */
56 struct availableIndexEntry {
57 /*@dependent@*/ struct availablePackage * package; /*!< Containing package. */
58 /*@dependent@*/ const char * entry;     /*!< Available item name. */
59     size_t entryLen;                    /*!< No. of bytes in name. */
60     enum indexEntryType {
61         IET_PROVIDES=1          /*!< A Provides: dependency. */
62     } type;                             /*!< Type of available item. */
63 } ;
64
65 /** \ingroup rpmdep
66  * Index of all available items.
67  */
68 struct availableIndex {
69 /*@null@*/ struct availableIndexEntry * index; /*!< Array of available items. */
70     int size;                           /*!< No. of available items. */
71 } ;
72
73 /** \ingroup rpmdep
74  * A file to be installed/removed.
75  */
76 struct fileIndexEntry {
77     int pkgNum;                         /*!< Containing package number. */
78     int fileFlags;      /* MULTILIB */
79 /*@dependent@*/ const char * baseName;  /*!< File basename. */
80 } ;
81
82 /** \ingroup rpmdep
83  * A directory to be installed/removed.
84  */
85 struct dirInfo {
86 /*@owned@*/ const char * dirName;       /*!< Directory path (+ trailing '/'). */
87     int dirNameLen;                     /*!< No. bytes in directory path. */
88 /*@owned@*/ struct fileIndexEntry * files; /*!< Array of files in directory. */
89     int numFiles;                       /*!< No. files in directory. */
90 } ;
91
92 /** \ingroup rpmdep
93  * Set of available packages, items, and directories.
94  */
95 struct availableList {
96 /*@owned@*/ /*@null@*/ struct availablePackage * list;  /*!< Set of packages. */
97     struct availableIndex index;        /*!< Set of available items. */
98     int delta;                          /*!< Delta for pkg list reallocation. */
99     int size;                           /*!< No. of pkgs in list. */
100     int alloced;                        /*!< No. of pkgs allocated for list. */
101     int numDirs;                        /*!< No. of directories. */
102 /*@owned@*/ struct dirInfo * dirs;      /*!< Set of directories. */
103 } ;
104
105 /** \ingroup rpmdep
106  * A single package instance to be installed/removed atomically.
107  */
108 struct transactionElement {
109     enum rpmTransactionType {
110         TR_ADDED,       /*!< Package will be installed. */
111         TR_REMOVED      /*!< Package will be removed. */
112     } type;             /*!< Package disposition (installed/removed). */
113     union { 
114         int addedIndex;
115         struct {
116             int dboffset;
117             int dependsOnIndex;
118         } removed;
119     } u;
120 } ;
121
122 /** \ingroup rpmdep
123  * The set of packages to be installed/removed atomically.
124  */
125 struct rpmTransactionSet_s {
126     rpmtransFlags transFlags;           /*!< Bit(s) to control operation. */
127     rpmCallbackFunction notify;         /*!< Callback function. */
128 /*@observer@*/ rpmCallbackData notifyData;/*!< Callback private data. */
129 /*@dependent@*/ rpmProblemSet probs;    /*!< Current problems in transaction. */
130     rpmprobFilterFlags ignoreSet;       /*!< Bits to filter current problems. */
131     int filesystemCount;                /*!< No. of mounted filesystems. */
132 /*@dependent@*/ const char ** filesystems; /*!< Mounted filesystem names. */
133 /*@only@*/ struct diskspaceInfo * di;   /*!< Per filesystem disk/inode usage. */
134 /*@kept@*/ /*@null@*/ rpmdb rpmdb;      /*!< Database handle. */
135 /*@only@*/ int * removedPackages;       /*!< Set of packages being removed. */
136     int numRemovedPackages;             /*!< No. removed rpmdb instances. */
137     int allocedRemovedPackages;         /*!< Size of removed packages array. */
138     struct availableList addedPackages; /*!< Set of packages being installed. */
139     struct availableList availablePackages;
140                                 /*!< Universe of possible packages. */
141 /*@only@*/ struct transactionElement * order;
142                                 /*!< Packages sorted by dependencies. */
143     int orderCount;             /*!< No. of transaction elements. */
144     int orderAlloced;           /*!< No. of allocated transaction elements. */
145 /*@shared@*/ TFI_t flList;      /*!< Transaction element(s) file info. */
146     int flEntries;              /*!< No. of transaction elements. */
147     int chrootDone;             /*!< Has chroot(2) been been done? */
148 /*@only@*/ const char * rootDir;/*!< Path to top of install tree. */
149 /*@only@*/ const char * currDir;/*!< Current working directory. */
150 /*@null@*/ FD_t scriptFd;       /*!< Scriptlet stdout/stderr. */
151     int delta;                  /*!< Delta for reallocation. */
152     int id;                     /*!< Transaction id. */
153 } ;
154
155 /** \ingroup rpmdep
156  * Problems encountered while checking dependencies.
157  */
158 struct problemsSet {
159     struct rpmDependencyConflict * problems;    /*!< Problems encountered. */
160     int num;                    /*!< No. of problems found. */
161     int alloced;                /*!< No. of problems allocated. */
162 } ;
163
164 #ifdef __cplusplus
165 extern "C" {
166 #endif
167
168 /* XXX lib/scriptlet.c */
169 /** \ingroup rpmdep
170  * Compare package name-version-release from header with dependency, looking
171  * for overlap.
172  * @deprecated Remove from API when obsoletes is correctly eliminated.
173  * @param h             header
174  * @param reqName       dependency name
175  * @param reqEVR        dependency [epoch:]version[-release]
176  * @param reqFlags      dependency logical range qualifiers
177  * @return              1 if dependency overlaps, 0 otherwise
178  */
179 int headerMatchesDepFlags(Header h,
180         const char *reqName, const char * reqEVR, int reqFlags);
181
182 #ifdef __cplusplus
183 }
184 #endif
185
186 #endif  /* H_DEPENDS */