mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
Calling the PEP-517 API directly mostly works, but sometimes doesn't. For example we don't verify build dependencies, which led to the cbor2 ugprade silently failing to actually package anything. The standard frontend is pypa/build, but for source-based distributions that can be annoying to build as it depends on the following packages: - tomli - pep517 - packaging - pyparsing Manually bootstrapping those recipes is possible, but tedious. Picobuild is another frontend (written by myself) which is designed explicitly to be used programatically by source-based distributions: it doesn't support builds inside virtual environments as we're building distribution packages, and it vendors the dependencies for bootstrapping if they're not available. Over time more packages are expected to move to using Flit to build which makes the bootstrapping process slightly easier, and tomli will be integrated into Python 3.11, so it's possible that in the future we drop picobuild and switch to build. This change means the PEP517_BUILD_API variable is obsolete, so remove it. (From OE-Core rev: 35104958181d18fd67b73943b9310c813d62b14d) Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
55 lines
2.0 KiB
Plaintext
55 lines
2.0 KiB
Plaintext
# Common infrastructure for Python packages that use PEP-517 compliant packaging.
|
|
# https://www.python.org/dev/peps/pep-0517/
|
|
#
|
|
# This class will build a wheel in do_compile, and use pypa/installer to install
|
|
# it in do_install.
|
|
|
|
DEPENDS:append = " python3-picobuild-native python3-installer-native"
|
|
|
|
# Where to execute the build process from
|
|
PEP517_SOURCE_PATH ?= "${S}"
|
|
|
|
# The directory where wheels will be written
|
|
PEP517_WHEEL_PATH ?= "${WORKDIR}/dist"
|
|
|
|
PEP517_PICOBUILD_OPTS ?= ""
|
|
|
|
# The interpreter to use for installed scripts
|
|
PEP517_INSTALL_PYTHON = "python3"
|
|
PEP517_INSTALL_PYTHON:class-native = "nativepython3"
|
|
|
|
# pypa/installer option to control the bytecode compilation
|
|
INSTALL_WHEEL_COMPILE_BYTECODE ?= "--compile-bytecode=0"
|
|
|
|
# PEP517 doesn't have a specific configure step, so set an empty do_configure to avoid
|
|
# running base_do_configure.
|
|
python_pep517_do_configure () {
|
|
:
|
|
}
|
|
|
|
# When we have Python 3.11 we can parse pyproject.toml to determine the build
|
|
# API entry point directly
|
|
python_pep517_do_compile () {
|
|
nativepython3 -m picobuild --source ${PEP517_SOURCE_PATH} --dest ${PEP517_WHEEL_PATH} --wheel ${PEP517_PICOBUILD_OPTS}
|
|
}
|
|
do_compile[cleandirs] += "${PEP517_WHEEL_PATH}"
|
|
|
|
python_pep517_do_install () {
|
|
COUNT=$(find ${PEP517_WHEEL_PATH} -name '*.whl' | wc -l)
|
|
if test $COUNT -eq 0; then
|
|
bbfatal No wheels found in ${PEP517_WHEEL_PATH}
|
|
elif test $COUNT -gt 1; then
|
|
bbfatal More than one wheel found in ${PEP517_WHEEL_PATH}, this should not happen
|
|
fi
|
|
|
|
nativepython3 -m installer ${INSTALL_WHEEL_COMPILE_BYTECODE} --interpreter "${USRBINPATH}/env ${PEP517_INSTALL_PYTHON}" --destdir=${D} ${PEP517_WHEEL_PATH}/*.whl
|
|
}
|
|
|
|
# A manual do_install that just uses unzip for bootstrapping purposes. Callers should DEPEND on unzip-native.
|
|
python_pep517_do_bootstrap_install () {
|
|
install -d ${D}${PYTHON_SITEPACKAGES_DIR}
|
|
unzip -d ${D}${PYTHON_SITEPACKAGES_DIR} ${PEP517_WHEEL_PATH}/*.whl
|
|
}
|
|
|
|
EXPORT_FUNCTIONS do_configure do_compile do_install
|