All of lore.kernel.org
 help / color / mirror / Atom feed
* i2c-tools: add compatibility for python2/3 to py-smbus
@ 2015-01-19 15:13 Angelo Compagnucci
       [not found] ` <CA+TH9VkT1K2aqAuNOLsGiU407OA4NYcMVaUakEQgSWLpMBBg2A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Angelo Compagnucci @ 2015-01-19 15:13 UTC (permalink / raw)
  To: linux-i2c-u79uwXL29TY76Z2rM5mHXA, jdelvare-l3A5Bk7waGM

[-- Attachment #1: Type: text/plain, Size: 487 bytes --]

Dear Jean Delvare,

Attached you can find a patch that implements py-smbus for python3
with python2 backward compatibility.
This patch is not heavily tested, but it wors well for me.

Unfortunately, I don't know how to use svn for sharing source code, it
is so ugly compared to git and it doesn't provide a way to send
patches via email, so the best way I found was to attach the patch
file.

Hope this helps!

Sincerely, Angelo

-- 
Profile: http://it.linkedin.com/in/compagnucciangelo

[-- Attachment #2: i2c-tools-py-smbus-python2-3-support.patch --]
[-- Type: text/x-patch, Size: 3785 bytes --]

Index: smbusmodule.c
===================================================================
diff --git a/i2c-tools/trunk/py-smbus/smbusmodule.c b/i2c-tools/trunk/py-smbus/smbusmodule.c
--- a/i2c-tools/trunk/py-smbus/smbusmodule.c	(revision 6261)
+++ b/i2c-tools/trunk/py-smbus/smbusmodule.c	(working copy)
@@ -18,14 +18,16 @@
 
 #include <Python.h>
 #include "structmember.h"
-#include <sys/ioctl.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <fcntl.h>
-#include <linux/i2c.h>
 #include <linux/i2c-dev.h>
-#include <i2c/smbus.h>
 
+/* Required for backward compatibility with python 2*/
+#if PY_MAJOR_VERSION >= 3
+#define PY3
+#endif
+
 /*
 ** These are required to build this module against Linux older than 2.6.23.
 */
@@ -35,6 +37,7 @@
 #define I2C_SMBUS_I2C_BLOCK_DATA	8
 #endif
 
+#ifndef PY3
 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"
@@ -44,6 +47,7 @@
 	"\n"
 	"Because the I2C device interface is opened R/W, users of this\n"
 	"module usually must have root permissions.\n");
+#endif
 
 typedef struct {
 	PyObject_HEAD
@@ -94,7 +98,11 @@
 	PyObject *ref = SMBus_close(self);
 	Py_XDECREF(ref);
 
+#ifndef PY3
 	self->ob_type->tp_free((PyObject *)self);
+#else
+	Py_TYPE(self)->tp_free((PyObject *)self);
+#endif
 }
 
 #define MAXPATH 16
@@ -434,11 +442,19 @@
 
 	for (ii = 0; ii < len; ii++) {
 		PyObject *val = PyList_GET_ITEM(list, ii);
+#ifndef PY3
 		if (!PyInt_Check(val)) {
 			PyErr_SetString(PyExc_TypeError, msg);
 			return 0; /* fail */
 		}
 		data->block[ii+1] = (__u8)PyInt_AS_LONG(val);
+#else
+		if (!PyLong_Check(val)) {
+			PyErr_SetString(PyExc_TypeError, msg);
+			return 0; /* fail */
+		}
+		data->block[ii+1] = (__u8)PyLong_AS_LONG(val);
+#endif
 	}
 
 	return 1; /* success */
@@ -636,12 +652,18 @@
 	{NULL},
 };
 
+#ifndef PY3
 static PyTypeObject SMBus_type = {
 	PyObject_HEAD_INIT(NULL)
 	0,				/* ob_size */
 	"smbus.SMBus",			/* tp_name */
-	sizeof(SMBus),			/* tp_basicsize */
-	0,				/* tp_itemsize */
+#else
+static PyTypeObject SMBus_type = {
+	PyVarObject_HEAD_INIT(NULL, 0)
+	"SMBus",			/* tp_name */
+#endif
+	sizeof(SMBus),		/* tp_basicsize */
+	0,				    /* tp_itemsize */
 	(destructor)SMBus_dealloc,	/* tp_dealloc */
 	0,				/* tp_print */
 	0,				/* tp_getattr */
@@ -678,24 +700,64 @@
 	SMBus_new,			/* tp_new */
 };
 
+#ifndef PY3
 static PyMethodDef SMBus_module_methods[] = {
 	{NULL}
 };
+#else
+static struct PyModuleDef SMBusModule = {
+	PyModuleDef_HEAD_INIT,
+	"SMBus",	/* m_name */
+	"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",  /* m_doc */
+	-1, /* m_size */
+	NULL, /* m_methods */
+	NULL, /* m_reload */
+	NULL, /* m_traverse */
+	NULL, /* m_clear */
+	NULL, /* m_free */
+};
+#endif
 
 #ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
 #define PyMODINIT_FUNC void
 #endif
 PyMODINIT_FUNC
-initsmbus(void) 
+
+#ifndef PY3
+initsmbus(void)
+#else
+PyInit_smbus(void)
+#endif 
 {
 	PyObject* m;
 
 	if (PyType_Ready(&SMBus_type) < 0)
+#ifndef PY3
 		return;
+#else
+		return NULL;
+#endif
 
+#ifndef PY3
 	m = Py_InitModule3("smbus", SMBus_module_methods, SMBus_module_doc);
+#else
+	m = PyModule_Create(&SMBusModule);
+	if (m == NULL)
+		return NULL;
+#endif
 
 	Py_INCREF(&SMBus_type);
 	PyModule_AddObject(m, "SMBus", (PyObject *)&SMBus_type);
+
+#ifdef PY3
+	return m;
+#endif
 }
 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: i2c-tools: add compatibility for python2/3 to py-smbus
       [not found] ` <CA+TH9VkT1K2aqAuNOLsGiU407OA4NYcMVaUakEQgSWLpMBBg2A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2015-01-19 22:03   ` Jean Delvare
       [not found]     ` <20150119230327.0224d0ba-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Jean Delvare @ 2015-01-19 22:03 UTC (permalink / raw)
  To: Angelo Compagnucci
  Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA, Renz, Bernhard, Michael Mercier

