On Fri, Feb 25, 2022 at 11:27 PM Richard Purdie <
[email protected]> wrote:

> On Fri, 2022-02-25 at 15:43 -0800, Tim Orling wrote:
> > From: Tim Orling <[email protected]>
> >
> > With help from Peter Kjellerstedt <[email protected]> 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 <[email protected]>
> > ---
> >  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'
>

Ah. Right. This is the chicken and egg problem of needing a TOML parser.
I really wish upstream had added one to the standard libs.


>
> 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 (#162429): 
https://lists.openembedded.org/g/openembedded-core/message/162429
Mute This Topic: https://lists.openembedded.org/mt/89401217/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to