summaryrefslogtreecommitdiffstats
path: root/meta/classes
diff options
context:
space:
mode:
authorRoss Burton <ross.burton@arm.com>2022-07-13 17:28:18 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-07-14 23:20:56 +0100
commit35104958181d18fd67b73943b9310c813d62b14d (patch)
tree998b5180f4e36125b7224ef609eb1303651591a9 /meta/classes
parentcf85bddc2d1ce840fc6f4899b6280e1f39e62e7d (diff)
downloadopenembedded-core-contrib-35104958181d18fd67b73943b9310c813d62b14d.tar.gz
python_pep517: use picobuild instead of manually calling the API
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. Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r--meta/classes/python_pep517.bbclass10
1 files changed, 4 insertions, 6 deletions
diff --git a/meta/classes/python_pep517.bbclass b/meta/classes/python_pep517.bbclass
index 34ffdc9c0d..7cdb9c8f9d 100644
--- a/meta/classes/python_pep517.bbclass
+++ b/meta/classes/python_pep517.bbclass
@@ -4,17 +4,16 @@
# This class will build a wheel in do_compile, and use pypa/installer to install
# it in do_install.
-DEPENDS:append = " python3-installer-native"
+DEPENDS:append = " python3-picobuild-native python3-installer-native"
# Where to execute the build process from
PEP517_SOURCE_PATH ?= "${S}"
-# The PEP517 build API entry point
-PEP517_BUILD_API ?= "unset"
-
# 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"
@@ -31,8 +30,7 @@ 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 () {
- cd ${PEP517_SOURCE_PATH}
- nativepython3 -c "import ${PEP517_BUILD_API} as api; api.build_wheel('${PEP517_WHEEL_PATH}')"
+ nativepython3 -m picobuild --source ${PEP517_SOURCE_PATH} --dest ${PEP517_WHEEL_PATH} --wheel ${PEP517_PICOBUILD_OPTS}
}
do_compile[cleandirs] += "${PEP517_WHEEL_PATH}"