Skip to contentSkip to conversation

package/qpid-proton: needs host-python2

PATCH New Yann E. MORIN 3 participants 7 messages Jul 14, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 package/qpid-proton: needs host-python2

qpid-proton is using constructs that are not valid in python3. qpid-proton is hardcoding calls to /usr/bin/python, which can be whatever version.

So, fix the scripts to use '/usr/bin/env python' so it finds it in the PATH, and add a dependency to host-python.

---
 package/qpid-proton/0002-fix-python.patch | 22 ++++++++++++++++++++++
 package/qpid-proton/qpid-proton.mk        |  2 ++
 2 files changed, 24 insertions(+)
 create mode 100644 package/qpid-proton/0002-fix-python.patch
package/qpid-proton/0002-fix-python.patch new file +22 -0
new file mode 100644
index 0000000..c6f57e8
@@ -0,0 +1,22 @@
+Those scripts are not pytrhon3-compliant, use python2
+
+Signed-off-by: "Yann E. MORIN" <[email protected]>
+
+diff -durN qpid-proton-0.9.1.orig/proton-c/src/codec/encodings.h.py qpid-proton-0.9.1/proton-c/src/codec/encodings.h.py
+--- qpid-proton-0.9.1.orig/proton-c/src/codec/encodings.h.py	2015-04-29 21:17:49.000000000 +0200
++++ qpid-proton-0.9.1/proton-c/src/codec/encodings.h.py	2015-07-14 13:20:40.798356160 +0200
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python2
+ #
+ # Licensed to the Apache Software Foundation (ASF) under one
+ # or more contributor license agreements.  See the NOTICE file
+diff -durN qpid-proton-0.9.1.orig/proton-c/src/protocol.h.py qpid-proton-0.9.1/proton-c/src/protocol.h.py
+--- qpid-proton-0.9.1.orig/proton-c/src/protocol.h.py	2015-04-29 21:17:49.000000000 +0200
++++ qpid-proton-0.9.1/proton-c/src/protocol.h.py	2015-07-14 13:21:19.750824925 +0200
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python2
+ #
+ # Licensed to the Apache Software Foundation (ASF) under one
+ # or more contributor license agreements.  See the NOTICE file
package/qpid-proton/qpid-proton.mk +2 -0
index eae4589..cb06d97 100644
@@ -11,8 +11,10 @@ QPID_PROTON_LICENSE = Apache-2.0
 QPID_PROTON_LICENSE_FILES = LICENSE
 QPID_PROTON_INSTALL_STAGING = YES
 QPID_PROTON_DEPENDENCIES = \
+	host-python \
 	util-linux \
 	$(if $(BR2_PACKAGE_OPENSSL),openssl)
+
 QPID_PROTON_CONF_OPTS = \
 	-DBUILD_JAVA=OFF \
 	-DENABLE_VALGRIND=OFF \
Signature · 1 line
1.9.1
#1 lore raw

PATCH 1/1 package/qpid-proton: needs host-python2

Hi Yann,

Quoted 3 lines · Yann E. MORIN

qpid-proton is using constructs that are not valid in python3. qpid-proton is hardcoding calls to /usr/bin/python, which can be whatever version.

The manual, under "Mandatory packages", currently lists "python (version 2.6 or 2.7)". Should we change that to "python (version 2.6 or any later)"?

Quoted 2 lines

So, fix the scripts to use '/usr/bin/env python' so it finds it in the PATH, and add a dependency to host-python.

My interpretation of the cmake log is that cmake uses the python interpreter it detects to run the scripts. In the failed cases cmake detected host-python3 because host-python3 happened to build before qpid-proton. cmake did not use the distro installed host python even though it's python2 (most likely). So I'm not sure patching the scripts is necessary.

baruch

Quoted 51 lines
---
 package/qpid-proton/0002-fix-python.patch | 22 ++++++++++++++++++++++
 package/qpid-proton/qpid-proton.mk        |  2 ++
 2 files changed, 24 insertions(+)
 create mode 100644 package/qpid-proton/0002-fix-python.patch
package/qpid-proton/0002-fix-python.patch new file +22 -0
new file mode 100644
index 0000000..c6f57e8
@@ -0,0 +1,22 @@
+Those scripts are not pytrhon3-compliant, use python2
+
+Signed-off-by: "Yann E. MORIN" <[email protected]>
+
+diff -durN qpid-proton-0.9.1.orig/proton-c/src/codec/encodings.h.py qpid-proton-0.9.1/proton-c/src/codec/encodings.h.py
+--- qpid-proton-0.9.1.orig/proton-c/src/codec/encodings.h.py	2015-04-29 21:17:49.000000000 +0200
++++ qpid-proton-0.9.1/proton-c/src/codec/encodings.h.py	2015-07-14 13:20:40.798356160 +0200
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python2
+ #
+ # Licensed to the Apache Software Foundation (ASF) under one
+ # or more contributor license agreements.  See the NOTICE file
+diff -durN qpid-proton-0.9.1.orig/proton-c/src/protocol.h.py qpid-proton-0.9.1/proton-c/src/protocol.h.py
+--- qpid-proton-0.9.1.orig/proton-c/src/protocol.h.py	2015-04-29 21:17:49.000000000 +0200
++++ qpid-proton-0.9.1/proton-c/src/protocol.h.py	2015-07-14 13:21:19.750824925 +0200
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python2
+ #
+ # Licensed to the Apache Software Foundation (ASF) under one
+ # or more contributor license agreements.  See the NOTICE file
package/qpid-proton/qpid-proton.mk +2 -0
index eae4589..cb06d97 100644
@@ -11,8 +11,10 @@ QPID_PROTON_LICENSE = Apache-2.0
 QPID_PROTON_LICENSE_FILES = LICENSE
 QPID_PROTON_INSTALL_STAGING = YES
 QPID_PROTON_DEPENDENCIES = \
