ctestCheckHook: init, {pdal,gifticlib,zynaddsubfx}: migrate to ctestCheckHook (#379426)

Sandro 99dd92d7 97562fc7

Changed files
+106 -33
doc
pkgs
applications
audio
zynaddsubfx
by-name
ct
gi
gifticlib
pd
+18
doc/hooks/cmake.section.md
···
#### `dontUseCmakeConfigure` {#dont-use-cmake-configure}
When set to true, don't use the predefined `cmakeConfigurePhase`.
+
+
## Controlling CTest invocation {#cmake-ctest}
+
+
By default tests are run by make in [`checkPhase`](#ssec-check-phase) or by [ninja](#ninja) if `ninja` is
+
available in `nativeBuildInputs`. Makefile and Ninja generators produce the `test` target, which invokes `ctest` under the hood.
+
This makes passing additional arguments to `ctest` difficult, so it's possible to invoke it directly in `checkPhase`
+
by adding `ctestCheckHook` to `nativeCheckInputs`.
+
+
### CTest Variables {#cmake-ctest-variables}
+
+
#### `disabledTests` {#cmake-ctest-disabled-tests}
+
+
Allows to disable running a list of tests. Note that regular expressions are not supported by `disabledTests`, but
+
it can be combined with `--exclude-regex` option.
+
+
#### `ctestFlags` {#cmake-ctest-flags}
+
+
Additional options passed to `ctest` together with `checkFlags`.
+12
doc/redirects.json
···
"chap-release-notes": [
"release-notes.html#chap-release-notes"
],
+
"cmake-ctest": [
+
"index.html#cmake-ctest"
+
],
+
"cmake-ctest-disabled-tests": [
+
"index.html#cmake-ctest-disabled-tests"
+
],
+
"cmake-ctest-flags": [
+
"index.html#cmake-ctest-flags"
+
],
+
"cmake-ctest-variables": [
+
"index.html#cmake-ctest-variables"
+
],
"ex-build-helpers-extendMkDerivation": [
"index.html#ex-build-helpers-extendMkDerivation"
],
+12 -20
pkgs/applications/audio/zynaddsubfx/default.nix
···
# Test dependencies
cxxtest,
ruby,
+
ctestCheckHook,
}:
assert builtins.any (g: guiModule == g) [
···
nativeCheckInputs = [
cxxtest
ruby
+
ctestCheckHook
];
-
# TODO: Update cmake hook to make it simpler to selectively disable cmake tests: #113829
-
checkPhase =
-
let
-
disabledTests =
-
# PortChecker is non-deterministic. It's fixed in the master
-
# branch, but backporting would require an update to rtosc, so
-
# we'll just disable it until the next release.
-
[ "PortChecker" ]
-
-
# Tests fail on aarch64
-
++ lib.optionals stdenv.hostPlatform.isAarch64 [
-
"MessageTest"
-
"UnisonTest"
-
];
-
in
-
''
-
runHook preCheck
-
ctest --output-on-failure -E '^${lib.concatStringsSep "|" disabledTests}$'
-
runHook postCheck
-
'';
+
disabledTests =
+
# PortChecker is non-deterministic. It's fixed in the master
+
# branch, but backporting would require an update to rtosc, so
+
# we'll just disable it until the next release.
+
[ "PortChecker" ]
+
# Tests fail on aarch64
+
++ lib.optionals stdenv.hostPlatform.isAarch64 [
+
"MessageTest"
+
"UnisonTest"
+
];
# Use Zyn-Fusion logo for zest build
# An SVG version of the logo isn't hosted anywhere we can fetch, I
+44
pkgs/by-name/ct/ctestCheckHook/ctest-check-hook.sh
···
+
# shellcheck shell=bash disable=SC2154
+
+
ctestCheckHook() {
+
echo "Executing ctestCheckHook"
+
+
runHook preCheck
+
+
local buildCores=1
+
+
if [ "${enableParallelChecking-1}" ]; then
+
buildCores="$NIX_BUILD_CORES"
+
fi
+
+
local flagsArray=(
+
"-j$buildCores"
+
# This is enabled by the cmakeConfigurePhase by exporting
+
# CTEST_OUTPUT_ON_FAILURE, but it makes sense it enable it globally here
+
# as well.
+
"--output-on-failure"
+
)
+
+
local disabledTestsArray=()
+
concatTo disabledTestsArray disabledTests
+
+
if [ ${#disabledTestsArray[@]} -ne 0 ]; then
+
local ctestExcludedTestsFile=$NIX_BUILD_TOP/.ctest-excluded-tests
+
disabledTestsString="$(concatStringsSep "\n" disabledTestsArray)"
+
echo -e "$disabledTestsString" >"$ctestExcludedTestsFile"
+
flagsArray+=("--exclude-from-file" "$ctestExcludedTestsFile")
+
fi
+
+
concatTo flagsArray ctestFlags checkFlags checkFlagsArray
+
+
echoCmd 'ctest flags' "${flagsArray[@]}"
+
ctest "${flagsArray[@]}"
+
+
echo "Finished ctestCheckHook"
+
+
runHook postCheck
+
}
+
+
if [ -z "${dontUseCTestCheck-}" ] && [ -z "${checkPhase-}" ]; then
+
checkPhase=ctestCheckHook
+
fi
+9
pkgs/by-name/ct/ctestCheckHook/package.nix
···
+
{
+
makeSetupHook,
+
cmake,
+
}:
+
+
makeSetupHook {
+
name = "ctestCheckHook";
+
propagatedBuildInputs = [ cmake ];
+
} ./ctest-check-hook.sh
+6 -5
pkgs/by-name/gi/gifticlib/package.nix
···
expat,
nifticlib,
zlib,
+
ctestCheckHook,
}:
stdenv.mkDerivation {
···
# without the test data, this is only a few basic tests
doCheck = !stdenv.hostPlatform.isDarwin;
-
checkPhase = ''
-
runHook preCheck
-
ctest -LE 'NEEDS_DATA'
-
runHook postCheck
-
'';
+
nativeCheckInputs = [ ctestCheckHook ];
+
checkFlags = [
+
"-LE"
+
"NEEDS_DATA"
+
];
meta = with lib; {
homepage = "https://www.nitrc.org/projects/gifti";
+5 -8
pkgs/by-name/pd/pdal/package.nix
···
lib,
stdenv,
callPackage,
+
ctestCheckHook,
fetchFromGitHub,
testers,
···
];
doCheck = true;
+
# tests are flaky and they seem to fail less often when they don't run in
+
# parallel
+
enableParallelChecking = false;
disabledTests = [
# Tests failing due to TileDB library implementation, disabled also
···
nativeCheckInputs = [
gdal # gdalinfo
+
ctestCheckHook
];
-
-
checkPhase = ''
-
runHook preCheck
-
# tests are flaky and they seem to fail less often when they don't run in
-
# parallel
-
ctest -j 1 --output-on-failure -E '^${lib.concatStringsSep "|" finalAttrs.disabledTests}$'
-
runHook postCheck
-
'';
postInstall = ''
patchShebangs --update --build $out/bin/pdal-config