summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/manual/adding-packages-python.txt7
-rw-r--r--package/pkg-python.mk52
2 files changed, 55 insertions, 4 deletions
diff --git a/docs/manual/adding-packages-python.txt b/docs/manual/adding-packages-python.txt
index b8d5331b1d..8f78f89973 100644
--- a/docs/manual/adding-packages-python.txt
+++ b/docs/manual/adding-packages-python.txt
@@ -144,6 +144,13 @@ therefore only use a few of them, or none.
setuptools packages) and +HOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPT+
(for host setuptools packages).
+* +HOST_PYTHON_FOO_NEEDS_HOST_PYTHON+, to define the host python
+ interpreter. The usage of this variable is limited to host
+ packages. The two supported value are +python2+ and +python3+. It
+ will ensures the right host python package is available and will
+ invoke it for the build. If some build steps are overloaded, the
+ right python interpreter must be explicitly called in the commands.
+
With the Python infrastructure, all the steps required to build and
install the packages are already defined, and they generally work well
for most Python-based packages. However, when required, it is still
diff --git a/package/pkg-python.mk b/package/pkg-python.mk
index 512ef663f7..c78915e17c 100644
--- a/package/pkg-python.mk
+++ b/package/pkg-python.mk
@@ -143,12 +143,32 @@ $(2)_DEPENDENCIES ?= $(filter-out host-python host-python3 host-python-setuptool
# Target packages need both the python interpreter on the target (for
# runtime) and the python interpreter on the host (for
# compilation). However, host packages only need the python
-# interpreter on the host.
+# interpreter on the host, whose version may be enforced by setting
+# the *_NEEDS_HOST_PYTHON variable.
+#
+# So:
+# - for target packages, we always depend on the default python interpreter
+# (the one selected by the config);
+# - for host packages:
+# - if *_NEEDS_HOST_PYTHON is not set, then we depend on use the default
+# interperter;
+# - otherwise, we depend on the one requested by *_NEEDS_HOST_PYTHON.
+#
ifeq ($(4),target)
$(2)_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON3),host-python3 python3,host-python python)
else
+ifeq ($($(2)_NEEDS_HOST_PYTHON),)
$(2)_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON3),host-python3,host-python)
+else
+ifeq ($($(2)_NEEDS_HOST_PYTHON),python2)
+$(2)_DEPENDENCIES += host-python
+else ifeq ($($(2)_NEEDS_HOST_PYTHON),python3)
+$(2)_DEPENDENCIES += host-python3
+else
+$$(error Incorrect value '$($(2)_NEEDS_HOST_PYTHON)' for $(2)_NEEDS_HOST_PYTHON)
endif
+endif # ($($(2)_NEEDS_HOST_PYTHON),)
+endif # ($(4),target)
# Setuptools based packages will need host-python-setuptools (both
# host and target). We need to have a special exclusion for the
@@ -161,6 +181,30 @@ $(2)_DEPENDENCIES += host-python-setuptools
endif
endif
+# Python interpreter to use for building the package.
+#
+# We may want to specify the python interpreter toi be used for building a
+# package, especially for host-packages (target packages must be built using
+# the same version of the interpreter as the one installed on the target).
+#
+# So:
+# - for target packages, we always use the default python interpreter (which
+# is the same version as the one built and installed on the target);
+# - for host packages:
+# - if *_NEEDS_HOST_PYTHON is not set, then we use use the default
+# interperter;
+# - otherwise, we use the one requested by *_NEEDS_HOST_PYTHON.
+#
+ifeq ($(4),target)
+$(2)_PYTHON_INTERPRETER = $(HOST_DIR)/usr/bin/python
+else
+ifeq ($($(2)_NEEDS_HOST_PYTHON),)
+$(2)_PYTHON_INTERPRETER = $(HOST_DIR)/usr/bin/python
+else
+$(2)_PYTHON_INTERPRETER = $(HOST_DIR)/usr/bin/$($(2)_NEEDS_HOST_PYTHON)
+endif
+endif
+
#
# Build step. Only define it if not already defined by the package .mk
# file.
@@ -169,7 +213,7 @@ ifndef $(2)_BUILD_CMDS
define $(2)_BUILD_CMDS
(cd $$($$(PKG)_BUILDDIR)/; \
$$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \
- $(HOST_DIR)/usr/bin/python setup.py \
+ $$($(2)_PYTHON_INTERPRETER) setup.py \
$$($$(PKG)_BASE_BUILD_TGT) \
$$($$(PKG)_BASE_BUILD_OPT) $$($$(PKG)_BUILD_OPT))
endef
@@ -183,7 +227,7 @@ ifndef $(2)_INSTALL_CMDS
define $(2)_INSTALL_CMDS
(cd $$($$(PKG)_BUILDDIR)/; \
$$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \
- $(HOST_DIR)/usr/bin/python setup.py install \
+ $$($(2)_PYTHON_INTERPRETER) setup.py install \
$$($$(PKG)_BASE_INSTALL_OPT) $$($$(PKG)_INSTALL_OPT))
endef
endif
@@ -196,7 +240,7 @@ ifndef $(2)_INSTALL_TARGET_CMDS
define $(2)_INSTALL_TARGET_CMDS
(cd $$($$(PKG)_BUILDDIR)/; \
$$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \
- $(HOST_DIR)/usr/bin/python setup.py install \
+ $$($(2)_PYTHON_INTERPRETER) setup.py install \
$$($$(PKG)_BASE_INSTALL_OPT) $$($$(PKG)_INSTALL_OPT))
endef
endif
OpenPOWER on IntegriCloud