654 lines
20 KiB
C
654 lines
20 KiB
C
#include "rpmsystem-py.h"
|
|
|
|
#include <rpm/rpmlib.h> /* rpmMachineScore, rpmReadConfigFiles */
|
|
#include <rpm/rpmtag.h>
|
|
#include <rpm/rpmdb.h>
|
|
#include <rpm/rpmsq.h>
|
|
#include <rpm/rpmlog.h>
|
|
#include <rpm/rpmmacro.h>
|
|
#include <rpm/rpmsign.h>
|
|
|
|
#include "header-py.h"
|
|
#include "rpmarchive-py.h"
|
|
#include "rpmds-py.h"
|
|
#include "rpmfd-py.h"
|
|
#include "rpmfiles-py.h"
|
|
#include "rpmkeyring-py.h"
|
|
#include "rpmmi-py.h"
|
|
#include "rpmii-py.h"
|
|
#include "rpmps-py.h"
|
|
#include "rpmmacro-py.h"
|
|
#include "rpmstrpool-py.h"
|
|
#include "rpmtd-py.h"
|
|
#include "rpmte-py.h"
|
|
#include "rpmts-py.h"
|
|
#include "rpmver-py.h"
|
|
#include "spec-py.h"
|
|
|
|
/** \ingroup python
|
|
* \name Module: rpm
|
|
*/
|
|
|
|
PyObject * pyrpmError;
|
|
|
|
static PyObject * archScore(PyObject * self, PyObject * arg)
|
|
{
|
|
const char * arch;
|
|
|
|
if (!PyArg_Parse(arg, "s", &arch))
|
|
return NULL;
|
|
|
|
return Py_BuildValue("i", rpmMachineScore(RPM_MACHTABLE_INSTARCH, arch));
|
|
}
|
|
|
|
static PyObject * blockSignals(PyObject * self, PyObject *arg)
|
|
{
|
|
int block;
|
|
if (!PyArg_Parse(arg, "p", &block)) return NULL;
|
|
|
|
return Py_BuildValue("i", rpmsqBlock(block ? SIG_BLOCK : SIG_UNBLOCK));
|
|
}
|
|
|
|
|
|
static PyObject * setLogFile (PyObject * self, PyObject *arg)
|
|
{
|
|
FILE *fp;
|
|
int fdno = PyObject_AsFileDescriptor(arg);
|
|
|
|
if (fdno >= 0) {
|
|
/* XXX we dont know the mode here.. guessing append for now */
|
|
fp = fdopen(fdno, "a");
|
|
if (fp == NULL) {
|
|
PyErr_SetFromErrno(PyExc_IOError);
|
|
return NULL;
|
|
}
|
|
} else if (arg == Py_None) {
|
|
fp = NULL;
|
|
} else {
|
|
PyErr_SetString(PyExc_TypeError, "file object or None expected");
|
|
return NULL;
|
|
}
|
|
|
|
(void) rpmlogSetFile(fp);
|
|
Py_RETURN_NONE;
|
|
}
|
|
|
|
static PyObject *
|
|
setVerbosity (PyObject * self, PyObject * arg)
|
|
{
|
|
int level;
|
|
|
|
if (!PyArg_Parse(arg, "i", &level))
|
|
return NULL;
|
|
|
|
rpmSetVerbosity(level);
|
|
|
|
Py_RETURN_NONE;
|
|
}
|
|
|
|
static PyObject * setStats (PyObject * self, PyObject * arg)
|
|
{
|
|
if (!PyArg_Parse(arg, "i", &_rpmts_stats))
|
|
return NULL;
|
|
|
|
Py_RETURN_NONE;
|
|
}
|
|
|
|
static PyObject * doLog(PyObject * self, PyObject * args, PyObject *kwds)
|
|
{
|
|
int code;
|
|
const char *msg;
|
|
char * kwlist[] = {"code", "msg", NULL};
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwds, "is", kwlist, &code, &msg))
|
|
return NULL;
|
|
|
|
rpmlog(code, "%s", msg);
|
|
Py_RETURN_NONE;
|
|
}
|
|
|
|
static PyObject * reloadConfig(PyObject * self, PyObject * args, PyObject *kwds)
|
|
{
|
|
const char * target = NULL;
|
|
char * kwlist[] = { "target", NULL };
|
|
int rc;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|s", kwlist, &target))
|
|
return NULL;
|
|
|
|
rpmFreeMacros(NULL);
|
|
rpmFreeRpmrc();
|
|
rc = rpmReadConfigFiles(NULL, target) ;
|
|
|
|
return PyBool_FromLong(rc == 0);
|
|
}
|
|
|
|
static int parseSignArgs(PyObject * args, PyObject *kwds,
|
|
const char **path, struct rpmSignArgs *sargs)
|
|
{
|
|
char * kwlist[] = { "path", "keyid", "hashalgo", NULL };
|
|
|
|
memset(sargs, 0, sizeof(*sargs));
|
|
return PyArg_ParseTupleAndKeywords(args, kwds, "s|si", kwlist,
|
|
path, &sargs->keyid, &sargs->hashalgo);
|
|
}
|
|
|
|
static PyObject * addSign(PyObject * self, PyObject * args, PyObject *kwds)
|
|
{
|
|
const char *path = NULL;
|
|
struct rpmSignArgs sargs;
|
|
|
|
if (!parseSignArgs(args, kwds, &path, &sargs))
|
|
return NULL;
|
|
|
|
return PyBool_FromLong(rpmPkgSign(path, &sargs) == 0);
|
|
}
|
|
|
|
static PyObject * delSign(PyObject * self, PyObject * args, PyObject *kwds)
|
|
{
|
|
const char *path = NULL;
|
|
struct rpmSignArgs sargs;
|
|
|
|
if (!parseSignArgs(args, kwds, &path, &sargs))
|
|
return NULL;
|
|
|
|
return PyBool_FromLong(rpmPkgDelSign(path, &sargs) == 0);
|
|
}
|
|
|
|
static PyMethodDef rpmModuleMethods[] = {
|
|
{ "addMacro", (PyCFunction) rpmmacro_AddMacro, METH_VARARGS|METH_KEYWORDS,
|
|
"rpmPushMacro(macro, value)\n"
|
|
},
|
|
{ "delMacro", (PyCFunction) rpmmacro_DelMacro, METH_VARARGS|METH_KEYWORDS,
|
|
"rpmPopMacro(macro)\n"
|
|
},
|
|
{ "expandMacro", (PyCFunction) rpmmacro_ExpandMacro, METH_VARARGS|METH_KEYWORDS,
|
|
"expandMacro(string, numeric=False) -- expands a string containing macros\n\n"
|
|
"Returns an int if numeric is True. 'Y' or 'y' returns 1,\n'N' or 'n' returns 0\nAn undefined macro returns 0."},
|
|
|
|
{ "archscore", (PyCFunction) archScore, METH_O,
|
|
"archscore(archname) -- How well does an architecture fit on this machine\n\n"
|
|
"0 for non matching arch names\n1 for best arch\nhigher numbers for less fitting arches\n(e.g. 2 for \"i586\" on an i686 machine)" },
|
|
|
|
{ "blockSignals", (PyCFunction) blockSignals, METH_O,
|
|
"blocksignals(True/False) -- Block/unblock signals, refcounted."},
|
|
|
|
{ "log", (PyCFunction) doLog, METH_VARARGS|METH_KEYWORDS,
|
|
"log(level, msg) -- Write msg to log if level is selected to be logged.\n\n"
|
|
"level must be one of the RPMLOG_* constants."},
|
|
{ "setLogFile", (PyCFunction) setLogFile, METH_O,
|
|
"setLogFile(file) -- set file to write log messages to or None." },
|
|
|
|
{ "versionCompare", (PyCFunction) versionCompare, METH_VARARGS|METH_KEYWORDS,
|
|
"versionCompare(version0, version1) -- compares two version strings\n\n"
|
|
"Returns 1 if version0 > version1\n"
|
|
"Returns 0 if version0 == version1\n"
|
|
"Returns -1 if version0 < version1\n"},
|
|
{ "labelCompare", (PyCFunction) labelCompare, METH_VARARGS|METH_KEYWORDS,
|
|
"labelCompare(version0, version1) -- as versionCompare()\n\n"
|
|
"but arguments are tuples of of strings for (epoch, version, release)"},
|
|
{ "setVerbosity", (PyCFunction) setVerbosity, METH_O,
|
|
"setVerbosity(level) -- Set log level. See RPMLOG_* constants." },
|
|
{ "setStats", (PyCFunction) setStats, METH_O,
|
|
"setStats(bool) -- Set if timing stats are printed after a transaction."},
|
|
{ "reloadConfig", (PyCFunction) reloadConfig, METH_VARARGS|METH_KEYWORDS,
|
|
"reloadConfig(target=None) -- Reload config from files.\n\n"
|
|
"Set all macros and settings accordingly."},
|
|
{ "addSign", (PyCFunction) addSign, METH_VARARGS|METH_KEYWORDS, NULL },
|
|
{ "delSign", (PyCFunction) delSign, METH_VARARGS|METH_KEYWORDS, NULL },
|
|
{ NULL }
|
|
} ;
|
|
|
|
static char rpm__doc__[] = "";
|
|
|
|
/*
|
|
* Add rpm tag dictionaries to the module
|
|
*/
|
|
static void addRpmTags(PyObject *module)
|
|
{
|
|
PyObject *pyval, *pyname, *dict = PyDict_New();
|
|
rpmtd names = rpmtdNew();
|
|
rpmTagGetNames(names, 1);
|
|
const char *tagname, *shortname;
|
|
rpmTagVal tagval;
|
|
|
|
while ((tagname = rpmtdNextString(names))) {
|
|
shortname = tagname + strlen("RPMTAG_");
|
|
tagval = rpmTagGetValue(shortname);
|
|
|
|
PyModule_AddIntConstant(module, tagname, tagval);
|
|
pyval = PyLong_FromLong(tagval);
|
|
pyname = utf8FromString(shortname);
|
|
PyDict_SetItem(dict, pyval, pyname);
|
|
Py_DECREF(pyval);
|
|
Py_DECREF(pyname);
|
|
}
|
|
PyModule_AddObject(module, "tagnames", dict);
|
|
rpmtdFree(names);
|
|
}
|
|
|
|
static int initModule(PyObject *m);
|
|
|
|
static int rpmModuleTraverse(PyObject *m, visitproc visit, void *arg) {
|
|
Py_VISIT(pyrpmError);
|
|
return 0;
|
|
}
|
|
|
|
static int rpmModuleClear(PyObject *m) {
|
|
Py_CLEAR(pyrpmError);
|
|
return 0;
|
|
}
|
|
|
|
static struct PyModuleDef moduledef = {
|
|
PyModuleDef_HEAD_INIT,
|
|
"_rpm", /* m_name */
|
|
rpm__doc__, /* m_doc */
|
|
0, /* m_size */
|
|
rpmModuleMethods,
|
|
NULL, /* m_reload */
|
|
rpmModuleTraverse,
|
|
rpmModuleClear,
|
|
NULL /* m_free */
|
|
};
|
|
|
|
PyObject *
|
|
PyInit__rpm(void);
|
|
|
|
static int moduleInitialized = 0;
|
|
|
|
PyObject *
|
|
PyInit__rpm(void)
|
|
{
|
|
/* We store pointers to our Python type objects in global variables,
|
|
* which would get clobbered if the initialization code could run
|
|
* several times. Explicitly disallow that.
|
|
*
|
|
* This means the extension cannot be unloaded and reloaded, nor used
|
|
* in multiple Python interpreters. The limitation could be lifted
|
|
* in the future by:
|
|
* - storing *_Type in module state rather than C static variables.
|
|
* - implementing traverse, clear & dealloc slots for proper reference
|
|
* counting (right now the types are treated as immortal).
|
|
*/
|
|
|
|
if (moduleInitialized) {
|
|
PyErr_SetString(PyExc_ImportError,
|
|
"cannot load rpm module more than once per process");
|
|
return NULL;
|
|
}
|
|
moduleInitialized = 1;
|
|
|
|
PyObject * m;
|
|
m = PyModule_Create(&moduledef);
|
|
initModule(m);
|
|
return m;
|
|
}
|
|
|
|
/* Create a type object based on a Spec, and add it to the module. */
|
|
static int initAndAddType(PyObject *m, PyTypeObject **type, PyType_Spec *spec,
|
|
char *name)
|
|
{
|
|
if (!*type) {
|
|
*type = (PyTypeObject *)PyType_FromSpec(spec);
|
|
if (!*type) return 0;
|
|
}
|
|
/* We intentionally leak a reference to `type` (only once per type per
|
|
* process).
|
|
*/
|
|
Py_INCREF(*type);
|
|
/* Reference counting for PyModule_AddObject is tricky (see
|
|
* PyModule_AddObject docs). But let's do it right, as if we haven't just
|
|
* leaked.
|
|
* (Simpler API, `PyModule_AddObjectRef`, is only in Python 3.10+.)
|
|
*/
|
|
if (PyModule_AddObject(m, name, (PyObject *) *type) < 0) {
|
|
Py_DECREF(*type);
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* Module initialization: */
|
|
static int initModule(PyObject *m)
|
|
{
|
|
PyObject * d;
|
|
|
|
/* failure to initialize rpm (crypto and all) is rather fatal too... */
|
|
if (rpmReadConfigFiles(NULL, NULL) == -1)
|
|
return 0;
|
|
|
|
d = PyModule_GetDict(m);
|
|
|
|
pyrpmError = PyErr_NewException("_rpm.error", NULL, NULL);
|
|
if (pyrpmError != NULL)
|
|
PyDict_SetItemString(d, "error", pyrpmError);
|
|
|
|
if (!initAndAddType(m, &hdr_Type, &hdr_Type_Spec, "hdr")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmarchive_Type, &rpmarchive_Type_Spec, "archive")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmds_Type, &rpmds_Type_Spec, "ds")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmfd_Type, &rpmfd_Type_Spec, "fd")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmfile_Type, &rpmfile_Type_Spec, "file")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmfiles_Type, &rpmfiles_Type_Spec, "files")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmKeyring_Type, &rpmKeyring_Type_Spec, "keyring")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmmi_Type, &rpmmi_Type_Spec, "mi")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmii_Type, &rpmii_Type_Spec, "ii")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmProblem_Type, &rpmProblem_Type_Spec, "prob")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmPubkey_Type, &rpmPubkey_Type_Spec, "pubkey")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmstrPool_Type, &rpmstrPool_Type_Spec, "strpool")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmte_Type, &rpmte_Type_Spec, "te")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmts_Type, &rpmts_Type_Spec, "ts")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &rpmver_Type, &rpmver_Type_Spec, "ver")) {
|
|
return 0;
|
|
}
|
|
|
|
if (!initAndAddType(m, &spec_Type, &spec_Type_Spec, "spec")) {
|
|
return 0;
|
|
}
|
|
if (!initAndAddType(m, &specPkg_Type, &specPkg_Type_Spec, "specPkg")) {
|
|
return 0;
|
|
}
|
|
|
|
addRpmTags(m);
|
|
|
|
PyModule_AddStringConstant(m, "__version__", RPMVERSION);
|
|
|
|
PyModule_AddObject(m, "header_magic",
|
|
PyBytes_FromStringAndSize((const char *)rpm_header_magic, 8));
|
|
|
|
#define REGISTER_ENUM(val) PyModule_AddIntConstant(m, #val, val)
|
|
|
|
REGISTER_ENUM(RPMTAG_NOT_FOUND);
|
|
|
|
REGISTER_ENUM(RPMRC_OK);
|
|
REGISTER_ENUM(RPMRC_NOTFOUND);
|
|
REGISTER_ENUM(RPMRC_FAIL);
|
|
REGISTER_ENUM(RPMRC_NOTTRUSTED);
|
|
REGISTER_ENUM(RPMRC_NOKEY);
|
|
|
|
REGISTER_ENUM(RPMFILE_STATE_NORMAL);
|
|
REGISTER_ENUM(RPMFILE_STATE_REPLACED);
|
|
REGISTER_ENUM(RPMFILE_STATE_NOTINSTALLED);
|
|
REGISTER_ENUM(RPMFILE_STATE_NETSHARED);
|
|
REGISTER_ENUM(RPMFILE_STATE_WRONGCOLOR);
|
|
|
|
REGISTER_ENUM(RPMFILE_CONFIG);
|
|
REGISTER_ENUM(RPMFILE_DOC);
|
|
REGISTER_ENUM(RPMFILE_ICON);
|
|
REGISTER_ENUM(RPMFILE_MISSINGOK);
|
|
REGISTER_ENUM(RPMFILE_NOREPLACE);
|
|
REGISTER_ENUM(RPMFILE_SPECFILE);
|
|
REGISTER_ENUM(RPMFILE_GHOST);
|
|
REGISTER_ENUM(RPMFILE_LICENSE);
|
|
REGISTER_ENUM(RPMFILE_README);
|
|
REGISTER_ENUM(RPMFILE_PUBKEY);
|
|
REGISTER_ENUM(RPMFILE_ARTIFACT);
|
|
|
|
REGISTER_ENUM(RPMFI_FLAGS_ERASE);
|
|
REGISTER_ENUM(RPMFI_FLAGS_INSTALL);
|
|
REGISTER_ENUM(RPMFI_FLAGS_VERIFY);
|
|
REGISTER_ENUM(RPMFI_FLAGS_QUERY);
|
|
REGISTER_ENUM(RPMFI_FLAGS_FILETRIGGER);
|
|
REGISTER_ENUM(RPMFI_FLAGS_ONLY_FILENAMES);
|
|
|
|
REGISTER_ENUM(RPMDEP_SENSE_REQUIRES);
|
|
REGISTER_ENUM(RPMDEP_SENSE_CONFLICTS);
|
|
|
|
REGISTER_ENUM(RPMSENSE_ANY);
|
|
REGISTER_ENUM(RPMSENSE_LESS);
|
|
REGISTER_ENUM(RPMSENSE_GREATER);
|
|
REGISTER_ENUM(RPMSENSE_EQUAL);
|
|
REGISTER_ENUM(RPMSENSE_POSTTRANS);
|
|
REGISTER_ENUM(RPMSENSE_PREREQ);
|
|
REGISTER_ENUM(RPMSENSE_PRETRANS);
|
|
REGISTER_ENUM(RPMSENSE_INTERP);
|
|
REGISTER_ENUM(RPMSENSE_SCRIPT_PRE);
|
|
REGISTER_ENUM(RPMSENSE_SCRIPT_POST);
|
|
REGISTER_ENUM(RPMSENSE_SCRIPT_PREUN);
|
|
REGISTER_ENUM(RPMSENSE_SCRIPT_POSTUN);
|
|
REGISTER_ENUM(RPMSENSE_SCRIPT_VERIFY);
|
|
REGISTER_ENUM(RPMSENSE_FIND_REQUIRES);
|
|
REGISTER_ENUM(RPMSENSE_FIND_PROVIDES);
|
|
REGISTER_ENUM(RPMSENSE_TRIGGERIN);
|
|
REGISTER_ENUM(RPMSENSE_TRIGGERUN);
|
|
REGISTER_ENUM(RPMSENSE_TRIGGERPOSTUN);
|
|
REGISTER_ENUM(RPMSENSE_RPMLIB);
|
|
REGISTER_ENUM(RPMSENSE_TRIGGERPREIN);
|
|
REGISTER_ENUM(RPMSENSE_KEYRING);
|
|
REGISTER_ENUM(RPMSENSE_CONFIG);
|
|
REGISTER_ENUM(RPMSENSE_MISSINGOK);
|
|
REGISTER_ENUM(RPMSENSE_PREUNTRANS);
|
|
REGISTER_ENUM(RPMSENSE_POSTUNTRANS);
|
|
|
|
REGISTER_ENUM(RPMTRANS_FLAG_TEST);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_BUILD_PROBS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOSCRIPTS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_JUSTDB);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NODOCS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_ALLFILES);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPLUGINS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_KEEPOBSOLETE);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOCONTEXTS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOCAPS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NODB);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_REPACKAGE);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_REVERSE);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPRE);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPOST);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPREUNTRANS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTUNTRANS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPREIN);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERIN);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERUN);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPREUN);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTUN);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPOSTUN);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPRETRANS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTTRANS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOMD5);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOFILEDIGEST);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOSUGGEST);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_ADDINDEPS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOCONFIGS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_DEPLOOPS);
|
|
REGISTER_ENUM(RPMTRANS_FLAG_NOARTIFACTS);
|
|
|
|
REGISTER_ENUM(RPMPROB_FILTER_IGNOREOS);
|
|
REGISTER_ENUM(RPMPROB_FILTER_IGNOREARCH);
|
|
REGISTER_ENUM(RPMPROB_FILTER_REPLACEPKG);
|
|
REGISTER_ENUM(RPMPROB_FILTER_FORCERELOCATE);
|
|
REGISTER_ENUM(RPMPROB_FILTER_REPLACENEWFILES);
|
|
REGISTER_ENUM(RPMPROB_FILTER_REPLACEOLDFILES);
|
|
REGISTER_ENUM(RPMPROB_FILTER_OLDPACKAGE);
|
|
REGISTER_ENUM(RPMPROB_FILTER_DISKSPACE);
|
|
REGISTER_ENUM(RPMPROB_FILTER_DISKNODES);
|
|
REGISTER_ENUM(RPMPROB_FILTER_VERIFY);
|
|
|
|
REGISTER_ENUM(RPMCALLBACK_UNKNOWN);
|
|
REGISTER_ENUM(RPMCALLBACK_INST_PROGRESS);
|
|
REGISTER_ENUM(RPMCALLBACK_INST_START);
|
|
REGISTER_ENUM(RPMCALLBACK_INST_OPEN_FILE);
|
|
REGISTER_ENUM(RPMCALLBACK_INST_CLOSE_FILE);
|
|
REGISTER_ENUM(RPMCALLBACK_TRANS_PROGRESS);
|
|
REGISTER_ENUM(RPMCALLBACK_TRANS_START);
|
|
REGISTER_ENUM(RPMCALLBACK_TRANS_STOP);
|
|
REGISTER_ENUM(RPMCALLBACK_UNINST_PROGRESS);
|
|
REGISTER_ENUM(RPMCALLBACK_UNINST_START);
|
|
REGISTER_ENUM(RPMCALLBACK_UNINST_STOP);
|
|
REGISTER_ENUM(RPMCALLBACK_REPACKAGE_PROGRESS);
|
|
REGISTER_ENUM(RPMCALLBACK_REPACKAGE_START);
|
|
REGISTER_ENUM(RPMCALLBACK_REPACKAGE_STOP);
|
|
REGISTER_ENUM(RPMCALLBACK_UNPACK_ERROR);
|
|
REGISTER_ENUM(RPMCALLBACK_CPIO_ERROR);
|
|
REGISTER_ENUM(RPMCALLBACK_SCRIPT_ERROR);
|
|
REGISTER_ENUM(RPMCALLBACK_SCRIPT_START);
|
|
REGISTER_ENUM(RPMCALLBACK_SCRIPT_STOP);
|
|
REGISTER_ENUM(RPMCALLBACK_INST_STOP);
|
|
REGISTER_ENUM(RPMCALLBACK_ELEM_PROGRESS);
|
|
REGISTER_ENUM(RPMCALLBACK_VERIFY_PROGRESS);
|
|
REGISTER_ENUM(RPMCALLBACK_VERIFY_START);
|
|
REGISTER_ENUM(RPMCALLBACK_VERIFY_STOP);
|
|
|
|
REGISTER_ENUM(RPMPROB_BADARCH);
|
|
REGISTER_ENUM(RPMPROB_BADOS);
|
|
REGISTER_ENUM(RPMPROB_PKG_INSTALLED);
|
|
REGISTER_ENUM(RPMPROB_BADRELOCATE);
|
|
REGISTER_ENUM(RPMPROB_REQUIRES);
|
|
REGISTER_ENUM(RPMPROB_CONFLICT);
|
|
REGISTER_ENUM(RPMPROB_NEW_FILE_CONFLICT);
|
|
REGISTER_ENUM(RPMPROB_FILE_CONFLICT);
|
|
REGISTER_ENUM(RPMPROB_OLDPACKAGE);
|
|
REGISTER_ENUM(RPMPROB_DISKSPACE);
|
|
REGISTER_ENUM(RPMPROB_DISKNODES);
|
|
REGISTER_ENUM(RPMPROB_OBSOLETES);
|
|
REGISTER_ENUM(RPMPROB_VERIFY);
|
|
|
|
REGISTER_ENUM(RPMLOG_EMERG);
|
|
REGISTER_ENUM(RPMLOG_ALERT);
|
|
REGISTER_ENUM(RPMLOG_CRIT);
|
|
REGISTER_ENUM(RPMLOG_ERR);
|
|
REGISTER_ENUM(RPMLOG_WARNING);
|
|
REGISTER_ENUM(RPMLOG_NOTICE);
|
|
REGISTER_ENUM(RPMLOG_INFO);
|
|
REGISTER_ENUM(RPMLOG_DEBUG);
|
|
|
|
REGISTER_ENUM(RPMMIRE_DEFAULT);
|
|
REGISTER_ENUM(RPMMIRE_STRCMP);
|
|
REGISTER_ENUM(RPMMIRE_REGEX);
|
|
REGISTER_ENUM(RPMMIRE_GLOB);
|
|
|
|
REGISTER_ENUM(RPMVSF_DEFAULT);
|
|
REGISTER_ENUM(RPMVSF_NOHDRCHK);
|
|
REGISTER_ENUM(RPMVSF_NEEDPAYLOAD);
|
|
REGISTER_ENUM(RPMVSF_NOSHA1HEADER);
|
|
REGISTER_ENUM(RPMVSF_NOSHA256HEADER);
|
|
REGISTER_ENUM(RPMVSF_NODSAHEADER);
|
|
REGISTER_ENUM(RPMVSF_NORSAHEADER);
|
|
REGISTER_ENUM(RPMVSF_NOPAYLOAD);
|
|
REGISTER_ENUM(RPMVSF_NOMD5);
|
|
REGISTER_ENUM(RPMVSF_NODSA);
|
|
REGISTER_ENUM(RPMVSF_NORSA);
|
|
REGISTER_ENUM(_RPMVSF_NODIGESTS);
|
|
REGISTER_ENUM(_RPMVSF_NOSIGNATURES);
|
|
REGISTER_ENUM(_RPMVSF_NOHEADER);
|
|
REGISTER_ENUM(_RPMVSF_NOPAYLOAD);
|
|
REGISTER_ENUM(RPMVSF_MASK_NODIGESTS);
|
|
REGISTER_ENUM(RPMVSF_MASK_NOSIGNATURES);
|
|
REGISTER_ENUM(RPMVSF_MASK_NOHEADER);
|
|
REGISTER_ENUM(RPMVSF_MASK_NOPAYLOAD);
|
|
|
|
REGISTER_ENUM(RPMSIG_NONE_TYPE);
|
|
REGISTER_ENUM(RPMSIG_DIGEST_TYPE);
|
|
REGISTER_ENUM(RPMSIG_SIGNATURE_TYPE);
|
|
REGISTER_ENUM(RPMSIG_VERIFIABLE_TYPE);
|
|
REGISTER_ENUM(RPMSIG_UNVERIFIED_TYPE);
|
|
|
|
REGISTER_ENUM(TR_ADDED);
|
|
REGISTER_ENUM(TR_REMOVED);
|
|
REGISTER_ENUM(TR_RPMDB);
|
|
|
|
REGISTER_ENUM(RPMDBI_PACKAGES);
|
|
REGISTER_ENUM(RPMDBI_LABEL);
|
|
REGISTER_ENUM(RPMDBI_INSTFILENAMES);
|
|
REGISTER_ENUM(RPMDBI_NAME);
|
|
REGISTER_ENUM(RPMDBI_BASENAMES);
|
|
REGISTER_ENUM(RPMDBI_GROUP);
|
|
REGISTER_ENUM(RPMDBI_REQUIRENAME);
|
|
REGISTER_ENUM(RPMDBI_PROVIDENAME);
|
|
REGISTER_ENUM(RPMDBI_CONFLICTNAME);
|
|
REGISTER_ENUM(RPMDBI_OBSOLETENAME);
|
|
REGISTER_ENUM(RPMDBI_TRIGGERNAME);
|
|
REGISTER_ENUM(RPMDBI_DIRNAMES);
|
|
REGISTER_ENUM(RPMDBI_INSTALLTID);
|
|
REGISTER_ENUM(RPMDBI_SIGMD5);
|
|
REGISTER_ENUM(RPMDBI_SHA1HEADER);
|
|
|
|
REGISTER_ENUM(HEADERCONV_EXPANDFILELIST);
|
|
REGISTER_ENUM(HEADERCONV_COMPRESSFILELIST);
|
|
REGISTER_ENUM(HEADERCONV_RETROFIT_V3);
|
|
|
|
REGISTER_ENUM(RPMVERIFY_NONE);
|
|
REGISTER_ENUM(RPMVERIFY_FILEDIGEST);
|
|
REGISTER_ENUM(RPMVERIFY_FILESIZE);
|
|
REGISTER_ENUM(RPMVERIFY_LINKTO);
|
|
REGISTER_ENUM(RPMVERIFY_USER);
|
|
REGISTER_ENUM(RPMVERIFY_GROUP);
|
|
REGISTER_ENUM(RPMVERIFY_MTIME);
|
|
REGISTER_ENUM(RPMVERIFY_MODE);
|
|
REGISTER_ENUM(RPMVERIFY_RDEV);
|
|
REGISTER_ENUM(RPMVERIFY_CAPS);
|
|
REGISTER_ENUM(RPMVERIFY_READLINKFAIL);
|
|
REGISTER_ENUM(RPMVERIFY_READFAIL);
|
|
REGISTER_ENUM(RPMVERIFY_LSTATFAIL);
|
|
|
|
REGISTER_ENUM(RPMBUILD_ISSOURCE);
|
|
REGISTER_ENUM(RPMBUILD_ISPATCH);
|
|
REGISTER_ENUM(RPMBUILD_ISICON);
|
|
REGISTER_ENUM(RPMBUILD_ISNO);
|
|
|
|
REGISTER_ENUM(RPMBUILD_NONE);
|
|
REGISTER_ENUM(RPMBUILD_PREP);
|
|
REGISTER_ENUM(RPMBUILD_BUILD);
|
|
REGISTER_ENUM(RPMBUILD_INSTALL);
|
|
REGISTER_ENUM(RPMBUILD_CHECK);
|
|
REGISTER_ENUM(RPMBUILD_CLEAN);
|
|
REGISTER_ENUM(RPMBUILD_FILECHECK);
|
|
REGISTER_ENUM(RPMBUILD_PACKAGESOURCE);
|
|
REGISTER_ENUM(RPMBUILD_PACKAGEBINARY);
|
|
REGISTER_ENUM(RPMBUILD_RMSOURCE);
|
|
REGISTER_ENUM(RPMBUILD_RMBUILD);
|
|
REGISTER_ENUM(RPMBUILD_RMSPEC);
|
|
|
|
REGISTER_ENUM(RPMBUILD_PKG_NONE);
|
|
REGISTER_ENUM(RPMBUILD_PKG_NODIRTOKENS);
|
|
|
|
REGISTER_ENUM(RPMSPEC_NONE);
|
|
REGISTER_ENUM(RPMSPEC_ANYARCH);
|
|
REGISTER_ENUM(RPMSPEC_FORCE);
|
|
REGISTER_ENUM(RPMSPEC_NOLANG);
|
|
|
|
return 1;
|
|
}
|
|
|