+	host-python \
 	util-linux \
 	$(if $(BR2_PACKAGE_OPENSSL),openssl)
+
 QPID_PROTON_CONF_OPTS = \
 	-DBUILD_JAVA=OFF \
 	-DENABLE_VALGRIND=OFF \
Signature · 3 lines
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
#2 lore raw

PATCH 1/1 package/qpid-proton: needs host-python2

Dear Baruch Siach,

Quoted 5 lines · Baruch Siach

My interpretation of the cmake log is that cmake uses the python interpreter it detects to run the scripts. In the failed cases cmake detected host-python3 because host-python3 happened to build before qpid-proton. cmake did not use the distro installed host python even though it's python2 (most likely). So I'm not sure patching the scripts is necessary.

It is necessary if your host machine has a Python 3 interpreter and not a Python 2 interpreter. In this case the scripts will
run /usr/bin/python (because it's hardcoded in their source code), and this will run Python 3.

So Yann's solution looks good. Am I missing something?

Thanks,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#3 lore raw

PATCH 1/1 package/qpid-proton: needs host-python2

Hi Thomas,

Quoted 8 lines · Thomas Petazzoni
Quoted 6 lines · Baruch Siach

My interpretation of the cmake log is that cmake uses the python interpreter it detects to run the scripts. In the failed cases cmake detected host-python3 because host-python3 happened to build before qpid-proton. cmake did not use the distro installed host python even though it's python2 (most likely). So I'm not sure patching the scripts is necessary.

Quoted 6 lines

It is necessary if your host machine has a Python 3 interpreter and not a Python 2 interpreter. In this case the scripts will
run /usr/bin/python (because it's hardcoded in their source code), and this will run Python 3.

So Yann's solution looks good. Am I missing something?

My point is that in the failed cases /usr/bin/python was not used, otherwise the build would have succeeded. It seems that cmake uses the python interpreter it detects to run the scripts. So patching the scripts doesn't change anything by itself, IIUC.

Related to this, what do you thing about changing the host python requirement in the manual?

baruch

Signature · 3 lines
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
#4 lore raw

PATCH 1/1 package/qpid-proton: needs host-python2

Baruch, All,

On 2015-07-14 15:03 +0300, Baruch Siach spake thusly:

Quoted 14 lines · Thomas Petazzoni
Quoted 13 lines · Baruch Siach
Quoted 6 lines

My interpretation of the cmake log is that cmake uses the python interpreter it detects to run the scripts. In the failed cases cmake detected host-python3 because host-python3 happened to build before qpid-proton. cmake did not use the distro installed host python even though it's python2 (most likely). So I'm not sure patching the scripts is necessary.

It is necessary if your host machine has a Python 3 interpreter and not a Python 2 interpreter. In this case the scripts will
run /usr/bin/python (because it's hardcoded in their source code), and this will run Python 3.

Quoted 6 lines
Quoted 1 line

So Yann's solution looks good. Am I missing something?

My point is that in the failed cases /usr/bin/python was not used, otherwise the build would have succeeded. It seems that cmake uses the python interpreter it detects to run the scripts. So patching the scripts doesn't change anything by itself, IIUC.

OK, I know understansd what you meant. I'll check that. Thanks for the explanations! ;-)

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#5 lore raw

PATCH 1/1 package/qpid-proton: needs host-python2

In reply to Baruch Siach

Baruch, All,

On 2015-07-14 15:03 +0300, Baruch Siach spake thusly:

Quoted 14 lines · Thomas Petazzoni
Quoted 13 lines · Baruch Siach
Quoted 6 lines

My interpretation of the cmake log is that cmake uses the python interpreter it detects to run the scripts. In the failed cases cmake detected host-python3 because host-python3 happened to build before qpid-proton. cmake did not use the distro installed host python even though it's python2 (most likely). So I'm not sure patching the scripts is necessary.

It is necessary if your host machine has a Python 3 interpreter and not a Python 2 interpreter. In this case the scripts will
run /usr/bin/python (because it's hardcoded in their source code), and this will run Python 3.

Quoted 6 lines
Quoted 1 line

So Yann's solution looks good. Am I missing something?

My point is that in the failed cases /usr/bin/python was not used, otherwise the build would have succeeded. It seems that cmake uses the python interpreter it detects to run the scripts. So patching the scripts doesn't change anything by itself, IIUC.

OK, so you were right and wrong at the same time! ;-)

In fact, if we just add host-python as a dependency, and we do not have a target python3 package, then we have no $(HOST_DIR)/usr/bin/python , only $(HOST_DIR)/usr/bin/python2 so cmake won't find it, and will fallback to using the host's python, and we're back to square-one.

So, we have to tell cmake what python to use, with something like
-DPYTHON_EXECUTABLE=$(HOST_DIR)/usr/bin/python2

And now, it works! :-) (patch incoming shortly)

Thanks for directing me in the right direction! :-)

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#6 lore raw

PATCH 1/1 package/qpid-proton: needs host-python2

In reply to Baruch Siach

Dear Baruch Siach,

Quoted 2 lines · Baruch Siach

Related to this, what do you thing about changing the host python requirement in the manual?

Yes, sounds good. Samuel is using Buildroot with both Python 2 and Python 3 installed on his machine, but Python 3 being the default one. However, I don't know if anyone has tested with a pure Python 3 installation. But it _should_ work. If not that's a bug that we should fix.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com