1 #include "rpmsystem-py.h"
3 #include <rpm/rpmlib.h> /* rpmMachineScore, rpmReadConfigFiles */
4 #include <rpm/rpmtag.h>
7 #include <rpm/rpmlog.h>
8 #include <rpm/rpmmacro.h>
10 #include "header-py.h"
11 #include "rpmarchive-py.h"
15 #include "rpmfiles-py.h"
16 #include "rpmkeyring-py.h"
20 #include "rpmmacro-py.h"
21 #include "rpmstrpool-py.h"
30 PyObject * pyrpmError;
32 static PyObject * archScore(PyObject * self, PyObject * arg)
36 if (!PyArg_Parse(arg, "s", &arch))
39 return Py_BuildValue("i", rpmMachineScore(RPM_MACHTABLE_INSTARCH, arch));
42 static PyObject * signalCaught(PyObject *self, PyObject *o)
45 if (!PyArg_Parse(o, "i", &signo)) return NULL;
47 return PyBool_FromLong(rpmsqIsCaught(signo));
50 static PyObject * checkSignals(PyObject * self)
52 return Py_BuildValue("i", rpmsqPoll());
55 static PyObject * blockSignals(PyObject * self, PyObject *arg)
58 if (!PyArg_Parse(arg, "p", &block)) return NULL;
60 return Py_BuildValue("i", rpmsqBlock(block ? SIG_BLOCK : SIG_UNBLOCK));
64 static PyObject * setLogFile (PyObject * self, PyObject *arg)
67 int fdno = PyObject_AsFileDescriptor(arg);
70 /* XXX we dont know the mode here.. guessing append for now */
71 fp = fdopen(fdno, "a");
73 PyErr_SetFromErrno(PyExc_IOError);
76 } else if (arg == Py_None) {
79 PyErr_SetString(PyExc_TypeError, "file object or None expected");
83 (void) rpmlogSetFile(fp);
88 setVerbosity (PyObject * self, PyObject * arg)
92 if (!PyArg_Parse(arg, "i", &level))
95 rpmSetVerbosity(level);
101 setEpochPromote (PyObject * self, PyObject * arg)
103 if (!PyArg_Parse(arg, "i", &_rpmds_nopromote))
109 static PyObject * setStats (PyObject * self, PyObject * arg)
111 if (!PyArg_Parse(arg, "i", &_rpmts_stats))
117 static PyObject * doLog(PyObject * self, PyObject * args, PyObject *kwds)
121 char * kwlist[] = {"code", "msg", NULL};
122 if (!PyArg_ParseTupleAndKeywords(args, kwds, "is", kwlist, &code, &msg))
125 rpmlog(code, "%s", msg);
129 static PyObject * reloadConfig(PyObject * self, PyObject * args, PyObject *kwds)
131 const char * target = NULL;
132 char * kwlist[] = { "target", NULL };
135 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|s", kwlist, &target))
140 rc = rpmReadConfigFiles(NULL, target) ;
142 return PyBool_FromLong(rc == 0);
145 static PyObject * setInterruptSafety(PyObject * self, PyObject * args, PyObject *kwds)
149 char * kwlist[] = { "on", NULL };
150 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &obj))
153 on = PyObject_IsTrue(obj);
155 rpmsqSetInterruptSafety(on);
159 static PyMethodDef rpmModuleMethods[] = {
160 { "addMacro", (PyCFunction) rpmmacro_AddMacro, METH_VARARGS|METH_KEYWORDS,
161 "rpmPushMacro(macro, value)\n"
163 { "delMacro", (PyCFunction) rpmmacro_DelMacro, METH_VARARGS|METH_KEYWORDS,
164 "rpmPopMacro(macro)\n"
166 { "expandMacro", (PyCFunction) rpmmacro_ExpandMacro, METH_VARARGS|METH_KEYWORDS,
167 "expandMacro(string, numeric=False) -- expands a string containing macros\n\n"
168 "Returns an int if numeric is True. 'Y' or 'y' returns 1,\n'N' or 'n' returns 0\nAn undefined macro returns 0."},
170 { "archscore", (PyCFunction) archScore, METH_O,
171 "archscore(archname) -- How well does an architecture fit on this machine\n\n"
172 "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)" },
174 { "signalCaught", (PyCFunction) signalCaught, METH_O,
175 "signalCaught(signo) -- Returns True if signal was caught." },
176 { "checkSignals", (PyCFunction) checkSignals, METH_NOARGS,
177 "checkSignals() -- Check for and exit on termination signals."},
178 { "blockSignals", (PyCFunction) blockSignals, METH_O,
179 "blocksignals(True/False) -- Block/unblock signals, refcounted."},
181 { "mergeHeaderListFromFD", (PyCFunction) rpmMergeHeadersFromFD, METH_VARARGS|METH_KEYWORDS,
184 { "log", (PyCFunction) doLog, METH_VARARGS|METH_KEYWORDS,
185 "log(level, msg) -- Write msg to log if level is selected to be logged.\n\n"
186 "level must be one of the RPMLOG_* constants."},
187 { "setLogFile", (PyCFunction) setLogFile, METH_O,
188 "setLogFile(file) -- set file to write log messages to or None." },
190 { "versionCompare", (PyCFunction) versionCompare, METH_VARARGS|METH_KEYWORDS,
191 "versionCompare(version0, version1) -- compares two version strings\n\n"
192 "Returns 1 if version0 > version1\n"
193 "Returns 0 if version0 == version1\n"
194 "Returns -1 if version0 < version1\n"},
195 { "labelCompare", (PyCFunction) labelCompare, METH_VARARGS|METH_KEYWORDS,
196 "labelCompare(version0, version1) -- as versionCompare()\n\n"
197 "but arguments are tuples of of strings for (epoch, version, release)"},
198 { "setVerbosity", (PyCFunction) setVerbosity, METH_O,
199 "setVerbosity(level) -- Set log level. See RPMLOG_* constants." },
200 { "setEpochPromote", (PyCFunction) setEpochPromote, METH_O,
201 "setEpochPromote(bool) -- Set if no epoch shall be treated as epoch 0" },
202 { "setStats", (PyCFunction) setStats, METH_O,
203 "setStats(bool) -- Set if timing stats are printed after a transaction."},
204 { "reloadConfig", (PyCFunction) reloadConfig, METH_VARARGS|METH_KEYWORDS,
205 "reloadConfig(target=None) -- Reload config from files.\n\n"
206 "Set all macros and settings accordingly."},
208 { "setInterruptSafety", (PyCFunction) setInterruptSafety,
209 METH_VARARGS|METH_KEYWORDS,
210 "setInterruptSafety(on=True) -- Set if various signals get intercepted.\n\n"
211 "By default, librpm will trap various unix signals (like SIGINT and\n"
212 "SIGTERM), in order to avoid process exit while locks are held or\n"
213 "a transaction is being performed.\n\n"
214 "If this is not the desired behaviour it's recommended to call this\n"
215 "once only at process startup because currently signal handlers will\n"
216 "not be retroactively applied if a database is open."
221 static char rpm__doc__[] = "";
224 * Add rpm tag dictionaries to the module
226 static void addRpmTags(PyObject *module)
228 PyObject *pyval, *pyname, *dict = PyDict_New();
229 rpmtd names = rpmtdNew();
230 rpmTagGetNames(names, 1);
231 const char *tagname, *shortname;
234 while ((tagname = rpmtdNextString(names))) {
235 shortname = tagname + strlen("RPMTAG_");
236 tagval = rpmTagGetValue(shortname);
238 PyModule_AddIntConstant(module, tagname, tagval);
239 pyval = PyInt_FromLong(tagval);
240 pyname = Py_BuildValue("s", shortname);
241 PyDict_SetItem(dict, pyval, pyname);
245 PyModule_AddObject(module, "tagnames", dict);
250 Do any common preliminary work before python 2 vs python 3 module creation:
252 static int prepareInitModule(void)
254 if (PyType_Ready(&hdr_Type) < 0) return 0;
255 if (PyType_Ready(&rpmarchive_Type) < 0) return 0;
256 if (PyType_Ready(&rpmds_Type) < 0) return 0;
257 if (PyType_Ready(&rpmfd_Type) < 0) return 0;
258 if (PyType_Ready(&rpmfi_Type) < 0) return 0;
259 if (PyType_Ready(&rpmfile_Type) < 0) return 0;
260 if (PyType_Ready(&rpmfiles_Type) < 0) return 0;
261 if (PyType_Ready(&rpmKeyring_Type) < 0) return 0;
262 if (PyType_Ready(&rpmmi_Type) < 0) return 0;
263 if (PyType_Ready(&rpmii_Type) < 0) return 0;
264 if (PyType_Ready(&rpmProblem_Type) < 0) return 0;
265 if (PyType_Ready(&rpmPubkey_Type) < 0) return 0;
266 if (PyType_Ready(&rpmstrPool_Type) < 0) return 0;
268 if (PyType_Ready(&rpmtd_Type) < 0) return 0;
270 if (PyType_Ready(&rpmte_Type) < 0) return 0;
271 if (PyType_Ready(&rpmts_Type) < 0) return 0;
275 static int initModule(PyObject *m);
277 #if PY_MAJOR_VERSION >= 3
278 static int rpmModuleTraverse(PyObject *m, visitproc visit, void *arg) {
279 Py_VISIT(pyrpmError);
283 static int rpmModuleClear(PyObject *m) {
284 Py_CLEAR(pyrpmError);
288 static struct PyModuleDef moduledef = {
289 PyModuleDef_HEAD_INIT,
291 rpm__doc__, /* m_doc */
307 if (!prepareInitModule()) return NULL;
308 m = PyModule_Create(&moduledef);
313 void init_rpm(void); /* XXX eliminate gcc warning */
318 if (!prepareInitModule()) return;
319 m = Py_InitModule3("_rpm", rpmModuleMethods, rpm__doc__);
326 /* Shared python2/3 module initialization: */
327 static int initModule(PyObject *m)
331 /* failure to initialize rpm (crypto and all) is rather fatal too... */
332 if (rpmReadConfigFiles(NULL, NULL) == -1)
335 d = PyModule_GetDict(m);
337 pyrpmError = PyErr_NewException("_rpm.error", NULL, NULL);
338 if (pyrpmError != NULL)
339 PyDict_SetItemString(d, "error", pyrpmError);
341 Py_INCREF(&hdr_Type);
342 PyModule_AddObject(m, "hdr", (PyObject *) &hdr_Type);
344 Py_INCREF(&rpmarchive_Type);
345 PyModule_AddObject(m, "archive", (PyObject *) &rpmarchive_Type);
347 Py_INCREF(&rpmds_Type);
348 PyModule_AddObject(m, "ds", (PyObject *) &rpmds_Type);
350 Py_INCREF(&rpmfd_Type);
351 PyModule_AddObject(m, "fd", (PyObject *) &rpmfd_Type);
353 Py_INCREF(&rpmfi_Type);
354 PyModule_AddObject(m, "fi", (PyObject *) &rpmfi_Type);
356 Py_INCREF(&rpmfile_Type);
357 PyModule_AddObject(m, "file", (PyObject *) &rpmfile_Type);
359 Py_INCREF(&rpmfiles_Type);
360 PyModule_AddObject(m, "files", (PyObject *) &rpmfiles_Type);
362 Py_INCREF(&rpmKeyring_Type);
363 PyModule_AddObject(m, "keyring", (PyObject *) &rpmKeyring_Type);
365 Py_INCREF(&rpmmi_Type);
366 PyModule_AddObject(m, "mi", (PyObject *) &rpmmi_Type);
368 Py_INCREF(&rpmii_Type);
369 PyModule_AddObject(m, "ii", (PyObject *) &rpmii_Type);
371 Py_INCREF(&rpmProblem_Type);
372 PyModule_AddObject(m, "prob", (PyObject *) &rpmProblem_Type);
374 Py_INCREF(&rpmPubkey_Type);
375 PyModule_AddObject(m, "pubkey", (PyObject *) &rpmPubkey_Type);
377 Py_INCREF(&rpmstrPool_Type);
378 PyModule_AddObject(m, "strpool", (PyObject *) &rpmstrPool_Type);
381 Py_INCREF(&rpmtd_Type);
382 PyModule_AddObject(m, "td", (PyObject *) &rpmtd_Type);
385 Py_INCREF(&rpmte_Type);
386 PyModule_AddObject(m, "te", (PyObject *) &rpmte_Type);
388 Py_INCREF(&rpmts_Type);
389 PyModule_AddObject(m, "ts", (PyObject *) &rpmts_Type);
393 PyModule_AddStringConstant(m, "__version__", RPMVERSION);
395 PyModule_AddObject(m, "header_magic",
396 PyBytes_FromStringAndSize((const char *)rpm_header_magic, 8));
398 #define REGISTER_ENUM(val) PyModule_AddIntConstant(m, #val, val)
400 REGISTER_ENUM(RPMTAG_NOT_FOUND);
402 REGISTER_ENUM(RPMRC_OK);
403 REGISTER_ENUM(RPMRC_NOTFOUND);
404 REGISTER_ENUM(RPMRC_FAIL);
405 REGISTER_ENUM(RPMRC_NOTTRUSTED);
406 REGISTER_ENUM(RPMRC_NOKEY);
408 REGISTER_ENUM(RPMFILE_STATE_NORMAL);
409 REGISTER_ENUM(RPMFILE_STATE_REPLACED);
410 REGISTER_ENUM(RPMFILE_STATE_NOTINSTALLED);
411 REGISTER_ENUM(RPMFILE_STATE_NETSHARED);
412 REGISTER_ENUM(RPMFILE_STATE_WRONGCOLOR);
414 REGISTER_ENUM(RPMFILE_CONFIG);
415 REGISTER_ENUM(RPMFILE_DOC);
416 REGISTER_ENUM(RPMFILE_ICON);
417 REGISTER_ENUM(RPMFILE_MISSINGOK);
418 REGISTER_ENUM(RPMFILE_NOREPLACE);
419 REGISTER_ENUM(RPMFILE_SPECFILE);
420 REGISTER_ENUM(RPMFILE_GHOST);
421 REGISTER_ENUM(RPMFILE_LICENSE);
422 REGISTER_ENUM(RPMFILE_README);
423 REGISTER_ENUM(RPMFILE_PUBKEY);
424 REGISTER_ENUM(RPMFILE_ARTIFACT);
426 REGISTER_ENUM(RPMDEP_SENSE_REQUIRES);
427 REGISTER_ENUM(RPMDEP_SENSE_CONFLICTS);
429 REGISTER_ENUM(RPMSENSE_ANY);
430 REGISTER_ENUM(RPMSENSE_LESS);
431 REGISTER_ENUM(RPMSENSE_GREATER);
432 REGISTER_ENUM(RPMSENSE_EQUAL);
433 REGISTER_ENUM(RPMSENSE_POSTTRANS);
434 REGISTER_ENUM(RPMSENSE_PREREQ);
435 REGISTER_ENUM(RPMSENSE_PRETRANS);
436 REGISTER_ENUM(RPMSENSE_INTERP);
437 REGISTER_ENUM(RPMSENSE_SCRIPT_PRE);
438 REGISTER_ENUM(RPMSENSE_SCRIPT_POST);
439 REGISTER_ENUM(RPMSENSE_SCRIPT_PREUN);
440 REGISTER_ENUM(RPMSENSE_SCRIPT_POSTUN);
441 REGISTER_ENUM(RPMSENSE_SCRIPT_VERIFY);
442 REGISTER_ENUM(RPMSENSE_FIND_REQUIRES);
443 REGISTER_ENUM(RPMSENSE_FIND_PROVIDES);
444 REGISTER_ENUM(RPMSENSE_TRIGGERIN);
445 REGISTER_ENUM(RPMSENSE_TRIGGERUN);
446 REGISTER_ENUM(RPMSENSE_TRIGGERPOSTUN);
447 REGISTER_ENUM(RPMSENSE_RPMLIB);
448 REGISTER_ENUM(RPMSENSE_TRIGGERPREIN);
449 REGISTER_ENUM(RPMSENSE_KEYRING);
450 REGISTER_ENUM(RPMSENSE_STRONG);
451 REGISTER_ENUM(RPMSENSE_CONFIG);
452 REGISTER_ENUM(RPMSENSE_MISSINGOK);
454 REGISTER_ENUM(RPMTRANS_FLAG_TEST);
455 REGISTER_ENUM(RPMTRANS_FLAG_BUILD_PROBS);
456 REGISTER_ENUM(RPMTRANS_FLAG_NOSCRIPTS);
457 REGISTER_ENUM(RPMTRANS_FLAG_JUSTDB);
458 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERS);
459 REGISTER_ENUM(RPMTRANS_FLAG_NODOCS);
460 REGISTER_ENUM(RPMTRANS_FLAG_ALLFILES);
461 REGISTER_ENUM(RPMTRANS_FLAG_NOPLUGINS);
462 REGISTER_ENUM(RPMTRANS_FLAG_KEEPOBSOLETE);
463 REGISTER_ENUM(RPMTRANS_FLAG_NOCONTEXTS);
464 REGISTER_ENUM(RPMTRANS_FLAG_NOCAPS);
465 REGISTER_ENUM(RPMTRANS_FLAG_REPACKAGE);
466 REGISTER_ENUM(RPMTRANS_FLAG_REVERSE);
467 REGISTER_ENUM(RPMTRANS_FLAG_NOPRE);
468 REGISTER_ENUM(RPMTRANS_FLAG_NOPOST);
469 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPREIN);
470 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERIN);
471 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERUN);
472 REGISTER_ENUM(RPMTRANS_FLAG_NOPREUN);
473 REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTUN);
474 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPOSTUN);
475 REGISTER_ENUM(RPMTRANS_FLAG_NOPRETRANS);
476 REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTTRANS);
477 REGISTER_ENUM(RPMTRANS_FLAG_NOMD5);
478 REGISTER_ENUM(RPMTRANS_FLAG_NOFILEDIGEST);
479 REGISTER_ENUM(RPMTRANS_FLAG_NOSUGGEST);
480 REGISTER_ENUM(RPMTRANS_FLAG_ADDINDEPS);
481 REGISTER_ENUM(RPMTRANS_FLAG_NOCONFIGS);
482 REGISTER_ENUM(RPMTRANS_FLAG_DEPLOOPS);
484 REGISTER_ENUM(RPMPROB_FILTER_IGNOREOS);
485 REGISTER_ENUM(RPMPROB_FILTER_IGNOREARCH);
486 REGISTER_ENUM(RPMPROB_FILTER_REPLACEPKG);
487 REGISTER_ENUM(RPMPROB_FILTER_FORCERELOCATE);
488 REGISTER_ENUM(RPMPROB_FILTER_REPLACENEWFILES);
489 REGISTER_ENUM(RPMPROB_FILTER_REPLACEOLDFILES);
490 REGISTER_ENUM(RPMPROB_FILTER_OLDPACKAGE);
491 REGISTER_ENUM(RPMPROB_FILTER_DISKSPACE);
492 REGISTER_ENUM(RPMPROB_FILTER_DISKNODES);
494 REGISTER_ENUM(RPMCALLBACK_UNKNOWN);
495 REGISTER_ENUM(RPMCALLBACK_INST_PROGRESS);
496 REGISTER_ENUM(RPMCALLBACK_INST_START);
497 REGISTER_ENUM(RPMCALLBACK_INST_OPEN_FILE);
498 REGISTER_ENUM(RPMCALLBACK_INST_CLOSE_FILE);
499 REGISTER_ENUM(RPMCALLBACK_TRANS_PROGRESS);
500 REGISTER_ENUM(RPMCALLBACK_TRANS_START);
501 REGISTER_ENUM(RPMCALLBACK_TRANS_STOP);
502 REGISTER_ENUM(RPMCALLBACK_UNINST_PROGRESS);
503 REGISTER_ENUM(RPMCALLBACK_UNINST_START);
504 REGISTER_ENUM(RPMCALLBACK_UNINST_STOP);
505 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_PROGRESS);
506 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_START);
507 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_STOP);
508 REGISTER_ENUM(RPMCALLBACK_UNPACK_ERROR);
509 REGISTER_ENUM(RPMCALLBACK_CPIO_ERROR);
510 REGISTER_ENUM(RPMCALLBACK_SCRIPT_ERROR);
511 REGISTER_ENUM(RPMCALLBACK_SCRIPT_START);
512 REGISTER_ENUM(RPMCALLBACK_SCRIPT_STOP);
513 REGISTER_ENUM(RPMCALLBACK_INST_STOP);
514 REGISTER_ENUM(RPMCALLBACK_ELEM_PROGRESS);
516 REGISTER_ENUM(RPMPROB_BADARCH);
517 REGISTER_ENUM(RPMPROB_BADOS);
518 REGISTER_ENUM(RPMPROB_PKG_INSTALLED);
519 REGISTER_ENUM(RPMPROB_BADRELOCATE);
520 REGISTER_ENUM(RPMPROB_REQUIRES);
521 REGISTER_ENUM(RPMPROB_CONFLICT);
522 REGISTER_ENUM(RPMPROB_NEW_FILE_CONFLICT);
523 REGISTER_ENUM(RPMPROB_FILE_CONFLICT);
524 REGISTER_ENUM(RPMPROB_OLDPACKAGE);
525 REGISTER_ENUM(RPMPROB_DISKSPACE);
526 REGISTER_ENUM(RPMPROB_DISKNODES);
527 REGISTER_ENUM(RPMPROB_OBSOLETES);
529 REGISTER_ENUM(VERIFY_DIGEST);
530 REGISTER_ENUM(VERIFY_SIGNATURE);
532 REGISTER_ENUM(RPMLOG_EMERG);
533 REGISTER_ENUM(RPMLOG_ALERT);
534 REGISTER_ENUM(RPMLOG_CRIT);
535 REGISTER_ENUM(RPMLOG_ERR);
536 REGISTER_ENUM(RPMLOG_WARNING);
537 REGISTER_ENUM(RPMLOG_NOTICE);
538 REGISTER_ENUM(RPMLOG_INFO);
539 REGISTER_ENUM(RPMLOG_DEBUG);
541 REGISTER_ENUM(RPMMIRE_DEFAULT);
542 REGISTER_ENUM(RPMMIRE_STRCMP);
543 REGISTER_ENUM(RPMMIRE_REGEX);
544 REGISTER_ENUM(RPMMIRE_GLOB);
546 REGISTER_ENUM(RPMVSF_DEFAULT);
547 REGISTER_ENUM(RPMVSF_NOHDRCHK);
548 REGISTER_ENUM(RPMVSF_NEEDPAYLOAD);
549 REGISTER_ENUM(RPMVSF_NOSHA1HEADER);
550 REGISTER_ENUM(RPMVSF_NOSHA256HEADER);
551 REGISTER_ENUM(RPMVSF_NODSAHEADER);
552 REGISTER_ENUM(RPMVSF_NORSAHEADER);
553 REGISTER_ENUM(RPMVSF_NOPAYLOAD);
554 REGISTER_ENUM(RPMVSF_NOMD5);
555 REGISTER_ENUM(RPMVSF_NODSA);
556 REGISTER_ENUM(RPMVSF_NORSA);
557 REGISTER_ENUM(_RPMVSF_NODIGESTS);
558 REGISTER_ENUM(_RPMVSF_NOSIGNATURES);
559 REGISTER_ENUM(_RPMVSF_NOHEADER);
560 REGISTER_ENUM(_RPMVSF_NOPAYLOAD);
562 REGISTER_ENUM(TR_ADDED);
563 REGISTER_ENUM(TR_REMOVED);
565 REGISTER_ENUM(RPMDBI_PACKAGES);
566 REGISTER_ENUM(RPMDBI_LABEL);
567 REGISTER_ENUM(RPMDBI_INSTFILENAMES);
568 REGISTER_ENUM(RPMDBI_NAME);
569 REGISTER_ENUM(RPMDBI_BASENAMES);
570 REGISTER_ENUM(RPMDBI_GROUP);
571 REGISTER_ENUM(RPMDBI_REQUIRENAME);
572 REGISTER_ENUM(RPMDBI_PROVIDENAME);
573 REGISTER_ENUM(RPMDBI_CONFLICTNAME);
574 REGISTER_ENUM(RPMDBI_OBSOLETENAME);
575 REGISTER_ENUM(RPMDBI_TRIGGERNAME);
576 REGISTER_ENUM(RPMDBI_DIRNAMES);
577 REGISTER_ENUM(RPMDBI_INSTALLTID);
578 REGISTER_ENUM(RPMDBI_SIGMD5);
579 REGISTER_ENUM(RPMDBI_SHA1HEADER);
581 REGISTER_ENUM(HEADERCONV_EXPANDFILELIST);
582 REGISTER_ENUM(HEADERCONV_COMPRESSFILELIST);
583 REGISTER_ENUM(HEADERCONV_RETROFIT_V3);
585 REGISTER_ENUM(RPMVERIFY_NONE);
586 REGISTER_ENUM(RPMVERIFY_FILEDIGEST);
587 REGISTER_ENUM(RPMVERIFY_FILESIZE);
588 REGISTER_ENUM(RPMVERIFY_LINKTO);
589 REGISTER_ENUM(RPMVERIFY_USER);
590 REGISTER_ENUM(RPMVERIFY_GROUP);
591 REGISTER_ENUM(RPMVERIFY_MTIME);
592 REGISTER_ENUM(RPMVERIFY_MODE);
593 REGISTER_ENUM(RPMVERIFY_RDEV);
594 REGISTER_ENUM(RPMVERIFY_CAPS);
595 REGISTER_ENUM(RPMVERIFY_READLINKFAIL);
596 REGISTER_ENUM(RPMVERIFY_READFAIL);
597 REGISTER_ENUM(RPMVERIFY_LSTATFAIL);