~ubuntu-branches/ubuntu/edgy/rpm/edgy

« back to all changes in this revision

Viewing changes to lib/depends.h

  • Committer: Bazaar Package Importer
  • Author(s): Joey Hess
  • Date: 2002-01-22 20:56:57 UTC
  • Revision ID: james.westby@ubuntu.com-20020122205657-l74j50mr9z8ofcl5
Tags: upstream-4.0.3
ImportĀ upstreamĀ versionĀ 4.0.3

Show diffs side-by-side

added added

removed removed

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