Added rpmfilename tag to to rpmrc and made use of it during package builds
[platform/upstream/rpm.git] / lib / rpmlib.h
1 #ifndef H_RPMLIB
2 #define H_RPMLIB
3
4 /* This is the *only* module users of rpmlib should need to include */
5
6 #include <db.h>
7
8 /* it shouldn't need these :-( */
9 #include "dbindex.h"
10 #include "header.h"
11
12 int rpmReadPackageInfo(int fd, Header * signatures, Header * hdr);
13 int rpmReadPackageHeader(int fd, Header * hdr, int * isSource, int * major,
14                          int * minor);
15    /* 0 = success */
16    /* 1 = bad magic */
17    /* 2 = error */
18
19 extern const struct headerTagTableEntry rpmTagTable[];
20 extern const int rpmTagTableSize;
21
22 /* this chains to headerDefaultFormats[] */
23 extern const struct headerSprintfExtension rpmHeaderFormats[];
24
25 /* these tags are for both the database and packages */
26 /* none of these can be 0 !!                         */
27
28 #define RPMTAG_NAME                     1000
29 #define RPMTAG_VERSION                  1001
30 #define RPMTAG_RELEASE                  1002
31 #define RPMTAG_SERIAL                   1003
32 #define RPMTAG_SUMMARY                  1004
33 #define RPMTAG_DESCRIPTION              1005
34 #define RPMTAG_BUILDTIME                1006
35 #define RPMTAG_BUILDHOST                1007
36 #define RPMTAG_INSTALLTIME              1008
37 #define RPMTAG_SIZE                     1009
38 #define RPMTAG_DISTRIBUTION             1010
39 #define RPMTAG_VENDOR                   1011
40 #define RPMTAG_GIF                      1012
41 #define RPMTAG_XPM                      1013
42 #define RPMTAG_COPYRIGHT                1014
43 #define RPMTAG_PACKAGER                 1015
44 #define RPMTAG_GROUP                    1016
45 #define RPMTAG_CHANGELOG                1017 /* internal */
46 #define RPMTAG_SOURCE                   1018
47 #define RPMTAG_PATCH                    1019
48 #define RPMTAG_URL                      1020
49 #define RPMTAG_OS                       1021
50 #define RPMTAG_ARCH                     1022
51 #define RPMTAG_PREIN                    1023
52 #define RPMTAG_POSTIN                   1024
53 #define RPMTAG_PREUN                    1025
54 #define RPMTAG_POSTUN                   1026
55 #define RPMTAG_FILENAMES                1027
56 #define RPMTAG_FILESIZES                1028
57 #define RPMTAG_FILESTATES               1029
58 #define RPMTAG_FILEMODES                1030
59 #define RPMTAG_FILEUIDS                 1031 /* internal */
60 #define RPMTAG_FILEGIDS                 1032 /* internal */
61 #define RPMTAG_FILERDEVS                1033
62 #define RPMTAG_FILEMTIMES               1034
63 #define RPMTAG_FILEMD5S                 1035
64 #define RPMTAG_FILELINKTOS              1036
65 #define RPMTAG_FILEFLAGS                1037
66 #define RPMTAG_ROOT                     1038
67 #define RPMTAG_FILEUSERNAME             1039
68 #define RPMTAG_FILEGROUPNAME            1040
69 #define RPMTAG_EXCLUDE                  1041 /* not used - internal */
70 #define RPMTAG_EXCLUSIVE                1042 /* not used - internal */
71 #define RPMTAG_ICON                     1043
72 #define RPMTAG_SOURCERPM                1044
73 #define RPMTAG_FILEVERIFYFLAGS          1045
74 #define RPMTAG_ARCHIVESIZE              1046
75 #define RPMTAG_PROVIDES                 1047
76 #define RPMTAG_REQUIREFLAGS             1048
77 #define RPMTAG_REQUIRENAME              1049
78 #define RPMTAG_REQUIREVERSION           1050
79 #define RPMTAG_NOSOURCE                 1051 /* internal */
80 #define RPMTAG_NOPATCH                  1052 /* internal */
81 #define RPMTAG_CONFLICTFLAGS            1053
82 #define RPMTAG_CONFLICTNAME             1054
83 #define RPMTAG_CONFLICTVERSION          1055
84 #define RPMTAG_DEFAULTPREFIX            1056
85 #define RPMTAG_BUILDROOT                1057
86 #define RPMTAG_INSTALLPREFIX            1058
87 #define RPMTAG_EXCLUDEARCH              1059
88 #define RPMTAG_EXCLUDEOS                1060
89 #define RPMTAG_EXCLUSIVEARCH            1061
90 #define RPMTAG_EXCLUSIVEOS              1062
91 #define RPMTAG_AUTOREQPROV              1063 /* internal */
92 #define RPMTAG_RPMVERSION               1064
93 #define RPMTAG_TRIGGERSCRIPTS           1065 /* internal */
94 #define RPMTAG_TRIGGERNAME              1066 /* internal */
95 #define RPMTAG_TRIGGERVERSION           1067 /* internal */
96 #define RPMTAG_TRIGGERFLAGS             1068 /* internal */
97 #define RPMTAG_TRIGGERINDEX             1069 /* internal */
98 #define RPMTAG_VERIFYSCRIPT             1079
99 #define RPMTAG_CHANGELOGTIME            1080
100 #define RPMTAG_CHANGELOGNAME            1081
101 #define RPMTAG_CHANGELOGTEXT            1082
102 #define RPMTAG_BROKENMD5                1083 /* internal */
103
104 #define RPMTAG_EXTERNAL_TAG             1000000
105
106 #define RPMFILE_STATE_NORMAL            0
107 #define RPMFILE_STATE_REPLACED          1
108 #define RPMFILE_STATE_NOTINSTALLED      2
109 #define RPMFILE_STATE_NETSHARED         3
110
111 /* these can be ORed together */
112 #define RPMFILE_CONFIG                  (1 << 0)
113 #define RPMFILE_DOC                     (1 << 1)
114 #define RPMFILE_SPECFILE                (1 << 2)
115 #define RPMFILE_MISSINGOK               (1 << 3)
116 #define RPMFILE_NOREPLACE               (1 << 4)
117     
118 #define RPMINSTALL_REPLACEPKG           (1 << 0)
119 #define RPMINSTALL_REPLACEFILES         (1 << 1)
120 #define RPMINSTALL_TEST                 (1 << 2)
121 #define RPMINSTALL_UPGRADE              (1 << 3)
122 #define RPMINSTALL_UPGRADETOOLD         (1 << 4)
123 #define RPMINSTALL_NODOCS               (1 << 5)
124 #define RPMINSTALL_NOSCRIPTS            (1 << 6)
125 #define RPMINSTALL_NOARCH               (1 << 7)
126 #define RPMINSTALL_NOOS                 (1 << 8)
127
128 #define RPMUNINSTALL_TEST               (1 << 0)
129 #define RPMUNINSTALL_NOSCRIPTS          (1 << 1)
130
131 #define RPMVERIFY_NONE             0
132 #define RPMVERIFY_MD5              (1 << 0)
133 #define RPMVERIFY_FILESIZE         (1 << 1)
134 #define RPMVERIFY_LINKTO           (1 << 2)
135 #define RPMVERIFY_USER             (1 << 3)
136 #define RPMVERIFY_GROUP            (1 << 4)
137 #define RPMVERIFY_MTIME            (1 << 5)
138 #define RPMVERIFY_MODE             (1 << 6)
139 #define RPMVERIFY_RDEV             (1 << 7)
140 #define RPMVERIFY_ALL              ~(RPMVERIFY_NONE)
141
142 #define RPMSENSE_ANY             0
143 #define RPMSENSE_SERIAL          (1 << 0)
144 #define RPMSENSE_LESS            (1 << 1)
145 #define RPMSENSE_GREATER         (1 << 2)
146 #define RPMSENSE_EQUAL           (1 << 3)
147 #define RPMSENSE_PROVIDES        (1 << 4) /* only used internally by builds */
148 #define RPMSENSE_CONFLICTS       (1 << 5) /* only used internally by builds */
149 #define RPMSENSE_SENSEMASK       15       /* Mask to get senses */
150
151 #define RPMSENSE_TRIGGER_IN      (1 << 16)
152 #define RPMSENSE_TRIGGER_UN      (1 << 17)
153
154 /* Stuff for maintaining "variables" like SOURCEDIR, BUILDDIR, etc */
155
156 #define RPMVAR_SOURCEDIR                0
157 #define RPMVAR_BUILDDIR                 1
158 /* #define RPMVAR_DOCDIR                2 -- No longer used */
159 #define RPMVAR_OPTFLAGS                 3
160 #define RPMVAR_TOPDIR                   4
161 #define RPMVAR_SPECDIR                  5
162 #define RPMVAR_ROOT                     6
163 #define RPMVAR_RPMDIR                   7
164 #define RPMVAR_SRPMDIR                  8
165 /* #define RPMVAR_ARCHSENSITIVE         9  -- No longer used */
166 #define RPMVAR_REQUIREDISTRIBUTION      10
167 /* #define RPMVAR_REQUIREGROUP          11 -- No longer used */
168 #define RPMVAR_REQUIREVENDOR            12
169 #define RPMVAR_DISTRIBUTION             13
170 #define RPMVAR_VENDOR                   14
171 #define RPMVAR_MESSAGELEVEL             15
172 #define RPMVAR_REQUIREICON              16
173 #define RPMVAR_TIMECHECK                17
174 #define RPMVAR_SIGTYPE                  18
175 #define RPMVAR_PGP_PATH                 19
176 #define RPMVAR_PGP_NAME                 20
177 /* #define RPMVAR_PGP_SECRING           21 -- No longer used */
178 /* #define RPMVAR_PGP_PUBRING           22 -- No longer used */
179 #define RPMVAR_EXCLUDEDOCS              23
180 /* #define RPMVAR_BUILDARCH             24 -- No longer used */
181 /* #define RPMVAR_BUILDOS               25 -- No longer used */
182 #define RPMVAR_BUILDROOT                26
183 #define RPMVAR_DBPATH                   27
184 #define RPMVAR_PACKAGER                 28
185 #define RPMVAR_FTPPROXY                 29
186 #define RPMVAR_TMPPATH                  30
187 #define RPMVAR_CPIOBIN                  31
188 #define RPMVAR_FTPPORT                  32
189 #define RPMVAR_NETSHAREDPATH            33
190 #define RPMVAR_DEFAULTDOCDIR            34
191 #define RPMVAR_FIXPERMS                 35
192 #define RPMVAR_GZIPBIN                  36
193 #define RPMVAR_RPMFILENAME              37
194 #define RPMVAR_LASTVAR                  38 /* IMPORTANT to keep right! */
195
196 char *rpmGetVar(int var);
197 int rpmGetBooleanVar(int var);
198 void rpmSetVar(int var, char *val);
199
200 /** rpmrc.c **/
201
202 int rpmReadConfigFiles(char * file, char * arch, char * os, int building);
203 int rpmGetOsNum(void);
204 int rpmGetArchNum(void);
205 char *rpmGetOsName(void);
206 char *rpmGetArchName(void);
207 int rpmShowRC(FILE *f);
208 int rpmArchScore(char * arch);
209 int rpmOsScore(char * os);
210
211 /** **/
212
213 typedef struct rpmdb * rpmdb;
214
215 typedef void (*rpmNotifyFunction)(const unsigned long amount,
216                                const unsigned long total);
217
218 int rpmdbOpen (char * root, rpmdb * dbp, int mode, int perms);
219     /* 0 on error */
220 int rpmdbInit(char * root, int perms);
221     /* nonzero on error */
222 void rpmdbClose (rpmdb db);
223
224 int rpmdbFirstRecNum(rpmdb db);
225 int rpmdbNextRecNum(rpmdb db, unsigned int lastOffset);  
226     /* 0 at end, -1 on error */
227
228 Header rpmdbGetRecord(rpmdb db, unsigned int offset);
229 int rpmdbFindByFile(rpmdb db, char * filespec, dbiIndexSet * matches);
230 int rpmdbFindByGroup(rpmdb db, char * group, dbiIndexSet * matches);
231 int rpmdbFindPackage(rpmdb db, char * name, dbiIndexSet * matches);
232 int rpmdbFindByProvides(rpmdb db, char * provides, dbiIndexSet * matches);
233 int rpmdbFindByRequiredBy(rpmdb db, char * requires, dbiIndexSet * matches);
234 int rpmdbFindByConflicts(rpmdb db, char * conflicts, dbiIndexSet * matches);
235
236 /* these are just convience functions */
237 int rpmdbFindByLabel(rpmdb db, char * label, dbiIndexSet * matches);
238 int rpmdbFindByHeader(rpmdb db, Header h, dbiIndexSet * matches);
239
240 int rpmInstallSourcePackage(char * root, int fd, char ** specFile,
241                             rpmNotifyFunction notify, char * labelFormat);
242 int rpmInstallPackage(char * rootdir, rpmdb db, int fd, char * prefix, 
243                       int flags, rpmNotifyFunction notify, char * labelFormat,
244                       char * netsharedPath);
245 int rpmVersionCompare(Header first, Header second);
246 int rpmRemovePackage(char * root, rpmdb db, unsigned int offset, int flags);
247 int rpmdbRebuild(char * root);
248
249 int rpmVerifyFile(char * root, Header h, int filenum, int * result, 
250                   int omitMask);
251 int rpmVerifyScript(char * root, Header h, int err);
252
253 typedef struct rpmDependencyCheck * rpmDependencies;
254
255 struct rpmDependencyConflict {
256     char * byName, * byVersion, * byRelease;
257     /* these needs fields are misnamed -- they are used for the package
258        which isn't needed as well */
259     char * needsName, * needsVersion;
260     int needsFlags;
261     void * suggestedPackage;                    /* NULL if none */
262     enum { RPMDEP_SENSE_REQUIRES, RPMDEP_SENSE_CONFLICTS } sense;
263 } ;
264
265 rpmDependencies rpmdepDependencies(rpmdb db);          /* db may be NULL */
266 void rpmdepAddPackage(rpmDependencies rpmdep, Header h);
267 void rpmdepAvailablePackage(rpmDependencies rpmdep, Header h, void * key);
268 void rpmdepUpgradePackage(rpmDependencies rpmdep, Header h);
269 void rpmdepRemovePackage(rpmDependencies rpmdep, int dboffset);
270 int rpmdepCheck(rpmDependencies rpmdep, 
271                 struct rpmDependencyConflict ** conflicts, int * numConflicts);
272 void rpmdepDone(rpmDependencies rpmdep);
273 void rpmdepFreeConflicts(struct rpmDependencyConflict * conflicts, int
274                          numConflicts);
275
276 /** messages.c **/
277
278 #define RPMMESS_DEBUG      1
279 #define RPMMESS_VERBOSE    2
280 #define RPMMESS_NORMAL     3
281 #define RPMMESS_WARNING    4
282 #define RPMMESS_ERROR      5
283 #define RPMMESS_FATALERROR 6
284
285 #define RPMMESS_QUIET (RPMMESS_NORMAL + 1)
286
287 void rpmIncreaseVerbosity(void);
288 void rpmSetVerbosity(int level);
289 int rpmGetVerbosity(void);
290 int rpmIsVerbose(void);
291 int rpmIsDebug(void);
292
293 /** rpmlead.c **/
294
295 #define RPMLEAD_BINARY 0
296 #define RPMLEAD_SOURCE 1
297
298 #define RPMLEAD_MAGIC0 0xed
299 #define RPMLEAD_MAGIC1 0xab
300 #define RPMLEAD_MAGIC2 0xee
301 #define RPMLEAD_MAGIC3 0xdb
302
303 /* The lead needs to be 8 byte aligned */
304
305 #define RPMLEAD_SIZE 96
306
307 struct rpmlead {
308     unsigned char magic[4];
309     unsigned char major, minor;
310     short type;
311     short archnum;
312     char name[66];
313     short osnum;
314     short signature_type;
315     char reserved[16];      /* pads to 96 bytes -- 8 byte aligned! */
316 } ;
317
318 struct oldrpmlead {             /* for version 1 packages */
319     unsigned char magic[4];
320     unsigned char major, minor;
321     short type;
322     short archnum;
323     char name[66];
324     unsigned int specOffset;
325     unsigned int specLength;
326     unsigned int archiveOffset;
327 } ;
328
329 /** rpmerr.c **/
330
331 typedef void (*rpmErrorCallBackType)(void);
332
333 void rpmError(int code, char * format, ...);
334 int rpmErrorCode(void);
335 char *rpmErrorString(void);
336 rpmErrorCallBackType rpmErrorSetCallback(rpmErrorCallBackType);
337
338 #define RPMERR_GDBMOPEN         -2      /* gdbm open failed */
339 #define RPMERR_GDBMREAD         -3      /* gdbm read failed */
340 #define RPMERR_GDBMWRITE        -4      /* gdbm write failed */
341 #define RPMERR_INTERNAL         -5      /* internal RPM error */
342 #define RPMERR_DBCORRUPT        -6      /* rpm database is corrupt */
343 #define RPMERR_OLDDBCORRUPT     -7      /* old style rpm database is corrupt */
344 #define RPMERR_OLDDBMISSING     -8      /* old style rpm database is missing */
345 #define RPMERR_NOCREATEDB       -9      /* cannot create new database */
346 #define RPMERR_DBOPEN           -10     /* database open failed */
347 #define RPMERR_DBGETINDEX       -11     /* database get from index failed */
348 #define RPMERR_DBPUTINDEX       -12     /* database get from index failed */
349 #define RPMERR_NEWPACKAGE       -13     /* package is too new to handle */
350 #define RPMERR_BADMAGIC         -14     /* bad magic for an RPM */
351 #define RPMERR_RENAME           -15     /* rename(2) failed */
352 #define RPMERR_UNLINK           -16     /* unlink(2) failed */
353 #define RPMERR_RMDIR            -17     /* rmdir(2) failed */
354 #define RPMERR_PKGINSTALLED     -18     /* package already installed */
355 #define RPMERR_CHOWN            -19     /* chown() call failed */
356 #define RPMERR_NOUSER           -20     /* user does not exist */
357 #define RPMERR_NOGROUP          -21     /* group does not exist */
358 #define RPMERR_MKDIR            -22     /* mkdir() call failed */
359 #define RPMERR_FILECONFLICT     -23     /* file being installed exists */
360 #define RPMERR_RPMRC            -24     /* bad line in rpmrc */
361 #define RPMERR_NOSPEC           -25     /* .spec file is missing */
362 #define RPMERR_NOTSRPM          -26     /* a source rpm was expected */
363 #define RPMERR_FLOCK            -27     /* locking the database failed */
364 #define RPMERR_OLDPACKAGE       -28     /* trying upgrading to old version */
365 #define RPMERR_BADARCH          -29     /* bad architecture or arch mismatch */
366 #define RPMERR_CREATE           -30     /* failed to create a file */
367 #define RPMERR_NOSPACE          -31     /* out of disk space */
368 #define RPMERR_NORELOCATE       -32     /* tried to relocate improper package */
369 #define RPMERR_BADOS            -33     /* bad architecture or arch mismatch */
370 #define RPMMESS_BACKUP          -34     /* backup made during [un]install */
371 #define RPMERR_MTAB             -35     /* failed to read mount table */
372 #define RPMERR_STAT             -36     /* failed to stat something */
373 #define RPMERR_BADDEV           -37     /* file on device not listed in mtab */
374
375 /* spec.c build.c pack.c */
376 #define RPMERR_UNMATCHEDIF      -107    /* unclosed %ifarch or %ifos */
377 #define RPMERR_BADARG           -109
378 #define RPMERR_SCRIPT           -110    /* errors related to script exec */
379 #define RPMERR_READERROR        -111
380 #define RPMERR_UNKNOWNOS        -112
381 #define RPMERR_UNKNOWNARCH      -113
382 #define RPMERR_EXEC             -114
383 #define RPMERR_FORK             -115
384 #define RPMERR_CPIO             -116
385 #define RPMERR_GZIP             -117
386 #define RPMERR_BADSPEC          -118
387 #define RPMERR_LDD              -119    /* couldn't understand ldd output */
388 #define RPMERR_BADFILENAME      -120
389
390 #define RPMERR_BADSIGTYPE       -200    /* Unknown signature type */
391 #define RPMERR_SIGGEN           -201    /* Error generating signature */
392
393 /** signature.c **/
394
395 /**************************************************/
396 /*                                                */
397 /* Signature Tags                                 */
398 /*                                                */
399 /* These go in the sig Header to specify          */
400 /* individual signature types.                    */
401 /*                                                */
402 /**************************************************/
403
404 #define RPMSIGTAG_SIZE                  1000
405 /* the md5 sum was broken *twice* on big endian machines */
406 #define RPMSIGTAG_LEMD5_1               1001
407 #define RPMSIGTAG_PGP                   1002
408 #define RPMSIGTAG_LEMD5_2               1003
409 #define RPMSIGTAG_MD5                   1004
410
411 /**************************************************/
412 /*                                                */
413 /* verifySignature() results                      */
414 /*                                                */
415 /**************************************************/
416
417 /* verifySignature() results */
418 #define RPMSIG_OK        0
419 #define RPMSIG_UNKNOWN   1
420 #define RPMSIG_BAD       2
421 #define RPMSIG_NOKEY     3  /* Do not have the key to check this signature */
422
423 void rpmFreeSignature(Header h);
424
425 int rpmVerifySignature(char *file, int_32 sigTag, void *sig, int count,
426                        char *result);
427
428 int rpmGetFilesystemList(char *** listptr);
429 int rpmGetFilesystemUsage(char ** filelist, int_32 * fssizes, int numFiles,
430                           uint_32 ** usagesPtr, int flags);
431
432 #endif