Use Fopen almost everywhere.
[platform/upstream/rpm.git] / build / rpmspec.h
1 #ifndef _H_SPEC_
2 #define _H_SPEC_
3
4 typedef struct SpecStruct *Spec;
5 #include "rpmmacro.h"
6
7 #if 0
8 struct ReqProvTrigger {
9     int flags;
10     char *name;
11     char *version;
12     int index;      /* Only used for triggers */
13     struct ReqProvTrigger *next;
14 };
15 #endif
16
17 struct TriggerFileEntry {
18     int index;
19     /*@only@*/ char *fileName;
20     /*@only@*/ char *script;
21     /*@only@*/ char *prog;
22     /*@owned@*/ struct TriggerFileEntry *next;
23 };
24
25 #define RPMBUILD_ISSOURCE     1
26 #define RPMBUILD_ISPATCH     (1 << 1)
27 #define RPMBUILD_ISICON      (1 << 2)
28 #define RPMBUILD_ISNO        (1 << 3)
29
30 #define RPMBUILD_DEFAULT_LANG "C"
31
32 struct Source {
33     /*@owned@*/ char *fullSource;
34     /*@dependent@*/ char *source;     /* Pointer into fullSource */
35     int flags;
36     int num;
37     /*@owned@*/ struct Source *next;
38 };
39
40 typedef struct ReadLevelEntry {
41     int reading;
42     /*@dependent@*/ struct ReadLevelEntry *next;
43 } RLE_t;
44
45 typedef struct OpenFileInfo {
46     /*@only@*/ char *fileName;
47     /*@dependent@*/ FD_t fd;
48     int lineNum;
49     char readBuf[BUFSIZ];
50     /*@dependent@*/ char *readPtr;
51     /*@owned@*/ struct OpenFileInfo *next;
52 } OFI_t;
53
54 struct spectag {
55     int t_tag;
56     int t_startx;
57     int t_nlines;
58     /*@only@*/ const char *t_lang;
59     /*@only@*/ const char *t_msgid;
60 };
61
62
63 struct spectags {
64     /*@owned@*/ struct spectag *st_t;
65     int st_nalloc;
66     int st_ntags;
67 };
68
69 struct speclines {
70     /*@only@*/ char **sl_lines;
71     int sl_nalloc;
72     int sl_nlines;
73 };
74
75 struct SpecStruct {
76     /*@only@*/ const char *specFile;
77     /*@only@*/ const char *sourceRpmName;
78
79     /*@owned@*/ struct speclines *sl;
80     /*@owned@*/ struct spectags *st;
81
82     /*@owned@*/ struct OpenFileInfo *fileStack;
83     char lbuf[BUFSIZ];
84     char nextpeekc;
85     /*@dependent@*/ char *nextline;
86     /*@dependent@*/ char *line;
87     int lineNum;
88
89     /*@owned@*/ struct ReadLevelEntry *readStack;
90
91     /*@refcounted@*/ Header buildRestrictions;
92     /*@owned@*/ struct SpecStruct **buildArchitectureSpecs;
93     /*@only@*/ const char ** buildArchitectures;
94     int buildArchitectureCount;
95     int inBuildArchitectures;
96
97     int force;
98     int anyarch;
99
100     int gotBuildRoot;
101     /*@only@*/ const char *buildRoot;
102     /*@only@*/ const char *buildSubdir;
103
104     char *passPhrase;
105     int timeCheck;
106     char *cookie;
107
108     /*@owned@*/ struct Source *sources;
109     int numSources;
110     int noSource;
111
112     /*@refcounted@*/ Header sourceHeader;
113     int sourceCpioCount;
114     /*@owned@*/ struct cpioFileMapping *sourceCpioList;
115
116     /*@dependent@*/ struct MacroContext *macros;
117
118     /*@only@*/ const char *rootdir;
119     /*@only@*/ StringBuf prep;
120     /*@only@*/ StringBuf build;
121     /*@only@*/ StringBuf install;
122     /*@only@*/ StringBuf clean;
123
124     /*@owned@*/ struct PackageStruct *packages;
125 };
126
127 struct PackageStruct {
128     /*@refcounted@*/ Header header;
129
130     int cpioCount;
131     /*@owned@*/ struct cpioFileMapping *cpioList;
132
133     /*@owned@*/ struct Source *icon;
134
135     int autoReq;
136     int autoProv;
137
138     char *preInFile;
139     char *postInFile;
140     char *preUnFile;
141     char *postUnFile;
142     char *verifyFile;
143
144     /*@only@*/ StringBuf specialDoc;
145
146 #if 0
147     struct ReqProvTrigger *triggers;
148     char *triggerScripts;
149 #endif
150
151     /*@only@*/ struct TriggerFileEntry *triggerFiles;
152
153     /*@only@*/ char *fileFile;
154     /*@only@*/ StringBuf fileList; /* If NULL, package will not be written */
155
156     /*@dependent@*/ struct PackageStruct *next;
157 };
158
159 typedef struct PackageStruct *Package;
160
161 #ifdef __cplusplus
162 extern "C" {
163 #endif
164
165 /*@only@*/ Spec newSpec(void);
166 void freeSpec(/*@only@*/ Spec spec);
167 extern void (*freeSpecVec) (Spec spec); /* XXX FIXME */
168
169 struct OpenFileInfo * newOpenFileInfo(void);
170 struct spectag *stashSt(Spec spec, Header h, int tag, const char *lang);
171
172 int addSource(Spec spec, Package pkg, const char *field, int tag);
173 int parseNoSource(Spec spec, const char *field, int tag);
174
175 #ifdef __cplusplus
176 }
177 #endif
178
179 #endif /* _H_SPEC_ */