Hi Angelo,

On Mon, 19 Jan 2015 16:13:26 +0100, Angelo Compagnucci wrote:
> Dear Jean Delvare,
> 
> Attached you can find a patch that implements py-smbus for python3
> with python2 backward compatibility.
> This patch is not heavily tested, but it wors well for me.

Thanks a lot for your work. I was finally about to look into this and
you saved me some time :-)

> Unfortunately, I don't know how to use svn for sharing source code, it
> is so ugly compared to git and it doesn't provide a way to send
> patches via email, so the best way I found was to attach the patch
> file.

This is fine. You know, this is how people did before git was invented,
and it worked well ;-)

> Hope this helps!

Oh yeah. I started from your version and improved it as follows:
* Added back missing header files as pointed out by Michael. I have a
  hard time believing you did not need these.
* Reverted some undesirable white space changes.
* Turned most #ifndefs into #ifdefs for readability.
* Shared the module documentation string.
* Added some preprocessing magic to limit the number of #ifdefs.
* Dropped PY3 definition.

Result is below, my patch is significantly smaller and the resulting
code is IMHO more readable. It builds fine for both python 2.7 and 3.3,
however I can't test it, so I would appreciate if you guys could test
and report. If it works fine I'll commit it tomorrow.

For convenience I have also put the pre-patched file at:
http://jdelvare.nerim.net/devel/i2c-tools/smbusmodule.c

Thanks.
---
 py-smbus/smbusmodule.c |   47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 45 insertions(+), 2 deletions(-)

