diff options
author | Ross Burton <ross.burton@arm.com> | 2022-07-13 17:28:18 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-07-14 23:22:10 +0100 |
commit | c4b75fe913553bfa0c923e2cfea107d788c31b2b (patch) | |
tree | 64e4c7798c6287f8a8de6663b754bfd58cc15b7a /meta | |
parent | 511e2dfb490d69746e28a338f1a5c852c224c8a5 (diff) | |
download | poky-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')
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 | ||
7 | DEPENDS:append = " python3-installer-native" | 7 | DEPENDS: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 |
10 | PEP517_SOURCE_PATH ?= "${S}" | 10 | PEP517_SOURCE_PATH ?= "${S}" |
11 | 11 | ||
12 | # The PEP517 build API entry point | ||
13 | PEP517_BUILD_API ?= "unset" | ||
14 | |||
15 | # The directory where wheels will be written | 12 | # The directory where wheels will be written |
16 | PEP517_WHEEL_PATH ?= "${WORKDIR}/dist" | 13 | PEP517_WHEEL_PATH ?= "${WORKDIR}/dist" |
17 | 14 | ||
15 | PEP517_PICOBUILD_OPTS ?= "" | ||
16 | |||
18 | # The interpreter to use for installed scripts | 17 | # The interpreter to use for installed scripts |
19 | PEP517_INSTALL_PYTHON = "python3" | 18 | PEP517_INSTALL_PYTHON = "python3" |
20 | PEP517_INSTALL_PYTHON:class-native = "nativepython3" | 19 | PEP517_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 |
33 | python_pep517_do_compile () { | 32 | python_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 | } |
37 | do_compile[cleandirs] += "${PEP517_WHEEL_PATH}" | 35 | do_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 | |||
13 | inherit pypi python_flit_core | 13 | inherit 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 |
16 | DEPENDS:remove:class-native = " python3-installer-native" | 16 | DEPENDS:remove:class-native = " python3-picobuild-native python3-installer-native" |
17 | DEPENDS:append:class-native = " unzip-native" | 17 | DEPENDS: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 | ||
13 | inherit pypi python_flit_core | 13 | inherit pypi python_flit_core |
14 | 14 | ||
15 | # Bootstrap the native install by installing with ourself | 15 | # Bootstrap the native build |
16 | DEPENDS:remove:class-native = "python3-installer-native" | 16 | DEPENDS:remove:class-native = "python3-picobuild-native python3-installer-native" |
17 | 17 | ||
18 | INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode" | 18 | INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode" |
19 | 19 | ||
20 | do_compile:class-native () { | ||
21 | python_flit_core_do_manual_build | ||
22 | } | ||
23 | |||
20 | do_install:prepend:class-native() { | 24 | do_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 | ||
19 | inherit python_flit_core | 19 | inherit python_flit_core |
20 | 20 | ||
21 | DEPENDS:remove:class-native = "python3-picobuild-native" | ||
22 | |||
21 | BBCLASSEXTEND = "native nativesdk" | 23 | BBCLASSEXTEND = "native nativesdk" |