4 /** \ingroup rpmdep rpmtrans
6 * Structures used for dependency checking.
12 * Dependncy ordering information.
17 /*@kept@*/ struct availablePackage * suc;
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;
28 * Info about a single package to be installed.
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;
54 * A single available item (e.g. a Provides: dependency).
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. */
61 IET_PROVIDES=1 /*!< A Provides: dependency. */
62 } type; /*!< Type of available item. */
66 * Index of all available items.
68 struct availableIndex {
69 /*@null@*/ struct availableIndexEntry * index; /*!< Array of available items. */
70 int size; /*!< No. of available items. */
74 * A file to be installed/removed.
76 struct fileIndexEntry {
77 int pkgNum; /*!< Containing package number. */
78 int fileFlags; /* MULTILIB */
79 /*@dependent@*/ const char * baseName; /*!< File basename. */
83 * A directory to be installed/removed.
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. */
93 * Set of available packages, items, and directories.
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. */
106 * A single package instance to be installed/removed atomically.
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). */
123 * The set of packages to be installed/removed atomically.
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. */
156 * Problems encountered while checking dependencies.
159 struct rpmDependencyConflict * problems; /*!< Problems encountered. */
160 int num; /*!< No. of problems found. */
161 int alloced; /*!< No. of problems allocated. */
168 /* XXX lib/scriptlet.c */
170 * Compare package name-version-release from header with dependency, looking
172 * @deprecated Remove from API when obsoletes is correctly eliminated.
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
179 int headerMatchesDepFlags(Header h,
180 const char *reqName, const char * reqEVR, int reqFlags);
186 #endif /* H_DEPENDS */