pyalpm: New package
Python wrapper for libalpm and python implementation of pacman (pycman). Backported to Python 2.
This commit is contained in:
108
python-pyalpm/0001-Python2-compat-Module-initialization.patch
Normal file
108
python-pyalpm/0001-Python2-compat-Module-initialization.patch
Normal file
@@ -0,0 +1,108 @@
|
||||
From a5e026eb17fd6c32ecb92aa40b71b5c6900fdabe Mon Sep 17 00:00:00 2001
|
||||
From: Ray Donnelly <mingw.android@gmail.com>
|
||||
Date: Fri, 11 Mar 2016 11:55:59 +0000
|
||||
Subject: [PATCH 1/5] Python2 compat: Module initialization
|
||||
|
||||
From https://docs.python.org/3/howto/cporting.html
|
||||
---
|
||||
src/pyalpm.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 57 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git src/pyalpm.c src/pyalpm.c
|
||||
index 507f564..47c48cc 100644
|
||||
--- src/pyalpm.c
|
||||
+++ src/pyalpm.c
|
||||
@@ -78,6 +78,28 @@ static PyObject *pyalpm_vercmp(PyObject *self, PyObject *args) {
|
||||
return PyLong_FromLong(result);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ https://docs.python.org/3/howto/cporting.html
|
||||
+*/
|
||||
+
|
||||
+struct module_state {
|
||||
+ PyObject *error;
|
||||
+};
|
||||
+
|
||||
+#if PY_MAJOR_VERSION >= 3
|
||||
+#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
|
||||
+#else
|
||||
+#define GETSTATE(m) (&_state)
|
||||
+static struct module_state _state;
|
||||
+#endif
|
||||
+
|
||||
+static PyObject *
|
||||
+error_out(PyObject *m) {
|
||||
+ struct module_state *st = GETSTATE(m);
|
||||
+ PyErr_SetString(st->error, "something bad happened");
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
static PyMethodDef methods[] = {
|
||||
{"version", version_alpm, METH_NOARGS, "returns pyalpm version."},
|
||||
{"alpmversion", alpmversion_alpm, METH_NOARGS, "returns alpm version."},
|
||||
@@ -101,26 +123,56 @@ static PyMethodDef methods[] = {
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
+#if PY_MAJOR_VERSION >= 3
|
||||
+
|
||||
+static int pyalpm_traverse(PyObject *m, visitproc visit, void *arg) {
|
||||
+ Py_VISIT(GETSTATE(m)->error);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int pyalpm_clear(PyObject *m) {
|
||||
+ Py_CLEAR(GETSTATE(m)->error);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static struct PyModuleDef pyalpm_def = {
|
||||
PyModuleDef_HEAD_INIT,
|
||||
"alpm",
|
||||
"This module wraps the libalpm library",
|
||||
- -1,
|
||||
+ sizeof(struct module_state),
|
||||
methods,
|
||||
- NULL, NULL, NULL, NULL,
|
||||
+ NULL,
|
||||
+ pyalpm_traverse,
|
||||
+ pyalpm_clear,
|
||||
+ NULL,
|
||||
};
|
||||
|
||||
-PyMODINIT_FUNC PyInit_pyalpm(void)
|
||||
-{
|
||||
- PyObject* m = PyModule_Create(&pyalpm_def);
|
||||
+#define INITERROR return NULL
|
||||
|
||||
+PyMODINIT_FUNC
|
||||
+PyInit_pyalpm(void)
|
||||
+
|
||||
+#else
|
||||
+#define INITERROR return
|
||||
+
|
||||
+void
|
||||
+initpyalpm(void)
|
||||
+#endif
|
||||
+{
|
||||
+#if PY_MAJOR_VERSION >= 3
|
||||
+ PyObject *m = PyModule_Create(&pyalpm_def);
|
||||
+#else
|
||||
+ PyObject *m = Py_InitModule("pyalpm", methods);
|
||||
+#endif
|
||||
init_pyalpm_error(m);
|
||||
init_pyalpm_handle(m);
|
||||
init_pyalpm_package(m);
|
||||
init_pyalpm_db(m);
|
||||
init_pyalpm_transaction(m);
|
||||
|
||||
+#if PY_MAJOR_VERSION >= 3
|
||||
return m;
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* vim: set ts=2 sw=2 et: */
|
||||
--
|
||||
2.7.1
|
||||
|
||||
Reference in New Issue
Block a user