On Fri, 2022-02-25 at 15:43 -0800, Tim Orling wrote:
> From: Tim Orling <ticot...@gmail.com>
> 
> With help from Peter Kjellerstedt <peter.kjellerst...@axis.com> via IRC.
> 
> Add a check for pyproject.toml in ${S} and if so check if it has a
> [build-system] build-backend. Give the user a helpful warning that
> the recipe should be changed to one of the PEP-517 classes (instead of
> setuptools3.bbclass).
> 
> Add SETUPTOOLS_SKIP_BUILD_BACKEND_CHECK variable to skip this check (and
> avoid the warning). This is needed for e.g.
> python3-setuptools-rust-native which does not build cleanly with
> setuptools_build_meta.bbclass
> 
> Because some sources have a pyproject.toml but no [build-sytem] or no
> properly defined (or accurate) build-backend, add a try: except: clause
> to avoid KeyError.
> 
> [YOCTO #14736]
> 
> Signed-off-by: Tim Orling <tim.orl...@konsulko.com>
> ---
>  meta/classes/setuptools3.bbclass | 41 ++++++++++++++++++++++++++++++++
>  1 file changed, 41 insertions(+)
> 
> diff --git a/meta/classes/setuptools3.bbclass 
> b/meta/classes/setuptools3.bbclass
> index 12561340b07..d80a91d3296 100644
> --- a/meta/classes/setuptools3.bbclass
> +++ b/meta/classes/setuptools3.bbclass
> @@ -18,6 +18,47 @@ setuptools3_do_configure() {
>      :
>  }
>  
> +SETUPTOOLS_SKIP_BUILD_BACKEND_CHECK ?= "0"
> +
> +python check_for_pyprojecttoml_build_backend() {
> +    import os
> +    import tomli

https://autobuilder.yoctoproject.org/typhoon/#/builders/65/builds/4833/steps/12/logs/stdio

Exception: ModuleNotFoundError: No module named 'tomli'

Cheers,

Richard

> +    from pathlib import Path
> +
> +    if d.getVar('SETUPTOOLS_SKIP_BUILD_BACKEND_CHECK') == "1":
> +        bb.debug(3, "Skipping check for build-backend in pyproject.toml")
> +        return 0
> +    warn_string = "The source has a pyproject.toml which declares '%s' as a 
> build backend, please consider 'inherit %s' instead of inheriting 
> setuptools3."
> +    warn_layer_string = "The source has a pyproject.toml which declares '%s' 
> as a build backend, please consider 'inherit %s' from %s instead of 
> inheriting setuptools3."
> +    pyprojecttoml_file = Path(d.getVar('S'), 'pyproject.toml')
> +    if pyprojecttoml_file.exists():
> +        bb.debug(3, "pyproject.toml found: %s" % pyprojecttoml_file)
> +        with open(pyprojecttoml_file, "rb") as f:
> +            pyprojecttoml_dict = tomli.load(f)
> +            try:
> +                build_system = pyprojecttoml_dict["build-system"]
> +                if build_system:
> +                    bb.debug(3, "[build-system] found in pyproject.toml")
> +                    backend = build_system.get('build-backend')
> +                    if backend:
> +                        bb.debug(3, "build-backend found: %s" % backend)
> +                    if backend == "flit_core.buildapi":
> +                        bb.warn(warn_string % ('flit_core.buildapi', 
> +                                               'flit_core'))
> +                    elif backend == "setuptools.build_meta":
> +                        bb.warn(warn_string % ('setuptools.build_meta',
> +                                              'setuptools_build_meta'))
> +                    elif backend == "poetry.core.masonry.api":
> +                        bb.warn(warn_layer_string % 
> ('poetry.core.masonry.api',
> +                                                     'poetry_core', 
> 'meta-python'))
> +                    else:
> +                        bb.warn("The source has a pyproject.toml which 
> declares '%s' as a build backend, but this is not currently supported in 
> oe-core." % backend)
> +            except KeyError:
> +                bb.warn("The source has a pyproject.toml, but either no 
> [build-system] or it is malformed. If the recipe is still buildable with 
> setuptools3, you can skip this check 
> with:\nSETUPTOOLS_SKIP_BUILD_BACKEND_CHECK= \"1\"")
> +                pass
> +}
> +do_configure[prefuncs] += "check_for_pyprojecttoml_build_backend"
> +
>  setuptools3_do_compile() {
>          cd ${SETUPTOOLS_SETUP_PATH}
>          NO_FETCH_BUILD=1 \
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#162421): 
https://lists.openembedded.org/g/openembedded-core/message/162421
Mute This Topic: https://lists.openembedded.org/mt/89401217/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to