Skip to contentSkip to conversation

python: fix host-python symlink installation when no python is selected

PATCH New Samuel Martin 3 participants 6 messages Apr 6, 2014

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 python: fix host-python symlink installation when no python is selected

When no python interpreter is selected, all host-python symlink installation were disabled.
This could lead to a non-existing $(HOST_DIR)/usr/bin/python program.

Fixes:
http://autobuild.buildroot.net/results/6e7/6e74a343b4e8e113fd34d45c9279419e233afe8a/

---
 package/python/python.mk | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
package/python/python.mk +3 -3
index feff644..8a2ba65 100644
@@ -192,9 +192,9 @@ PYTHON_POST_INSTALL_STAGING_HOOKS += PYTHON_INSTALL_STAGING_PYTHON_CONFIG_SYMLIN
 PYTHON_AUTORECONF = YES
 
 # Some packages may have build scripts requiring python2.
-# Only install the python symlink in the host tree if python2 is enabled
-# for the target.
-ifeq ($(BR2_PACKAGE_PYTHON),y)
+# Only install the python symlink in the host tree if python3 is not enabled
+# for the target, otherwise the default python program may be missing.
+ifneq ($(BR2_PACKAGE_PYTHON3),y)
 define HOST_PYTHON_INSTALL_PYTHON_SYMLINK
 	ln -sf python2 $(HOST_DIR)/usr/bin/python
 	ln -sf python2-config $(HOST_DIR)/usr/bin/python-config
Signature · 1 line
1.9.1
#1 lore raw

PATCH 1/1 python: fix host-python symlink installation when no python is selected

Hi Samuel,

Quoted 6 lines · Samuel Martin

When no python interpreter is selected, all host-python symlink installation were disabled.
This could lead to a non-existing $(HOST_DIR)/usr/bin/python program.

Fixes:
http://autobuild.buildroot.net/results/6e7/6e74a343b4e8e113fd34d45c9279419e233afe8a/

I'm working on a similar problem
(http://autobuild.buildroot.net/results/dd0/dd04833b11a0ebb0193c861cb375b2112dd339d1/).
The following configure log shows the problem:

checking for a Python interpreter with version >= 2.6... python checking for python... /usr/bin/python
checking for python version... 2.6

The host packaged python (2.6) is detected instead of the buildroot built one (2.7), because the python symlink is missing. In this case BR2_PACKAGE_PYTHON3=y so even with this patch the problem is not fixed. Your commit e1584b7d3350 (python: rework python symlinks installation) originally limited host python symlink creation, but I could not understand the reason for this from the commit log.

baruch

Quoted 24 lines
---
 package/python/python.mk | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
package/python/python.mk +3 -3
index feff644..8a2ba65 100644
@@ -192,9 +192,9 @@ PYTHON_POST_INSTALL_STAGING_HOOKS += PYTHON_INSTALL_STAGING_PYTHON_CONFIG_SYMLIN
 PYTHON_AUTORECONF = YES
 
 # Some packages may have build scripts requiring python2.
-# Only install the python symlink in the host tree if python2 is enabled
-# for the target.
-ifeq ($(BR2_PACKAGE_PYTHON),y)
+# Only install the python symlink in the host tree if python3 is not enabled
+# for the target, otherwise the default python program may be missing.
+ifneq ($(BR2_PACKAGE_PYTHON3),y)
 define HOST_PYTHON_INSTALL_PYTHON_SYMLINK
 	ln -sf python2 $(HOST_DIR)/usr/bin/python
 	ln -sf python2-config $(HOST_DIR)/usr/bin/python-config
Signature · 1 line
1.9.1
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 python: fix host-python symlink installation when no python is selected

Hi Baruch, all,

Quoted 18 lines · Baruch Siach

Hi Samuel,

Quoted 6 lines · Samuel Martin

When no python interpreter is selected, all host-python symlink installation were disabled.
This could lead to a non-existing $(HOST_DIR)/usr/bin/python program.

Fixes:
http://autobuild.buildroot.net/results/6e7/6e74a343b4e8e113fd34d45c9279419e233afe8a/

I'm working on a similar problem
(http://autobuild.buildroot.net/results/dd0/dd04833b11a0ebb0193c861cb375b2112dd339d1/).
The following configure log shows the problem:

checking for a Python interpreter with version >= 2.6... python checking for python... /usr/bin/python
checking for python version... 2.6

Quoted 6 lines

The host packaged python (2.6) is detected instead of the buildroot built one (2.7), because the python symlink is missing. In this case BR2_PACKAGE_PYTHON3=y so even with this patch the problem is not fixed. Your commit e1584b7d3350 (python: rework python symlinks installation) originally limited host python symlink creation, but I could not understand the reason for this from the commit log.

Just to sum-up the python cases:
1) .config:
BR2_PACKAGE_PYTHON=n
BR2_PACKAGE_PYTHON3=n
output:
host/usr/bin/python2 may exist host/usr/bin/python never exists without this patch
2) .config:
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON3=n
output:
host/usr/bin/python2 exists host/usr/bin/python -> python2 host/usr/bin/python3 never exists
3) .config:
BR2_PACKAGE_PYTHON=n
BR2_PACKAGE_PYTHON3=y
output:
host/usr/bin/python3 exists host/usr/bin/python -> python3 host/usr/bin/python2 may exist

