1
0
Fork 1
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-03-06 23:31:34 +00:00
nixpkgs/pkgs/development/tools/build-managers/meson/setup-hook.sh
Alyssa Ross 10f35ff05d meson.setupHook: prefer meson commands over ninja
Meson now comes with its own set of commands for building, testing,
installing etc., that by default wrap around Ninja.  The reason to
prefer using the Meson commands is that they take additional
options (e.g. setting custom timeouts for tests — my motivation for
this change).

Here, I've modified the Meson setup hook so that Meson's test and
install commands will be used instead of Ninja's when Meson's
configurePhase is used.  This restriction is to avoid starting to run
Meson directly when dealing with custom build systems that wrap around
Meson, like QEMU's.  We don't use meson's compile command, as it just
runs ninja, and that's handled fine by the existing Ninja setup hook.

Naturally the Meson commands don't support entirely the same set of
options that the Ninja ones did, but I checked through Nixpkgs to find
any packages using Meson that used any options that wouldn't be picked
up by this new system.  I only found one, and it was just setting
checkTarget = "test", which is the default value for Ninja and has no
Meson equivalent (because we directly tell Meson to run the tests
rather than going through a generic job system like Ninja).

Link: https://github.com/NixOS/nixpkgs/issues/113829
Co-authored-by: Jan Tojnar <jtojnar@gmail.com>
2023-10-09 10:21:36 +00:00

68 lines
1.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

mesonConfigurePhase() {
runHook preConfigure
if [ -z "${dontAddPrefix-}" ]; then
mesonFlags="--prefix=$prefix $mesonFlags"
fi
# See multiple-outputs.sh and mesons coredata.py
mesonFlags="\
--libdir=${!outputLib}/lib --libexecdir=${!outputLib}/libexec \
--bindir=${!outputBin}/bin --sbindir=${!outputBin}/sbin \
--includedir=${!outputInclude}/include \
--mandir=${!outputMan}/share/man --infodir=${!outputInfo}/share/info \
--localedir=${!outputLib}/share/locale \
-Dauto_features=${mesonAutoFeatures:-enabled} \
-Dwrap_mode=${mesonWrapMode:-nodownload} \
$mesonFlags"
mesonFlags="${crossMesonFlags+$crossMesonFlags }--buildtype=${mesonBuildType:-plain} $mesonFlags"
echo "meson flags: $mesonFlags ${mesonFlagsArray[@]}"
meson setup build $mesonFlags "${mesonFlagsArray[@]}"
cd build
if ! [[ -v enableParallelBuilding ]]; then
enableParallelBuilding=1
echo "meson: enabled parallel building"
fi
if [[ ${checkPhase-ninjaCheckPhase} = ninjaCheckPhase && -z $dontUseMesonCheck ]]; then
checkPhase=mesonCheckPhase
fi
if [[ ${installPhase-ninjaInstallPhase} = ninjaInstallPhase && -z $dontUseMesonInstall ]]; then
installPhase=mesonInstallPhase
fi
runHook postConfigure
}
mesonCheckPhase() {
runHook preCheck
local flagsArray=($mesonCheckFlags "${mesonCheckFlagsArray[@]}")
echoCmd 'check flags' "${flagsArray[@]}"
meson test --no-rebuild "${flagsArray[@]}"
runHook postCheck
}
mesonInstallPhase() {
runHook preInstall
# shellcheck disable=SC2086
local flagsArray=($mesonInstallFlags "${mesonInstallFlagsArray[@]}")
echoCmd 'install flags' "${flagsArray[@]}"
meson install --no-rebuild "${flagsArray[@]}"
runHook postInstall
}
if [ -z "${dontUseMesonConfigure-}" -a -z "${configurePhase-}" ]; then
setOutputFlags=
configurePhase=mesonConfigurePhase
fi