package/pkg-python.mk: remove distutils support

All Python packages have been migrated to a different setup type, and
we're about to bump to Python 3.12 which no longer supports distutils,
so let's drop support for distutils in our python-package
infrastructure.

Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
[Thomas: also update the Buildroot manual]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Adam Duskett
2024-02-06 23:09:28 +01:00
committed by Thomas Petazzoni
parent dcf0c3612d
commit 09de823cbc
3 changed files with 26 additions and 62 deletions

View File

@@ -429,8 +429,8 @@ different way, using different infrastructures:
and xref:cmake-package-reference[reference]. and xref:cmake-package-reference[reference].
* *Makefiles for Python modules*: We have a dedicated infrastructure * *Makefiles for Python modules*: We have a dedicated infrastructure
for Python modules that use the +distutils+, +flit+, +pep517+ or for Python modules that use the +flit+, +pep517+ or +setuptools+
+setuptools+ mechanisms. We cover them through a mechanisms. We cover them through a
xref:python-package-tutorial[tutorial] and a xref:python-package-tutorial[tutorial] and a
xref:python-package-reference[reference]. xref:python-package-reference[reference].

View File

@@ -29,7 +29,7 @@ with an example :
11: PYTHON_FOO_LICENSE_FILES = LICENSE 11: PYTHON_FOO_LICENSE_FILES = LICENSE
12: PYTHON_FOO_ENV = SOME_VAR=1 12: PYTHON_FOO_ENV = SOME_VAR=1
13: PYTHON_FOO_DEPENDENCIES = libmad 13: PYTHON_FOO_DEPENDENCIES = libmad
14: PYTHON_FOO_SETUP_TYPE = distutils 14: PYTHON_FOO_SETUP_TYPE = setuptools
15: 15:
16: $(eval $(python-package)) 16: $(eval $(python-package))
------------------------ ------------------------
@@ -51,8 +51,8 @@ On line 13, we declare our dependencies, so that they are built
before the build process of our package starts. before the build process of our package starts.
On line 14, we declare the specific Python build system being used. In On line 14, we declare the specific Python build system being used. In
this case the +distutils+ Python build system is used. The four this case the +setuptools+ Python build system is used. The three
supported ones are +distutils+, +flit+, +pep517+ and +setuptools+. supported ones are +flit+, +pep517+ and +setuptools+.
Finally, on line 16, we invoke the +python-package+ macro that Finally, on line 16, we invoke the +python-package+ macro that
generates all the Makefile rules that actually allow the package to be generates all the Makefile rules that actually allow the package to be
@@ -98,13 +98,13 @@ Note that:
One variable specific to the Python infrastructure is mandatory: One variable specific to the Python infrastructure is mandatory:
* +PYTHON_FOO_SETUP_TYPE+, to define which Python build system is used * +PYTHON_FOO_SETUP_TYPE+, to define which Python build system is used
by the package. The four supported values are +distutils+, +flit+, by the package. The three supported values are +flit+, +pep517+ and
+pep517+ and +setuptools+. If you don't know which one is used in +setuptools+. If you don't know which one is used in your package,
your package, look at the +setup.py+ or +pyproject.toml+ file in your look at the +setup.py+ or +pyproject.toml+ file in your package
package source code, and see whether it imports things from the source code, and see whether it imports things from the +flit+
+distutils+, +flit+ module or the +setuptools+ module. If the package module or the +setuptools+ module. If the package is using a
is using a +pyproject.toml+ file without any build-system requires +pyproject.toml+ file without any build-system requires and with a
and with a local in-tree backend-path one should use +pep517+. local in-tree backend-path one should use +pep517+.
A few additional variables, specific to the Python infrastructure, can A few additional variables, specific to the Python infrastructure, can
optionally be defined, depending on the package's needs. Many of them optionally be defined, depending on the package's needs. Many of them
@@ -119,27 +119,25 @@ therefore only use a few of them, or none.
+PYTHON_FOO_SUBDIR+. +PYTHON_FOO_SUBDIR+.
* +PYTHON_FOO_ENV+, to specify additional environment variables to * +PYTHON_FOO_ENV+, to specify additional environment variables to
pass to the Python +setup.py+ script (for distutils/setuptools pass to the Python +setup.py+ script (for setuptools packages) or
packages) or the +support/scripts/pyinstaller.py+ script (for the +support/scripts/pyinstaller.py+ script (for flit/pep517
flit/pep517 packages) for both the build and install steps. Note packages) for both the build and install steps. Note that the
that the infrastructure is automatically passing several standard infrastructure is automatically passing several standard variables,
variables, defined in +PKG_PYTHON_DISTUTILS_ENV+ (for distutils defined in +PKG_PYTHON_SETUPTOOLS_ENV+ (for setuptools target
target packages), +HOST_PKG_PYTHON_DISTUTILS_ENV+ (for distutils
host packages), +PKG_PYTHON_SETUPTOOLS_ENV+ (for setuptools target
packages), +HOST_PKG_PYTHON_SETUPTOOLS_ENV+ (for setuptools host packages), +HOST_PKG_PYTHON_SETUPTOOLS_ENV+ (for setuptools host
packages), +PKG_PYTHON_PEP517_ENV+ (for flit/pep517 target packages) packages), +PKG_PYTHON_PEP517_ENV+ (for flit/pep517 target packages)
and +HOST_PKG_PYTHON_PEP517_ENV+ (for flit/pep517 host packages). and +HOST_PKG_PYTHON_PEP517_ENV+ (for flit/pep517 host packages).
* +PYTHON_FOO_BUILD_OPTS+, to specify additional options to pass to the * +PYTHON_FOO_BUILD_OPTS+, to specify additional options to pass to
Python +setup.py+ script during the build step, this generally only the Python +setup.py+ script during the build step, this generally
makes sense to use for distutils/setuptools based packages as only makes sense to use for setuptools based packages as flit/pep517
flit/pep517 based packages do not pass these options to a +setup.py+ based packages do not pass these options to a +setup.py+ script but
script but instead pass them to +support/scripts/pyinstaller.py+. instead pass them to +support/scripts/pyinstaller.py+.
* +PYTHON_FOO_INSTALL_TARGET_OPTS+, +PYTHON_FOO_INSTALL_STAGING_OPTS+, * +PYTHON_FOO_INSTALL_TARGET_OPTS+, +PYTHON_FOO_INSTALL_STAGING_OPTS+,
+HOST_PYTHON_FOO_INSTALL_OPTS+ to specify additional options to pass +HOST_PYTHON_FOO_INSTALL_OPTS+ to specify additional options to pass
to the Python +setup.py+ script (for distutils/setuptools packages) to the Python +setup.py+ script (for setuptools packages) or
or +support/scripts/pyinstaller.py+ (for flit/pep517 packages) during +support/scripts/pyinstaller.py+ (for flit/pep517 packages) during
the target installation step, the staging installation step or the the target installation step, the staging installation step or the
host installation, respectively. host installation, respectively.

