* For example
* \code
* import rpm
- * rpm.addMacro("_topdir","/path/to/topdir")
+ * rpm.rpmPushMacro("_topdir","/path/to/topdir")
* s=rpm.spec("foo.spec")
* print s.prep()
* \endcode
PyObject_HEAD
/*type specific fields */
rpmSpecPkg pkg;
+ specObject *source_spec;
};
+static void specPkg_dealloc(specPkgObject * s)
+{
+ Py_DECREF(s->source_spec);
+}
+
+static PyObject *pkgGetSection(rpmSpecPkg pkg, int section)
+{
+ char *sect = rpmSpecPkgGetSection(pkg, section);
+ if (sect != NULL) {
+ PyObject *ps = PyBytes_FromString(sect);
+ free(sect);
+ if (ps != NULL)
+ return ps;
+ }
+ Py_RETURN_NONE;
+}
+
static char specPkg_doc[] =
-"";
+"Package data parsed from spec file.";
static PyObject * specpkg_get_header(specPkgObject *s, void *closure)
{
return makeHeader(rpmSpecPkgHeader(s->pkg));
}
+static PyObject * specpkg_get_fileFile(specPkgObject *s, void *closure)
+{
+ return pkgGetSection(s->pkg, RPMBUILD_FILE_FILE);
+}
+
+static PyObject * specpkg_get_fileList(specPkgObject *s, void *closure)
+{
+ return pkgGetSection(s->pkg, RPMBUILD_FILE_LIST);
+}
+
+static PyObject * specpkg_get_policyList(specPkgObject *s, void *closure)
+{
+ return pkgGetSection(s->pkg, RPMBUILD_POLICY);
+}
+
static PyGetSetDef specpkg_getseters[] = {
- { "header", (getter) specpkg_get_header, NULL, NULL },
- { NULL } /* sentinel */
+ { "header", (getter) specpkg_get_header, NULL, NULL },
+ { "fileFile", (getter) specpkg_get_fileFile, NULL, NULL },
+ { "fileList", (getter) specpkg_get_fileList, NULL, NULL },
+ { "policyList", (getter) specpkg_get_policyList, NULL, NULL },
+ { NULL } /* sentinel */
};
PyTypeObject specPkg_Type = {
"rpm.specpkg", /* tp_name */
sizeof(specPkgObject), /* tp_size */
0, /* tp_itemsize */
- 0, /* tp_dealloc */
+ (destructor) specPkg_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
Py_RETURN_NONE;
}
+static PyObject *
+spec_get_parsed(specObject * s, void *closure)
+{
+ return getSection(s->spec, RPMBUILD_NONE);
+}
+
static PyObject *
spec_get_prep(specObject * s, void *closure)
{
return getSection(s->spec, RPMBUILD_INSTALL);
}
+static PyObject * spec_get_check(specObject * s, void *closure)
+{
+ return getSection(s->spec, RPMBUILD_CHECK);
+}
+
static PyObject * spec_get_clean(specObject * s, void *closure)
{
return getSection(s->spec, RPMBUILD_CLEAN);
iter = rpmSpecPkgIterInit(s->spec);
while ((pkg = rpmSpecPkgIterNext(iter)) != NULL) {
- PyObject *po = specPkg_Wrap(&specPkg_Type, pkg);
+ PyObject *po = specPkg_Wrap(&specPkg_Type, pkg, s);
if (!po) {
rpmSpecPkgIterFree(iter);
Py_DECREF(pkgList);
static PyGetSetDef spec_getseters[] = {
{"sources", (getter) spec_get_sources, NULL, NULL },
+ {"parsed", (getter) spec_get_parsed, NULL, NULL},
{"prep", (getter) spec_get_prep, NULL, NULL },
{"build", (getter) spec_get_build, NULL, NULL },
{"install", (getter) spec_get_install, NULL, NULL },
+ {"check", (getter) spec_get_check, NULL, NULL },
{"clean", (getter) spec_get_clean, NULL, NULL },
{"packages", (getter) spec_get_packages, NULL, NULL },
{"sourceHeader", (getter) spec_get_source_header, NULL, NULL },
return (PyObject *) s;
}
-PyObject * specPkg_Wrap(PyTypeObject *subtype, rpmSpecPkg pkg)
+PyObject * specPkg_Wrap(PyTypeObject *subtype, rpmSpecPkg pkg, specObject *source)
{
specPkgObject * s = (specPkgObject *)subtype->tp_alloc(subtype, 0);
if (s == NULL) return NULL;
s->pkg = pkg;
+ s->source_spec = source;
+ Py_INCREF(s->source_spec);
return (PyObject *) s;
}