12 #define _RPMTAG_INTERNAL
14 #define _RPMEVR_INTERNAL
28 #include "rpmkeyring-py.h"
29 #include "rpmmacro-py.h"
41 #define PyObject_HEAD int _PyObjectHead
57 static PyObject *
archScore(PyObject * s, PyObject * args,
63 char * kwlist[] = {
"arch", NULL};
65 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"s", kwlist, &arch))
68 #if defined(RPM_VENDOR_WINDRIVER)
69 platform =
rpmExpand(arch,
"-%{_host_vendor}",
"-%{_host_os}%{?_gnu}", NULL);
71 platform =
rpmExpand(arch,
"-",
"%{_vendor}",
"-",
"%{_os}", NULL);
74 platform =
_free(platform);
76 return Py_BuildValue(
"i", score);
86 char * kwlist[] = {
"platform", NULL};
88 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"s", kwlist, &platform))
93 return Py_BuildValue(
"i", score);
100 PyObject *caught, *o;
103 sigset_t newMask, oldMask;
105 if (!PyList_Check(check)) {
106 PyErr_SetString(PyExc_TypeError,
"list expected");
110 llen = PyList_Size(check);
111 caught = PyList_New(0);
116 (void) sigfillset(&newMask);
117 (void) sigprocmask(SIG_BLOCK, &newMask, &oldMask);
119 for (i = 0; i < llen; i++) {
120 o = PyList_GetItem(check, i);
121 signum = PyInt_AsLong(o);
123 PyList_Append(caught, o);
126 (void) sigprocmask(SIG_SETMASK, &oldMask, NULL);
135 if (!PyArg_ParseTuple(args,
":checkSignals"))
return NULL;
145 PyObject * fop = NULL;
147 char * kwlist[] = {
"fileObject", NULL};
149 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|O:logSetFile", kwlist, &fop))
153 if (!PyFile_Check(fop)) {
154 PyErr_SetString(
pyrpmError,
"requires file object");
157 fp = PyFile_AsFile(fop);
163 return (PyObject *) Py_None;
172 char * kwlist[] = {
"level", NULL};
174 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &level))
180 return (PyObject *) Py_None;
188 char * kwlist[] = {
"promote", NULL};
190 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist,
195 return (PyObject *) Py_None;
200 static PyObject *
setStats (PyObject * s, PyObject * args,
203 char * kwlist[] = {
"stats", NULL};
205 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &
_rpmts_stats))
209 return (PyObject *) Py_None;
216 {
"TransactionSet", (PyCFunction)
rpmts_Create, METH_VARARGS|METH_KEYWORDS,
217 "rpm.TransactionSet([rootDir, [db]]) -> ts\n\
218 - Create a transaction set.\n" },
220 {
"addMacro", (PyCFunction) rpmmacro_AddMacro, METH_VARARGS|METH_KEYWORDS,
222 {
"delMacro", (PyCFunction) rpmmacro_DelMacro, METH_VARARGS|METH_KEYWORDS,
224 {
"expandMacro", (PyCFunction)rpmmacro_ExpandMacro, METH_VARARGS|METH_KEYWORDS,
226 {
"getMacros", (PyCFunction) rpmmacro_GetMacros, METH_VARARGS|METH_KEYWORDS,
229 {
"archscore", (PyCFunction)
archScore, METH_VARARGS|METH_KEYWORDS,
231 {
"platformscore", (PyCFunction)
platformScore, METH_VARARGS|METH_KEYWORDS,
236 {
"checkSignals", (PyCFunction)
checkSignals, METH_VARARGS,
239 {
"headerLoad", (PyCFunction)
hdrLoad, METH_VARARGS|METH_KEYWORDS,
242 {
"readHeaderListFromFD", (PyCFunction)
rpmHeaderFromFD, METH_VARARGS|METH_KEYWORDS,
244 {
"readHeaderListFromFile", (PyCFunction)
rpmHeaderFromFile, METH_VARARGS|METH_KEYWORDS,
248 {
"writeHeaderListToFD", (PyCFunction)
rpmHeaderToFD, METH_VARARGS|METH_KEYWORDS,
250 {
"writeHeaderListToFile", (PyCFunction)
rpmHeaderToFile, METH_VARARGS|METH_KEYWORDS,
253 {
"setLogFile", (PyCFunction)
setLogFile, METH_VARARGS|METH_KEYWORDS,
256 {
"versionCompare", (PyCFunction)
versionCompare, METH_VARARGS|METH_KEYWORDS,
258 {
"labelCompare", (PyCFunction)
labelCompare, METH_VARARGS|METH_KEYWORDS,
260 {
"evrCompare", (PyCFunction)
evrCompare, METH_VARARGS|METH_KEYWORDS,
262 {
"evrSplit", (PyCFunction)
evrSplit, METH_VARARGS|METH_KEYWORDS,
264 {
"setVerbosity", (PyCFunction)
setVerbosity, METH_VARARGS|METH_KEYWORDS,
266 {
"setEpochPromote", (PyCFunction)
setEpochPromote, METH_VARARGS|METH_KEYWORDS,
268 {
"setStats", (PyCFunction)
setStats, METH_VARARGS|METH_KEYWORDS,
271 {
"dsSingle", (PyCFunction)
rpmds_Single, METH_VARARGS|METH_KEYWORDS,
272 "rpm.dsSingle(TagN, N, [EVR, [Flags]] -> ds\n\
273 - Create a single element dependency set.\n" },
290 PyObject * dict = PyDict_New();
294 PyObject *pyval, *pyname;
295 rpmtd names = rpmtdNew();
296 rpmTagGetNames(names, 1);
297 const char *tagname, *shortname;
300 while ((tagname = rpmtdNextString(names))) {
301 shortname = tagname + strlen(
"RPMTAG_");
302 tagval = rpmTagGetValue(shortname);
304 PyModule_AddIntConstant(module, tagname, tagval);
305 pyval = PyInt_FromLong(tagval);
306 pyname = PyString_FromString(shortname);
307 PyDict_SetItem(dict, pyval, pyname);
311 PyModule_AddObject(module,
"tagnames", dict);
312 rpmtdFreeData(names);
317 PyObject *
d = PyModule_GetDict(module);
320 {
const struct headerTagTableEntry_s * t;
323 PyDict_SetItemString(d, (
char *) t->name, to=PyInt_FromLong(t->val));
325 PyDict_SetItem(dict, to, o=PyString_FromString(t->name + 7));
334 for (ext = exts, extNum = 0; ext != NULL && ext->type != HEADER_EXT_LAST;
335 ext = (ext->type == HEADER_EXT_MORE ? *ext->u.more : ext+1), extNum++)
337 if (ext->name == NULL || ext->type != HEADER_EXT_TAG)
339 PyDict_SetItemString(d, (
char *) ext->name, to=PyCObject_FromVoidPtr((
void *)ext, NULL));
341 PyDict_SetItem(dict, to, o=PyString_FromString(ext->name + 7));
346 PyDict_SetItemString(d,
"tagnames", dict);
362 PyObject *
d, * o, * m;
364 #if Py_TPFLAGS_HAVE_ITER
365 if (PyType_Ready(&
hdr_Type) < 0)
return;
374 if (PyType_Ready(&rpmtd_Type) < 0)
return;
375 if (PyType_Ready(&rpmKeyring_Type) < 0)
return;
376 if (PyType_Ready(&rpmPubkey_Type) < 0)
return;
380 if (PyType_Ready(&
spec_Type) < 0)
return;
396 d = PyModule_GetDict(m);
399 pyrpmError = PyString_FromString(
"_rpm.error");
403 pyrpmError = PyErr_NewException(
"_rpm.error", NULL, NULL);
408 #if Py_TPFLAGS_HAVE_ITER
410 PyModule_AddObject(m,
"hdr", (PyObject *) &
hdr_Type);
413 PyModule_AddObject(m,
"al", (PyObject *) &
rpmal_Type);
416 PyModule_AddObject(m,
"ds", (PyObject *) &
rpmds_Type);
419 PyModule_AddObject(m,
"fd", (PyObject *) &
rpmfd_Type);
422 PyModule_AddObject(m,
"fts", (PyObject *) &
rpmfts_Type);
425 PyModule_AddObject(m,
"fi", (PyObject *) &
rpmfi_Type);
427 Py_INCREF(&rpmKeyring_Type);
428 PyModule_AddObject(m,
"Keyring", (PyObject *) &rpmKeyring_Type);
429 Py_INCREF(&rpmPubkey_Type);
430 PyModule_AddObject(m,
"Pubkey", (PyObject *) &rpmPubkey_Type);
433 PyModule_AddObject(m,
"mi", (PyObject *) &
rpmmi_Type);
436 PyModule_AddObject(m,
"ps", (PyObject *) &
rpmps_Type);
438 Py_INCREF(&rpmtd_Type);
439 PyModule_AddObject(m,
"td", (PyObject *) &rpmtd_Type);
442 PyModule_AddObject(m,
"te", (PyObject *) &
rpmte_Type);
445 PyModule_AddObject(m,
"ts", (PyObject *) &
rpmts_Type);
448 PyModule_AddObject(m,
"spec", (PyObject *) &
spec_Type);
465 #define REGISTER_ENUM(val) \
466 PyDict_SetItemString(d, #val, o=PyInt_FromLong( val )); \
495 #if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_PLD)
502 #if defined(RPM_VENDOR_PLD)
const char const double d
headerTagTableEntry rpmTagTable
Automatically generated table of tag name/value pairs.
static PyObject * setStats(PyObject *s, PyObject *args, PyObject *kwds)
int rpmReadConfigFiles(const char *file, const char *target)
Read macro configuration file(s) for a target.
int rpmPlatformScore(const char *platform, void *mi_re, int mi_nre)
Return score of a platform string.
int rpmdbCheckSignals(void)
Check for and exit on termination signals.
static PyMethodDef rpmModuleMethods[]
static PyObject * setVerbosity(PyObject *s, PyObject *args, PyObject *kwds)
FILE * rpmlogSetFile(FILE *fp)
Set rpmlog file handle.
int rpmdbCheckTerminate(int terminate)
Check rpmdb signal handler for trapped signal and/or requested exit.
#define RPMSENSE_NOTEQUAL
PyObject * rpmts_Create(PyObject *s, PyObject *args, PyObject *kwds)
static PyObject * setEpochPromote(PyObject *s, PyObject *args, PyObject *kwds)
static PyObject * checkSignals(PyObject *s, PyObject *args)
static void rpm_exithook(void)
const struct headerSprintfExtension_s * headerSprintfExtension
char * rpmExpand(const char *arg,...)
Return (malloc'ed) concatenated macro expansion(s).
#define rpmSetVerbosity(_lvl)
static PyObject * signalsCaught(PyObject *s, PyObject *check)
rpmdsObject * rpmds_Single(PyObject *s, PyObject *args, PyObject *kwds)
#define REGISTER_ENUM(val)
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
Structure(s) and routine(s) used for EVR parsing and comparison.
static PyObject * archScore(PyObject *s, PyObject *args, PyObject *kwds)
Access RPM indices using Berkeley DB interface(s).
static const char * platform
#define RPMDBI_PACKAGES
Pseudo-tags used by the rpmdb and rpmgi iterator API's.
static PyObject * platformScore(PyObject *s, PyObject *args, PyObject *kwds)
static PyObject * setLogFile(PyObject *s, PyObject *args, PyObject *kwds)
static void addRpmTags(PyObject *module)