Extract pkgconfig and libtool dependencies automatically.
[platform/upstream/rpm.git] / build / rpmfc.h
1 #ifndef _H_RPMFC_
2 #define _H_RPMFC_
3
4 #undef  FILE_RCSID
5 #include "magic.h"
6
7 /*@-exportlocal@*/
8 /*@unchecked@*/
9 extern int _rpmfc_debug;
10 /*@=exportlocal@*/
11
12 /**
13  */
14 typedef /*@abstract@*/ struct rpmfc_s * rpmfc;
15
16 /**
17  */
18 struct rpmfc_s {
19     int nfiles;         /*!< no. of files */
20     int fknown;         /*!< no. of classified files */
21     int fwhite;         /*!< no. of "white" files */
22     int ix;             /*!< current file index */
23     int skipProv;       /*!< Don't auto-generate Provides:? */
24     int skipReq;        /*!< Don't auto-generate Requires:? */
25     int tracked;        /*!< Versioned Provides: tracking dependency added? */
26     size_t brlen;       /*!< strlen(spec->buildRoot) */
27
28     ARGV_t fn;          /*!< (#files) file names */
29     ARGI_t fcolor;      /*!< (#files) file colors */
30     ARGI_t fcdictx;     /*!< (#files) file class dictionary indices */
31     ARGI_t fddictx;     /*!< (#files) file depends dictionary start */
32     ARGI_t fddictn;     /*!< (#files) file depends dictionary no. entries */
33     ARGV_t cdict;       /*!< (#classes) file class dictionary */
34     ARGV_t ddict;       /*!< (#dependencies) file depends dictionary */
35     ARGI_t ddictx;      /*!< (#dependencies) file->dependency mapping */
36
37 /*@relnull@*/
38     rpmds provides;     /*!< (#provides) package provides */
39 /*@relnull@*/
40     rpmds requires;     /*!< (#requires) package requires */
41
42     StringBuf sb_java;  /*!< concatenated list of java colored files. */
43     StringBuf sb_perl;  /*!< concatenated list of perl colored files. */
44     StringBuf sb_python;/*!< concatenated list of python colored files. */
45
46 };
47
48 /**
49  */
50 enum FCOLOR_e {
51     RPMFC_BLACK                 = 0,
52     RPMFC_ELF32                 = (1 <<  0),
53     RPMFC_ELF64                 = (1 <<  1),
54 #define RPMFC_ELF       (RPMFC_ELF32|RPMFC_ELF64)
55
56     RPMFC_PKGCONFIG             = (1 <<  5),
57     RPMFC_LIBTOOL               = (1 <<  6),
58     RPMFC_MODULE                = (1 <<  7),
59     RPMFC_EXECUTABLE            = (1 <<  8),
60     RPMFC_SCRIPT                = (1 <<  9),
61     RPMFC_TEXT                  = (1 << 10),
62     RPMFC_DATA                  = (1 << 11),    /* XXX unused */
63     RPMFC_DOCUMENT              = (1 << 12),
64     RPMFC_STATIC                = (1 << 13),
65     RPMFC_NOTSTRIPPED           = (1 << 14),
66     RPMFC_COMPRESSED            = (1 << 15),
67
68     RPMFC_DIRECTORY             = (1 << 16),
69     RPMFC_SYMLINK               = (1 << 17),
70     RPMFC_DEVICE                = (1 << 18),
71     RPMFC_LIBRARY               = (1 << 19),
72     RPMFC_ARCHIVE               = (1 << 20),
73     RPMFC_FONT                  = (1 << 21),
74     RPMFC_IMAGE                 = (1 << 22),
75     RPMFC_MANPAGE               = (1 << 23),
76
77     RPMFC_PERL                  = (1 << 24),
78     RPMFC_JAVA                  = (1 << 25),
79     RPMFC_PYTHON                = (1 << 26),
80     RPMFC_PHP                   = (1 << 27),
81     RPMFC_TCL                   = (1 << 28),
82     RPMFC_MONO                  = (1 << 6),
83
84     RPMFC_WHITE                 = (1 << 29),
85     RPMFC_INCLUDE               = (1 << 30),
86     RPMFC_ERROR                 = (1 << 31)
87 };
88 typedef enum FCOLOR_e FCOLOR_t;
89
90 /**
91  */
92 struct rpmfcTokens_s {
93 /*@observer@*/
94     const char * token;
95     int colors;
96 };
97
98 /**
99  */
100 typedef struct rpmfcTokens_s * rpmfcToken;
101
102 #ifdef __cplusplus
103 extern "C" {
104 #endif
105
106 /**
107  * Return helper output.
108  * @param av            helper argv (with possible macros)
109  * @param sb_stdin      helper input
110  * @retval *sb_stdoutp  helper output
111  * @param failnonzero   IS non-zero helper exit status a failure?
112  */
113 int rpmfcExec(ARGV_t av, StringBuf sb_stdin, /*@out@*/ StringBuf * sb_stdoutp,
114                 int failnonzero)
115         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
116         /*@modifies *sb_stdoutp, rpmGlobalMacroContext,
117                 fileSystem, internalState @*/
118         /*@requires maxSet(sb_stdoutp) >= 0 @*/;
119
120 /**
121  * Return file color given file(1) string.
122  * @param fmstr         file(1) string
123  * @return              file color
124  */
125 /*@-exportlocal@*/
126 int rpmfcColoring(const char * fmstr)
127         /*@*/;
128 /*@=exportlocal@*/
129
130 /**
131  * Print results of file classification.
132  * @todo Remove debugging routine.
133  * @param msg           message prefix (NULL for none)
134  * @param fc            file classifier
135  * @param fp            output file handle (NULL for stderr)
136  */
137 /*@-exportlocal@*/
138 void rpmfcPrint(/*@null@*/ const char * msg, rpmfc fc, /*@null@*/ FILE * fp)
139         /*@globals fileSystem @*/
140         /*@modifies *fp, fc, fileSystem @*/;
141 /*@=exportlocal@*/
142
143 /**
144  * Destroy a file classifier.
145  * @param fc            file classifier
146  * @return              NULL always
147  */
148 /*@-exportlocal@*/
149 /*@null@*/
150 rpmfc rpmfcFree(/*@only@*/ /*@null@*/ rpmfc fc)
151         /*@modifies fc @*/;
152 /*@=exportlocal@*/
153
154 /**
155  * Create a file classifier.
156  * @return              new file classifier
157  */
158 /*@-exportlocal@*/
159 rpmfc rpmfcNew(void)
160         /*@*/;
161 /*@=exportlocal@*/
162
163 /**
164  * Build file class dictionary and mappings.
165  * @param fc            file classifier
166  * @param argv          files to classify
167  * @param fmode         files mode_t array (or NULL)
168  * @return              0 on success
169  */
170 /*@-exportlocal@*/
171 int rpmfcClassify(rpmfc fc, ARGV_t argv, /*@null@*/ int16_t * fmode)
172         /*@globals fileSystem, internalState @*/
173         /*@modifies fc, fileSystem, internalState @*/;
174 /*@=exportlocal@*/
175
176 /**
177  * Build file/package dependency dictionary and mappings.
178  * @param fc            file classifier
179  * @return              0 on success
180  */
181 /*@-exportlocal@*/
182 int rpmfcApply(rpmfc fc)
183         /*@modifies fc @*/;
184 /*@=exportlocal@*/
185
186 /**
187  * Generate package dependencies.
188  * @param spec          spec file control
189  * @param pkg           package control
190  * @return              0 on success
191  */
192 int rpmfcGenerateDepends(const Spec spec, Package pkg)
193         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
194         /*@modifies pkg->cpioList, pkg->header,
195                 rpmGlobalMacroContext, fileSystem, internalState @*/;
196
197 #ifdef __cplusplus
198 }
199 #endif
200
201 #endif /* _H_RPMFC_ */