--- i2c-tools.orig/py-smbus/smbusmodule.c	2015-01-19 22:09:39.624016377 +0100
+++ i2c-tools/py-smbus/smbusmodule.c	2015-01-19 22:59:03.651572099 +0100
@@ -94,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
@@ -434,11 +438,19 @@ SMBus_list_to_data(PyObject *list, union
 
 	for (ii = 0; ii < len; ii++) {
 		PyObject *val = PyList_GET_ITEM(list, ii);
+#if PY_MAJOR_VERSION >= 3
+		if (!PyLong_Check(val)) {
+			PyErr_SetString(PyExc_TypeError, msg);
+			return 0; /* fail */
+		}
+		data->block[ii+1] = (__u8)PyLong_AS_LONG(val);
+#else
 		if (!PyInt_Check(val)) {
 			PyErr_SetString(PyExc_TypeError, msg);
 			return 0; /* fail */
 		}
 		data->block[ii+1] = (__u8)PyInt_AS_LONG(val);
+#endif
 	}
 
 	return 1; /* success */
@@ -637,9 +649,14 @@ static PyGetSetDef SMBus_getset[] = {
 };
 
 static PyTypeObject SMBus_type = {
+#if PY_MAJOR_VERSION >= 3
+	PyVarObject_HEAD_INIT(NULL, 0)
+	"SMBus",			/* tp_name */
+#else
 	PyObject_HEAD_INIT(NULL)
 	0,				/* ob_size */
 	"smbus.SMBus",			/* tp_name */
+#endif
 	sizeof(SMBus),			/* tp_basicsize */
 	0,				/* tp_itemsize */
 	(destructor)SMBus_dealloc,	/* tp_dealloc */
@@ -678,24 +695,50 @@ static PyTypeObject SMBus_type = {
 	SMBus_new,			/* tp_new */
 };
 
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef SMBusModule = {
+	PyModuleDef_HEAD_INIT,
+	"SMBus",			/* m_name */
+	SMBus_module_doc,  		/* m_doc */
+	-1,				/* m_size */
+	NULL,				/* m_methods */
+	NULL,				/* m_reload */
+	NULL,				/* m_traverse */
+	NULL,				/* m_clear */
+	NULL,				/* m_free */
+};
+#define INIT_RETURN(m)	return m
+#define INIT_FNAME	PyInit_smbus
+#else
 static PyMethodDef SMBus_module_methods[] = {
 	{NULL}
 };
+#define INIT_RETURN(m)	return
+#define INIT_FNAME	initsmbus
+#endif
 
 #ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
 #define PyMODINIT_FUNC void
 #endif
 PyMODINIT_FUNC
-initsmbus(void) 
+INIT_FNAME(void)
 {
 	PyObject* m;
 
 	if (PyType_Ready(&SMBus_type) < 0)
-		return;
+		INIT_RETURN(NULL);
 
+#if PY_MAJOR_VERSION >= 3
+	m = PyModule_Create(&SMBusModule);
+#else
 	m = Py_InitModule3("smbus", SMBus_module_methods, SMBus_module_doc);
+#endif
+	if (m == NULL)
+		INIT_RETURN(NULL);
 
 	Py_INCREF(&SMBus_type);
 	PyModule_AddObject(m, "SMBus", (PyObject *)&SMBus_type);
+
+	INIT_RETURN(m);
 }
 

-- 
Jean Delvare
SUSE L3 Support

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: i2c-tools: add compatibility for python2/3 to py-smbus
       [not found]     ` <20150119230327.0224d0ba-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
@ 2015-01-22  8:56       ` Michael Mercier
       [not found]         ` <1421917018.21840.0-YAXBhf1W29QAs8EywTwl9A@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Mercier @ 2015-01-22  8:56 UTC (permalink / raw)
  To: Jean Delvare
  Cc: Angelo Compagnucci, linux-i2c-u79uwXL29TY76Z2rM5mHXA, Renz, Bernhard

Hi Jean,

I just tried you patch and I got an error when I try to import the 
smbus python package:

import smbus

ImportError: 
/usr/local/lib/python3.2/dist-packages/smbus.cpython-32mu.so: undefined 
symbol: i2c_smbus_process_call

Any idea?

Thanks,

Michael Mercier

Le lun. 19 janv. 2015 à 23:03, Jean Delvare <jdelvare-l3A5Bk7waGM@public.gmane.org> a 
écrit :
> Hi Angelo,
> 
> On Mon, 19 Jan 2015 16:13:26 +0100, Angelo Compagnucci wrote:
>>  Dear Jean Delvare,
>> 
>>  Attached you can find a patch that implements py-smbus for python3
>>  with python2 backward compatibility.
>>  This patch is not heavily tested, but it wors well for me.
> 
> Thanks a lot for your work. I was finally about to look into this and
> you saved me some time :-)
> 
>>  Unfortunately, I don't know how to use svn for sharing source code, 
>> it
>>  is so ugly compared to git and it doesn't provide a way to send
>>  patches via email, so the best way I found was to attach the patch
>>  file.
> 
> This is fine. You know, this is how people did before git was 
> invented,
> and it worked well ;-)
> 
>>  Hope this helps!
> 
> Oh yeah. I started from your version and improved it as follows:
> * Added back missing header files as pointed out by Michael. I have a
>   hard time believing you did not need these.
> * Reverted some undesirable white space changes.
> * Turned most #ifndefs into #ifdefs for readability.
> * Shared the module documentation string.
> * Added some preprocessing magic to limit the number of #ifdefs.
> * Dropped PY3 definition.
> 
> Result is below, my patch is significantly smaller and the resulting
> code is IMHO more readable. It builds fine for both python 2.7 and 
> 3.3,
> however I can't test it, so I would appreciate if you guys could test
> and report. If it works fine I'll commit it tomorrow.
> 
> For convenience I have also put the pre-patched file at:
> http://jdelvare.nerim.net/devel/i2c-tools/smbusmodule.c
> 
> Thanks.
> ---
>  py-smbus/smbusmodule.c |   47 
> +++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 45 insertions(+), 2 deletions(-)
> 
> --- i2c-tools.orig/py-smbus/smbusmodule.c	2015-01-19 
> 22:09:39.624016377 +0100
> +++ i2c-tools/py-smbus/smbusmodule.c	2015-01-19 22:59:03.651572099 
> +0100
> @@ -94,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
> @@ -434,11 +438,19 @@ SMBus_list_to_data(PyObject *list, union
> 
>  	for (ii = 0; ii < len; ii++) {
>  		PyObject *val = PyList_GET_ITEM(list, ii);
> +#if PY_MAJOR_VERSION >= 3
> +		if (!PyLong_Check(val)) {
> +			PyErr_SetString(PyExc_TypeError, msg);
> +			return 0; /* fail */
> +		}
> +		data->block[ii+1] = (__u8)PyLong_AS_LONG(val);
> +#else
>  		if (!PyInt_Check(val)) {
>  			PyErr_SetString(PyExc_TypeError, msg);
>  			return 0; /* fail */
>  		}
>  		data->block[ii+1] = (__u8)PyInt_AS_LONG(val);
> +#endif
>  	}
> 
>  	return 1; /* success */
> @@ -637,9 +649,14 @@ static PyGetSetDef SMBus_getset[] = {
>  };
> 
>  static PyTypeObject SMBus_type = {
> +#if PY_MAJOR_VERSION >= 3
> +	PyVarObject_HEAD_INIT(NULL, 0)
> +	"SMBus",			/* tp_name */
> +#else
>  	PyObject_HEAD_INIT(NULL)
>  	0,				/* ob_size */
>  	"smbus.SMBus",			/* tp_name */
> +#endif
>  	sizeof(SMBus),			/* tp_basicsize */
>  	0,				/* tp_itemsize */
>  	(destructor)SMBus_dealloc,	/* tp_dealloc */
> @@ -678,24 +695,50 @@ static PyTypeObject SMBus_type = {
>  	SMBus_new,			/* tp_new */
>  };
> 
> +#if PY_MAJOR_VERSION >= 3
> +static struct PyModuleDef SMBusModule = {
> +	PyModuleDef_HEAD_INIT,
> +	"SMBus",			/* m_name */
> +	SMBus_module_doc,  		/* m_doc */
> +	-1,				/* m_size */
> +	NULL,				/* m_methods */
> +	NULL,				/* m_reload */
> +	NULL,				/* m_traverse */
> +	NULL,				/* m_clear */
> +	NULL,				/* m_free */
> +};
> +#define INIT_RETURN(m)	return m
> +#define INIT_FNAME	PyInit_smbus
> +#else
>  static PyMethodDef SMBus_module_methods[] = {
>  	{NULL}
>  };
> +#define INIT_RETURN(m)	return
> +#define INIT_FNAME	initsmbus
> +#endif
> 
>  #ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
>  #define PyMODINIT_FUNC void
>  #endif
>  PyMODINIT_FUNC
> -initsmbus(void)
> +INIT_FNAME(void)
>  {
>  	PyObject* m;
> 
>  	if (PyType_Ready(&SMBus_type) < 0)
> -		return;
> +		INIT_RETURN(NULL);
> 
> +#if PY_MAJOR_VERSION >= 3
> +	m = PyModule_Create(&SMBusModule);
> +#else
>  	m = Py_InitModule3("smbus", SMBus_module_methods, SMBus_module_doc);
> +#endif
> +	if (m == NULL)
> +		INIT_RETURN(NULL);
> 
>  	Py_INCREF(&SMBus_type);
>  	PyModule_AddObject(m, "SMBus", (PyObject *)&SMBus_type);
> +
> +	INIT_RETURN(m);
>  }
> 
> 
> --
> Jean Delvare
> SUSE L3 Support

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: i2c-tools: add compatibility for python2/3 to py-smbus
       [not found]         ` <1421917018.21840.0-YAXBhf1W29QAs8EywTwl9A@public.gmane.org>
@ 2015-01-22 10:25           ` Jean Delvare
  2015-01-22 10:49           ` Jean Delvare
  1 sibling, 0 replies; 9+ messages in thread
From: Jean Delvare @ 2015-01-22 10:25 UTC (permalink / raw)
  To: Michael Mercier
  Cc: Angelo Compagnucci, linux-i2c-u79uwXL29TY76Z2rM5mHXA, Renz, Bernhard

Hi Michael,

On Thu, 22 Jan 2015 09:56:58 +0100, Michael Mercier wrote:
> Hi Jean,
> 
> I just tried you patch and I got an error when I try to import the 
> smbus python package:

Thanks for testing and reporting.

> import smbus
> 
> ImportError: 
> /usr/local/lib/python3.2/dist-packages/smbus.cpython-32mu.so: undefined 
> symbol: i2c_smbus_process_call
> 
> Any idea?

Not really, again I know nothing about python. But didn't you have the
same problem with Angelo's patch?

Maybe Angelo has an idea.

-- 
Jean Delvare
SUSE L3 Support

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: i2c-tools: add compatibility for python2/3 to py-smbus
       [not found]         ` <1421917018.21840.0-YAXBhf1W29QAs8EywTwl9A@public.gmane.org>
  2015-01-22 10:25           ` Jean Delvare
@ 2015-01-22 10:49           ` Jean Delvare
       [not found]             ` <20150122114958.3178f5f6-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
  1 sibling, 1 reply; 9+ messages in thread
From: Jean Delvare @ 2015-01-22 10:49 UTC (permalink / raw)
  To: Michael Mercier
  Cc: Angelo Compagnucci, linux-i2c-u79uwXL29TY76Z2rM5mHXA, Renz, Bernhard

Hi again Michael,

On Thu, 22 Jan 2015 09:56:58 +0100, Michael Mercier wrote:
> I just tried you patch and I got an error when I try to import the 
> smbus python package:
> 
> import smbus
> 
> ImportError: 
> /usr/local/lib/python3.2/dist-packages/smbus.cpython-32mu.so: undefined 
> symbol: i2c_smbus_process_call
> 
> Any idea?

Hmm, OK, I think I see what's going on here.

There are two i2c-tools branches: the stable branch (3.1) and the
development branch (SVN trunk.) The patch I sent was for the
development branch.

One important difference between the two branches is that, in the
stable branch, the i2c API is implemented as a set of inline functions,
while in the development branch it is a library. I don't think that
py-smbus was properly ported so most likely it was already broken
before my patch. I suppose you are using SVN trunk and this is why you
have this linking problem?

If that is the case, then maybe the following patch will do the trick:

---
 py-smbus/Module.mk |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- i2c-tools.orig/py-smbus/Module.mk	2012-04-26 12:05:55.351086796 +0200
+++ i2c-tools/py-smbus/Module.mk	2015-01-22 11:47:06.524806243 +0100
@@ -12,7 +12,7 @@ PY_SMBUS_DIR := py-smbus
 PYTHON ?= python
 DISTUTILS := \
 	cd $(PY_SMBUS_DIR) && \
-	CPPFLAGS="$(CPPFLAGS) -I../include" $(PYTHON) setup.py
+	CPPFLAGS="$(CPPFLAGS) -I../include" LDFLAGS="$(LDFLAGS) -Llib -li2c" $(PYTHON) setup.py
 
 all-python: $(INCLUDE_DIR)/i2c/smbus.h
 	$(DISTUTILS) build

But please keep in mind that my python knowledge is non-existent so it
might be plain wrong. Hopefully Angelo can comment on this.

-- 
Jean Delvare
SUSE L3 Support

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: i2c-tools: add compatibility for python2/3 to py-smbus
       [not found]             ` <20150122114958.3178f5f6-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
@ 2015-01-22 13:28               ` Michael Mercier
       [not found]                 ` <1421933290.21840.1-YAXBhf1W29QAs8EywTwl9A@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Mercier @ 2015-01-22 13:28 UTC (permalink / raw)
  To: Jean Delvare
  Cc: Angelo Compagnucci, linux-i2c-u79uwXL29TY76Z2rM5mHXA, Renz, Bernhard

Thanks a lot!

It was a linking problem. I applied the patch and I it works for both 
python2 and python3.

For those who are interested you can choose to the python version with 
the PYTHON variable:
make install # use "python" so it depends on your system configuration
make install PYTHON=python2 # for python 2 explicitly
make install PYTHON=python3 # for python 3 explicitly


I have only tested read_i2c_block_data write_i2c_block_data for python 
3.2 and python 2.7.

I think you can push these patchs upstream.

Thanks again,

Michael Mercier

Le jeu. 22 janv. 2015 à 11:49, Jean Delvare <jdelvare-l3A5Bk7waGM@public.gmane.org> a 
écrit :
> Hi again Michael,
> 
> On Thu, 22 Jan 2015 09:56:58 +0100, Michael Mercier wrote:
>>  I just tried you patch and I got an error when I try to import the
>>  smbus python package:
>> 
>>  import smbus
>> 
>>  ImportError:
>>  /usr/local/lib/python3.2/dist-packages/smbus.cpython-32mu.so: 
>> undefined
>>  symbol: i2c_smbus_process_call
>> 
>>  Any idea?
> 
> Hmm, OK, I think I see what's going on here.
> 
> There are two i2c-tools branches: the stable branch (3.1) and the
> development branch (SVN trunk.) The patch I sent was for the
> development branch.
> 
> One important difference between the two branches is that, in the
> stable branch, the i2c API is implemented as a set of inline 
> functions,
> while in the development branch it is a library. I don't think that
> py-smbus was properly ported so most likely it was already broken
> before my patch. I suppose you are using SVN trunk and this is why you
> have this linking problem?
> 
> If that is the case, then maybe the following patch will do the trick:
> 
> ---
>  py-smbus/Module.mk |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> --- i2c-tools.orig/py-smbus/Module.mk	2012-04-26 12:05:55.351086796 
> +0200
> +++ i2c-tools/py-smbus/Module.mk	2015-01-22 11:47:06.524806243 +0100
> @@ -12,7 +12,7 @@ PY_SMBUS_DIR := py-smbus
>  PYTHON ?= python
>  DISTUTILS := \
>  	cd $(PY_SMBUS_DIR) && \
> -	CPPFLAGS="$(CPPFLAGS) -I../include" $(PYTHON) setup.py
> +	CPPFLAGS="$(CPPFLAGS) -I../include" LDFLAGS="$(LDFLAGS) -Llib 
> -li2c" $(PYTHON) setup.py
> 
>  all-python: $(INCLUDE_DIR)/i2c/smbus.h
>  	$(DISTUTILS) build
> 
> But please keep in mind that my python knowledge is non-existent so it
> might be plain wrong. Hopefully Angelo can comment on this.
> 
> --
> Jean Delvare
> SUSE L3 Support
> --
> To unsubscribe from this list: send the line "unsubscribe linux-i2c" 
> in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: i2c-tools: add compatibility for python2/3 to py-smbus
       [not found]                 ` <1421933290.21840.1-YAXBhf1W29QAs8EywTwl9A@public.gmane.org>
@ 2015-01-22 13:37                   ` Jean Delvare
  2015-01-26 11:46                   ` Jean Delvare
  1 sibling, 0 replies; 9+ messages in thread
From: Jean Delvare @ 2015-01-22 13:37 UTC (permalink / raw)
  To: Michael Mercier
  Cc: Angelo Compagnucci, linux-i2c-u79uwXL29TY76Z2rM5mHXA, Renz, Bernhard

On Thu, 22 Jan 2015 14:28:10 +0100, Michael Mercier wrote:
> Thanks a lot!
> 
> It was a linking problem. I applied the patch and I it works for both 
> python2 and python3.
> 
> For those who are interested you can choose to the python version with 
> the PYTHON variable:
> make install # use "python" so it depends on your system configuration
> make install PYTHON=python2 # for python 2 explicitly
> make install PYTHON=python3 # for python 3 explicitly
> 
> 
> I have only tested read_i2c_block_data write_i2c_block_data for python 
> 3.2 and python 2.7.
> 
> I think you can push these patchs upstream.

Great, thanks for testing :)

-- 
Jean Delvare
SUSE L3 Support

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: i2c-tools: add compatibility for python2/3 to py-smbus
       [not found]                 ` <1421933290.21840.1-YAXBhf1W29QAs8EywTwl9A@public.gmane.org>
  2015-01-22 13:37                   ` Jean Delvare
@ 2015-01-26 11:46                   ` Jean Delvare
       [not found]                     ` <20150126124615.7fd1f64f-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
  1 sibling, 1 reply; 9+ messages in thread
From: Jean Delvare @ 2015-01-26 11:46 UTC (permalink / raw)
  To: Michael Mercier
  Cc: Angelo Compagnucci, linux-i2c-u79uwXL29TY76Z2rM5mHXA, Renz, Bernhard

On Thu, 22 Jan 2015 14:28:10 +0100, Michael Mercier wrote:
> I have only tested read_i2c_block_data write_i2c_block_data for python 
> 3.2 and python 2.7.
> 
> I think you can push these patchs upstream.

I committed both patches. I also added python 3 support to the stable
branch.

-- 
Jean Delvare
SUSE L3 Support

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: i2c-tools: add compatibility for python2/3 to py-smbus
       [not found]                     ` <20150126124615.7fd1f64f-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
@ 2015-04-09 20:32                       ` Angelo Compagnucci
  0 siblings, 0 replies; 9+ messages in thread
From: Angelo Compagnucci @ 2015-04-09 20:32 UTC (permalink / raw)
  To: Jean Delvare
  Cc: Michael Mercier, linux-i2c-u79uwXL29TY76Z2rM5mHXA, Renz, Bernhard

Hi Jean,

2015-01-26 12:46 GMT+01:00 Jean Delvare <jdelvare-l3A5Bk7waGM@public.gmane.org>:
> On Thu, 22 Jan 2015 14:28:10 +0100, Michael Mercier wrote:
>> I have only tested read_i2c_block_data write_i2c_block_data for python
>> 3.2 and python 2.7.
>>
>> I think you can push these patchs upstream.
>
> I committed both patches. I also added python 3 support to the stable
> branch.

Any news on when the new i2c-tools stable release with python3 support
will be released?

Sincerely, Angelo

>
> --
> Jean Delvare
> SUSE L3 Support



-- 
Profile: http://it.linkedin.com/in/compagnucciangelo

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-04-09 20:32 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-19 15:13 i2c-tools: add compatibility for python2/3 to py-smbus Angelo Compagnucci
     [not found] ` <CA+TH9VkT1K2aqAuNOLsGiU407OA4NYcMVaUakEQgSWLpMBBg2A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-19 22:03   ` Jean Delvare
     [not found]     ` <20150119230327.0224d0ba-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2015-01-22  8:56       ` Michael Mercier
     [not found]         ` <1421917018.21840.0-YAXBhf1W29QAs8EywTwl9A@public.gmane.org>
2015-01-22 10:25           ` Jean Delvare
2015-01-22 10:49           ` Jean Delvare
     [not found]             ` <20150122114958.3178f5f6-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2015-01-22 13:28               ` Michael Mercier
     [not found]                 ` <1421933290.21840.1-YAXBhf1W29QAs8EywTwl9A@public.gmane.org>
2015-01-22 13:37                   ` Jean Delvare
2015-01-26 11:46                   ` Jean Delvare
     [not found]                     ` <20150126124615.7fd1f64f-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2015-04-09 20:32                       ` Angelo Compagnucci

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.