diff options
Diffstat (limited to 'sys-apps/i2c-tools/files/i2c-tools-3.1.1-python-3.patch')
-rw-r--r-- | sys-apps/i2c-tools/files/i2c-tools-3.1.1-python-3.patch | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/sys-apps/i2c-tools/files/i2c-tools-3.1.1-python-3.patch b/sys-apps/i2c-tools/files/i2c-tools-3.1.1-python-3.patch new file mode 100644 index 000000000000..1f3de76052e7 --- /dev/null +++ b/sys-apps/i2c-tools/files/i2c-tools-3.1.1-python-3.patch @@ -0,0 +1,129 @@ +support python-3.x + +http://comments.gmane.org/gmane.linux.drivers.i2c/11290 +https://bugs.gentoo.org/492632 + +--- a/py-smbus/smbusmodule.c ++++ b/py-smbus/smbusmodule.c +@@ -32,15 +32,18 @@ + #define I2C_SMBUS_I2C_BLOCK_DATA 8 + #endif + +-PyDoc_STRVAR(SMBus_module_doc, +- "This module defines an object type that allows SMBus transactions\n" +- "on hosts running the Linux kernel. The host kernel must have I2C\n" +- "support, I2C device interface support, and a bus adapter driver.\n" +- "All of these can be either built-in to the kernel, or loaded from\n" +- "modules.\n" +- "\n" +- "Because the I2C device interface is opened R/W, users of this\n" +- "module usually must have root permissions.\n"); ++#define module_doc \ ++ "This module defines an object type that allows SMBus transactions\n" \ ++ "on hosts running the Linux kernel. The host kernel must have I2C\n" \ ++ "support, I2C device interface support, and a bus adapter driver.\n" \ ++ "All of these can be either built-in to the kernel, or loaded from\n" \ ++ "modules.\n" \ ++ "\n" \ ++ "Because the I2C device interface is opened R/W, users of this\n" \ ++ "module usually must have root permissions.\n" ++#if PY_MAJOR_VERSION <= 2 ++PyDoc_STRVAR(SMBus_module_doc, module_doc); ++#endif + + typedef struct { + PyObject_HEAD +@@ -91,7 +94,11 @@ SMBus_dealloc(SMBus *self) + PyObject *ref = SMBus_close(self); + Py_XDECREF(ref); + ++#if PY_MAJOR_VERSION >= 3 ++ Py_TYPE(self)->tp_free((PyObject*)self); ++#else + self->ob_type->tp_free((PyObject *)self); ++#endif + } + + #define MAXPATH 16 +@@ -431,11 +438,19 @@ SMBus_list_to_data(PyObject *list, union i2c_smbus_data *data) + + for (ii = 0; ii < len; ii++) { + PyObject *val = PyList_GET_ITEM(list, ii); ++#if PY_MAJOR_VERSION >= 3 ++ if (!PyLong_Check(val)) { ++#else + if (!PyInt_Check(val)) { ++#endif + PyErr_SetString(PyExc_TypeError, msg); + return 0; /* fail */ + } ++#if PY_MAJOR_VERSION >= 3 ++ data->block[ii+1] = (__u8)PyLong_AS_LONG(val); ++#else + data->block[ii+1] = (__u8)PyInt_AS_LONG(val); ++#endif + } + + return 1; /* success */ +@@ -633,9 +648,27 @@ static PyGetSetDef SMBus_getset[] = { + {NULL}, + }; + ++#if PY_MAJOR_VERSION >= 3 ++static struct PyModuleDef SMBusModule = { ++ PyModuleDef_HEAD_INIT, ++ "smbus.SMBus", /* m_name */ ++ module_doc, /* m_doc */ ++ -1, /* m_size */ ++ NULL, /* m_methods */ ++ NULL, /* m_reload */ ++ NULL, /* m_traverse */ ++ NULL, /* m_clear */ ++ NULL, /* m_free */ ++}; ++#endif ++ + static PyTypeObject SMBus_type = { ++#if PY_MAJOR_VERSION >= 3 ++ PyVarObject_HEAD_INIT(NULL, 0) ++#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ ++#endif + "smbus.SMBus", /* tp_name */ + sizeof(SMBus), /* tp_basicsize */ + 0, /* tp_itemsize */ +@@ -683,16 +716,32 @@ static PyMethodDef SMBus_module_methods[] = { + #define PyMODINIT_FUNC void + #endif + PyMODINIT_FUNC +-initsmbus(void) ++#if PY_MAJOR_VERSION >= 3 ++PyInit_smbus(void) ++#else ++initsmbus(void) ++#endif + { + PyObject* m; + ++#if PY_MAJOR_VERSION >= 3 ++ if (PyType_Ready(&SMBus_type) < 0) ++ return NULL; ++ ++ m = PyModule_Create(&SMBusModule); ++ if (m == NULL) ++ return NULL; ++#else + if (PyType_Ready(&SMBus_type) < 0) + return; + + m = Py_InitModule3("smbus", SMBus_module_methods, SMBus_module_doc); ++#endif + + Py_INCREF(&SMBus_type); + PyModule_AddObject(m, "SMBus", (PyObject *)&SMBus_type); ++#if PY_MAJOR_VERSION >= 3 ++ return m; ++#endif + } + |