Adopt pyproject.toml and Meson to build Python extension #148
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
I have a Django web project, which targets Linux server but some team members use MacOS for development. We use
uv
as Python package manager. In the "dependency resolution" phase,uv
tried to findsystemd-python
metadata but couldn't get what it wanted from the setup.py file. It had to buildsystemd-python
wheel to get the metadata, then failed on MacOS machines.What this PR does
Adopt new pyproject.toml file, in place of setup.py. For building C code, I adopt Meson, which has meson-python as a build backend so that
pip
or any other modern Python package manager can know how to build the C-based extensions.Because this new build process is done in an isolated environment and leave no *.so files, the Makefile is also updated to work with this new build method.
This is the rework of #147, but split to smaller steps.
At this step, I only make these 4 jobs work:
I don't move the other jobs from Makefile to Meson.
I also move the "systemd" folder (containing C & Py sources) to
src
folder, to prevent importing by accident when standing at the top-level folder. This is also a common practice for many other Python projects.