View File

@@ -52,40 +52,6 @@ HOST_PKG_PYTHON_ENV = \
PYTHONNOUSERSITE=1 \ PYTHONNOUSERSITE=1 \
$(HOST_CONFIGURE_OPTS) $(HOST_CONFIGURE_OPTS)
# Target distutils-based packages
PKG_PYTHON_DISTUTILS_ENV = \
$(PKG_PYTHON_ENV) \
LDSHARED="$(TARGET_CROSS)gcc -shared"
PKG_PYTHON_DISTUTILS_BUILD_CMD = \
setup.py build \
--executable=/usr/bin/python
PKG_PYTHON_DISTUTILS_INSTALL_OPTS = \
--install-headers=/usr/include/python$(PYTHON3_VERSION_MAJOR) \
--prefix=/usr
PKG_PYTHON_DISTUTILS_INSTALL_TARGET_CMD = \
setup.py install --no-compile \
$(PKG_PYTHON_DISTUTILS_INSTALL_OPTS) \
--root=$(TARGET_DIR)
PKG_PYTHON_DISTUTILS_INSTALL_STAGING_CMD = \
setup.py install \
$(PKG_PYTHON_DISTUTILS_INSTALL_OPTS) \
--root=$(STAGING_DIR)
# Host distutils-based packages
HOST_PKG_PYTHON_DISTUTILS_ENV = \
$(HOST_PKG_PYTHON_ENV)
HOST_PKG_PYTHON_DISTUTILS_BUILD_CMD = \
setup.py build \
HOST_PKG_PYTHON_DISTUTILS_INSTALL_CMD = \
setup.py install \
--prefix=$(HOST_DIR)
# Target setuptools-based packages # Target setuptools-based packages
PKG_PYTHON_SETUPTOOLS_ENV = \ PKG_PYTHON_SETUPTOOLS_ENV = \
$(PKG_PYTHON_ENV) $(PKG_PYTHON_ENV)
@@ -287,8 +253,8 @@ endif
$(2)_SETUP_TYPE_UPPER = $$(call UPPERCASE,$$($(2)_SETUP_TYPE)) $(2)_SETUP_TYPE_UPPER = $$(call UPPERCASE,$$($(2)_SETUP_TYPE))
ifneq ($$(filter-out distutils setuptools setuptools-rust pep517 flit flit-bootstrap maturin,$$($(2)_SETUP_TYPE)),) ifneq ($$(filter-out setuptools setuptools-rust pep517 flit flit-bootstrap maturin,$$($(2)_SETUP_TYPE)),)
$$(error "Invalid $(2)_SETUP_TYPE. Valid options are 'distutils', 'maturin', 'setuptools', 'setuptools-rust', 'pep517' or 'flit'.") $$(error "Invalid $(2)_SETUP_TYPE. Valid options are 'maturin', 'setuptools', 'setuptools-rust', 'pep517' or 'flit'.")
endif endif
ifeq ($(4)-$$($(2)_SETUP_TYPE),target-flit-bootstrap) ifeq ($(4)-$$($(2)_SETUP_TYPE),target-flit-bootstrap)
$$(error flit-bootstrap setup type only supported for host packages) $$(error flit-bootstrap setup type only supported for host packages)