summaryrefslogtreecommitdiff
path: root/lib/rpmmacro.h
blob: 9642e556fca477131ed91459bdd2915936e9a563 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef _H_MACRO_
#define	_H_MACRO_

typedef /*@abstract@*/ struct MacroEntry {
	struct MacroEntry *prev;
	const char *name;	/* Macro name */
	const char *opts;	/* Macro parameters (ala getopt) */
	const char *body;	/* Macro body */
	int	used;		/* No. of expansions */
	int	level;
} MacroEntry;

typedef /*@abstract@*/ struct MacroContext {
	MacroEntry **	macroTable;
	int		macrosAllocated;
	int		firstFree;
} MacroContext;

extern MacroContext globalMacroContext;

/*
 * Markers for types of macros added throughout rpm.
 */
#define	RMIL_MACROFILES	-9
#define	RMIL_RPMRC	-7
#define	RMIL_TARBALL	-5
#define	RMIL_SPEC	-3
#define	RMIL_OLDSPEC	-1
#define	RMIL_GLOBAL	0

#ifndef	__P
#ifdef __STDC__
#define	__P(protos)	protos
#else
#define	__P(protos)	()
#endif
#endif

#ifdef __cplusplus
extern "C" {
#endif

#define COMPRESSED_NOT   0
#define COMPRESSED_OTHER 1
#define COMPRESSED_BZIP2 2

int isCompressed(char *file, int *compressed);

void	initMacros	__P((MacroContext *mc, const char *macrofile));
void	freeMacros	__P((MacroContext *mc));

void	addMacro	__P((MacroContext *mc, const char *n, const char *o, const char *b, int depth));
void	delMacro	__P((MacroContext *mc, const char *n));
int	expandMacros	__P((void *spec, MacroContext *mc, char *sbuf, size_t sbuflen));

const char *getMacroBody __P((MacroContext *mc, const char *name));

#ifdef __cplusplus
}
#endif

#endif	/* _H_ MACRO_ */