rpm/build/rpmspec.h

289 lines
5.8 KiB
C

#ifndef _H_SPEC_
#define _H_SPEC_
/** \ingroup rpmbuild
* \file build/rpmspec.h
* The Spec and Package data structures used during build.
*/
/** \ingroup rpmbuild
*/
typedef struct Package_s * Package;
/** \ingroup rpmbuild
*/
struct TriggerFileEntry {
int index;
/*@only@*/ char * fileName;
/*@only@*/ char * script;
/*@only@*/ char * prog;
/*@owned@*/ struct TriggerFileEntry * next;
};
#define RPMBUILD_ISSOURCE (1 << 0)
#define RPMBUILD_ISPATCH (1 << 1)
#define RPMBUILD_ISICON (1 << 2)
#define RPMBUILD_ISNO (1 << 3)
#define RPMBUILD_DEFAULT_LANG "C"
/** \ingroup rpmbuild
*/
struct Source {
/*@owned@*/ char * fullSource;
/*@dependent@*/ char * source; /* Pointer into fullSource */
int flags;
int num;
/*@owned@*/ struct Source * next;
};
/** \ingroup rpmbuild
*/
/*@-typeuse@*/
typedef struct ReadLevelEntry {
int reading;
/*@dependent@*/
struct ReadLevelEntry * next;
} RLE_t;
/*@=typeuse@*/
/** \ingroup rpmbuild
*/
typedef struct OpenFileInfo {
/*@only@*/ const char * fileName;
FD_t fd;
int lineNum;
char readBuf[BUFSIZ];
/*@dependent@*/
char * readPtr;
/*@owned@*/
struct OpenFileInfo * next;
} OFI_t;
/** \ingroup rpmbuild
*/
typedef struct spectag_s {
int t_tag;
int t_startx;
int t_nlines;
/*@only@*/ const char * t_lang;
/*@only@*/ const char * t_msgid;
} * spectag;
/** \ingroup rpmbuild
*/
typedef struct spectags_s {
/*@owned@*/ spectag st_t;
int st_nalloc;
int st_ntags;
} * spectags;
/** \ingroup rpmbuild
*/
typedef struct speclines_s {
/*@only@*/ char **sl_lines;
int sl_nalloc;
int sl_nlines;
} * speclines;
/** \ingroup rpmbuild
* The structure used to store values parsed from a spec file.
*/
struct Spec_s {
/*@only@*/
const char * specFile; /*!< Name of the spec file. */
/*@only@*/
const char * buildRootURL;
/*@only@*/
const char * buildSubdir;
/*@only@*/
const char * rootURL;
/*@owned@*/ /*@null@*/
speclines sl;
/*@owned@*/ /*@null@*/
spectags st;
/*@owned@*/
struct OpenFileInfo * fileStack;
char lbuf[4*BUFSIZ];
char nextpeekc;
/*@dependent@*/
char * nextline;
/*@dependent@*/
char * line;
int lineNum;
/*@owned@*/
struct ReadLevelEntry * readStack;
/*@refcounted@*/
Header buildRestrictions;
/*@owned@*/ /*@null@*/
Spec * BASpecs;
/*@only@*/ /*@null@*/
const char ** BANames;
int BACount;
int recursing; /*!< parse is recursive? */
int force;
int anyarch;
int gotBuildRootURL;
/*@null@*/
char * passPhrase;
int timeCheck;
/*@null@*/
const char * cookie;
/*@owned@*/
struct Source * sources;
int numSources;
int noSource;
/*@only@*/
const char * sourceRpmName;
/*@only@*/
unsigned char * sourcePkgId;
/*@refcounted@*/
Header sourceHeader;
/*@refcounted@*/
rpmfi sourceCpioList;
/*@dependent@*/ /*@null@*/
MacroContext macros;
/*@only@*/
StringBuf prep; /*!< %prep scriptlet. */
/*@only@*/
StringBuf build; /*!< %build scriptlet. */
/*@only@*/
StringBuf install; /*!< %install scriptlet. */
/*@only@*/
StringBuf check; /*!< %check scriptlet. */
/*@only@*/
StringBuf clean; /*!< %clean scriptlet. */
/*@owned@*/
Package packages; /*!< Package list. */
};
/** \ingroup rpmbuild
* The structure used to store values for a package.
*/
struct Package_s {
/*@refcounted@*/
Header header;
/*@refcounted@*/
rpmds ds; /*!< Requires: N = EVR */
/*@refcounted@*/
rpmfi cpioList;
/*@owned@*/
struct Source * icon;
int autoReq;
int autoProv;
/*@only@*/
const char * preInFile; /*!< %pre scriptlet. */
/*@only@*/
const char * postInFile; /*!< %post scriptlet. */
/*@only@*/
const char * preUnFile; /*!< %preun scriptlet. */
/*@only@*/
const char * postUnFile; /*!< %postun scriptlet. */
/*@only@*/
const char * verifyFile; /*!< %verifyscript scriptlet. */
/*@only@*/
StringBuf specialDoc;
/*@only@*/
struct TriggerFileEntry * triggerFiles;
/*@only@*/
const char * fileFile;
/*@only@*/
StringBuf fileList; /* If NULL, package will not be written */
/*@dependent@*/
Package next;
};
#ifdef __cplusplus
extern "C" {
#endif
/** \ingroup rpmbuild
* Create and initialize Spec structure.
* @return spec spec file control structure
*/
/*@only@*/ Spec newSpec(void)
/*@globals rpmGlobalMacroContext @*/
/*@modifies rpmGlobalMacroContext @*/;
/** \ingroup rpmbuild
* Destroy Spec structure.
* @param spec spec file control structure
* @return NULL always
*/
/*@null@*/ Spec freeSpec(/*@only@*/ /*@null@*/ Spec spec)
/*@globals fileSystem, internalState @*/
/*@modifies spec, fileSystem, internalState @*/;
/** \ingroup rpmbuild
* Function to query spec file(s).
* @param ts transaction set
* @param qva parsed query/verify options
* @param arg query argument
* @return 0 on success, else no. of failures
*/
int rpmspecQuery(rpmts ts, QVA_t qva, const char * arg)
/*@globals rpmGlobalMacroContext, h_errno,
fileSystem, internalState @*/
/*@modifies ts, qva, rpmGlobalMacroContext,
fileSystem, internalState @*/;
/** \ingroup rpmbuild
*/
struct OpenFileInfo * newOpenFileInfo(void)
/*@*/;
/** \ingroup rpmbuild
* @param spec spec file control structure
* @param h
* @param tag
* @param lang
*/
spectag stashSt(Spec spec, Header h, int tag, const char * lang)
/*@modifies spec->st @*/;
/** \ingroup rpmbuild
* @param spec spec file control structure
* @param pkg package control
* @param field
* @param tag
*/
int addSource(Spec spec, Package pkg, const char * field, int tag)
/*@globals rpmGlobalMacroContext, h_errno @*/
/*@modifies spec->sources, spec->numSources,
spec->st, spec->macros,
pkg->icon,
rpmGlobalMacroContext @*/;
/** \ingroup rpmbuild
* @param spec spec file control structure
* @param field
* @param tag
*/
int parseNoSource(Spec spec, const char * field, int tag)
/*@modifies nothing @*/;
#ifdef __cplusplus
}
#endif
#endif /* _H_SPEC_ */