Doxygen annotations.
[tools/librpm-tizen.git] / lib / depends.h
1 #ifndef H_DEPENDS
2 #define H_DEPENDS
3
4 /** \file lib/depends.h
5  *
6  */
7
8 #include <header.h>
9
10 /**
11  * Info about a single package to be installed/removed.
12  */
13 struct availablePackage {
14     Header h;                           /*!< Package header. */
15 /*@owned@*/ const char ** provides;     /*!< Provides: name strings. */
16 /*@owned@*/ const char ** providesEVR;  /*!< Provides: [epoch:]version[-release] strings. */
17 /*@dependent@*/ int * provideFlags;     /*!< Provides: logical range qualifiers. */
18 /*@owned@*/ const char ** baseNames;    /*!< Header file basenames. */
19 /*@dependent@*/ const char * name;      /*!< Header name. */
20 /*@dependent@*/ const char * version;   /*!< Header version. */
21 /*@dependent@*/ const char * release;   /*!< Header release. */
22 /*@dependent@*/ int_32 * epoch;         /*!< Header epoch (if any). */
23     int providesCount;                  /*!< No. of Provide:'s in header. */
24     int filesCount;                     /*!< No. of files in header. */
25     uint_32 multiLib;   /* MULTILIB */
26 /*@dependent@*/ const void * key;       /*!< Private data associated with a package (e.g. file name of package). */
27     rpmRelocation * relocs;
28 /*@null@*/ FD_t fd;
29 } ;
30
31 /**
32  * A single available item (e.g. a Provides: dependency).
33  */
34 struct availableIndexEntry {
35 /*@dependent@*/ struct availablePackage * package; /*!< Containing package. */
36 /*@dependent@*/ const char * entry;     /*!< Available item name. */
37     size_t entryLen;                    /*!< No. of bytes in name. */
38     enum indexEntryType {
39         IET_PROVIDES=1          /*!< A Provides: dependency. */
40     } type;                             /*!< Type of available item. */
41 } ;
42
43 /**
44  * Index of all available items.
45  */
46 struct availableIndex {
47 /*@null@*/ struct availableIndexEntry * index; /*!< Array of available items. */
48     int size;                           /*!< No. of available items. */
49 } ;
50
51 /**
52  * A file to be installed/removed.
53  */
54 struct fileIndexEntry {
55     int pkgNum;                         /*!< Containing package number. */
56     int fileFlags;      /* MULTILIB */
57 /*@dependent@*/ const char * baseName;  /*!< File basename. */
58 } ;
59
60 /**
61  * A directory to be installed/removed.
62  */
63 struct dirInfo {
64 /*@owned@*/ const char * dirName;       /*!< Directory path (+ trailing '/'). */
65     int dirNameLen;                     /*!< No. bytes in directory path. */
66 /*@owned@*/ struct fileIndexEntry * files; /*!< Array of files in directory. */
67     int numFiles;                       /*!< No. files in directory. */
68 } ;
69
70 /**
71  * Set of available packages, items, and directories.
72  */
73 struct availableList {
74 /*@owned@*/ /*@null@*/ struct availablePackage * list;  /*!< Set of packages. */
75     struct availableIndex index;        /*!< Set of available items. */
76     int size;
77     int alloced;
78     int numDirs;                        /*! No. of directories. */
79 /*@owned@*/ struct dirInfo * dirs;      /*!< Set of directories. */
80 };
81
82 /**
83  * A single package instance to be installed/removed atomically.
84  */
85 struct transactionElement {
86     enum rpmTransactionType {
87         TR_ADDED,       /*!< Package will be installed. */
88         TR_REMOVED      /*!< Package will be removed. */
89     } type;             /*!< Package disposition (installed/removed). */
90     union { 
91         int addedIndex;
92         struct {
93             int dboffset;
94             int dependsOnIndex;
95         } removed;
96     } u;
97 };
98
99 /**
100  * The set of packages to be installed/removed atomically.
101  */
102 struct rpmTransactionSet_s {
103 /*@owned@*/ /*@null@*/ rpmdb rpmdb;     /*!< Database handle. */
104 /*@only@*/ int * removedPackages;       /*!< Set of packages being removed. */
105     int numRemovedPackages;             /*!< No. removed rpmdb instances. */
106     int allocedRemovedPackages;         /*!< Size of removed packages array. */
107     struct availableList addedPackages; /*!< Set of packages being installed. */
108     struct availableList availablePackages; /*!< Universe of possible packages to install. */
109 /*@only@*/ struct transactionElement * order; /*!< Packages sorted by dependencies. */
110     int orderCount;
111     int orderAlloced;
112 /*@only@*/ const char * rootDir;        /*!< Path to top of install tree. */
113 /*@only@*/ const char * currDir;        /*!< Current working directory. */
114 /*@null@*/ FD_t scriptFd;
115 };
116
117 struct problemsSet {
118     struct rpmDependencyConflict * problems;
119     int num;
120     int alloced;
121 };
122
123 #ifdef __cplusplus
124 extern "C" {
125 #endif
126
127 /* XXX lib/uninstall.c */
128 int headerMatchesDepFlags(Header h, const char *reqName, const char * reqInfo, int reqFlags);
129
130 #ifdef __cplusplus
131 }
132 #endif
133
134 #endif  /* H_DEPENDS */