summaryrefslogtreecommitdiffstats
path: root/meta
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:22:10 +0100
commitc4b75fe913553bfa0c923e2cfea107d788c31b2b (patch)
tree64e4c7798c6287f8a8de6663b754bfd58cc15b7a /meta
parent511e2dfb490d69746e28a338f1a5c852c224c8a5 (diff)
downloadpoky-c4b75fe913553bfa0c923e2cfea107d788c31b2b.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. (From OE-Core rev: 35104958181d18fd67b73943b9310c813d62b14d) Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/python_pep517.bbclass10
-rw-r--r--meta/recipes-devtools/python/python3-flit-core_3.7.1.bb2
-rw-r--r--meta/recipes-devtools/python/python3-installer_0.5.1.bb8
-rw-r--r--meta/recipes-devtools/python/python3-picobuild_0.1.bb2
4 files changed, 13 insertions, 9 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 @@
4# This class will build a wheel in do_compile, and use pypa/installer to install 4# This class will build a wheel in do_compile, and use pypa/installer to install
5# it in do_install. 5# it in do_install.
6 6
7DEPENDS:append = " python3-installer-native" 7DEPENDS:append = " python3-picobuild-native python3-installer-native"
8 8
9# Where to execute the build process from 9# Where to execute the build process from
10PEP517_SOURCE_PATH ?= "${S}" 10PEP517_SOURCE_PATH ?= "${S}"
11 11
12# The PEP517 build API entry point
13PEP517_BUILD_API ?= "unset"
14
15# The directory where wheels will be written 12# The directory where wheels will be written
16PEP517_WHEEL_PATH ?= "${WORKDIR}/dist" 13PEP517_WHEEL_PATH ?= "${WORKDIR}/dist"
17 14
15PEP517_PICOBUILD_OPTS ?= ""
16
18# The interpreter to use for installed scripts 17# The interpreter to use for installed scripts
19PEP517_INSTALL_PYTHON = "python3" 18PEP517_INSTALL_PYTHON = "python3"
20PEP517_INSTALL_PYTHON:class-native = "nativepython3" 19PEP517_INSTALL_PYTHON:class-native = "nativepython3"
@@ -31,8 +30,7 @@ python_pep517_do_configure () {
31# When we have Python 3.11 we can parse pyproject.toml to determine the build 30# When we have Python 3.11 we can parse pyproject.toml to determine the build
32# API entry point directly 31# API entry point directly
33python_pep517_do_compile () { 32python_pep517_do_compile () {
34 cd ${PEP517_SOURCE_PATH} 33 nativepython3 -m picobuild --source ${PEP517_SOURCE_PATH} --dest ${PEP517_WHEEL_PATH} --wheel ${PEP517_PICOBUILD_OPTS}
35 nativepython3 -c "import ${PEP517_BUILD_API} as api; api.build_wheel('${PEP517_WHEEL_PATH}')"
36} 34}
37do_compile[cleandirs] += "${PEP517_WHEEL_PATH}" 35do_compile[cleandirs] += "${PEP517_WHEEL_PATH}"
38 36
diff --git a/meta/recipes-devtools/python/python3-flit-core_3.7.1.bb b/meta/recipes-devtools/python/python3-flit-core_3.7.1.bb
index abe620374c..fe6b16ac54 100644
--- a/meta/recipes-devtools/python/python3-flit-core_3.7.1.bb
+++ b/meta/recipes-devtools/python/python3-flit-core_3.7.1.bb
@@ -13,7 +13,7 @@ SRC_URI[sha256sum] = "3c9bd9c140515bfe62dd938c6610d10d6efb9e35cc647fc614fe5fb3a5
13inherit pypi python_flit_core 13inherit pypi python_flit_core
14 14
15# Need to install by hand as there's a dependency loop 15# Need to install by hand as there's a dependency loop
16DEPENDS:remove:class-native = " python3-installer-native" 16DEPENDS:remove:class-native = " python3-picobuild-native python3-installer-native"
17DEPENDS:append:class-native = " unzip-native" 17DEPENDS:append:class-native = " unzip-native"
18 18
19# We need the full flit tarball 19# We need the full flit tarball
diff --git a/meta/recipes-devtools/python/python3-installer_0.5.1.bb b/meta/recipes-devtools/python/python3-installer_0.5.1.bb
index b7780702d6..07bbafa81f 100644
--- a/meta/recipes-devtools/python/python3-installer_0.5.1.bb
+++ b/meta/recipes-devtools/python/python3-installer_0.5.1.bb
@@ -12,11 +12,15 @@ SRC_URI[sha256sum] = "f970995ec2bb815e2fdaf7977b26b2091e1e386f0f42eafd5ac811953d
12 12
13inherit pypi python_flit_core 13inherit pypi python_flit_core
14 14
15# Bootstrap the native install by installing with ourself 15# Bootstrap the native build
16DEPENDS:remove:class-native = "python3-installer-native" 16DEPENDS:remove:class-native = "python3-picobuild-native python3-installer-native"
17 17
18INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode" 18INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
19 19
20do_compile:class-native () {
21 python_flit_core_do_manual_build
22}
23
20do_install:prepend:class-native() { 24do_install:prepend:class-native() {
21 export PYTHONPATH="${S}/src" 25 export PYTHONPATH="${S}/src"
22} 26}
diff --git a/meta/recipes-devtools/python/python3-picobuild_0.1.bb b/meta/recipes-devtools/python/python3-picobuild_0.1.bb
index 7555d97f91..3c92b079f3 100644
--- a/meta/recipes-devtools/python/python3-picobuild_0.1.bb
+++ b/meta/recipes-devtools/python/python3-picobuild_0.1.bb
@@ -18,4 +18,6 @@ S = "${WORKDIR}/git"
18 18
19inherit python_flit_core 19inherit python_flit_core
20 20
21DEPENDS:remove:class-native = "python3-picobuild-native"
22
21BBCLASSEXTEND = "native nativesdk" 23BBCLASSEXTEND = "native nativesdk"