In this build failure, the .config is in case #3.

What happen is libevdev is built before python3 and host-python3 are built. But host/usr/bin/python2 is already built (because it is a dependency of libevdev).

So, there is no python symlink yet installed in the host dir.; that's why the configure script fallback on the system python installation.

I see 2 possible way to fix this:
1) add the following line to libevdev.mk:
LIBEVDEV_CONF_ENV += ac_cv_path_PYTHON=$(HOST_DIR)/usr/bin/python2

2) or, if python3 is correctly supported by libevdev, then change the host-python dependency to:
LIBEVDEV_DEPENDENCIES += $(if $(BR2_PACKAGE_PYHTON3),host-python3,host-python)

Tricky bug that, I think, we may see again :-/

Quoted 3 lines

baruch

Thanks a lot for sharing your investigations.

Regards,

Signature · 1 line
Samuel
#3 lore raw

PATCH 1/1 python: fix host-python symlink installation when no python is selected

Dear Samuel Martin,

Quoted 10 lines · Samuel Martin

So, there is no python symlink yet installed in the host dir.; that's why the configure script fallback on the system python installation.

I see 2 possible way to fix this:
1) add the following line to libevdev.mk:
LIBEVDEV_CONF_ENV += ac_cv_path_PYTHON=$(HOST_DIR)/usr/bin/python2

2) or, if python3 is correctly supported by libevdev, then change the host-python dependency to:
LIBEVDEV_DEPENDENCIES += $(if $(BR2_PACKAGE_PYHTON3),host-python3,host-python)

Can you check if Python 3 is OK for libevdev? If it's the case, then we could implement solution (2) that you're proposing here.

Thanks for the investigation!

Thomas

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

PATCH 1/1 python: fix host-python symlink installation when no python is selected

Quoted 11 lines · Thomas Petazzoni

Dear Samuel Martin,

Quoted 7 lines · Samuel Martin

So, there is no python symlink yet installed in the host dir.; that's why the configure script fallback on the system python installation.

I see 2 possible way to fix this:
1) add the following line to libevdev.mk:
LIBEVDEV_CONF_ENV += ac_cv_path_PYTHON=$(HOST_DIR)/usr/bin/python2

Quoted 6 lines
Quoted 3 lines

2) or, if python3 is correctly supported by libevdev, then change the host-python dependency to:
LIBEVDEV_DEPENDENCIES += $(if $(BR2_PACKAGE_PYHTON3),host-python3,host-python)

Can you check if Python 3 is OK for libevdev? If it's the case, then we could implement solution (2) that you're proposing here.

Sure. Just checked and it works!
Patch incoming ;)

Quoted 8 lines

Thanks for the investigation!

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

Signature · 1 line
Samuel
#5 lore raw

PATCH 1/1 python: fix host-python symlink installation when no python is selected

In reply to Samuel Martin

Dear Samuel Martin,

Quoted 11 lines · Samuel Martin

When no python interpreter is selected, all host-python symlink installation were disabled.
This could lead to a non-existing $(HOST_DIR)/usr/bin/python program.

Fixes:
http://autobuild.buildroot.net/results/6e7/6e74a343b4e8e113fd34d45c9279419e233afe8a/

---
 package/python/python.mk | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Applied, thanks.

Thomas

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