Add meson Python build backend (#31809)

This commit is contained in:
Adam J. Stewart 2022-08-01 22:55:41 -07:00 committed by GitHub
parent 113acd4714
commit 22d4612d94
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 118 additions and 37 deletions

View file

@ -48,9 +48,10 @@ important to understand.
**build backend**
Libraries used to define how to build a wheel. Examples
include `setuptools <https://setuptools.pypa.io/>`__,
`flit <https://flit.readthedocs.io/>`_,
`poetry <https://python-poetry.org/>`_, and
`hatchling <https://hatch.pypa.io/latest/>`_.
`flit <https://flit.pypa.io/>`_,
`poetry <https://python-poetry.org/>`_,
`hatchling <https://hatch.pypa.io/latest/>`_, and
`meson <https://meson-python.readthedocs.io/>`_.
^^^^^^^^^^^
Downloading
@ -174,9 +175,9 @@ package. The "Project description" tab may also contain a longer
description of the package. Either of these can be used to populate
the package docstring.
^^^^^^^^^^^^^
Build backend
^^^^^^^^^^^^^
^^^^^^^^^^^^
Dependencies
^^^^^^^^^^^^
Once you've determined the basic metadata for a package, the next
step is to determine the build backend. ``PythonPackage`` uses
@ -219,7 +220,28 @@ See `PEP 517 <https://www.python.org/dev/peps/pep-0517/>`_ and
information on the design of ``pyproject.toml``.
Depending on which build backend a project uses, there are various
places that run-time dependencies can be listed.
places that run-time dependencies can be listed. Most modern build
backends support listing dependencies directly in ``pyproject.toml``.
Look for dependencies under the following keys:
* ``requires-python`` under ``[project]``
This specifies the version of Python that is required
* ``dependencies`` under ``[project]``
These packages are required for building and installation. You can
add them with ``type=('build', 'run')``.
* ``[project.optional-dependencies]``
This section includes keys with lists of optional dependencies
needed to enable those features. You should add a variant that
optionally adds these dependencies. This variant should be ``False``
by default.
Some build backends may have additional locations where dependencies
can be found.
"""""""""
distutils
@ -245,9 +267,9 @@ If the ``pyproject.toml`` lists ``setuptools.build_meta`` as a
``build-backend``, or if the package has a ``setup.py`` that imports
``setuptools``, or if the package has a ``setup.cfg`` file, then it
uses setuptools to build. Setuptools is a replacement for the
distutils library, and has almost the exact same API. Dependencies
can be listed in the ``setup.py`` or ``setup.cfg`` file. Look for the
following arguments:
distutils library, and has almost the exact same API. In addition to
``pyproject.toml``, dependencies can be listed in the ``setup.py`` or
``setup.cfg`` file. Look for the following arguments:
* ``python_requires``
@ -292,25 +314,22 @@ listed directly in the ``pyproject.toml`` file. Older versions of
flit used to store this info in a ``flit.ini`` file, so check for
this too.
Either of these files may contain keys like:
In addition to the default ``pyproject.toml`` keys listed above,
older versions of flit may use the following keys:
* ``requires-python``
This specifies the version of Python that is required
* ``dependencies`` or ``requires``
* ``requires`` under ``[tool.flit.metadata]``
These packages are required for building and installation. You can
add them with ``type=('build', 'run')``.
* ``project.optional-dependencies`` or ``requires-extra``
* ``[tool.flit.metadata.requires-extra]``
This section includes keys with lists of optional dependencies
needed to enable those features. You should add a variant that
optionally adds these dependencies. This variant should be False
by default.
See https://flit.readthedocs.io/en/latest/pyproject_toml.html for
See https://flit.pypa.io/en/latest/pyproject_toml.html for
more information.
""""""
@ -332,28 +351,23 @@ hatchling
"""""""""
If the ``pyproject.toml`` lists ``hatchling.build`` as the
``build-backend``, it uses the hatchling build system. Look for
dependencies under the following keys:
* ``requires-python``
This specifies the version of Python that is required
* ``project.dependencies``
These packages are required for building and installation. You can
add them with ``type=('build', 'run')``.
* ``project.optional-dependencies``
This section includes keys with lists of optional dependencies
needed to enable those features. You should add a variant that
optionally adds these dependencies. This variant should be ``False``
by default.
``build-backend``, it uses the hatchling build system. Hatchling
uses the default ``pyproject.toml`` keys to list dependencies.
See https://hatch.pypa.io/latest/config/dependency/ for more
information.
"""""
meson
"""""
If the ``pyproject.toml`` lists ``mesonpy`` as the ``build-backend``,
it uses the meson build system. Meson uses the default
``pyproject.toml`` keys to list dependencies.
See https://meson-python.readthedocs.io/en/latest/usage/start.html
for more information.
""""""
wheels
""""""
@ -692,6 +706,7 @@ For more information on build and installation frontend tools, see:
For more information on build backend tools, see:
* setuptools: https://setuptools.pypa.io/
* flit: https://flit.readthedocs.io/
* flit: https://flit.pypa.io/
* poetry: https://python-poetry.org/
* hatchling: https://hatch.pypa.io/latest/
* meson: https://meson-python.readthedocs.io/

View file

@ -0,0 +1,23 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class PyMesonPython(PythonPackage):
"""Meson Python build backend (PEP 517)."""
homepage = "https://github.com/FFY00/mesonpy"
pypi = "meson_python/meson_python-0.7.0.tar.gz"
version("0.7.0", sha256="9fcfa350f44ca80dd4f5f9c3d251725434acf9a07d9618f382e6cc4629dcbe84")
depends_on("python@3.7:", type=("build", "run"))
depends_on("py-meson@0.62:", type=("build", "run"))
depends_on("py-ninja", type=("build", "run"))
depends_on("py-pyproject-metadata@0.5:", type=("build", "run"))
depends_on("py-tomli@1:", type=("build", "run"))
depends_on("py-typing-extensions@3.7.4:", when="^python@:3.7", type=("build", "run"))
depends_on("py-colorama", when="platform=windows", type=("build", "run"))

View file

@ -0,0 +1,24 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class PyMeson(PythonPackage):
"""A high performance build system.
Meson is a cross-platform build system designed to be both as fast and as user
friendly as possible. It supports many languages and compilers, including GCC,
Clang, PGI, Intel, and Visual Studio. Its build definitions are written in a simple
non-Turing complete DSL.
"""
homepage = "https://mesonbuild.com/"
pypi = "meson/meson-0.62.2.tar.gz"
version("0.62.2", sha256="a7669e4c4110b06b743d57cc5d6432591a6677ef2402139fe4f3d42ac13380b0")
depends_on("python@3.7:", type=("build", "run"))
depends_on("py-setuptools@42:", type="build")

View file

@ -0,0 +1,19 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class PyPyprojectMetadata(PythonPackage):
"""PEP 621 metadata parsing."""
homepage = "https://github.com/FFY00/python-pyproject-metadata"
pypi = "pyproject-metadata/pyproject-metadata-0.6.1.tar.gz"
version("0.6.1", sha256="b5fb09543a64a91165dfe85796759f9e415edc296beb4db33d1ecf7866a862bd")
depends_on("python@3.7:", type=("build", "run"))
depends_on("py-setuptools@42:", type="build")
depends_on("py-packaging@19:", type=("build", "run"))