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
 }
 
