python3Packages.meson-python: set build-dir in setup hook

The meson-python build directory path is nondeterministic if `build-dir`
is not set due to being generated by `tempfile.TemporaryDirectory` by
default [1]. This can cause irreproducible builds as seen in [2].

Solution: Use a build directory with a deterministic path by setting
`build-dir` [3] and allow consumers to override it via the already
established `mesonBuildDir`.

Setting `build-dir` also causes the build directory to be _persistent_,
i.e., it won't be deleted after the build [4].

[1] https://github.com/mesonbuild/meson-python/blob/0.19.0/mesonpy/__init__.py#L1121
[2] https://github.com/NixOS/nixpkgs/issues/482107
[3] https://github.com/mesonbuild/meson-python/issues/671.
[4] https://mesonbuild.com/meson-python/how-to-guides/config-settings.html#using-a-persistent-build-directory
This commit is contained in:
Tom Hunze
2026-03-27 14:40:22 +01:00
parent 9ecd4b69ea
commit 739d93481f
@@ -1,4 +1,16 @@
mesonPythonBuildFlagsHook() {
# Use a build directory with a deterministic path by setting `build-dir` [1]
# and allow consumers to override it via `mesonBuildDir`.
# Setting `build-dir` also causes the build directory to be _persistent_,
# i.e., it won't be deleted after the build [2].
#
# [1] https://github.com/mesonbuild/meson-python/issues/671
# [2] https://mesonbuild.com/meson-python/how-to-guides/config-settings.html#using-a-persistent-build-directory
#
: ${mesonBuildDir:=build}
appendToVar pypaBuildFlags "-Cbuild-dir=$mesonBuildDir"
appendToVar pipBuildFlags "-Cbuild-dir=$mesonBuildDir"
# Add all of mesonFlags to -Csetup-args for pypa builds
local flagsArray=()
concatTo flagsArray mesonFlags mesonFlagsArray