12 #define _RPMTAG_INTERNAL
14 #define _RPMEVR_INTERNAL
28 #include "rpmkeyring-py.h"
29 #include "rpmmacro-py.h"
41 #define PyObject_HEAD int _PyObjectHead
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);
88 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"s", kwlist, &platform))
100 PyObject *caught, *
o;
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);
126 (
void) sigprocmask(SIG_SETMASK, &oldMask,
NULL);
135 if (!PyArg_ParseTuple(args,
":checkSignals"))
return NULL;
146 PyObject * fop =
NULL;
150 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|O:logSetFile", kwlist, &fop))
154 if (!PyFile_Check(fop)) {
155 PyErr_SetString(
pyrpmError,
"requires file object");
158 fp = PyFile_AsFile(fop);
175 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &level))
191 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist,
206 if (!PyArg_ParseTupleAndKeywords(args, kwds,
"i", kwlist, &
_rpmts_stats))
217 {
"TransactionSet", (PyCFunction)
rpmts_Create, METH_VARARGS|METH_KEYWORDS,
218 "rpm.TransactionSet([rootDir, [db]]) -> ts\n\
219 - Create a transaction set.\n" },
221 {
"addMacro", (PyCFunction) rpmmacro_AddMacro, METH_VARARGS|METH_KEYWORDS,
223 {
"delMacro", (PyCFunction) rpmmacro_DelMacro, METH_VARARGS|METH_KEYWORDS,
225 {
"expandMacro", (PyCFunction)rpmmacro_ExpandMacro, METH_VARARGS|METH_KEYWORDS,
227 {
"getMacros", (PyCFunction) rpmmacro_GetMacros, METH_VARARGS|METH_KEYWORDS,
230 {
"archscore", (PyCFunction)
archScore, METH_VARARGS|METH_KEYWORDS,
232 {
"platformscore", (PyCFunction)
platformScore, METH_VARARGS|METH_KEYWORDS,
237 {
"checkSignals", (PyCFunction)
checkSignals, METH_VARARGS,
240 {
"headerLoad", (PyCFunction)
hdrLoad, METH_VARARGS|METH_KEYWORDS,
243 {
"readHeaderListFromFD", (PyCFunction)
rpmHeaderFromFD, METH_VARARGS|METH_KEYWORDS,
245 {
"readHeaderListFromFile", (PyCFunction)
rpmHeaderFromFile, METH_VARARGS|METH_KEYWORDS,
249 {
"writeHeaderListToFD", (PyCFunction)
rpmHeaderToFD, METH_VARARGS|METH_KEYWORDS,
251 {
"writeHeaderListToFile", (PyCFunction)
rpmHeaderToFile, METH_VARARGS|METH_KEYWORDS,
254 {
"setLogFile", (PyCFunction)
setLogFile, METH_VARARGS|METH_KEYWORDS,
257 {
"versionCompare", (PyCFunction)
versionCompare, METH_VARARGS|METH_KEYWORDS,
259 {
"labelCompare", (PyCFunction)
labelCompare, METH_VARARGS|METH_KEYWORDS,
261 {
"evrCompare", (PyCFunction)
evrCompare, METH_VARARGS|METH_KEYWORDS,
263 {
"evrSplit", (PyCFunction)
evrSplit, METH_VARARGS|METH_KEYWORDS,
265 {
"setVerbosity", (PyCFunction)
setVerbosity, METH_VARARGS|METH_KEYWORDS,
267 {
"setEpochPromote", (PyCFunction)
setEpochPromote, METH_VARARGS|METH_KEYWORDS,
269 {
"setStats", (PyCFunction)
setStats, METH_VARARGS|METH_KEYWORDS,
272 {
"dsSingle", (PyCFunction)
rpmds_Single, METH_VARARGS|METH_KEYWORDS,
273 "rpm.dsSingle(TagN, N, [EVR, [Flags]] -> ds\n\
274 - Create a single element dependency set.\n" },
291 PyObject * dict = PyDict_New();
295 PyObject *pyval, *pyname;
296 rpmtd names = rpmtdNew();
297 rpmTagGetNames(names, 1);
298 const char *
tagname, *shortname;
301 while ((tagname = rpmtdNextString(names))) {
302 shortname = tagname + strlen(
"RPMTAG_");
303 tagval = rpmTagGetValue(shortname);
305 PyModule_AddIntConstant(module, tagname, tagval);
306 pyval = PyInt_FromLong(tagval);
307 pyname = PyString_FromString(shortname);
308 PyDict_SetItem(dict, pyval, pyname);
312 PyModule_AddObject(module,
"tagnames", dict);
313 rpmtdFreeData(names);
318 PyObject * d = PyModule_GetDict(module);
321 {
const struct headerTagTableEntry_s *
t;
324 PyDict_SetItemString(d, (
char *) t->name, to=PyInt_FromLong(t->val));
326 PyDict_SetItem(dict, to, o=PyString_FromString(t->name + 7));
335 for (ext = exts, extNum = 0; ext !=
NULL && ext->type != HEADER_EXT_LAST;
336 ext = (ext->type == HEADER_EXT_MORE ? *ext->u.more : ext+1), extNum++)
338 if (ext->name ==
NULL || ext->type != HEADER_EXT_TAG)
340 PyDict_SetItemString(d, (
char *) ext->name, to=PyCObject_FromVoidPtr((
void *)ext,
NULL));
342 PyDict_SetItem(dict, to, o=PyString_FromString(ext->name + 7));
347 PyDict_SetItemString(d,
"tagnames", dict);
363 PyObject * d, *
o, *
m;
365 #if Py_TPFLAGS_HAVE_ITER
366 if (PyType_Ready(&
hdr_Type) < 0)
return;
375 if (PyType_Ready(&rpmtd_Type) < 0)
return;
376 if (PyType_Ready(&rpmKeyring_Type) < 0)
return;
377 if (PyType_Ready(&rpmPubkey_Type) < 0)
return;
381 if (PyType_Ready(&
spec_Type) < 0)
return;
397 d = PyModule_GetDict(m);
400 pyrpmError = PyString_FromString(
"_rpm.error");
409 #if Py_TPFLAGS_HAVE_ITER
411 PyModule_AddObject(m,
"hdr", (PyObject *) &
hdr_Type);
414 PyModule_AddObject(m,
"al", (PyObject *) &
rpmal_Type);
417 PyModule_AddObject(m,
"ds", (PyObject *) &
rpmds_Type);
420 PyModule_AddObject(m,
"fd", (PyObject *) &
rpmfd_Type);
423 PyModule_AddObject(m,
"fts", (PyObject *) &
rpmfts_Type);
426 PyModule_AddObject(m,
"fi", (PyObject *) &
rpmfi_Type);
429 PyModule_AddObject(m,
"Keyring", (PyObject *) &rpmKeyring_Type);
431 PyModule_AddObject(m,
"Pubkey", (PyObject *) &rpmPubkey_Type);
434 PyModule_AddObject(m,
"mi", (PyObject *) &
rpmmi_Type);
437 PyModule_AddObject(m,
"ps", (PyObject *) &
rpmps_Type);
440 PyModule_AddObject(m,
"td", (PyObject *) &rpmtd_Type);
443 PyModule_AddObject(m,
"te", (PyObject *) &
rpmte_Type);
446 PyModule_AddObject(m,
"ts", (PyObject *) &
rpmts_Type);
449 PyModule_AddObject(m,
"spec", (PyObject *) &
spec_Type);
466 #define REGISTER_ENUM(val) \
467 PyDict_SetItemString(d, #val, o=PyInt_FromLong( val )); \
496 #if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_PLD)
503 #if defined(RPM_VENDOR_PLD)
headerTagTableEntry rpmTagTable
Automatically generated table of tag name/value pairs.
PyObject * rpmHeaderToFD(PyObject *self, PyObject *args, PyObject *kwds)
PyObject * rpmHeaderToFile(PyObject *self, PyObject *args, PyObject *kwds)
static PyObject * archScore(PyObject *s, PyObject *args, PyObject *kwds)
int rpmReadConfigFiles(const char *file, const char *target)
int rpmPlatformScore(const char *platform, void *mi_re, int mi_nre)
PyObject * rpmHeaderFromFD(PyObject *self, PyObject *args, PyObject *kwds)
PyObject * evrCompare(PyObject *self, PyObject *args, PyObject *kwds)
static PyMethodDef rpmModuleMethods[]
static PyObject * setStats(PyObject *s, PyObject *args, PyObject *kwds)
PyObject * rpmHeaderFromFile(PyObject *self, PyObject *args, PyObject *kwds)
FILE * rpmlogSetFile(FILE *fp)
Set rpmlog file handle.
PyObject * rpmts_Create(PyObject *s, PyObject *args, PyObject *kwds)
static PyObject * signalsCaught(PyObject *s, PyObject *check)
PyList_Append(s->keyList, key)
#define RPMSENSE_NOTEQUAL
static PyObject * setEpochPromote(PyObject *s, PyObject *args, PyObject *kwds)
PyObject * labelCompare(PyObject *self, PyObject *args)
static void rpm_exithook(void)
rpmSetVerbosity(RPMLOG_NOTICE)
int rpmdbCheckSignals(void)
Check for and exit on termination signals.
char * rpmExpand(const char *arg,...)
Return (malloc'ed) concatenated macro expansion(s).
static PyObject * setLogFile(PyObject *s, PyObject *args, PyObject *kwds)
PyObject * hdrLoad(PyObject *self, PyObject *args, PyObject *kwds)
static PyObject * checkSignals(PyObject *s, PyObject *args)
PyObject * versionCompare(PyObject *self, PyObject *args, PyObject *kwds)
rpmdsObject * rpmds_Single(PyObject *s, PyObject *args, PyObject *kwds)
PyObject * evrSplit(PyObject *self, PyObject *args, PyObject *kwds)
return Py_BuildValue("i", pkgKey)
PyObject * rpmSingleHeaderFromFD(PyObject *self, PyObject *args, PyObject *kwds)
#define REGISTER_ENUM(val)
int rpmdbCheckTerminate(int terminate)
Check rpmdb signal handler for trapped signal and/or requested exit.
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
static PyObject * platformScore(PyObject *s, PyObject *args, PyObject *kwds)
Access RPM indices using Berkeley DB interface(s).
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
static const char * platform
#define RPMDBI_PACKAGES
Pseudo-tags used by the rpmdb and rpmgi iterator API's.
static PyObject * setVerbosity(PyObject *s, PyObject *args, PyObject *kwds)
static void addRpmTags(PyObject *module)